More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,027 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 18494969 | 13 days ago | IN | 0 CRO | 0.17693306 | ||||
Set Approval For... | 16011087 | 177 days ago | IN | 0 CRO | 0.23591075 | ||||
Transfer From | 14270203 | 291 days ago | IN | 0 CRO | 0.47752246 | ||||
Set Approval For... | 14152926 | 298 days ago | IN | 0 CRO | 0.14949515 | ||||
Set Approval For... | 13835110 | 319 days ago | IN | 0 CRO | 0.14949515 | ||||
Set Approval For... | 13178320 | 363 days ago | IN | 0 CRO | 0.12525515 | ||||
Set Approval For... | 13178319 | 363 days ago | IN | 0 CRO | 0.12525515 | ||||
Set Approval For... | 13178318 | 363 days ago | IN | 0 CRO | 0.12525515 | ||||
Transfer From | 12838303 | 385 days ago | IN | 0 CRO | 1.01 | ||||
Approve | 12147671 | 429 days ago | IN | 0 CRO | 0.4980815 | ||||
Approve | 11079518 | 499 days ago | IN | 0 CRO | 0.22797252 | ||||
Set Approval For... | 11064839 | 500 days ago | IN | 0 CRO | 0.2161061 | ||||
Set Approval For... | 11055387 | 500 days ago | IN | 0 CRO | 0.21612569 | ||||
Set Approval For... | 10927201 | 509 days ago | IN | 0 CRO | 0.21632279 | ||||
Set Approval For... | 10119621 | 562 days ago | IN | 0 CRO | 0.21803019 | ||||
Set Approval For... | 10028699 | 567 days ago | IN | 0 CRO | 0.21822374 | ||||
Set Approval For... | 9550756 | 599 days ago | IN | 0 CRO | 0.21931125 | ||||
Set Approval For... | 9529496 | 600 days ago | IN | 0 CRO | 0.21928643 | ||||
Approve | 9161389 | 624 days ago | IN | 0 CRO | 0.23233599 | ||||
Set Approval For... | 9012590 | 634 days ago | IN | 0 CRO | 0.22038757 | ||||
Set Approval For... | 8783220 | 649 days ago | IN | 0 CRO | 0.2208774 | ||||
Set Approval For... | 8753689 | 651 days ago | IN | 0 CRO | 0.22094063 | ||||
Set Approval For... | 8502335 | 667 days ago | IN | 0 CRO | 0.2215489 | ||||
Set Approval For... | 8498110 | 667 days ago | IN | 0 CRO | 0.22148796 | ||||
Set Approval For... | 7844146 | 710 days ago | IN | 0 CRO | 0.22289255 |
Loading...
Loading
Contract Name:
ScareCRONFT
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-06-08 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC2981.sol // OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/common/ERC2981.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/common/ERC2981.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. * * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. * * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the * fee is specified in basis points by default. * * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. * * _Available since v4.5._ */ abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { address receiver; uint96 royaltyFraction; } RoyaltyInfo private _defaultRoyaltyInfo; mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /** * @inheritdoc IERC2981 */ function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) { RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId]; if (royalty.receiver == address(0)) { royalty = _defaultRoyaltyInfo; } uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator(); return (royalty.receiver, royaltyAmount); } /** * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an * override. */ function _feeDenominator() internal pure virtual returns (uint96) { return 10000; } /** * @dev Sets the royalty information that all ids in this contract will default to. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: invalid receiver"); _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Removes default royalty information. */ function _deleteDefaultRoyalty() internal virtual { delete _defaultRoyaltyInfo; } /** * @dev Sets the royalty information for a specific token id, overriding the global default. * * Requirements: * * - `tokenId` must be already minted. * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setTokenRoyalty( uint256 tokenId, address receiver, uint96 feeNumerator ) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: Invalid parameters"); _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Resets royalty information for the token id back to the global default. */ function _resetTokenRoyalty(uint256 tokenId) internal virtual { delete _tokenRoyaltyInfo[tokenId]; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (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); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // 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(); } } // File: contracts/ScareCRONFT.sol pragma solidity 0.8.13; contract ScareCRONFT is ERC721Enumerable, ERC2981, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 420 ether; uint256 public presaleDiscount = 0; uint256 public maxSupply = 420; uint256 public maxMintAmount = 10; uint256 public maxMintAmountPresale = 1; uint256 public remainingSupplyForGiveaway = 35; uint256 public timePresale; uint256 public timePublicSale; uint96 public maxTokenRoyalty = 500; address public devAddress = 0xC00e7D699E8289617Fb95809AEb36e629603Fa66; address public teamAddress = 0x5a950275193E7Be7930d4bE8bE94436fDF408291; mapping(address => uint256) public totalMintedByAddress; mapping(address => bool) public _walletValidForPresale; constructor(string memory _name, string memory _symbol, string memory _initialBaseURI, uint256 _presaleStartTime, uint256 _presaleDurationSeconds) ERC721(_name, _symbol){ require(_presaleStartTime > 0, "Presale Start Time"); require(_presaleDurationSeconds > 0, "Presale Duration must be set"); timePresale = _presaleStartTime; timePublicSale = _presaleStartTime + _presaleDurationSeconds; baseURI = _initialBaseURI; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function tokenURI(uint256 _tokenId) public view virtual override returns(string memory) { require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), baseExtension)) : ""; } function mint(uint256 _mintAmount) public payable { require(totalSupply() + _mintAmount <= maxSupply, "Purchase exceeds maximum supply"); require(totalMintedByAddress[msg.sender] + _mintAmount <= maxMintAmount, "Purchase exceeds the limit of NFT's you can mint"); require(block.timestamp >= timePresale, "Sale is not yet open"); require(msg.value >= cost * _mintAmount, "Please enter the correct price"); if (block.timestamp >= timePresale && block.timestamp < timePublicSale) { require(_walletValidForPresale[msg.sender], "Wallet is not eligible for presale"); require(totalMintedByAddress[msg.sender] + _mintAmount <= maxMintAmountPresale, "Purchase exceeds the limit of NFT's you can mint during presale"); } for(uint256 i = 1; i <= _mintAmount; i++) { uint256 tokenId = totalSupply() + 1; totalMintedByAddress[msg.sender] = totalMintedByAddress[msg.sender] + 1; _safeMint(msg.sender, tokenId); _setTokenRoyalty(tokenId, msg.sender, maxTokenRoyalty); } } function mintGiveAwayTokens(uint256 _mintAmount) public onlyOwner { require(remainingSupplyForGiveaway > 0, "All giveaway tokens are minted"); require(_mintAmount <= remainingSupplyForGiveaway, "All giveaway tokens already minted"); for(uint256 i = 1; i <= _mintAmount; i++) { uint256 tokenId = totalSupply() + 1; remainingSupplyForGiveaway = remainingSupplyForGiveaway - 1; _safeMint(teamAddress, tokenId); _setTokenRoyalty(tokenId, msg.sender, maxTokenRoyalty); } } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setMaxMintAmount(uint256 _maxMintAmount) public onlyOwner { maxMintAmount = _maxMintAmount; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setPresaleStart(uint256 _newTimePresale) public onlyOwner { timePresale = _newTimePresale; } function setPublicSaleStart(uint256 _newTimePublicSale) public onlyOwner { timePublicSale = _newTimePublicSale; } function setPresaleDiscount(uint256 _newDiscount) public onlyOwner { presaleDiscount = _newDiscount; } function setTokenRoyaltyAddress(uint256 _tokenId, address _wallet) public { (address currentAddress,) = royaltyInfo(_tokenId, 0); require(msg.sender == currentAddress, "You cannot set royalties for this token"); _setTokenRoyalty(_tokenId, _wallet, maxTokenRoyalty); } function addWalletToWhitelist(address _wallet) public onlyOwner { _walletValidForPresale[_wallet] = true; } function removeWalletFromWhitelist(address _wallet) public onlyOwner { _walletValidForPresale[_wallet] = false; } function bulkAddWalletsToWhitelist(address[] memory _wallets) public onlyOwner { for (uint256 i = 0; i < _wallets.length; i++) { _walletValidForPresale[_wallets[i]] = true; } } function withdraw() public payable onlyOwner { (bool devPaid, ) = payable(devAddress).call{value: address(this).balance * 3 / 100}(""); require(devPaid); (bool teamPaid, ) = payable(teamAddress).call{value: address(this).balance}(""); require(teamPaid); } function supportsInterface( bytes4 interfaceId ) public view virtual override(ERC721Enumerable, ERC2981) returns (bool) { return ERC721Enumerable.supportsInterface(interfaceId) || ERC2981.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initialBaseURI","type":"string"},{"internalType":"uint256","name":"_presaleStartTime","type":"uint256"},{"internalType":"uint256","name":"_presaleDurationSeconds","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_walletValidForPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"addWalletToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"bulkAddWalletsToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenRoyalty","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintGiveAwayTokens","outputs":[],"stateMutability":"nonpayable","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":"presaleDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingSupplyForGiveaway","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"removeWalletFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDiscount","type":"uint256"}],"name":"setPresaleDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTimePresale","type":"uint256"}],"name":"setPresaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTimePublicSale","type":"uint256"}],"name":"setPublicSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_wallet","type":"address"}],"name":"setTokenRoyaltyAddress","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":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timePresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timePublicSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalMintedByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e90805190602001906200005192919062000378565b506816c4abbebea0100000600f5560006010556101a4601155600a601255600160135560236014556101f4601760006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555073c00e7d699e8289617fb95809aeb36e629603fa666017600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735a950275193e7be7930d4be8be94436fdf408291601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200016357600080fd5b506040516200614938038062006149833981810160405281019062000189919062000600565b84848160009080519060200190620001a392919062000378565b508060019080519060200190620001bc92919062000378565b505050620001df620001d3620002aa60201b60201c565b620002b260201b60201c565b6000821162000225576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021c9062000746565b60405180910390fd5b600081116200026b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200026290620007b8565b60405180910390fd5b81601581905550808262000280919062000809565b60168190555082600d90805190602001906200029e92919062000378565b505050505050620008ca565b600033905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003869062000895565b90600052602060002090601f016020900481019282620003aa5760008555620003f6565b82601f10620003c557805160ff1916838001178555620003f6565b82800160010185558215620003f6579182015b82811115620003f5578251825591602001919060010190620003d8565b5b50905062000405919062000409565b5090565b5b80821115620004245760008160009055506001016200040a565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004918262000446565b810181811067ffffffffffffffff82111715620004b357620004b262000457565b5b80604052505050565b6000620004c862000428565b9050620004d6828262000486565b919050565b600067ffffffffffffffff821115620004f957620004f862000457565b5b620005048262000446565b9050602081019050919050565b60005b838110156200053157808201518184015260208101905062000514565b8381111562000541576000848401525b50505050565b60006200055e6200055884620004db565b620004bc565b9050828152602081018484840111156200057d576200057c62000441565b5b6200058a84828562000511565b509392505050565b600082601f830112620005aa57620005a96200043c565b5b8151620005bc84826020860162000547565b91505092915050565b6000819050919050565b620005da81620005c5565b8114620005e657600080fd5b50565b600081519050620005fa81620005cf565b92915050565b600080600080600060a086880312156200061f576200061e62000432565b5b600086015167ffffffffffffffff81111562000640576200063f62000437565b5b6200064e8882890162000592565b955050602086015167ffffffffffffffff81111562000672576200067162000437565b5b620006808882890162000592565b945050604086015167ffffffffffffffff811115620006a457620006a362000437565b5b620006b28882890162000592565b9350506060620006c588828901620005e9565b9250506080620006d888828901620005e9565b9150509295509295909350565b600082825260208201905092915050565b7f50726573616c652053746172742054696d650000000000000000000000000000600082015250565b60006200072e601283620006e5565b91506200073b82620006f6565b602082019050919050565b6000602082019050818103600083015262000761816200071f565b9050919050565b7f50726573616c65204475726174696f6e206d7573742062652073657400000000600082015250565b6000620007a0601c83620006e5565b9150620007ad8262000768565b602082019050919050565b60006020820190508181036000830152620007d38162000791565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200081682620005c5565b91506200082383620005c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200085b576200085a620007da565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008ae57607f821691505b602082108103620008c457620008c362000866565b5b50919050565b61586f80620008da6000396000f3fe6080604052600436106102935760003560e01c806355f804b31161015a57806397cf84fc116100c1578063c66828621161007a578063c6682862146109e7578063c87b56dd14610a12578063ce23772b14610a4f578063d5abeb0114610a78578063e985e9c514610aa3578063f2fde38b14610ae057610293565b806397cf84fc146108e6578063a0712d6814610923578063a22cb4651461093f578063a99aa36614610968578063b7f558f014610993578063b88d4fde146109be57610293565b8063715018a611610113578063715018a6146107fc57806378152bbe146108135780637effc0321461083c578063870c4140146108675780638da5cb5b1461089057806395d89b41146108bb57610293565b806355f804b3146106d85780636352211e1461070157806365c0cfa41461073e57806368e7c8ac146107695780636c0360eb1461079457806370a08231146107bf57610293565b8063217488f9116101fe5780633ad10ef6116101b75780633ad10ef6146105eb5780633ccfd60b146106165780633f0f42e21461062057806342842e0e1461064957806344a0d68a146106725780634f6ccce71461069b57610293565b8063217488f9146104ca578063239c70ae146104f357806323b872dd1461051e5780632a55205a146105475780632f745c591461058557806331ed16ac146105c257610293565b80630b3ba988116102505780630b3ba988146103cc5780630ca282f7146103f557806313faede61461041e57806318160ddd1461044957806318ecc5e0146104745780631c75f0851461049f57610293565b80630152de7c1461029857806301ffc9a7146102d557806306fdde0314610312578063081812fc1461033d578063088a4ed01461037a578063095ea7b3146103a3575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613bfa565b610b09565b6040516102cc9190613c42565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190613cb5565b610b29565b6040516103099190613c42565b60405180910390f35b34801561031e57600080fd5b50610327610b4b565b6040516103349190613d7b565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613dd3565b610bdd565b6040516103719190613e0f565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613dd3565b610c62565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190613e2a565b610ce8565b005b3480156103d857600080fd5b506103f360048036038101906103ee9190613dd3565b610dff565b005b34801561040157600080fd5b5061041c60048036038101906104179190613dd3565b610fa9565b005b34801561042a57600080fd5b5061043361102f565b6040516104409190613e79565b60405180910390f35b34801561045557600080fd5b5061045e611035565b60405161046b9190613e79565b60405180910390f35b34801561048057600080fd5b50610489611042565b6040516104969190613e79565b60405180910390f35b3480156104ab57600080fd5b506104b4611048565b6040516104c19190613e0f565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613dd3565b61106e565b005b3480156104ff57600080fd5b506105086110f4565b6040516105159190613e79565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190613e94565b6110fa565b005b34801561055357600080fd5b5061056e60048036038101906105699190613ee7565b61115a565b60405161057c929190613f27565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613e2a565b611344565b6040516105b99190613e79565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190614098565b6113e9565b005b3480156105f757600080fd5b506106006114fa565b60405161060d9190613e0f565b60405180910390f35b61061e611520565b005b34801561062c57600080fd5b5061064760048036038101906106429190613bfa565b6116e8565b005b34801561065557600080fd5b50610670600480360381019061066b9190613e94565b6117bf565b005b34801561067e57600080fd5b5061069960048036038101906106949190613dd3565b6117df565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190613dd3565b611865565b6040516106cf9190613e79565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa9190614196565b6118d6565b005b34801561070d57600080fd5b5061072860048036038101906107239190613dd3565b61196c565b6040516107359190613e0f565b60405180910390f35b34801561074a57600080fd5b50610753611a1d565b6040516107609190613e79565b60405180910390f35b34801561077557600080fd5b5061077e611a23565b60405161078b9190613e79565b60405180910390f35b3480156107a057600080fd5b506107a9611a29565b6040516107b69190613d7b565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613bfa565b611ab7565b6040516107f39190613e79565b60405180910390f35b34801561080857600080fd5b50610811611b6e565b005b34801561081f57600080fd5b5061083a60048036038101906108359190613dd3565b611bf6565b005b34801561084857600080fd5b50610851611c7c565b60405161085e9190613e79565b60405180910390f35b34801561087357600080fd5b5061088e600480360381019061088991906141df565b611c82565b005b34801561089c57600080fd5b506108a5611d2a565b6040516108b29190613e0f565b60405180910390f35b3480156108c757600080fd5b506108d0611d54565b6040516108dd9190613d7b565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190613bfa565b611de6565b60405161091a9190613e79565b60405180910390f35b61093d60048036038101906109389190613dd3565b611dfe565b005b34801561094b57600080fd5b506109666004803603810190610961919061424b565b6121a9565b005b34801561097457600080fd5b5061097d6121bf565b60405161098a9190613e79565b60405180910390f35b34801561099f57600080fd5b506109a86121c5565b6040516109b591906142b2565b60405180910390f35b3480156109ca57600080fd5b506109e560048036038101906109e0919061436e565b6121e3565b005b3480156109f357600080fd5b506109fc612245565b604051610a099190613d7b565b60405180910390f35b348015610a1e57600080fd5b50610a396004803603810190610a349190613dd3565b6122d3565b604051610a469190613d7b565b60405180910390f35b348015610a5b57600080fd5b50610a766004803603810190610a719190613bfa565b61237d565b005b348015610a8457600080fd5b50610a8d612454565b604051610a9a9190613e79565b60405180910390f35b348015610aaf57600080fd5b50610aca6004803603810190610ac591906143f1565b61245a565b604051610ad79190613c42565b60405180910390f35b348015610aec57600080fd5b50610b076004803603810190610b029190613bfa565b6124ee565b005b601a6020528060005260406000206000915054906101000a900460ff1681565b6000610b34826125e5565b80610b445750610b438261265f565b5b9050919050565b606060008054610b5a90614460565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8690614460565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b5050505050905090565b6000610be8826126d9565b610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90614503565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610c6a612745565b73ffffffffffffffffffffffffffffffffffffffff16610c88611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd59061456f565b60405180910390fd5b8060128190555050565b6000610cf38261196c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90614601565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d82612745565b73ffffffffffffffffffffffffffffffffffffffff161480610db15750610db081610dab612745565b61245a565b5b610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de790614693565b60405180910390fd5b610dfa838361274d565b505050565b610e07612745565b73ffffffffffffffffffffffffffffffffffffffff16610e25611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e729061456f565b60405180910390fd5b600060145411610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb7906146ff565b60405180910390fd5b601454811115610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc90614791565b60405180910390fd5b6000600190505b818111610fa55760006001610f1f611035565b610f2991906147e0565b90506001601454610f3a9190614836565b601481905550610f6c601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612806565b610f918133601760009054906101000a90046bffffffffffffffffffffffff16612824565b508080610f9d9061486a565b915050610f0c565b5050565b610fb1612745565b73ffffffffffffffffffffffffffffffffffffffff16610fcf611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c9061456f565b60405180910390fd5b8060168190555050565b600f5481565b6000600880549050905090565b60145481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611076612745565b73ffffffffffffffffffffffffffffffffffffffff16611094611d2a565b73ffffffffffffffffffffffffffffffffffffffff16146110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e19061456f565b60405180910390fd5b8060108190555050565b60125481565b61110b611105612745565b826129cb565b61114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190614924565b60405180910390fd5b611155838383612aa9565b505050565b6000806000600b60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16036112ef57600a6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006112f9612d0f565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866113259190614944565b61132f91906149cd565b90508160000151819350935050509250929050565b600061134f83611ab7565b8210611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790614a70565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6113f1612745565b73ffffffffffffffffffffffffffffffffffffffff1661140f611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c9061456f565b60405180910390fd5b60005b81518110156114f6576001601a600084848151811061148a57611489614a90565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806114ee9061486a565b915050611468565b5050565b6017600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611528612745565b73ffffffffffffffffffffffffffffffffffffffff16611546611d2a565b73ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115939061456f565b60405180910390fd5b60006017600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646003476115e69190614944565b6115f091906149cd565b6040516115fc90614af0565b60006040518083038185875af1925050503d8060008114611639576040519150601f19603f3d011682016040523d82523d6000602084013e61163e565b606091505b505090508061164c57600080fd5b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161169490614af0565b60006040518083038185875af1925050503d80600081146116d1576040519150601f19603f3d011682016040523d82523d6000602084013e6116d6565b606091505b50509050806116e457600080fd5b5050565b6116f0612745565b73ffffffffffffffffffffffffffffffffffffffff1661170e611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b9061456f565b60405180910390fd5b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6117da838383604051806020016040528060008152506121e3565b505050565b6117e7612745565b73ffffffffffffffffffffffffffffffffffffffff16611805611d2a565b73ffffffffffffffffffffffffffffffffffffffff161461185b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118529061456f565b60405180910390fd5b80600f8190555050565b600061186f611035565b82106118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790614b77565b60405180910390fd5b600882815481106118c4576118c3614a90565b5b90600052602060002001549050919050565b6118de612745565b73ffffffffffffffffffffffffffffffffffffffff166118fc611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611952576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119499061456f565b60405180910390fd5b80600d9080519060200190611968929190613ae5565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90614c09565b60405180910390fd5b80915050919050565b60165481565b60155481565b600d8054611a3690614460565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6290614460565b8015611aaf5780601f10611a8457610100808354040283529160200191611aaf565b820191906000526020600020905b815481529060010190602001808311611a9257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90614c9b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b76612745565b73ffffffffffffffffffffffffffffffffffffffff16611b94611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be19061456f565b60405180910390fd5b611bf46000612d19565b565b611bfe612745565b73ffffffffffffffffffffffffffffffffffffffff16611c1c611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c699061456f565b60405180910390fd5b8060158190555050565b60135481565b6000611c8f83600061115a565b5090508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf790614d2d565b60405180910390fd5b611d258383601760009054906101000a90046bffffffffffffffffffffffff16612824565b505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611d6390614460565b80601f0160208091040260200160405190810160405280929190818152602001828054611d8f90614460565b8015611ddc5780601f10611db157610100808354040283529160200191611ddc565b820191906000526020600020905b815481529060010190602001808311611dbf57829003601f168201915b5050505050905090565b60196020528060005260406000206000915090505481565b60115481611e0a611035565b611e1491906147e0565b1115611e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c90614d99565b60405180910390fd5b60125481601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ea391906147e0565b1115611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90614e2b565b60405180910390fd5b601554421015611f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2090614e97565b60405180910390fd5b80600f54611f379190614944565b341015611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090614f03565b60405180910390fd5b6015544210158015611f8c575060165442105b156120ad57601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614f95565b60405180910390fd5b60135481601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461206b91906147e0565b11156120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390615027565b60405180910390fd5b5b6000600190505b8181116121a557600060016120c7611035565b6120d191906147e0565b90506001601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461211f91906147e0565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061216c3382612806565b6121918133601760009054906101000a90046bffffffffffffffffffffffff16612824565b50808061219d9061486a565b9150506120b4565b5050565b6121bb6121b4612745565b8383612ddf565b5050565b60105481565b601760009054906101000a90046bffffffffffffffffffffffff1681565b6121f46121ee612745565b836129cb565b612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a90614924565b60405180910390fd5b61223f84848484612f4b565b50505050565b600e805461225290614460565b80601f016020809104026020016040519081016040528092919081815260200182805461227e90614460565b80156122cb5780601f106122a0576101008083540402835291602001916122cb565b820191906000526020600020905b8154815290600101906020018083116122ae57829003601f168201915b505050505081565b60606122de826126d9565b61231d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612314906150b9565b60405180910390fd5b6000612327612fa7565b905060008151116123475760405180602001604052806000815250612375565b8061235184613039565b600e604051602001612365939291906151a9565b6040516020818303038152906040525b915050919050565b612385612745565b73ffffffffffffffffffffffffffffffffffffffff166123a3611d2a565b73ffffffffffffffffffffffffffffffffffffffff16146123f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f09061456f565b60405180910390fd5b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60115481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124f6612745565b73ffffffffffffffffffffffffffffffffffffffff16612514611d2a565b73ffffffffffffffffffffffffffffffffffffffff161461256a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125619061456f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d09061524c565b60405180910390fd5b6125e281612d19565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612658575061265782613199565b5b9050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126d257506126d1826125e5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127c08361196c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61282082826040518060200160405280600081525061327b565b5050565b61282c612d0f565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111561288a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612881906152de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f09061534a565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600b600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b60006129d6826126d9565b612a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0c906153dc565b60405180910390fd5b6000612a208361196c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a8f57508373ffffffffffffffffffffffffffffffffffffffff16612a7784610bdd565b73ffffffffffffffffffffffffffffffffffffffff16145b80612aa05750612a9f818561245a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ac98261196c565b73ffffffffffffffffffffffffffffffffffffffff1614612b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b169061546e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8590615500565b60405180910390fd5b612b998383836132d6565b612ba460008261274d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bf49190614836565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c4b91906147e0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d0a8383836133e8565b505050565b6000612710905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e449061556c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f3e9190613c42565b60405180910390a3505050565b612f56848484612aa9565b612f62848484846133ed565b612fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f98906155fe565b60405180910390fd5b50505050565b6060600d8054612fb690614460565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe290614460565b801561302f5780601f106130045761010080835404028352916020019161302f565b820191906000526020600020905b81548152906001019060200180831161301257829003601f168201915b5050505050905090565b606060008203613080576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613194565b600082905060005b600082146130b257808061309b9061486a565b915050600a826130ab91906149cd565b9150613088565b60008167ffffffffffffffff8111156130ce576130cd613f55565b5b6040519080825280601f01601f1916602001820160405280156131005781602001600182028036833780820191505090505b5090505b6000851461318d576001826131199190614836565b9150600a85613128919061561e565b603061313491906147e0565b60f81b81838151811061314a57613149614a90565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561318691906149cd565b9450613104565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061326457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613274575061327382613574565b5b9050919050565b61328583836135de565b61329260008484846133ed565b6132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c8906155fe565b60405180910390fd5b505050565b6132e18383836137b7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133235761331e816137bc565b613362565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613361576133608382613805565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133a45761339f81613972565b6133e3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133e2576133e18282613a43565b5b5b505050565b505050565b600061340e8473ffffffffffffffffffffffffffffffffffffffff16613ac2565b15613567578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613437612745565b8786866040518563ffffffff1660e01b815260040161345994939291906156a4565b6020604051808303816000875af192505050801561349557506040513d601f19601f820116820180604052508101906134929190615705565b60015b613517573d80600081146134c5576040519150601f19603f3d011682016040523d82523d6000602084013e6134ca565b606091505b50600081510361350f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613506906155fe565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061356c565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361364d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136449061577e565b60405180910390fd5b613656816126d9565b15613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d906157ea565b60405180910390fd5b6136a2600083836132d6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136f291906147e0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137b3600083836133e8565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161381284611ab7565b61381c9190614836565b9050600060076000848152602001908152602001600020549050818114613901576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506139869190614836565b90506000600960008481526020019081526020016000205490506000600883815481106139b6576139b5614a90565b5b9060005260206000200154905080600883815481106139d8576139d7614a90565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613a2757613a2661580a565b5b6001900381819060005260206000200160009055905550505050565b6000613a4e83611ab7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613af190614460565b90600052602060002090601f016020900481019282613b135760008555613b5a565b82601f10613b2c57805160ff1916838001178555613b5a565b82800160010185558215613b5a579182015b82811115613b59578251825591602001919060010190613b3e565b5b509050613b679190613b6b565b5090565b5b80821115613b84576000816000905550600101613b6c565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bc782613b9c565b9050919050565b613bd781613bbc565b8114613be257600080fd5b50565b600081359050613bf481613bce565b92915050565b600060208284031215613c1057613c0f613b92565b5b6000613c1e84828501613be5565b91505092915050565b60008115159050919050565b613c3c81613c27565b82525050565b6000602082019050613c576000830184613c33565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613c9281613c5d565b8114613c9d57600080fd5b50565b600081359050613caf81613c89565b92915050565b600060208284031215613ccb57613cca613b92565b5b6000613cd984828501613ca0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d1c578082015181840152602081019050613d01565b83811115613d2b576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d4d82613ce2565b613d578185613ced565b9350613d67818560208601613cfe565b613d7081613d31565b840191505092915050565b60006020820190508181036000830152613d958184613d42565b905092915050565b6000819050919050565b613db081613d9d565b8114613dbb57600080fd5b50565b600081359050613dcd81613da7565b92915050565b600060208284031215613de957613de8613b92565b5b6000613df784828501613dbe565b91505092915050565b613e0981613bbc565b82525050565b6000602082019050613e246000830184613e00565b92915050565b60008060408385031215613e4157613e40613b92565b5b6000613e4f85828601613be5565b9250506020613e6085828601613dbe565b9150509250929050565b613e7381613d9d565b82525050565b6000602082019050613e8e6000830184613e6a565b92915050565b600080600060608486031215613ead57613eac613b92565b5b6000613ebb86828701613be5565b9350506020613ecc86828701613be5565b9250506040613edd86828701613dbe565b9150509250925092565b60008060408385031215613efe57613efd613b92565b5b6000613f0c85828601613dbe565b9250506020613f1d85828601613dbe565b9150509250929050565b6000604082019050613f3c6000830185613e00565b613f496020830184613e6a565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f8d82613d31565b810181811067ffffffffffffffff82111715613fac57613fab613f55565b5b80604052505050565b6000613fbf613b88565b9050613fcb8282613f84565b919050565b600067ffffffffffffffff821115613feb57613fea613f55565b5b602082029050602081019050919050565b600080fd5b600061401461400f84613fd0565b613fb5565b9050808382526020820190506020840283018581111561403757614036613ffc565b5b835b81811015614060578061404c8882613be5565b845260208401935050602081019050614039565b5050509392505050565b600082601f83011261407f5761407e613f50565b5b813561408f848260208601614001565b91505092915050565b6000602082840312156140ae576140ad613b92565b5b600082013567ffffffffffffffff8111156140cc576140cb613b97565b5b6140d88482850161406a565b91505092915050565b600080fd5b600067ffffffffffffffff82111561410157614100613f55565b5b61410a82613d31565b9050602081019050919050565b82818337600083830152505050565b6000614139614134846140e6565b613fb5565b905082815260208101848484011115614155576141546140e1565b5b614160848285614117565b509392505050565b600082601f83011261417d5761417c613f50565b5b813561418d848260208601614126565b91505092915050565b6000602082840312156141ac576141ab613b92565b5b600082013567ffffffffffffffff8111156141ca576141c9613b97565b5b6141d684828501614168565b91505092915050565b600080604083850312156141f6576141f5613b92565b5b600061420485828601613dbe565b925050602061421585828601613be5565b9150509250929050565b61422881613c27565b811461423357600080fd5b50565b6000813590506142458161421f565b92915050565b6000806040838503121561426257614261613b92565b5b600061427085828601613be5565b925050602061428185828601614236565b9150509250929050565b60006bffffffffffffffffffffffff82169050919050565b6142ac8161428b565b82525050565b60006020820190506142c760008301846142a3565b92915050565b600067ffffffffffffffff8211156142e8576142e7613f55565b5b6142f182613d31565b9050602081019050919050565b600061431161430c846142cd565b613fb5565b90508281526020810184848401111561432d5761432c6140e1565b5b614338848285614117565b509392505050565b600082601f83011261435557614354613f50565b5b81356143658482602086016142fe565b91505092915050565b6000806000806080858703121561438857614387613b92565b5b600061439687828801613be5565b94505060206143a787828801613be5565b93505060406143b887828801613dbe565b925050606085013567ffffffffffffffff8111156143d9576143d8613b97565b5b6143e587828801614340565b91505092959194509250565b6000806040838503121561440857614407613b92565b5b600061441685828601613be5565b925050602061442785828601613be5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061447857607f821691505b60208210810361448b5761448a614431565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006144ed602c83613ced565b91506144f882614491565b604082019050919050565b6000602082019050818103600083015261451c816144e0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614559602083613ced565b915061456482614523565b602082019050919050565b600060208201905081810360008301526145888161454c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006145eb602183613ced565b91506145f68261458f565b604082019050919050565b6000602082019050818103600083015261461a816145de565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061467d603883613ced565b915061468882614621565b604082019050919050565b600060208201905081810360008301526146ac81614670565b9050919050565b7f416c6c20676976656177617920746f6b656e7320617265206d696e7465640000600082015250565b60006146e9601e83613ced565b91506146f4826146b3565b602082019050919050565b60006020820190508181036000830152614718816146dc565b9050919050565b7f416c6c20676976656177617920746f6b656e7320616c7265616479206d696e7460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061477b602283613ced565b91506147868261471f565b604082019050919050565b600060208201905081810360008301526147aa8161476e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147eb82613d9d565b91506147f683613d9d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561482b5761482a6147b1565b5b828201905092915050565b600061484182613d9d565b915061484c83613d9d565b92508282101561485f5761485e6147b1565b5b828203905092915050565b600061487582613d9d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148a7576148a66147b1565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061490e603183613ced565b9150614919826148b2565b604082019050919050565b6000602082019050818103600083015261493d81614901565b9050919050565b600061494f82613d9d565b915061495a83613d9d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614993576149926147b1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149d882613d9d565b91506149e383613d9d565b9250826149f3576149f261499e565b5b828204905092915050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614a5a602b83613ced565b9150614a65826149fe565b604082019050919050565b60006020820190508181036000830152614a8981614a4d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b50565b6000614ada600083614abf565b9150614ae582614aca565b600082019050919050565b6000614afb82614acd565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614b61602c83613ced565b9150614b6c82614b05565b604082019050919050565b60006020820190508181036000830152614b9081614b54565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614bf3602983613ced565b9150614bfe82614b97565b604082019050919050565b60006020820190508181036000830152614c2281614be6565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614c85602a83613ced565b9150614c9082614c29565b604082019050919050565b60006020820190508181036000830152614cb481614c78565b9050919050565b7f596f752063616e6e6f742073657420726f79616c7469657320666f722074686960008201527f7320746f6b656e00000000000000000000000000000000000000000000000000602082015250565b6000614d17602783613ced565b9150614d2282614cbb565b604082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b7f50757263686173652065786365656473206d6178696d756d20737570706c7900600082015250565b6000614d83601f83613ced565b9150614d8e82614d4d565b602082019050919050565b60006020820190508181036000830152614db281614d76565b9050919050565b7f5075726368617365206578636565647320746865206c696d6974206f66204e4660008201527f54277320796f752063616e206d696e7400000000000000000000000000000000602082015250565b6000614e15603083613ced565b9150614e2082614db9565b604082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b7f53616c65206973206e6f7420796574206f70656e000000000000000000000000600082015250565b6000614e81601483613ced565b9150614e8c82614e4b565b602082019050919050565b60006020820190508181036000830152614eb081614e74565b9050919050565b7f506c6561736520656e7465722074686520636f72726563742070726963650000600082015250565b6000614eed601e83613ced565b9150614ef882614eb7565b602082019050919050565b60006020820190508181036000830152614f1c81614ee0565b9050919050565b7f57616c6c6574206973206e6f7420656c696769626c6520666f7220707265736160008201527f6c65000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f7f602283613ced565b9150614f8a82614f23565b604082019050919050565b60006020820190508181036000830152614fae81614f72565b9050919050565b7f5075726368617365206578636565647320746865206c696d6974206f66204e4660008201527f54277320796f752063616e206d696e7420647572696e672070726573616c6500602082015250565b6000615011603f83613ced565b915061501c82614fb5565b604082019050919050565b6000602082019050818103600083015261504081615004565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006150a3602f83613ced565b91506150ae82615047565b604082019050919050565b600060208201905081810360008301526150d281615096565b9050919050565b600081905092915050565b60006150ef82613ce2565b6150f981856150d9565b9350615109818560208601613cfe565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461513781614460565b61514181866150d9565b9450600182166000811461515c576001811461516d576151a0565b60ff198316865281860193506151a0565b61517685615115565b60005b8381101561519857815481890152600182019150602081019050615179565b838801955050505b50505092915050565b60006151b582866150e4565b91506151c182856150e4565b91506151cd828461512a565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615236602683613ced565b9150615241826151da565b604082019050919050565b6000602082019050818103600083015261526581615229565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b60006152c8602a83613ced565b91506152d38261526c565b604082019050919050565b600060208201905081810360008301526152f7816152bb565b9050919050565b7f455243323938313a20496e76616c696420706172616d65746572730000000000600082015250565b6000615334601b83613ced565b915061533f826152fe565b602082019050919050565b6000602082019050818103600083015261536381615327565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006153c6602c83613ced565b91506153d18261536a565b604082019050919050565b600060208201905081810360008301526153f5816153b9565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000615458602583613ced565b9150615463826153fc565b604082019050919050565b600060208201905081810360008301526154878161544b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154ea602483613ced565b91506154f58261548e565b604082019050919050565b60006020820190508181036000830152615519816154dd565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615556601983613ced565b915061556182615520565b602082019050919050565b6000602082019050818103600083015261558581615549565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006155e8603283613ced565b91506155f38261558c565b604082019050919050565b60006020820190508181036000830152615617816155db565b9050919050565b600061562982613d9d565b915061563483613d9d565b9250826156445761564361499e565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006156768261564f565b615680818561565a565b9350615690818560208601613cfe565b61569981613d31565b840191505092915050565b60006080820190506156b96000830187613e00565b6156c66020830186613e00565b6156d36040830185613e6a565b81810360608301526156e5818461566b565b905095945050505050565b6000815190506156ff81613c89565b92915050565b60006020828403121561571b5761571a613b92565b5b6000615729848285016156f0565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615768602083613ced565b915061577382615732565b602082019050919050565b600060208201905081810360008301526157978161575b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006157d4601c83613ced565b91506157df8261579e565b602082019050919050565b60006020820190508181036000830152615803816157c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220574d9c6cbd9f89cb9a1096027ff63e04a05278695195b1cb8860d7a8fb9aeca764736f6c634300080d003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000062a24a3800000000000000000000000000000000000000000000000000000000000007080000000000000000000000000000000000000000000000000000000000000017536361726543524f2046726967687420536f6369657479000000000000000000000000000000000000000000000000000000000000000000000000000000000453434653000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a31664668543864654d3435396257707a767a69675137476750686d72434b484a56594c7074414d7669644b2f00000000000000000000
Deployed Bytecode
0x6080604052600436106102935760003560e01c806355f804b31161015a57806397cf84fc116100c1578063c66828621161007a578063c6682862146109e7578063c87b56dd14610a12578063ce23772b14610a4f578063d5abeb0114610a78578063e985e9c514610aa3578063f2fde38b14610ae057610293565b806397cf84fc146108e6578063a0712d6814610923578063a22cb4651461093f578063a99aa36614610968578063b7f558f014610993578063b88d4fde146109be57610293565b8063715018a611610113578063715018a6146107fc57806378152bbe146108135780637effc0321461083c578063870c4140146108675780638da5cb5b1461089057806395d89b41146108bb57610293565b806355f804b3146106d85780636352211e1461070157806365c0cfa41461073e57806368e7c8ac146107695780636c0360eb1461079457806370a08231146107bf57610293565b8063217488f9116101fe5780633ad10ef6116101b75780633ad10ef6146105eb5780633ccfd60b146106165780633f0f42e21461062057806342842e0e1461064957806344a0d68a146106725780634f6ccce71461069b57610293565b8063217488f9146104ca578063239c70ae146104f357806323b872dd1461051e5780632a55205a146105475780632f745c591461058557806331ed16ac146105c257610293565b80630b3ba988116102505780630b3ba988146103cc5780630ca282f7146103f557806313faede61461041e57806318160ddd1461044957806318ecc5e0146104745780631c75f0851461049f57610293565b80630152de7c1461029857806301ffc9a7146102d557806306fdde0314610312578063081812fc1461033d578063088a4ed01461037a578063095ea7b3146103a3575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613bfa565b610b09565b6040516102cc9190613c42565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190613cb5565b610b29565b6040516103099190613c42565b60405180910390f35b34801561031e57600080fd5b50610327610b4b565b6040516103349190613d7b565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613dd3565b610bdd565b6040516103719190613e0f565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613dd3565b610c62565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190613e2a565b610ce8565b005b3480156103d857600080fd5b506103f360048036038101906103ee9190613dd3565b610dff565b005b34801561040157600080fd5b5061041c60048036038101906104179190613dd3565b610fa9565b005b34801561042a57600080fd5b5061043361102f565b6040516104409190613e79565b60405180910390f35b34801561045557600080fd5b5061045e611035565b60405161046b9190613e79565b60405180910390f35b34801561048057600080fd5b50610489611042565b6040516104969190613e79565b60405180910390f35b3480156104ab57600080fd5b506104b4611048565b6040516104c19190613e0f565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613dd3565b61106e565b005b3480156104ff57600080fd5b506105086110f4565b6040516105159190613e79565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190613e94565b6110fa565b005b34801561055357600080fd5b5061056e60048036038101906105699190613ee7565b61115a565b60405161057c929190613f27565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613e2a565b611344565b6040516105b99190613e79565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190614098565b6113e9565b005b3480156105f757600080fd5b506106006114fa565b60405161060d9190613e0f565b60405180910390f35b61061e611520565b005b34801561062c57600080fd5b5061064760048036038101906106429190613bfa565b6116e8565b005b34801561065557600080fd5b50610670600480360381019061066b9190613e94565b6117bf565b005b34801561067e57600080fd5b5061069960048036038101906106949190613dd3565b6117df565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190613dd3565b611865565b6040516106cf9190613e79565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa9190614196565b6118d6565b005b34801561070d57600080fd5b5061072860048036038101906107239190613dd3565b61196c565b6040516107359190613e0f565b60405180910390f35b34801561074a57600080fd5b50610753611a1d565b6040516107609190613e79565b60405180910390f35b34801561077557600080fd5b5061077e611a23565b60405161078b9190613e79565b60405180910390f35b3480156107a057600080fd5b506107a9611a29565b6040516107b69190613d7b565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613bfa565b611ab7565b6040516107f39190613e79565b60405180910390f35b34801561080857600080fd5b50610811611b6e565b005b34801561081f57600080fd5b5061083a60048036038101906108359190613dd3565b611bf6565b005b34801561084857600080fd5b50610851611c7c565b60405161085e9190613e79565b60405180910390f35b34801561087357600080fd5b5061088e600480360381019061088991906141df565b611c82565b005b34801561089c57600080fd5b506108a5611d2a565b6040516108b29190613e0f565b60405180910390f35b3480156108c757600080fd5b506108d0611d54565b6040516108dd9190613d7b565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190613bfa565b611de6565b60405161091a9190613e79565b60405180910390f35b61093d60048036038101906109389190613dd3565b611dfe565b005b34801561094b57600080fd5b506109666004803603810190610961919061424b565b6121a9565b005b34801561097457600080fd5b5061097d6121bf565b60405161098a9190613e79565b60405180910390f35b34801561099f57600080fd5b506109a86121c5565b6040516109b591906142b2565b60405180910390f35b3480156109ca57600080fd5b506109e560048036038101906109e0919061436e565b6121e3565b005b3480156109f357600080fd5b506109fc612245565b604051610a099190613d7b565b60405180910390f35b348015610a1e57600080fd5b50610a396004803603810190610a349190613dd3565b6122d3565b604051610a469190613d7b565b60405180910390f35b348015610a5b57600080fd5b50610a766004803603810190610a719190613bfa565b61237d565b005b348015610a8457600080fd5b50610a8d612454565b604051610a9a9190613e79565b60405180910390f35b348015610aaf57600080fd5b50610aca6004803603810190610ac591906143f1565b61245a565b604051610ad79190613c42565b60405180910390f35b348015610aec57600080fd5b50610b076004803603810190610b029190613bfa565b6124ee565b005b601a6020528060005260406000206000915054906101000a900460ff1681565b6000610b34826125e5565b80610b445750610b438261265f565b5b9050919050565b606060008054610b5a90614460565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8690614460565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b5050505050905090565b6000610be8826126d9565b610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90614503565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610c6a612745565b73ffffffffffffffffffffffffffffffffffffffff16610c88611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd59061456f565b60405180910390fd5b8060128190555050565b6000610cf38261196c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90614601565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d82612745565b73ffffffffffffffffffffffffffffffffffffffff161480610db15750610db081610dab612745565b61245a565b5b610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de790614693565b60405180910390fd5b610dfa838361274d565b505050565b610e07612745565b73ffffffffffffffffffffffffffffffffffffffff16610e25611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e729061456f565b60405180910390fd5b600060145411610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb7906146ff565b60405180910390fd5b601454811115610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc90614791565b60405180910390fd5b6000600190505b818111610fa55760006001610f1f611035565b610f2991906147e0565b90506001601454610f3a9190614836565b601481905550610f6c601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612806565b610f918133601760009054906101000a90046bffffffffffffffffffffffff16612824565b508080610f9d9061486a565b915050610f0c565b5050565b610fb1612745565b73ffffffffffffffffffffffffffffffffffffffff16610fcf611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c9061456f565b60405180910390fd5b8060168190555050565b600f5481565b6000600880549050905090565b60145481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611076612745565b73ffffffffffffffffffffffffffffffffffffffff16611094611d2a565b73ffffffffffffffffffffffffffffffffffffffff16146110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e19061456f565b60405180910390fd5b8060108190555050565b60125481565b61110b611105612745565b826129cb565b61114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190614924565b60405180910390fd5b611155838383612aa9565b505050565b6000806000600b60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16036112ef57600a6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006112f9612d0f565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866113259190614944565b61132f91906149cd565b90508160000151819350935050509250929050565b600061134f83611ab7565b8210611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790614a70565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6113f1612745565b73ffffffffffffffffffffffffffffffffffffffff1661140f611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c9061456f565b60405180910390fd5b60005b81518110156114f6576001601a600084848151811061148a57611489614a90565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806114ee9061486a565b915050611468565b5050565b6017600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611528612745565b73ffffffffffffffffffffffffffffffffffffffff16611546611d2a565b73ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115939061456f565b60405180910390fd5b60006017600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646003476115e69190614944565b6115f091906149cd565b6040516115fc90614af0565b60006040518083038185875af1925050503d8060008114611639576040519150601f19603f3d011682016040523d82523d6000602084013e61163e565b606091505b505090508061164c57600080fd5b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161169490614af0565b60006040518083038185875af1925050503d80600081146116d1576040519150601f19603f3d011682016040523d82523d6000602084013e6116d6565b606091505b50509050806116e457600080fd5b5050565b6116f0612745565b73ffffffffffffffffffffffffffffffffffffffff1661170e611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b9061456f565b60405180910390fd5b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6117da838383604051806020016040528060008152506121e3565b505050565b6117e7612745565b73ffffffffffffffffffffffffffffffffffffffff16611805611d2a565b73ffffffffffffffffffffffffffffffffffffffff161461185b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118529061456f565b60405180910390fd5b80600f8190555050565b600061186f611035565b82106118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790614b77565b60405180910390fd5b600882815481106118c4576118c3614a90565b5b90600052602060002001549050919050565b6118de612745565b73ffffffffffffffffffffffffffffffffffffffff166118fc611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611952576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119499061456f565b60405180910390fd5b80600d9080519060200190611968929190613ae5565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90614c09565b60405180910390fd5b80915050919050565b60165481565b60155481565b600d8054611a3690614460565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6290614460565b8015611aaf5780601f10611a8457610100808354040283529160200191611aaf565b820191906000526020600020905b815481529060010190602001808311611a9257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90614c9b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b76612745565b73ffffffffffffffffffffffffffffffffffffffff16611b94611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be19061456f565b60405180910390fd5b611bf46000612d19565b565b611bfe612745565b73ffffffffffffffffffffffffffffffffffffffff16611c1c611d2a565b73ffffffffffffffffffffffffffffffffffffffff1614611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c699061456f565b60405180910390fd5b8060158190555050565b60135481565b6000611c8f83600061115a565b5090508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf790614d2d565b60405180910390fd5b611d258383601760009054906101000a90046bffffffffffffffffffffffff16612824565b505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611d6390614460565b80601f0160208091040260200160405190810160405280929190818152602001828054611d8f90614460565b8015611ddc5780601f10611db157610100808354040283529160200191611ddc565b820191906000526020600020905b815481529060010190602001808311611dbf57829003601f168201915b5050505050905090565b60196020528060005260406000206000915090505481565b60115481611e0a611035565b611e1491906147e0565b1115611e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c90614d99565b60405180910390fd5b60125481601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ea391906147e0565b1115611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90614e2b565b60405180910390fd5b601554421015611f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2090614e97565b60405180910390fd5b80600f54611f379190614944565b341015611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090614f03565b60405180910390fd5b6015544210158015611f8c575060165442105b156120ad57601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614f95565b60405180910390fd5b60135481601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461206b91906147e0565b11156120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390615027565b60405180910390fd5b5b6000600190505b8181116121a557600060016120c7611035565b6120d191906147e0565b90506001601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461211f91906147e0565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061216c3382612806565b6121918133601760009054906101000a90046bffffffffffffffffffffffff16612824565b50808061219d9061486a565b9150506120b4565b5050565b6121bb6121b4612745565b8383612ddf565b5050565b60105481565b601760009054906101000a90046bffffffffffffffffffffffff1681565b6121f46121ee612745565b836129cb565b612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a90614924565b60405180910390fd5b61223f84848484612f4b565b50505050565b600e805461225290614460565b80601f016020809104026020016040519081016040528092919081815260200182805461227e90614460565b80156122cb5780601f106122a0576101008083540402835291602001916122cb565b820191906000526020600020905b8154815290600101906020018083116122ae57829003601f168201915b505050505081565b60606122de826126d9565b61231d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612314906150b9565b60405180910390fd5b6000612327612fa7565b905060008151116123475760405180602001604052806000815250612375565b8061235184613039565b600e604051602001612365939291906151a9565b6040516020818303038152906040525b915050919050565b612385612745565b73ffffffffffffffffffffffffffffffffffffffff166123a3611d2a565b73ffffffffffffffffffffffffffffffffffffffff16146123f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f09061456f565b60405180910390fd5b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60115481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124f6612745565b73ffffffffffffffffffffffffffffffffffffffff16612514611d2a565b73ffffffffffffffffffffffffffffffffffffffff161461256a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125619061456f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d09061524c565b60405180910390fd5b6125e281612d19565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612658575061265782613199565b5b9050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126d257506126d1826125e5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127c08361196c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61282082826040518060200160405280600081525061327b565b5050565b61282c612d0f565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111561288a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612881906152de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f09061534a565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600b600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b60006129d6826126d9565b612a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0c906153dc565b60405180910390fd5b6000612a208361196c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a8f57508373ffffffffffffffffffffffffffffffffffffffff16612a7784610bdd565b73ffffffffffffffffffffffffffffffffffffffff16145b80612aa05750612a9f818561245a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ac98261196c565b73ffffffffffffffffffffffffffffffffffffffff1614612b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b169061546e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8590615500565b60405180910390fd5b612b998383836132d6565b612ba460008261274d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bf49190614836565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c4b91906147e0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d0a8383836133e8565b505050565b6000612710905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e449061556c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f3e9190613c42565b60405180910390a3505050565b612f56848484612aa9565b612f62848484846133ed565b612fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f98906155fe565b60405180910390fd5b50505050565b6060600d8054612fb690614460565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe290614460565b801561302f5780601f106130045761010080835404028352916020019161302f565b820191906000526020600020905b81548152906001019060200180831161301257829003601f168201915b5050505050905090565b606060008203613080576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613194565b600082905060005b600082146130b257808061309b9061486a565b915050600a826130ab91906149cd565b9150613088565b60008167ffffffffffffffff8111156130ce576130cd613f55565b5b6040519080825280601f01601f1916602001820160405280156131005781602001600182028036833780820191505090505b5090505b6000851461318d576001826131199190614836565b9150600a85613128919061561e565b603061313491906147e0565b60f81b81838151811061314a57613149614a90565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561318691906149cd565b9450613104565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061326457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613274575061327382613574565b5b9050919050565b61328583836135de565b61329260008484846133ed565b6132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c8906155fe565b60405180910390fd5b505050565b6132e18383836137b7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133235761331e816137bc565b613362565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613361576133608382613805565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133a45761339f81613972565b6133e3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133e2576133e18282613a43565b5b5b505050565b505050565b600061340e8473ffffffffffffffffffffffffffffffffffffffff16613ac2565b15613567578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613437612745565b8786866040518563ffffffff1660e01b815260040161345994939291906156a4565b6020604051808303816000875af192505050801561349557506040513d601f19601f820116820180604052508101906134929190615705565b60015b613517573d80600081146134c5576040519150601f19603f3d011682016040523d82523d6000602084013e6134ca565b606091505b50600081510361350f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613506906155fe565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061356c565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361364d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136449061577e565b60405180910390fd5b613656816126d9565b15613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d906157ea565b60405180910390fd5b6136a2600083836132d6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136f291906147e0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137b3600083836133e8565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161381284611ab7565b61381c9190614836565b9050600060076000848152602001908152602001600020549050818114613901576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506139869190614836565b90506000600960008481526020019081526020016000205490506000600883815481106139b6576139b5614a90565b5b9060005260206000200154905080600883815481106139d8576139d7614a90565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613a2757613a2661580a565b5b6001900381819060005260206000200160009055905550505050565b6000613a4e83611ab7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613af190614460565b90600052602060002090601f016020900481019282613b135760008555613b5a565b82601f10613b2c57805160ff1916838001178555613b5a565b82800160010185558215613b5a579182015b82811115613b59578251825591602001919060010190613b3e565b5b509050613b679190613b6b565b5090565b5b80821115613b84576000816000905550600101613b6c565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bc782613b9c565b9050919050565b613bd781613bbc565b8114613be257600080fd5b50565b600081359050613bf481613bce565b92915050565b600060208284031215613c1057613c0f613b92565b5b6000613c1e84828501613be5565b91505092915050565b60008115159050919050565b613c3c81613c27565b82525050565b6000602082019050613c576000830184613c33565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613c9281613c5d565b8114613c9d57600080fd5b50565b600081359050613caf81613c89565b92915050565b600060208284031215613ccb57613cca613b92565b5b6000613cd984828501613ca0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d1c578082015181840152602081019050613d01565b83811115613d2b576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d4d82613ce2565b613d578185613ced565b9350613d67818560208601613cfe565b613d7081613d31565b840191505092915050565b60006020820190508181036000830152613d958184613d42565b905092915050565b6000819050919050565b613db081613d9d565b8114613dbb57600080fd5b50565b600081359050613dcd81613da7565b92915050565b600060208284031215613de957613de8613b92565b5b6000613df784828501613dbe565b91505092915050565b613e0981613bbc565b82525050565b6000602082019050613e246000830184613e00565b92915050565b60008060408385031215613e4157613e40613b92565b5b6000613e4f85828601613be5565b9250506020613e6085828601613dbe565b9150509250929050565b613e7381613d9d565b82525050565b6000602082019050613e8e6000830184613e6a565b92915050565b600080600060608486031215613ead57613eac613b92565b5b6000613ebb86828701613be5565b9350506020613ecc86828701613be5565b9250506040613edd86828701613dbe565b9150509250925092565b60008060408385031215613efe57613efd613b92565b5b6000613f0c85828601613dbe565b9250506020613f1d85828601613dbe565b9150509250929050565b6000604082019050613f3c6000830185613e00565b613f496020830184613e6a565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f8d82613d31565b810181811067ffffffffffffffff82111715613fac57613fab613f55565b5b80604052505050565b6000613fbf613b88565b9050613fcb8282613f84565b919050565b600067ffffffffffffffff821115613feb57613fea613f55565b5b602082029050602081019050919050565b600080fd5b600061401461400f84613fd0565b613fb5565b9050808382526020820190506020840283018581111561403757614036613ffc565b5b835b81811015614060578061404c8882613be5565b845260208401935050602081019050614039565b5050509392505050565b600082601f83011261407f5761407e613f50565b5b813561408f848260208601614001565b91505092915050565b6000602082840312156140ae576140ad613b92565b5b600082013567ffffffffffffffff8111156140cc576140cb613b97565b5b6140d88482850161406a565b91505092915050565b600080fd5b600067ffffffffffffffff82111561410157614100613f55565b5b61410a82613d31565b9050602081019050919050565b82818337600083830152505050565b6000614139614134846140e6565b613fb5565b905082815260208101848484011115614155576141546140e1565b5b614160848285614117565b509392505050565b600082601f83011261417d5761417c613f50565b5b813561418d848260208601614126565b91505092915050565b6000602082840312156141ac576141ab613b92565b5b600082013567ffffffffffffffff8111156141ca576141c9613b97565b5b6141d684828501614168565b91505092915050565b600080604083850312156141f6576141f5613b92565b5b600061420485828601613dbe565b925050602061421585828601613be5565b9150509250929050565b61422881613c27565b811461423357600080fd5b50565b6000813590506142458161421f565b92915050565b6000806040838503121561426257614261613b92565b5b600061427085828601613be5565b925050602061428185828601614236565b9150509250929050565b60006bffffffffffffffffffffffff82169050919050565b6142ac8161428b565b82525050565b60006020820190506142c760008301846142a3565b92915050565b600067ffffffffffffffff8211156142e8576142e7613f55565b5b6142f182613d31565b9050602081019050919050565b600061431161430c846142cd565b613fb5565b90508281526020810184848401111561432d5761432c6140e1565b5b614338848285614117565b509392505050565b600082601f83011261435557614354613f50565b5b81356143658482602086016142fe565b91505092915050565b6000806000806080858703121561438857614387613b92565b5b600061439687828801613be5565b94505060206143a787828801613be5565b93505060406143b887828801613dbe565b925050606085013567ffffffffffffffff8111156143d9576143d8613b97565b5b6143e587828801614340565b91505092959194509250565b6000806040838503121561440857614407613b92565b5b600061441685828601613be5565b925050602061442785828601613be5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061447857607f821691505b60208210810361448b5761448a614431565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006144ed602c83613ced565b91506144f882614491565b604082019050919050565b6000602082019050818103600083015261451c816144e0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614559602083613ced565b915061456482614523565b602082019050919050565b600060208201905081810360008301526145888161454c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006145eb602183613ced565b91506145f68261458f565b604082019050919050565b6000602082019050818103600083015261461a816145de565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061467d603883613ced565b915061468882614621565b604082019050919050565b600060208201905081810360008301526146ac81614670565b9050919050565b7f416c6c20676976656177617920746f6b656e7320617265206d696e7465640000600082015250565b60006146e9601e83613ced565b91506146f4826146b3565b602082019050919050565b60006020820190508181036000830152614718816146dc565b9050919050565b7f416c6c20676976656177617920746f6b656e7320616c7265616479206d696e7460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061477b602283613ced565b91506147868261471f565b604082019050919050565b600060208201905081810360008301526147aa8161476e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147eb82613d9d565b91506147f683613d9d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561482b5761482a6147b1565b5b828201905092915050565b600061484182613d9d565b915061484c83613d9d565b92508282101561485f5761485e6147b1565b5b828203905092915050565b600061487582613d9d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148a7576148a66147b1565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061490e603183613ced565b9150614919826148b2565b604082019050919050565b6000602082019050818103600083015261493d81614901565b9050919050565b600061494f82613d9d565b915061495a83613d9d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614993576149926147b1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149d882613d9d565b91506149e383613d9d565b9250826149f3576149f261499e565b5b828204905092915050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614a5a602b83613ced565b9150614a65826149fe565b604082019050919050565b60006020820190508181036000830152614a8981614a4d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b50565b6000614ada600083614abf565b9150614ae582614aca565b600082019050919050565b6000614afb82614acd565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614b61602c83613ced565b9150614b6c82614b05565b604082019050919050565b60006020820190508181036000830152614b9081614b54565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614bf3602983613ced565b9150614bfe82614b97565b604082019050919050565b60006020820190508181036000830152614c2281614be6565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614c85602a83613ced565b9150614c9082614c29565b604082019050919050565b60006020820190508181036000830152614cb481614c78565b9050919050565b7f596f752063616e6e6f742073657420726f79616c7469657320666f722074686960008201527f7320746f6b656e00000000000000000000000000000000000000000000000000602082015250565b6000614d17602783613ced565b9150614d2282614cbb565b604082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b7f50757263686173652065786365656473206d6178696d756d20737570706c7900600082015250565b6000614d83601f83613ced565b9150614d8e82614d4d565b602082019050919050565b60006020820190508181036000830152614db281614d76565b9050919050565b7f5075726368617365206578636565647320746865206c696d6974206f66204e4660008201527f54277320796f752063616e206d696e7400000000000000000000000000000000602082015250565b6000614e15603083613ced565b9150614e2082614db9565b604082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b7f53616c65206973206e6f7420796574206f70656e000000000000000000000000600082015250565b6000614e81601483613ced565b9150614e8c82614e4b565b602082019050919050565b60006020820190508181036000830152614eb081614e74565b9050919050565b7f506c6561736520656e7465722074686520636f72726563742070726963650000600082015250565b6000614eed601e83613ced565b9150614ef882614eb7565b602082019050919050565b60006020820190508181036000830152614f1c81614ee0565b9050919050565b7f57616c6c6574206973206e6f7420656c696769626c6520666f7220707265736160008201527f6c65000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f7f602283613ced565b9150614f8a82614f23565b604082019050919050565b60006020820190508181036000830152614fae81614f72565b9050919050565b7f5075726368617365206578636565647320746865206c696d6974206f66204e4660008201527f54277320796f752063616e206d696e7420647572696e672070726573616c6500602082015250565b6000615011603f83613ced565b915061501c82614fb5565b604082019050919050565b6000602082019050818103600083015261504081615004565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006150a3602f83613ced565b91506150ae82615047565b604082019050919050565b600060208201905081810360008301526150d281615096565b9050919050565b600081905092915050565b60006150ef82613ce2565b6150f981856150d9565b9350615109818560208601613cfe565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461513781614460565b61514181866150d9565b9450600182166000811461515c576001811461516d576151a0565b60ff198316865281860193506151a0565b61517685615115565b60005b8381101561519857815481890152600182019150602081019050615179565b838801955050505b50505092915050565b60006151b582866150e4565b91506151c182856150e4565b91506151cd828461512a565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615236602683613ced565b9150615241826151da565b604082019050919050565b6000602082019050818103600083015261526581615229565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b60006152c8602a83613ced565b91506152d38261526c565b604082019050919050565b600060208201905081810360008301526152f7816152bb565b9050919050565b7f455243323938313a20496e76616c696420706172616d65746572730000000000600082015250565b6000615334601b83613ced565b915061533f826152fe565b602082019050919050565b6000602082019050818103600083015261536381615327565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006153c6602c83613ced565b91506153d18261536a565b604082019050919050565b600060208201905081810360008301526153f5816153b9565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000615458602583613ced565b9150615463826153fc565b604082019050919050565b600060208201905081810360008301526154878161544b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154ea602483613ced565b91506154f58261548e565b604082019050919050565b60006020820190508181036000830152615519816154dd565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615556601983613ced565b915061556182615520565b602082019050919050565b6000602082019050818103600083015261558581615549565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006155e8603283613ced565b91506155f38261558c565b604082019050919050565b60006020820190508181036000830152615617816155db565b9050919050565b600061562982613d9d565b915061563483613d9d565b9250826156445761564361499e565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006156768261564f565b615680818561565a565b9350615690818560208601613cfe565b61569981613d31565b840191505092915050565b60006080820190506156b96000830187613e00565b6156c66020830186613e00565b6156d36040830185613e6a565b81810360608301526156e5818461566b565b905095945050505050565b6000815190506156ff81613c89565b92915050565b60006020828403121561571b5761571a613b92565b5b6000615729848285016156f0565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615768602083613ced565b915061577382615732565b602082019050919050565b600060208201905081810360008301526157978161575b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006157d4601c83613ced565b91506157df8261579e565b602082019050919050565b60006020820190508181036000830152615803816157c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220574d9c6cbd9f89cb9a1096027ff63e04a05278695195b1cb8860d7a8fb9aeca764736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000062a24a3800000000000000000000000000000000000000000000000000000000000007080000000000000000000000000000000000000000000000000000000000000017536361726543524f2046726967687420536f6369657479000000000000000000000000000000000000000000000000000000000000000000000000000000000453434653000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a31664668543864654d3435396257707a767a69675137476750686d72434b484a56594c7074414d7669644b2f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): ScareCRO Fright Society
Arg [1] : _symbol (string): SCFS
Arg [2] : _initialBaseURI (string): ipfs://QmZ1fFhT8deM459bWpzvzigQ7GgPhmrCKHJVYLptAMvidK/
Arg [3] : _presaleStartTime (uint256): 1654803000
Arg [4] : _presaleDurationSeconds (uint256): 1800
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000062a24a38
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000708
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [6] : 536361726543524f2046726967687420536f6369657479000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 5343465300000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [10] : 697066733a2f2f516d5a31664668543864654d3435396257707a767a69675137
Arg [11] : 476750686d72434b484a56594c7074414d7669644b2f00000000000000000000
Deployed Bytecode Sourcemap
50630:5596:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51401:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55950:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31229:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32788:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54252:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32311:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53570:562;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54593:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50808:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45049:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51010:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51259:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54728:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50924:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33538:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19581:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;44717:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55423:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51182:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55643:299;;;:::i;:::-;;55159:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33948:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54376:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45239:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54140:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30923:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51096:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51063:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50730:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30653:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;54470:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50964:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54852:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31398:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51339:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52438:1124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33081:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50846:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51138:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34204:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50758:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52058:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55288:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50887:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33307:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51401:54;;;;;;;;;;;;;;;;;;;;;;:::o;55950:273::-;56074:4;56112:47;56147:11;56112:34;:47::i;:::-;:103;;;;56177:38;56203:11;56177:25;:38::i;:::-;56112:103;56091:124;;55950:273;;;:::o;31229:100::-;31283:13;31316:5;31309:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31229:100;:::o;32788:221::-;32864:7;32892:16;32900:7;32892;:16::i;:::-;32884:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32977:15;:24;32993:7;32977:24;;;;;;;;;;;;;;;;;;;;;32970:31;;32788:221;;;:::o;54252:116::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54346:14:::1;54330:13;:30;;;;54252:116:::0;:::o;32311:411::-;32392:13;32408:23;32423:7;32408:14;:23::i;:::-;32392:39;;32456:5;32450:11;;:2;:11;;;32442:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32550:5;32534:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32559:37;32576:5;32583:12;:10;:12::i;:::-;32559:16;:37::i;:::-;32534:62;32512:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32693:21;32702:2;32706:7;32693:8;:21::i;:::-;32381:341;32311:411;;:::o;53570:562::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53684:1:::1;53655:26;;:30;53647:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;53754:26;;53739:11;:41;;53731:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;53836:9;53848:1;53836:13;;53832:293;53856:11;53851:1;:16;53832:293;;53889:15;53923:1;53907:13;:11;:13::i;:::-;:17;;;;:::i;:::-;53889:35;;53997:1;53968:26;;:30;;;;:::i;:::-;53939:26;:59;;;;54013:31;54023:11;;;;;;;;;;;54036:7;54013:9;:31::i;:::-;54059:54;54076:7;54085:10;54097:15;;;;;;;;;;;54059:16;:54::i;:::-;53874:251;53869:3;;;;;:::i;:::-;;;;53832:293;;;;53570:562:::0;:::o;54593:127::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54694:18:::1;54677:14;:35;;;;54593:127:::0;:::o;50808:31::-;;;;:::o;45049:113::-;45110:7;45137:10;:17;;;;45130:24;;45049:113;:::o;51010:46::-;;;;:::o;51259:71::-;;;;;;;;;;;;;:::o;54728:116::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54824:12:::1;54806:15;:30;;;;54728:116:::0;:::o;50924:33::-;;;;:::o;33538:339::-;33733:41;33752:12;:10;:12::i;:::-;33766:7;33733:18;:41::i;:::-;33725:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33841:28;33851:4;33857:2;33861:7;33841:9;:28::i;:::-;33538:339;;;:::o;19581:442::-;19678:7;19687;19707:26;19736:17;:27;19754:8;19736:27;;;;;;;;;;;19707:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19808:1;19780:30;;:7;:16;;;:30;;;19776:92;;19837:19;19827:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19776:92;19880:21;19945:17;:15;:17::i;:::-;19904:58;;19918:7;:23;;;19905:36;;:10;:36;;;;:::i;:::-;19904:58;;;;:::i;:::-;19880:82;;19983:7;:16;;;20001:13;19975:40;;;;;;19581:442;;;;;:::o;44717:256::-;44814:7;44850:23;44867:5;44850:16;:23::i;:::-;44842:5;:31;44834:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44939:12;:19;44952:5;44939:19;;;;;;;;;;;;;;;:26;44959:5;44939:26;;;;;;;;;;;;44932:33;;44717:256;;;;:::o;55423:212::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55518:9:::1;55513:115;55537:8;:15;55533:1;:19;55513:115;;;55612:4;55574:22;:35;55597:8;55606:1;55597:11;;;;;;;;:::i;:::-;;;;;;;;55574:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;55554:3;;;;;:::i;:::-;;;;55513:115;;;;55423:212:::0;:::o;51182:70::-;;;;;;;;;;;;;:::o;55643:299::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55700:12:::1;55726:10;;;;;;;;;;;55718:24;;55778:3;55774:1;55750:21;:25;;;;:::i;:::-;:31;;;;:::i;:::-;55718:68;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55699:87;;;55805:7;55797:16;;;::::0;::::1;;55827:13;55854:11;;;;;;;;;;;55846:25;;55879:21;55846:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55826:79;;;55924:8;55916:17;;;::::0;::::1;;55688:254;;55643:299::o:0;55159:121::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55268:4:::1;55234:22;:31;55257:7;55234:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;55159:121:::0;:::o;33948:185::-;34086:39;34103:4;34109:2;34113:7;34086:39;;;;;;;;;;;;:16;:39::i;:::-;33948:185;;;:::o;54376:86::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54446:8:::1;54439:4;:15;;;;54376:86:::0;:::o;45239:233::-;45314:7;45350:30;:28;:30::i;:::-;45342:5;:38;45334:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;45447:10;45458:5;45447:17;;;;;;;;:::i;:::-;;;;;;;;;;45440:24;;45239:233;;;:::o;54140:104::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54225:11:::1;54215:7;:21;;;;;;;;;;;;:::i;:::-;;54140:104:::0;:::o;30923:239::-;30995:7;31015:13;31031:7;:16;31039:7;31031:16;;;;;;;;;;;;;;;;;;;;;31015:32;;31083:1;31066:19;;:5;:19;;;31058:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31149:5;31142:12;;;30923:239;;;:::o;51096:29::-;;;;:::o;51063:26::-;;;;:::o;50730:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30653:208::-;30725:7;30770:1;30753:19;;:5;:19;;;30745:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30837:9;:16;30847:5;30837:16;;;;;;;;;;;;;;;;30830:23;;30653:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;54470:115::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54562:15:::1;54548:11;:29;;;;54470:115:::0;:::o;50964:39::-;;;;:::o;54852:299::-;54938:22;54965:24;54977:8;54987:1;54965:11;:24::i;:::-;54937:52;;;55022:14;55008:28;;:10;:28;;;55000:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;55091:52;55108:8;55118:7;55127:15;;;;;;;;;;;55091:16;:52::i;:::-;54926:225;54852:299;;:::o;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;31398:104::-;31454:13;31487:7;31480:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31398:104;:::o;51339:55::-;;;;;;;;;;;;;;;;;:::o;52438:1124::-;52538:9;;52523:11;52507:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;52499:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;52652:13;;52637:11;52602:20;:32;52623:10;52602:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:63;;52594:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;52756:11;;52737:15;:30;;52729:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;52831:11;52824:4;;:18;;;;:::i;:::-;52811:9;:31;;52803:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;52921:11;;52902:15;:30;;:66;;;;;52954:14;;52936:15;:32;52902:66;52898:341;;;52993:22;:34;53016:10;52993:34;;;;;;;;;;;;;;;;;;;;;;;;;52985:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;53139:20;;53124:11;53089:20;:32;53110:10;53089:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:70;;53081:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;52898:341;53255:9;53267:1;53255:13;;53251:304;53275:11;53270:1;:16;53251:304;;53308:15;53342:1;53326:13;:11;:13::i;:::-;:17;;;;:::i;:::-;53308:35;;53428:1;53393:20;:32;53414:10;53393:32;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;53358:20;:32;53379:10;53358:32;;;;;;;;;;;;;;;:71;;;;53444:30;53454:10;53466:7;53444:9;:30::i;:::-;53489:54;53506:7;53515:10;53527:15;;;;;;;;;;;53489:16;:54::i;:::-;53293:262;53288:3;;;;;:::i;:::-;;;;53251:304;;;;52438:1124;:::o;33081:155::-;33176:52;33195:12;:10;:12::i;:::-;33209:8;33219;33176:18;:52::i;:::-;33081:155;;:::o;50846:34::-;;;;:::o;51138:35::-;;;;;;;;;;;;;:::o;34204:328::-;34379:41;34398:12;:10;:12::i;:::-;34412:7;34379:18;:41::i;:::-;34371:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34485:39;34499:4;34505:2;34509:7;34518:5;34485:13;:39::i;:::-;34204:328;;;;:::o;50758:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52058:372::-;52131:13;52165:17;52173:8;52165:7;:17::i;:::-;52157:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;52247:28;52278:10;:8;:10::i;:::-;52247:41;;52337:1;52312:14;52306:28;:32;:116;;;;;;;;;;;;;;;;;52365:14;52381:19;:8;:17;:19::i;:::-;52402:13;52348:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52306:116;52299:123;;;52058:372;;;:::o;55288:127::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55402:5:::1;55368:22;:31;55391:7;55368:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;55288:127:::0;:::o;50887:30::-;;;;:::o;33307:164::-;33404:4;33428:18;:25;33447:5;33428:25;;;;;;;;;;;;;;;:35;33454:8;33428:35;;;;;;;;;;;;;;;;;;;;;;;;;33421:42;;33307:164;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;::::0;5069:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;44409:224::-;44511:4;44550:35;44535:50;;;:11;:50;;;;:90;;;;44589:36;44613:11;44589:23;:36::i;:::-;44535:90;44528:97;;44409:224;;;:::o;19311:215::-;19413:4;19452:26;19437:41;;;:11;:41;;;;:81;;;;19482:36;19506:11;19482:23;:36::i;:::-;19437:81;19430:88;;19311:215;;;:::o;36042:127::-;36107:4;36159:1;36131:30;;:7;:16;36139:7;36131:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36124:37;;36042:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;40188:174::-;40290:2;40263:15;:24;40279:7;40263:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40346:7;40342:2;40308:46;;40317:23;40332:7;40317:14;:23::i;:::-;40308:46;;;;;;;;;;;;40188:174;;:::o;37026:110::-;37102:26;37112:2;37116:7;37102:26;;;;;;;;;;;;:9;:26::i;:::-;37026:110;;:::o;21500:390::-;21668:17;:15;:17::i;:::-;21652:33;;:12;:33;;;;21644:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;21771:1;21751:22;;:8;:22;;;21743:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21847:35;;;;;;;;21859:8;21847:35;;;;;;21869:12;21847:35;;;;;21818:17;:26;21836:7;21818:26;;;;;;;;;;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21500:390;;;:::o;36336:348::-;36429:4;36454:16;36462:7;36454;:16::i;:::-;36446:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36530:13;36546:23;36561:7;36546:14;:23::i;:::-;36530:39;;36599:5;36588:16;;:7;:16;;;:51;;;;36632:7;36608:31;;:20;36620:7;36608:11;:20::i;:::-;:31;;;36588:51;:87;;;;36643:32;36660:5;36667:7;36643:16;:32::i;:::-;36588:87;36580:96;;;36336:348;;;;:::o;39445:625::-;39604:4;39577:31;;:23;39592:7;39577:14;:23::i;:::-;:31;;;39569:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39683:1;39669:16;;:2;:16;;;39661:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39739:39;39760:4;39766:2;39770:7;39739:20;:39::i;:::-;39843:29;39860:1;39864:7;39843:8;:29::i;:::-;39904:1;39885:9;:15;39895:4;39885:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39933:1;39916:9;:13;39926:2;39916:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39964:2;39945:7;:16;39953:7;39945:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40003:7;39999:2;39984:27;;39993:4;39984:27;;;;;;;;;;;;40024:38;40044:4;40050:2;40054:7;40024:19;:38::i;:::-;39445:625;;;:::o;20305:97::-;20363:6;20389:5;20382:12;;20305:97;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;40504:315::-;40659:8;40650:17;;:5;:17;;;40642:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40746:8;40708:18;:25;40727:5;40708:25;;;;;;;;;;;;;;;:35;40734:8;40708:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40792:8;40770:41;;40785:5;40770:41;;;40802:8;40770:41;;;;;;:::i;:::-;;;;;;;;40504:315;;;:::o;35414:::-;35571:28;35581:4;35587:2;35591:7;35571:9;:28::i;:::-;35618:48;35641:4;35647:2;35651:7;35660:5;35618:22;:48::i;:::-;35610:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35414:315;;;;:::o;51942:108::-;52002:13;52035:7;52028:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51942:108;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;30284:305::-;30386:4;30438:25;30423:40;;;:11;:40;;;;:105;;;;30495:33;30480:48;;;:11;:48;;;;30423:105;:158;;;;30545:36;30569:11;30545:23;:36::i;:::-;30423:158;30403:178;;30284:305;;;:::o;37363:321::-;37493:18;37499:2;37503:7;37493:5;:18::i;:::-;37544:54;37575:1;37579:2;37583:7;37592:5;37544:22;:54::i;:::-;37522:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37363:321;;;:::o;46085:589::-;46229:45;46256:4;46262:2;46266:7;46229:26;:45::i;:::-;46307:1;46291:18;;:4;:18;;;46287:187;;46326:40;46358:7;46326:31;:40::i;:::-;46287:187;;;46396:2;46388:10;;:4;:10;;;46384:90;;46415:47;46448:4;46454:7;46415:32;:47::i;:::-;46384:90;46287:187;46502:1;46488:16;;:2;:16;;;46484:183;;46521:45;46558:7;46521:36;:45::i;:::-;46484:183;;;46594:4;46588:10;;:2;:10;;;46584:83;;46615:40;46643:2;46647:7;46615:27;:40::i;:::-;46584:83;46484:183;46085:589;;;:::o;43266:125::-;;;;:::o;41384:799::-;41539:4;41560:15;:2;:13;;;:15::i;:::-;41556:620;;;41612:2;41596:36;;;41633:12;:10;:12::i;:::-;41647:4;41653:7;41662:5;41596:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41592:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41855:1;41838:6;:13;:18;41834:272;;41881:60;;;;;;;;;;:::i;:::-;;;;;;;;41834:272;42056:6;42050:13;42041:6;42037:2;42033:15;42026:38;41592:529;41729:41;;;41719:51;;;:6;:51;;;;41712:58;;;;;41556:620;42160:4;42153:11;;41384:799;;;;;;;:::o;17761:157::-;17846:4;17885:25;17870:40;;;:11;:40;;;;17863:47;;17761:157;;;:::o;38020:439::-;38114:1;38100:16;;:2;:16;;;38092:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38173:16;38181:7;38173;:16::i;:::-;38172:17;38164:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38235:45;38264:1;38268:2;38272:7;38235:20;:45::i;:::-;38310:1;38293:9;:13;38303:2;38293:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38341:2;38322:7;:16;38330:7;38322:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38386:7;38382:2;38361:33;;38378:1;38361:33;;;;;;;;;;;;38407:44;38435:1;38439:2;38443:7;38407:19;:44::i;:::-;38020:439;;:::o;42755:126::-;;;;:::o;47397:164::-;47501:10;:17;;;;47474:15;:24;47490:7;47474:24;;;;;;;;;;;:44;;;;47529:10;47545:7;47529:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47397:164;:::o;48188:988::-;48454:22;48504:1;48479:22;48496:4;48479:16;:22::i;:::-;:26;;;;:::i;:::-;48454:51;;48516:18;48537:17;:26;48555:7;48537:26;;;;;;;;;;;;48516:47;;48684:14;48670:10;:28;48666:328;;48715:19;48737:12;:18;48750:4;48737:18;;;;;;;;;;;;;;;:34;48756:14;48737:34;;;;;;;;;;;;48715:56;;48821:11;48788:12;:18;48801:4;48788:18;;;;;;;;;;;;;;;:30;48807:10;48788:30;;;;;;;;;;;:44;;;;48938:10;48905:17;:30;48923:11;48905:30;;;;;;;;;;;:43;;;;48700:294;48666:328;49090:17;:26;49108:7;49090:26;;;;;;;;;;;49083:33;;;49134:12;:18;49147:4;49134:18;;;;;;;;;;;;;;;:34;49153:14;49134:34;;;;;;;;;;;49127:41;;;48269:907;;48188:988;;:::o;49471:1079::-;49724:22;49769:1;49749:10;:17;;;;:21;;;;:::i;:::-;49724:46;;49781:18;49802:15;:24;49818:7;49802:24;;;;;;;;;;;;49781:45;;50153:19;50175:10;50186:14;50175:26;;;;;;;;:::i;:::-;;;;;;;;;;50153:48;;50239:11;50214:10;50225;50214:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;50350:10;50319:15;:28;50335:11;50319:28;;;;;;;;;;;:41;;;;50491:15;:24;50507:7;50491:24;;;;;;;;;;;50484:31;;;50526:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49542:1008;;;49471:1079;:::o;46975:221::-;47060:14;47077:20;47094:2;47077:16;:20::i;:::-;47060:37;;47135:7;47108:12;:16;47121:2;47108:16;;;;;;;;;;;;;;;:24;47125:6;47108:24;;;;;;;;;;;:34;;;;47182:6;47153:17;:26;47171:7;47153:26;;;;;;;;;;;:35;;;;47049:147;46975:221;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:149::-;1639:7;1679:66;1672:5;1668:78;1657:89;;1603:149;;;:::o;1758:120::-;1830:23;1847:5;1830:23;:::i;:::-;1823:5;1820:34;1810:62;;1868:1;1865;1858:12;1810:62;1758:120;:::o;1884:137::-;1929:5;1967:6;1954:20;1945:29;;1983:32;2009:5;1983:32;:::i;:::-;1884:137;;;;:::o;2027:327::-;2085:6;2134:2;2122:9;2113:7;2109:23;2105:32;2102:119;;;2140:79;;:::i;:::-;2102:119;2260:1;2285:52;2329:7;2320:6;2309:9;2305:22;2285:52;:::i;:::-;2275:62;;2231:116;2027:327;;;;:::o;2360:99::-;2412:6;2446:5;2440:12;2430:22;;2360:99;;;:::o;2465:169::-;2549:11;2583:6;2578:3;2571:19;2623:4;2618:3;2614:14;2599:29;;2465:169;;;;:::o;2640:307::-;2708:1;2718:113;2732:6;2729:1;2726:13;2718:113;;;2817:1;2812:3;2808:11;2802:18;2798:1;2793:3;2789:11;2782:39;2754:2;2751:1;2747:10;2742:15;;2718:113;;;2849:6;2846:1;2843:13;2840:101;;;2929:1;2920:6;2915:3;2911:16;2904:27;2840:101;2689:258;2640:307;;;:::o;2953:102::-;2994:6;3045:2;3041:7;3036:2;3029:5;3025:14;3021:28;3011:38;;2953:102;;;:::o;3061:364::-;3149:3;3177:39;3210:5;3177:39;:::i;:::-;3232:71;3296:6;3291:3;3232:71;:::i;:::-;3225:78;;3312:52;3357:6;3352:3;3345:4;3338:5;3334:16;3312:52;:::i;:::-;3389:29;3411:6;3389:29;:::i;:::-;3384:3;3380:39;3373:46;;3153:272;3061:364;;;;:::o;3431:313::-;3544:4;3582:2;3571:9;3567:18;3559:26;;3631:9;3625:4;3621:20;3617:1;3606:9;3602:17;3595:47;3659:78;3732:4;3723:6;3659:78;:::i;:::-;3651:86;;3431:313;;;;:::o;3750:77::-;3787:7;3816:5;3805:16;;3750:77;;;:::o;3833:122::-;3906:24;3924:5;3906:24;:::i;:::-;3899:5;3896:35;3886:63;;3945:1;3942;3935:12;3886:63;3833:122;:::o;3961:139::-;4007:5;4045:6;4032:20;4023:29;;4061:33;4088:5;4061:33;:::i;:::-;3961:139;;;;:::o;4106:329::-;4165:6;4214:2;4202:9;4193:7;4189:23;4185:32;4182:119;;;4220:79;;:::i;:::-;4182:119;4340:1;4365:53;4410:7;4401:6;4390:9;4386:22;4365:53;:::i;:::-;4355:63;;4311:117;4106:329;;;;:::o;4441:118::-;4528:24;4546:5;4528:24;:::i;:::-;4523:3;4516:37;4441:118;;:::o;4565:222::-;4658:4;4696:2;4685:9;4681:18;4673:26;;4709:71;4777:1;4766:9;4762:17;4753:6;4709:71;:::i;:::-;4565:222;;;;:::o;4793:474::-;4861:6;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;4793:474;;;;;:::o;5273:118::-;5360:24;5378:5;5360:24;:::i;:::-;5355:3;5348:37;5273:118;;:::o;5397:222::-;5490:4;5528:2;5517:9;5513:18;5505:26;;5541:71;5609:1;5598:9;5594:17;5585:6;5541:71;:::i;:::-;5397:222;;;;:::o;5625:619::-;5702:6;5710;5718;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5864:117;6020:2;6046:53;6091:7;6082:6;6071:9;6067:22;6046:53;:::i;:::-;6036:63;;5991:118;6148:2;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6119:118;5625:619;;;;;:::o;6250:474::-;6318:6;6326;6375:2;6363:9;6354:7;6350:23;6346:32;6343:119;;;6381:79;;:::i;:::-;6343:119;6501:1;6526:53;6571:7;6562:6;6551:9;6547:22;6526:53;:::i;:::-;6516:63;;6472:117;6628:2;6654:53;6699:7;6690:6;6679:9;6675:22;6654:53;:::i;:::-;6644:63;;6599:118;6250:474;;;;;:::o;6730:332::-;6851:4;6889:2;6878:9;6874:18;6866:26;;6902:71;6970:1;6959:9;6955:17;6946:6;6902:71;:::i;:::-;6983:72;7051:2;7040:9;7036:18;7027:6;6983:72;:::i;:::-;6730:332;;;;;:::o;7068:117::-;7177:1;7174;7167:12;7191:180;7239:77;7236:1;7229:88;7336:4;7333:1;7326:15;7360:4;7357:1;7350:15;7377:281;7460:27;7482:4;7460:27;:::i;:::-;7452:6;7448:40;7590:6;7578:10;7575:22;7554:18;7542:10;7539:34;7536:62;7533:88;;;7601:18;;:::i;:::-;7533:88;7641:10;7637:2;7630:22;7420:238;7377:281;;:::o;7664:129::-;7698:6;7725:20;;:::i;:::-;7715:30;;7754:33;7782:4;7774:6;7754:33;:::i;:::-;7664:129;;;:::o;7799:311::-;7876:4;7966:18;7958:6;7955:30;7952:56;;;7988:18;;:::i;:::-;7952:56;8038:4;8030:6;8026:17;8018:25;;8098:4;8092;8088:15;8080:23;;7799:311;;;:::o;8116:117::-;8225:1;8222;8215:12;8256:710;8352:5;8377:81;8393:64;8450:6;8393:64;:::i;:::-;8377:81;:::i;:::-;8368:90;;8478:5;8507:6;8500:5;8493:21;8541:4;8534:5;8530:16;8523:23;;8594:4;8586:6;8582:17;8574:6;8570:30;8623:3;8615:6;8612:15;8609:122;;;8642:79;;:::i;:::-;8609:122;8757:6;8740:220;8774:6;8769:3;8766:15;8740:220;;;8849:3;8878:37;8911:3;8899:10;8878:37;:::i;:::-;8873:3;8866:50;8945:4;8940:3;8936:14;8929:21;;8816:144;8800:4;8795:3;8791:14;8784:21;;8740:220;;;8744:21;8358:608;;8256:710;;;;;:::o;8989:370::-;9060:5;9109:3;9102:4;9094:6;9090:17;9086:27;9076:122;;9117:79;;:::i;:::-;9076:122;9234:6;9221:20;9259:94;9349:3;9341:6;9334:4;9326:6;9322:17;9259:94;:::i;:::-;9250:103;;9066:293;8989:370;;;;:::o;9365:539::-;9449:6;9498:2;9486:9;9477:7;9473:23;9469:32;9466:119;;;9504:79;;:::i;:::-;9466:119;9652:1;9641:9;9637:17;9624:31;9682:18;9674:6;9671:30;9668:117;;;9704:79;;:::i;:::-;9668:117;9809:78;9879:7;9870:6;9859:9;9855:22;9809:78;:::i;:::-;9799:88;;9595:302;9365:539;;;;:::o;9910:117::-;10019:1;10016;10009:12;10033:308;10095:4;10185:18;10177:6;10174:30;10171:56;;;10207:18;;:::i;:::-;10171:56;10245:29;10267:6;10245:29;:::i;:::-;10237:37;;10329:4;10323;10319:15;10311:23;;10033:308;;;:::o;10347:154::-;10431:6;10426:3;10421;10408:30;10493:1;10484:6;10479:3;10475:16;10468:27;10347:154;;;:::o;10507:412::-;10585:5;10610:66;10626:49;10668:6;10626:49;:::i;:::-;10610:66;:::i;:::-;10601:75;;10699:6;10692:5;10685:21;10737:4;10730:5;10726:16;10775:3;10766:6;10761:3;10757:16;10754:25;10751:112;;;10782:79;;:::i;:::-;10751:112;10872:41;10906:6;10901:3;10896;10872:41;:::i;:::-;10591:328;10507:412;;;;;:::o;10939:340::-;10995:5;11044:3;11037:4;11029:6;11025:17;11021:27;11011:122;;11052:79;;:::i;:::-;11011:122;11169:6;11156:20;11194:79;11269:3;11261:6;11254:4;11246:6;11242:17;11194:79;:::i;:::-;11185:88;;11001:278;10939:340;;;;:::o;11285:509::-;11354:6;11403:2;11391:9;11382:7;11378:23;11374:32;11371:119;;;11409:79;;:::i;:::-;11371:119;11557:1;11546:9;11542:17;11529:31;11587:18;11579:6;11576:30;11573:117;;;11609:79;;:::i;:::-;11573:117;11714:63;11769:7;11760:6;11749:9;11745:22;11714:63;:::i;:::-;11704:73;;11500:287;11285:509;;;;:::o;11800:474::-;11868:6;11876;11925:2;11913:9;11904:7;11900:23;11896:32;11893:119;;;11931:79;;:::i;:::-;11893:119;12051:1;12076:53;12121:7;12112:6;12101:9;12097:22;12076:53;:::i;:::-;12066:63;;12022:117;12178:2;12204:53;12249:7;12240:6;12229:9;12225:22;12204:53;:::i;:::-;12194:63;;12149:118;11800:474;;;;;:::o;12280:116::-;12350:21;12365:5;12350:21;:::i;:::-;12343:5;12340:32;12330:60;;12386:1;12383;12376:12;12330:60;12280:116;:::o;12402:133::-;12445:5;12483:6;12470:20;12461:29;;12499:30;12523:5;12499:30;:::i;:::-;12402:133;;;;:::o;12541:468::-;12606:6;12614;12663:2;12651:9;12642:7;12638:23;12634:32;12631:119;;;12669:79;;:::i;:::-;12631:119;12789:1;12814:53;12859:7;12850:6;12839:9;12835:22;12814:53;:::i;:::-;12804:63;;12760:117;12916:2;12942:50;12984:7;12975:6;12964:9;12960:22;12942:50;:::i;:::-;12932:60;;12887:115;12541:468;;;;;:::o;13015:109::-;13051:7;13091:26;13084:5;13080:38;13069:49;;13015:109;;;:::o;13130:115::-;13215:23;13232:5;13215:23;:::i;:::-;13210:3;13203:36;13130:115;;:::o;13251:218::-;13342:4;13380:2;13369:9;13365:18;13357:26;;13393:69;13459:1;13448:9;13444:17;13435:6;13393:69;:::i;:::-;13251:218;;;;:::o;13475:307::-;13536:4;13626:18;13618:6;13615:30;13612:56;;;13648:18;;:::i;:::-;13612:56;13686:29;13708:6;13686:29;:::i;:::-;13678:37;;13770:4;13764;13760:15;13752:23;;13475:307;;;:::o;13788:410::-;13865:5;13890:65;13906:48;13947:6;13906:48;:::i;:::-;13890:65;:::i;:::-;13881:74;;13978:6;13971:5;13964:21;14016:4;14009:5;14005:16;14054:3;14045:6;14040:3;14036:16;14033:25;14030:112;;;14061:79;;:::i;:::-;14030:112;14151:41;14185:6;14180:3;14175;14151:41;:::i;:::-;13871:327;13788:410;;;;;:::o;14217:338::-;14272:5;14321:3;14314:4;14306:6;14302:17;14298:27;14288:122;;14329:79;;:::i;:::-;14288:122;14446:6;14433:20;14471:78;14545:3;14537:6;14530:4;14522:6;14518:17;14471:78;:::i;:::-;14462:87;;14278:277;14217:338;;;;:::o;14561:943::-;14656:6;14664;14672;14680;14729:3;14717:9;14708:7;14704:23;14700:33;14697:120;;;14736:79;;:::i;:::-;14697:120;14856:1;14881:53;14926:7;14917:6;14906:9;14902:22;14881:53;:::i;:::-;14871:63;;14827:117;14983:2;15009:53;15054:7;15045:6;15034:9;15030:22;15009:53;:::i;:::-;14999:63;;14954:118;15111:2;15137:53;15182:7;15173:6;15162:9;15158:22;15137:53;:::i;:::-;15127:63;;15082:118;15267:2;15256:9;15252:18;15239:32;15298:18;15290:6;15287:30;15284:117;;;15320:79;;:::i;:::-;15284:117;15425:62;15479:7;15470:6;15459:9;15455:22;15425:62;:::i;:::-;15415:72;;15210:287;14561:943;;;;;;;:::o;15510:474::-;15578:6;15586;15635:2;15623:9;15614:7;15610:23;15606:32;15603:119;;;15641:79;;:::i;:::-;15603:119;15761:1;15786:53;15831:7;15822:6;15811:9;15807:22;15786:53;:::i;:::-;15776:63;;15732:117;15888:2;15914:53;15959:7;15950:6;15939:9;15935:22;15914:53;:::i;:::-;15904:63;;15859:118;15510:474;;;;;:::o;15990:180::-;16038:77;16035:1;16028:88;16135:4;16132:1;16125:15;16159:4;16156:1;16149:15;16176:320;16220:6;16257:1;16251:4;16247:12;16237:22;;16304:1;16298:4;16294:12;16325:18;16315:81;;16381:4;16373:6;16369:17;16359:27;;16315:81;16443:2;16435:6;16432:14;16412:18;16409:38;16406:84;;16462:18;;:::i;:::-;16406:84;16227:269;16176:320;;;:::o;16502:231::-;16642:34;16638:1;16630:6;16626:14;16619:58;16711:14;16706:2;16698:6;16694:15;16687:39;16502:231;:::o;16739:366::-;16881:3;16902:67;16966:2;16961:3;16902:67;:::i;:::-;16895:74;;16978:93;17067:3;16978:93;:::i;:::-;17096:2;17091:3;17087:12;17080:19;;16739:366;;;:::o;17111:419::-;17277:4;17315:2;17304:9;17300:18;17292:26;;17364:9;17358:4;17354:20;17350:1;17339:9;17335:17;17328:47;17392:131;17518:4;17392:131;:::i;:::-;17384:139;;17111:419;;;:::o;17536:182::-;17676:34;17672:1;17664:6;17660:14;17653:58;17536:182;:::o;17724:366::-;17866:3;17887:67;17951:2;17946:3;17887:67;:::i;:::-;17880:74;;17963:93;18052:3;17963:93;:::i;:::-;18081:2;18076:3;18072:12;18065:19;;17724:366;;;:::o;18096:419::-;18262:4;18300:2;18289:9;18285:18;18277:26;;18349:9;18343:4;18339:20;18335:1;18324:9;18320:17;18313:47;18377:131;18503:4;18377:131;:::i;:::-;18369:139;;18096:419;;;:::o;18521:220::-;18661:34;18657:1;18649:6;18645:14;18638:58;18730:3;18725:2;18717:6;18713:15;18706:28;18521:220;:::o;18747:366::-;18889:3;18910:67;18974:2;18969:3;18910:67;:::i;:::-;18903:74;;18986:93;19075:3;18986:93;:::i;:::-;19104:2;19099:3;19095:12;19088:19;;18747:366;;;:::o;19119:419::-;19285:4;19323:2;19312:9;19308:18;19300:26;;19372:9;19366:4;19362:20;19358:1;19347:9;19343:17;19336:47;19400:131;19526:4;19400:131;:::i;:::-;19392:139;;19119:419;;;:::o;19544:243::-;19684:34;19680:1;19672:6;19668:14;19661:58;19753:26;19748:2;19740:6;19736:15;19729:51;19544:243;:::o;19793:366::-;19935:3;19956:67;20020:2;20015:3;19956:67;:::i;:::-;19949:74;;20032:93;20121:3;20032:93;:::i;:::-;20150:2;20145:3;20141:12;20134:19;;19793:366;;;:::o;20165:419::-;20331:4;20369:2;20358:9;20354:18;20346:26;;20418:9;20412:4;20408:20;20404:1;20393:9;20389:17;20382:47;20446:131;20572:4;20446:131;:::i;:::-;20438:139;;20165:419;;;:::o;20590:180::-;20730:32;20726:1;20718:6;20714:14;20707:56;20590:180;:::o;20776:366::-;20918:3;20939:67;21003:2;20998:3;20939:67;:::i;:::-;20932:74;;21015:93;21104:3;21015:93;:::i;:::-;21133:2;21128:3;21124:12;21117:19;;20776:366;;;:::o;21148:419::-;21314:4;21352:2;21341:9;21337:18;21329:26;;21401:9;21395:4;21391:20;21387:1;21376:9;21372:17;21365:47;21429:131;21555:4;21429:131;:::i;:::-;21421:139;;21148:419;;;:::o;21573:221::-;21713:34;21709:1;21701:6;21697:14;21690:58;21782:4;21777:2;21769:6;21765:15;21758:29;21573:221;:::o;21800:366::-;21942:3;21963:67;22027:2;22022:3;21963:67;:::i;:::-;21956:74;;22039:93;22128:3;22039:93;:::i;:::-;22157:2;22152:3;22148:12;22141:19;;21800:366;;;:::o;22172:419::-;22338:4;22376:2;22365:9;22361:18;22353:26;;22425:9;22419:4;22415:20;22411:1;22400:9;22396:17;22389:47;22453:131;22579:4;22453:131;:::i;:::-;22445:139;;22172:419;;;:::o;22597:180::-;22645:77;22642:1;22635:88;22742:4;22739:1;22732:15;22766:4;22763:1;22756:15;22783:305;22823:3;22842:20;22860:1;22842:20;:::i;:::-;22837:25;;22876:20;22894:1;22876:20;:::i;:::-;22871:25;;23030:1;22962:66;22958:74;22955:1;22952:81;22949:107;;;23036:18;;:::i;:::-;22949:107;23080:1;23077;23073:9;23066:16;;22783:305;;;;:::o;23094:191::-;23134:4;23154:20;23172:1;23154:20;:::i;:::-;23149:25;;23188:20;23206:1;23188:20;:::i;:::-;23183:25;;23227:1;23224;23221:8;23218:34;;;23232:18;;:::i;:::-;23218:34;23277:1;23274;23270:9;23262:17;;23094:191;;;;:::o;23291:233::-;23330:3;23353:24;23371:5;23353:24;:::i;:::-;23344:33;;23399:66;23392:5;23389:77;23386:103;;23469:18;;:::i;:::-;23386:103;23516:1;23509:5;23505:13;23498:20;;23291:233;;;:::o;23530:236::-;23670:34;23666:1;23658:6;23654:14;23647:58;23739:19;23734:2;23726:6;23722:15;23715:44;23530:236;:::o;23772:366::-;23914:3;23935:67;23999:2;23994:3;23935:67;:::i;:::-;23928:74;;24011:93;24100:3;24011:93;:::i;:::-;24129:2;24124:3;24120:12;24113:19;;23772:366;;;:::o;24144:419::-;24310:4;24348:2;24337:9;24333:18;24325:26;;24397:9;24391:4;24387:20;24383:1;24372:9;24368:17;24361:47;24425:131;24551:4;24425:131;:::i;:::-;24417:139;;24144:419;;;:::o;24569:348::-;24609:7;24632:20;24650:1;24632:20;:::i;:::-;24627:25;;24666:20;24684:1;24666:20;:::i;:::-;24661:25;;24854:1;24786:66;24782:74;24779:1;24776:81;24771:1;24764:9;24757:17;24753:105;24750:131;;;24861:18;;:::i;:::-;24750:131;24909:1;24906;24902:9;24891:20;;24569:348;;;;:::o;24923:180::-;24971:77;24968:1;24961:88;25068:4;25065:1;25058:15;25092:4;25089:1;25082:15;25109:185;25149:1;25166:20;25184:1;25166:20;:::i;:::-;25161:25;;25200:20;25218:1;25200:20;:::i;:::-;25195:25;;25239:1;25229:35;;25244:18;;:::i;:::-;25229:35;25286:1;25283;25279:9;25274:14;;25109:185;;;;:::o;25300:230::-;25440:34;25436:1;25428:6;25424:14;25417:58;25509:13;25504:2;25496:6;25492:15;25485:38;25300:230;:::o;25536:366::-;25678:3;25699:67;25763:2;25758:3;25699:67;:::i;:::-;25692:74;;25775:93;25864:3;25775:93;:::i;:::-;25893:2;25888:3;25884:12;25877:19;;25536:366;;;:::o;25908:419::-;26074:4;26112:2;26101:9;26097:18;26089:26;;26161:9;26155:4;26151:20;26147:1;26136:9;26132:17;26125:47;26189:131;26315:4;26189:131;:::i;:::-;26181:139;;25908:419;;;:::o;26333:180::-;26381:77;26378:1;26371:88;26478:4;26475:1;26468:15;26502:4;26499:1;26492:15;26519:147;26620:11;26657:3;26642:18;;26519:147;;;;:::o;26672:114::-;;:::o;26792:398::-;26951:3;26972:83;27053:1;27048:3;26972:83;:::i;:::-;26965:90;;27064:93;27153:3;27064:93;:::i;:::-;27182:1;27177:3;27173:11;27166:18;;26792:398;;;:::o;27196:379::-;27380:3;27402:147;27545:3;27402:147;:::i;:::-;27395:154;;27566:3;27559:10;;27196:379;;;:::o;27581:231::-;27721:34;27717:1;27709:6;27705:14;27698:58;27790:14;27785:2;27777:6;27773:15;27766:39;27581:231;:::o;27818:366::-;27960:3;27981:67;28045:2;28040:3;27981:67;:::i;:::-;27974:74;;28057:93;28146:3;28057:93;:::i;:::-;28175:2;28170:3;28166:12;28159:19;;27818:366;;;:::o;28190:419::-;28356:4;28394:2;28383:9;28379:18;28371:26;;28443:9;28437:4;28433:20;28429:1;28418:9;28414:17;28407:47;28471:131;28597:4;28471:131;:::i;:::-;28463:139;;28190:419;;;:::o;28615:228::-;28755:34;28751:1;28743:6;28739:14;28732:58;28824:11;28819:2;28811:6;28807:15;28800:36;28615:228;:::o;28849:366::-;28991:3;29012:67;29076:2;29071:3;29012:67;:::i;:::-;29005:74;;29088:93;29177:3;29088:93;:::i;:::-;29206:2;29201:3;29197:12;29190:19;;28849:366;;;:::o;29221:419::-;29387:4;29425:2;29414:9;29410:18;29402:26;;29474:9;29468:4;29464:20;29460:1;29449:9;29445:17;29438:47;29502:131;29628:4;29502:131;:::i;:::-;29494:139;;29221:419;;;:::o;29646:229::-;29786:34;29782:1;29774:6;29770:14;29763:58;29855:12;29850:2;29842:6;29838:15;29831:37;29646:229;:::o;29881:366::-;30023:3;30044:67;30108:2;30103:3;30044:67;:::i;:::-;30037:74;;30120:93;30209:3;30120:93;:::i;:::-;30238:2;30233:3;30229:12;30222:19;;29881:366;;;:::o;30253:419::-;30419:4;30457:2;30446:9;30442:18;30434:26;;30506:9;30500:4;30496:20;30492:1;30481:9;30477:17;30470:47;30534:131;30660:4;30534:131;:::i;:::-;30526:139;;30253:419;;;:::o;30678:226::-;30818:34;30814:1;30806:6;30802:14;30795:58;30887:9;30882:2;30874:6;30870:15;30863:34;30678:226;:::o;30910:366::-;31052:3;31073:67;31137:2;31132:3;31073:67;:::i;:::-;31066:74;;31149:93;31238:3;31149:93;:::i;:::-;31267:2;31262:3;31258:12;31251:19;;30910:366;;;:::o;31282:419::-;31448:4;31486:2;31475:9;31471:18;31463:26;;31535:9;31529:4;31525:20;31521:1;31510:9;31506:17;31499:47;31563:131;31689:4;31563:131;:::i;:::-;31555:139;;31282:419;;;:::o;31707:181::-;31847:33;31843:1;31835:6;31831:14;31824:57;31707:181;:::o;31894:366::-;32036:3;32057:67;32121:2;32116:3;32057:67;:::i;:::-;32050:74;;32133:93;32222:3;32133:93;:::i;:::-;32251:2;32246:3;32242:12;32235:19;;31894:366;;;:::o;32266:419::-;32432:4;32470:2;32459:9;32455:18;32447:26;;32519:9;32513:4;32509:20;32505:1;32494:9;32490:17;32483:47;32547:131;32673:4;32547:131;:::i;:::-;32539:139;;32266:419;;;:::o;32691:235::-;32831:34;32827:1;32819:6;32815:14;32808:58;32900:18;32895:2;32887:6;32883:15;32876:43;32691:235;:::o;32932:366::-;33074:3;33095:67;33159:2;33154:3;33095:67;:::i;:::-;33088:74;;33171:93;33260:3;33171:93;:::i;:::-;33289:2;33284:3;33280:12;33273:19;;32932:366;;;:::o;33304:419::-;33470:4;33508:2;33497:9;33493:18;33485:26;;33557:9;33551:4;33547:20;33543:1;33532:9;33528:17;33521:47;33585:131;33711:4;33585:131;:::i;:::-;33577:139;;33304:419;;;:::o;33729:170::-;33869:22;33865:1;33857:6;33853:14;33846:46;33729:170;:::o;33905:366::-;34047:3;34068:67;34132:2;34127:3;34068:67;:::i;:::-;34061:74;;34144:93;34233:3;34144:93;:::i;:::-;34262:2;34257:3;34253:12;34246:19;;33905:366;;;:::o;34277:419::-;34443:4;34481:2;34470:9;34466:18;34458:26;;34530:9;34524:4;34520:20;34516:1;34505:9;34501:17;34494:47;34558:131;34684:4;34558:131;:::i;:::-;34550:139;;34277:419;;;:::o;34702:180::-;34842:32;34838:1;34830:6;34826:14;34819:56;34702:180;:::o;34888:366::-;35030:3;35051:67;35115:2;35110:3;35051:67;:::i;:::-;35044:74;;35127:93;35216:3;35127:93;:::i;:::-;35245:2;35240:3;35236:12;35229:19;;34888:366;;;:::o;35260:419::-;35426:4;35464:2;35453:9;35449:18;35441:26;;35513:9;35507:4;35503:20;35499:1;35488:9;35484:17;35477:47;35541:131;35667:4;35541:131;:::i;:::-;35533:139;;35260:419;;;:::o;35685:221::-;35825:34;35821:1;35813:6;35809:14;35802:58;35894:4;35889:2;35881:6;35877:15;35870:29;35685:221;:::o;35912:366::-;36054:3;36075:67;36139:2;36134:3;36075:67;:::i;:::-;36068:74;;36151:93;36240:3;36151:93;:::i;:::-;36269:2;36264:3;36260:12;36253:19;;35912:366;;;:::o;36284:419::-;36450:4;36488:2;36477:9;36473:18;36465:26;;36537:9;36531:4;36527:20;36523:1;36512:9;36508:17;36501:47;36565:131;36691:4;36565:131;:::i;:::-;36557:139;;36284:419;;;:::o;36709:250::-;36849:34;36845:1;36837:6;36833:14;36826:58;36918:33;36913:2;36905:6;36901:15;36894:58;36709:250;:::o;36965:366::-;37107:3;37128:67;37192:2;37187:3;37128:67;:::i;:::-;37121:74;;37204:93;37293:3;37204:93;:::i;:::-;37322:2;37317:3;37313:12;37306:19;;36965:366;;;:::o;37337:419::-;37503:4;37541:2;37530:9;37526:18;37518:26;;37590:9;37584:4;37580:20;37576:1;37565:9;37561:17;37554:47;37618:131;37744:4;37618:131;:::i;:::-;37610:139;;37337:419;;;:::o;37762:234::-;37902:34;37898:1;37890:6;37886:14;37879:58;37971:17;37966:2;37958:6;37954:15;37947:42;37762:234;:::o;38002:366::-;38144:3;38165:67;38229:2;38224:3;38165:67;:::i;:::-;38158:74;;38241:93;38330:3;38241:93;:::i;:::-;38359:2;38354:3;38350:12;38343:19;;38002:366;;;:::o;38374:419::-;38540:4;38578:2;38567:9;38563:18;38555:26;;38627:9;38621:4;38617:20;38613:1;38602:9;38598:17;38591:47;38655:131;38781:4;38655:131;:::i;:::-;38647:139;;38374:419;;;:::o;38799:148::-;38901:11;38938:3;38923:18;;38799:148;;;;:::o;38953:377::-;39059:3;39087:39;39120:5;39087:39;:::i;:::-;39142:89;39224:6;39219:3;39142:89;:::i;:::-;39135:96;;39240:52;39285:6;39280:3;39273:4;39266:5;39262:16;39240:52;:::i;:::-;39317:6;39312:3;39308:16;39301:23;;39063:267;38953:377;;;;:::o;39336:141::-;39385:4;39408:3;39400:11;;39431:3;39428:1;39421:14;39465:4;39462:1;39452:18;39444:26;;39336:141;;;:::o;39507:845::-;39610:3;39647:5;39641:12;39676:36;39702:9;39676:36;:::i;:::-;39728:89;39810:6;39805:3;39728:89;:::i;:::-;39721:96;;39848:1;39837:9;39833:17;39864:1;39859:137;;;;40010:1;40005:341;;;;39826:520;;39859:137;39943:4;39939:9;39928;39924:25;39919:3;39912:38;39979:6;39974:3;39970:16;39963:23;;39859:137;;40005:341;40072:38;40104:5;40072:38;:::i;:::-;40132:1;40146:154;40160:6;40157:1;40154:13;40146:154;;;40234:7;40228:14;40224:1;40219:3;40215:11;40208:35;40284:1;40275:7;40271:15;40260:26;;40182:4;40179:1;40175:12;40170:17;;40146:154;;;40329:6;40324:3;40320:16;40313:23;;40012:334;;39826:520;;39614:738;;39507:845;;;;:::o;40358:589::-;40583:3;40605:95;40696:3;40687:6;40605:95;:::i;:::-;40598:102;;40717:95;40808:3;40799:6;40717:95;:::i;:::-;40710:102;;40829:92;40917:3;40908:6;40829:92;:::i;:::-;40822:99;;40938:3;40931:10;;40358:589;;;;;;:::o;40953:225::-;41093:34;41089:1;41081:6;41077:14;41070:58;41162:8;41157:2;41149:6;41145:15;41138:33;40953:225;:::o;41184:366::-;41326:3;41347:67;41411:2;41406:3;41347:67;:::i;:::-;41340:74;;41423:93;41512:3;41423:93;:::i;:::-;41541:2;41536:3;41532:12;41525:19;;41184:366;;;:::o;41556:419::-;41722:4;41760:2;41749:9;41745:18;41737:26;;41809:9;41803:4;41799:20;41795:1;41784:9;41780:17;41773:47;41837:131;41963:4;41837:131;:::i;:::-;41829:139;;41556:419;;;:::o;41981:229::-;42121:34;42117:1;42109:6;42105:14;42098:58;42190:12;42185:2;42177:6;42173:15;42166:37;41981:229;:::o;42216:366::-;42358:3;42379:67;42443:2;42438:3;42379:67;:::i;:::-;42372:74;;42455:93;42544:3;42455:93;:::i;:::-;42573:2;42568:3;42564:12;42557:19;;42216:366;;;:::o;42588:419::-;42754:4;42792:2;42781:9;42777:18;42769:26;;42841:9;42835:4;42831:20;42827:1;42816:9;42812:17;42805:47;42869:131;42995:4;42869:131;:::i;:::-;42861:139;;42588:419;;;:::o;43013:177::-;43153:29;43149:1;43141:6;43137:14;43130:53;43013:177;:::o;43196:366::-;43338:3;43359:67;43423:2;43418:3;43359:67;:::i;:::-;43352:74;;43435:93;43524:3;43435:93;:::i;:::-;43553:2;43548:3;43544:12;43537:19;;43196:366;;;:::o;43568:419::-;43734:4;43772:2;43761:9;43757:18;43749:26;;43821:9;43815:4;43811:20;43807:1;43796:9;43792:17;43785:47;43849:131;43975:4;43849:131;:::i;:::-;43841:139;;43568:419;;;:::o;43993:231::-;44133:34;44129:1;44121:6;44117:14;44110:58;44202:14;44197:2;44189:6;44185:15;44178:39;43993:231;:::o;44230:366::-;44372:3;44393:67;44457:2;44452:3;44393:67;:::i;:::-;44386:74;;44469:93;44558:3;44469:93;:::i;:::-;44587:2;44582:3;44578:12;44571:19;;44230:366;;;:::o;44602:419::-;44768:4;44806:2;44795:9;44791:18;44783:26;;44855:9;44849:4;44845:20;44841:1;44830:9;44826:17;44819:47;44883:131;45009:4;44883:131;:::i;:::-;44875:139;;44602:419;;;:::o;45027:224::-;45167:34;45163:1;45155:6;45151:14;45144:58;45236:7;45231:2;45223:6;45219:15;45212:32;45027:224;:::o;45257:366::-;45399:3;45420:67;45484:2;45479:3;45420:67;:::i;:::-;45413:74;;45496:93;45585:3;45496:93;:::i;:::-;45614:2;45609:3;45605:12;45598:19;;45257:366;;;:::o;45629:419::-;45795:4;45833:2;45822:9;45818:18;45810:26;;45882:9;45876:4;45872:20;45868:1;45857:9;45853:17;45846:47;45910:131;46036:4;45910:131;:::i;:::-;45902:139;;45629:419;;;:::o;46054:223::-;46194:34;46190:1;46182:6;46178:14;46171:58;46263:6;46258:2;46250:6;46246:15;46239:31;46054:223;:::o;46283:366::-;46425:3;46446:67;46510:2;46505:3;46446:67;:::i;:::-;46439:74;;46522:93;46611:3;46522:93;:::i;:::-;46640:2;46635:3;46631:12;46624:19;;46283:366;;;:::o;46655:419::-;46821:4;46859:2;46848:9;46844:18;46836:26;;46908:9;46902:4;46898:20;46894:1;46883:9;46879:17;46872:47;46936:131;47062:4;46936:131;:::i;:::-;46928:139;;46655:419;;;:::o;47080:175::-;47220:27;47216:1;47208:6;47204:14;47197:51;47080:175;:::o;47261:366::-;47403:3;47424:67;47488:2;47483:3;47424:67;:::i;:::-;47417:74;;47500:93;47589:3;47500:93;:::i;:::-;47618:2;47613:3;47609:12;47602:19;;47261:366;;;:::o;47633:419::-;47799:4;47837:2;47826:9;47822:18;47814:26;;47886:9;47880:4;47876:20;47872:1;47861:9;47857:17;47850:47;47914:131;48040:4;47914:131;:::i;:::-;47906:139;;47633:419;;;:::o;48058:237::-;48198:34;48194:1;48186:6;48182:14;48175:58;48267:20;48262:2;48254:6;48250:15;48243:45;48058:237;:::o;48301:366::-;48443:3;48464:67;48528:2;48523:3;48464:67;:::i;:::-;48457:74;;48540:93;48629:3;48540:93;:::i;:::-;48658:2;48653:3;48649:12;48642:19;;48301:366;;;:::o;48673:419::-;48839:4;48877:2;48866:9;48862:18;48854:26;;48926:9;48920:4;48916:20;48912:1;48901:9;48897:17;48890:47;48954:131;49080:4;48954:131;:::i;:::-;48946:139;;48673:419;;;:::o;49098:176::-;49130:1;49147:20;49165:1;49147:20;:::i;:::-;49142:25;;49181:20;49199:1;49181:20;:::i;:::-;49176:25;;49220:1;49210:35;;49225:18;;:::i;:::-;49210:35;49266:1;49263;49259:9;49254:14;;49098:176;;;;:::o;49280:98::-;49331:6;49365:5;49359:12;49349:22;;49280:98;;;:::o;49384:168::-;49467:11;49501:6;49496:3;49489:19;49541:4;49536:3;49532:14;49517:29;;49384:168;;;;:::o;49558:360::-;49644:3;49672:38;49704:5;49672:38;:::i;:::-;49726:70;49789:6;49784:3;49726:70;:::i;:::-;49719:77;;49805:52;49850:6;49845:3;49838:4;49831:5;49827:16;49805:52;:::i;:::-;49882:29;49904:6;49882:29;:::i;:::-;49877:3;49873:39;49866:46;;49648:270;49558:360;;;;:::o;49924:640::-;50119:4;50157:3;50146:9;50142:19;50134:27;;50171:71;50239:1;50228:9;50224:17;50215:6;50171:71;:::i;:::-;50252:72;50320:2;50309:9;50305:18;50296:6;50252:72;:::i;:::-;50334;50402:2;50391:9;50387:18;50378:6;50334:72;:::i;:::-;50453:9;50447:4;50443:20;50438:2;50427:9;50423:18;50416:48;50481:76;50552:4;50543:6;50481:76;:::i;:::-;50473:84;;49924:640;;;;;;;:::o;50570:141::-;50626:5;50657:6;50651:13;50642:22;;50673:32;50699:5;50673:32;:::i;:::-;50570:141;;;;:::o;50717:349::-;50786:6;50835:2;50823:9;50814:7;50810:23;50806:32;50803:119;;;50841:79;;:::i;:::-;50803:119;50961:1;50986:63;51041:7;51032:6;51021:9;51017:22;50986:63;:::i;:::-;50976:73;;50932:127;50717:349;;;;:::o;51072:182::-;51212:34;51208:1;51200:6;51196:14;51189:58;51072:182;:::o;51260:366::-;51402:3;51423:67;51487:2;51482:3;51423:67;:::i;:::-;51416:74;;51499:93;51588:3;51499:93;:::i;:::-;51617:2;51612:3;51608:12;51601:19;;51260:366;;;:::o;51632:419::-;51798:4;51836:2;51825:9;51821:18;51813:26;;51885:9;51879:4;51875:20;51871:1;51860:9;51856:17;51849:47;51913:131;52039:4;51913:131;:::i;:::-;51905:139;;51632:419;;;:::o;52057:178::-;52197:30;52193:1;52185:6;52181:14;52174:54;52057:178;:::o;52241:366::-;52383:3;52404:67;52468:2;52463:3;52404:67;:::i;:::-;52397:74;;52480:93;52569:3;52480:93;:::i;:::-;52598:2;52593:3;52589:12;52582:19;;52241:366;;;:::o;52613:419::-;52779:4;52817:2;52806:9;52802:18;52794:26;;52866:9;52860:4;52856:20;52852:1;52841:9;52837:17;52830:47;52894:131;53020:4;52894:131;:::i;:::-;52886:139;;52613:419;;;:::o;53038:180::-;53086:77;53083:1;53076:88;53183:4;53180:1;53173:15;53207:4;53204:1;53197:15
Swarm Source
ipfs://574d9c6cbd9f89cb9a1096027ff63e04a05278695195b1cb8860d7a8fb9aeca7
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.