Polygon Sponsored slots available. Book your slot here!
Contract Overview
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Modern_Mobsters
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-04-29 */ // File: @chainlink/contracts/src/v0.8/interfaces/KeeperCompatibleInterface.sol pragma solidity ^0.8.0; interface KeeperCompatibleInterface { /** * @notice method that is simulated by the keepers to see if any work actually * needs to be performed. This method does does not actually need to be * executable, and since it is only ever simulated it can consume lots of gas. * @dev To ensure that it is never called, you may want to add the * cannotExecute modifier from KeeperBase to your implementation of this * method. * @param checkData specified in the upkeep registration so it is always the * same for a registered upkeep. This can easily be broken down into specific * arguments using `abi.decode`, so multiple upkeeps can be registered on the * same contract and easily differentiated by the contract. * @return upkeepNeeded boolean to indicate whether the keeper should call * performUpkeep or not. * @return performData bytes that the keeper should call performUpkeep with, if * upkeep is needed. If you would like to encode data to decode later, try * `abi.encode`. */ function checkUpkeep(bytes calldata checkData) external returns (bool upkeepNeeded, bytes memory performData); /** * @notice method that is actually executed by the keepers, via the registry. * The data returned by the checkUpkeep simulation will be passed into * this method to actually be executed. * @dev The input to this method should not be trusted, and the caller of the * method should not even be restricted to any single registry. Anyone should * be able call it, and the input should be validated, there is no guarantee * that the data passed in is the performData returned from checkUpkeep. This * could happen due to malicious keepers, racing keepers, or simply a state * change while the performUpkeep transaction is waiting for confirmation. * Always validate the data passed in. * @param performData is the data which was passed back from the checkData * simulation. If it is encoded, it can easily be decoded into other types by * calling `abi.decode`. This data should not be trusted, and should be * validated against the contract's current state. */ function performUpkeep(bytes calldata performData) external; } // File: @chainlink/contracts/src/v0.8/KeeperBase.sol pragma solidity ^0.8.0; contract KeeperBase { error OnlySimulatedBackend(); /** * @notice method that allows it to be simulated via eth_call by checking that * the sender is the zero address. */ function preventExecution() internal view { if (tx.origin != address(0)) { revert OnlySimulatedBackend(); } } /** * @notice modifier that allows it to be simulated via eth_call by checking * that the sender is the zero address. */ modifier cannotExecute() { preventExecution(); _; } } // File: @chainlink/contracts/src/v0.8/KeeperCompatible.sol pragma solidity ^0.8.0; abstract contract KeeperCompatible is KeeperBase, KeeperCompatibleInterface {} // 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/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 (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/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/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must 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 Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/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/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // 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/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.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 overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits 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: @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: MM_Avatar_NFT.sol pragma solidity ^0.8.0; interface IUniswapV2Router { function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function WETH() external pure returns (address); } pragma solidity ^0.8.11; contract Modern_Mobsters is ERC721Enumerable, Ownable, IERC2981 { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 99 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 10; bool public paused = false; IERC20 public MMToken = IERC20(0xf2Eae7190bDEa2E18a0273bA2741473BB31FDf45); uint8 public ROYALTY_PERCENT = 5; address public uniswapV2Router = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; IERC721Enumerable public MMLogo = IERC721Enumerable(0x19d5f97C875Cdd733C0e2e035fD66C2305A40CD3); mapping(bytes32 => address) requestToSender; address[] public minters; bool public presale = true; mapping(address => bool) whitelist; uint256 minBalance = 10 * 10**18; /** * Use an interval in seconds and a timestamp to slow execution of Upkeep */ uint256 public interval = 3600; uint256 public lastTimeStamp = 100; function checkUpkeep(bytes calldata /* checkData */) external view returns (bool upkeepNeeded, bytes memory /* performData */) { if (address(this).balance <= minBalance) { //MMToken.balanceOf(address(this)) upkeepNeeded = false; } else { upkeepNeeded = ((block.timestamp - lastTimeStamp) > interval); } // We don't use the checkData in this example. The checkData is defined when the Upkeep was registered. } function performUpkeep(bytes calldata /* performData */) external { //We highly recommend revalidating the upkeep in the performUpkeep function require((block.timestamp - lastTimeStamp) > interval && address(this).balance > minBalance); lastTimeStamp = block.timestamp; distribute(); // We don't use the performData in this example. The performData is generated by the Keeper's call to your checkUpkeep function } constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address, uint256) { return(address(this), (salePrice * ROYALTY_PERCENT) / 100); } function distribute() internal { IUniswapV2Router Uniswap = IUniswapV2Router(uniswapV2Router); address[] memory path = new address[](2); path[0] = Uniswap.WETH(); path[1] = address(MMToken); uint[] memory amounts = Uniswap.swapExactETHForTokens{value: address(this).balance}(0, path, address(this), block.timestamp + 60); uint256 supply = MMLogo.totalSupply(); MMToken.transfer(owner(), (MMToken.balanceOf(address(this))/2)); uint256 rewardPerToken = MMToken.balanceOf(address(this))/supply; for (uint8 i = 1; i <= supply; i++) { address holder = MMLogo.ownerOf(i); MMToken.transfer(holder, rewardPerToken); } } function mint(uint256 _mintAmount) public payable { if(presale){ require(whitelist[msg.sender]); } uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount); } else { (bool os, ) = payable(owner()).call{value: cost * _mintAmount}(""); require(os); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); minters.push(msg.sender); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function publicSaleOn() external onlyOwner{ presale = false; } function addMultiWhitelist(address[] memory _addresses) external onlyOwner{ for(uint8 i = 0; i < _addresses.length; i++){ whitelist[_addresses[i]] = true; } } function removeMultiWhitelist(address[] memory _addresses) external onlyOwner{ for(uint8 i = 0; i < _addresses.length; i++){ whitelist[_addresses[i]] = false; } } function airdrop(address[] memory _addresses) external onlyOwner{ uint256 supply = totalSupply(); for(uint8 i = 0; i < _addresses.length; i++) { _safeMint(_addresses[i], supply + i); } } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setRoyalty(uint8 _royalty_percent) public onlyOwner { ROYALTY_PERCENT = _royalty_percent; } function setInterval(uint256 _interval) public onlyOwner { interval = _interval; //in seconds } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function acceptEther() public payable { // Some function which accepts ether } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MMLogo","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MMToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROYALTY_PERCENT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptEther","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addMultiWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"airdrop","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":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"checkUpkeep","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"lastTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"performUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"removeMultiWhitelist","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"setInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_royalty_percent","type":"uint8"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000418565b5068055de6a779bbac0000600d55612710600e55600a600f556000601060006101000a81548160ff02191690831515021790555073f2eae7190bdea2e18a0273ba2741473bb31fdf45601060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005601060156101000a81548160ff021916908360ff16021790555073a5e0829caced8ffdd4de3c43696c57f7d7a678ff601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507319d5f97c875cdd733c0e2e035fd66c2305a40cd3601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560006101000a81548160ff021916908315150217905550678ac7230489e80000601755610e106018556064601955348015620001df57600080fd5b5060405162005fdb38038062005fdb833981810160405281019062000205919062000665565b828281600090805190602001906200021f92919062000418565b5080600190805190602001906200023892919062000418565b5050506200025b6200024f6200027560201b60201c565b6200027d60201b60201c565b6200026c816200034360201b60201c565b50505062000805565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003536200027560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000379620003ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c9906200077f565b60405180910390fd5b80600b9080519060200190620003ea92919062000418565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200042690620007d0565b90600052602060002090601f0160209004810192826200044a576000855562000496565b82601f106200046557805160ff191683800117855562000496565b8280016001018555821562000496579182015b828111156200049557825182559160200191906001019062000478565b5b509050620004a59190620004a9565b5090565b5b80821115620004c4576000816000905550600101620004aa565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200053182620004e6565b810181811067ffffffffffffffff82111715620005535762000552620004f7565b5b80604052505050565b600062000568620004c8565b905062000576828262000526565b919050565b600067ffffffffffffffff821115620005995762000598620004f7565b5b620005a482620004e6565b9050602081019050919050565b60005b83811015620005d1578082015181840152602081019050620005b4565b83811115620005e1576000848401525b50505050565b6000620005fe620005f8846200057b565b6200055c565b9050828152602081018484840111156200061d576200061c620004e1565b5b6200062a848285620005b1565b509392505050565b600082601f8301126200064a5762000649620004dc565b5b81516200065c848260208601620005e7565b91505092915050565b600080600060608486031215620006815762000680620004d2565b5b600084015167ffffffffffffffff811115620006a257620006a1620004d7565b5b620006b08682870162000632565b935050602084015167ffffffffffffffff811115620006d457620006d3620004d7565b5b620006e28682870162000632565b925050604084015167ffffffffffffffff811115620007065762000705620004d7565b5b620007148682870162000632565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620007676020836200071e565b915062000774826200072f565b602082019050919050565b600060208201905081810360008301526200079a8162000758565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007e957607f821691505b602082108103620007ff57620007fe620007a1565b5b50919050565b6157c680620008156000396000f3fe6080604052600436106102935760003560e01c80635c975abb1161015a578063a0712d68116100c1578063cdcd897e1161007a578063cdcd897e146109fa578063d5abeb0114610a25578063da3ef23f14610a50578063e985e9c514610a79578063f2fde38b14610ab6578063fdea8e0b14610adf57610293565b8063a0712d68146108f9578063a22cb46514610915578063b726e50a1461093e578063b88d4fde14610969578063c668286214610992578063c87b56dd146109bd57610293565b80637cd95912116101135780637cd95912146107fb5780638623ec7b146108125780638da5cb5b1461084f578063947a36fb1461087a57806395d89b41146108a557806397f20a95146108d057610293565b80635c975abb146106d85780636352211e146107035780636e04ff0d1461074057806370a082311461077e578063715018a6146107bb578063729ad39e146107d257610293565b80632a55205a116101fe57806344707fda116101b757806344707fda146105ce57806344a0d68a146105f75780634585e33b146106205780634e7e5489146106495780634f6ccce71461067257806355f804b3146106af57610293565b80632a55205a146104975780632f745c59146104d55780633204d3bc146105125780633f3b3b271461053d57806342842e0e14610568578063438b63001461059157610293565b80631694505e116102505780631694505e146103ba57806318160ddd146103e557806322a9008214610410578063239c70ae1461043957806323b872dd14610464578063281943221461048d57610293565b806301ffc9a71461029857806302329a29146102d557806306fdde03146102fe578063081812fc14610329578063095ea7b31461036657806313faede61461038f575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613a9e565b610b0a565b6040516102cc9190613ae6565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190613b2d565b610b84565b005b34801561030a57600080fd5b50610313610c1d565b6040516103209190613bf3565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190613c4b565b610caf565b60405161035d9190613cb9565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190613d00565b610d34565b005b34801561039b57600080fd5b506103a4610e4b565b6040516103b19190613d4f565b60405180910390f35b3480156103c657600080fd5b506103cf610e51565b6040516103dc9190613cb9565b60405180910390f35b3480156103f157600080fd5b506103fa610e77565b6040516104079190613d4f565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190613c4b565b610e84565b005b34801561044557600080fd5b5061044e610f0a565b60405161045b9190613d4f565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190613d6a565b610f10565b005b610495610f70565b005b3480156104a357600080fd5b506104be60048036038101906104b99190613dbd565b610f72565b6040516104cc929190613dfd565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190613d00565b610fab565b6040516105099190613d4f565b60405180910390f35b34801561051e57600080fd5b50610527611050565b6040516105349190613e85565b60405180910390f35b34801561054957600080fd5b50610552611076565b60405161055f9190613d4f565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a9190613d6a565b61107c565b005b34801561059d57600080fd5b506105b860048036038101906105b39190613ea0565b61109c565b6040516105c59190613f8b565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f09190613fe6565b61114a565b005b34801561060357600080fd5b5061061e60048036038101906106199190613c4b565b6111e4565b005b34801561062c57600080fd5b5061064760048036038101906106429190614078565b61126a565b005b34801561065557600080fd5b50610670600480360381019061066b9190614203565b6112a5565b005b34801561067e57600080fd5b5061069960048036038101906106949190613c4b565b6113bc565b6040516106a69190613d4f565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190614301565b61142d565b005b3480156106e457600080fd5b506106ed6114c3565b6040516106fa9190613ae6565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190613c4b565b6114d6565b6040516107379190613cb9565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190614078565b611587565b60405161077592919061439f565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190613ea0565b6115b9565b6040516107b29190613d4f565b60405180910390f35b3480156107c757600080fd5b506107d0611670565b005b3480156107de57600080fd5b506107f960048036038101906107f49190614203565b6116f8565b005b34801561080757600080fd5b506108106117dc565b005b34801561081e57600080fd5b5061083960048036038101906108349190613c4b565b611875565b6040516108469190613cb9565b60405180910390f35b34801561085b57600080fd5b506108646118b4565b6040516108719190613cb9565b60405180910390f35b34801561088657600080fd5b5061088f6118de565b60405161089c9190613d4f565b60405180910390f35b3480156108b157600080fd5b506108ba6118e4565b6040516108c79190613bf3565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190614203565b611976565b005b610913600480360381019061090e9190613c4b565b611a8d565b005b34801561092157600080fd5b5061093c600480360381019061093791906143cf565b611cd8565b005b34801561094a57600080fd5b50610953611cee565b6040516109609190614430565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b91906144ec565b611d14565b005b34801561099e57600080fd5b506109a7611d76565b6040516109b49190613bf3565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613c4b565b611e04565b6040516109f19190613bf3565b60405180910390f35b348015610a0657600080fd5b50610a0f611eae565b604051610a1c919061457e565b60405180910390f35b348015610a3157600080fd5b50610a3a611ec1565b604051610a479190613d4f565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a729190614301565b611ec7565b005b348015610a8557600080fd5b50610aa06004803603810190610a9b9190614599565b611f5d565b604051610aad9190613ae6565b60405180910390f35b348015610ac257600080fd5b50610add6004803603810190610ad89190613ea0565b611ff1565b005b348015610aeb57600080fd5b50610af46120e8565b604051610b019190613ae6565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b7d5750610b7c826120fb565b5b9050919050565b610b8c6121dd565b73ffffffffffffffffffffffffffffffffffffffff16610baa6118b4565b73ffffffffffffffffffffffffffffffffffffffff1614610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790614625565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610c2c90614674565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5890614674565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b5050505050905090565b6000610cba826121e5565b610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090614717565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d3f826114d6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da6906147a9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dce6121dd565b73ffffffffffffffffffffffffffffffffffffffff161480610dfd5750610dfc81610df76121dd565b611f5d565b5b610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e339061483b565b60405180910390fd5b610e468383612251565b505050565b600d5481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600880549050905090565b610e8c6121dd565b73ffffffffffffffffffffffffffffffffffffffff16610eaa6118b4565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790614625565b60405180910390fd5b8060188190555050565b600f5481565b610f21610f1b6121dd565b8261230a565b610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f57906148cd565b60405180910390fd5b610f6b8383836123e8565b505050565b565b600080306064601060159054906101000a900460ff1660ff1685610f96919061491c565b610fa091906149a5565b915091509250929050565b6000610fb6836115b9565b8210610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee90614a48565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b61109783838360405180602001604052806000815250611d14565b505050565b606060006110a9836115b9565b905060008167ffffffffffffffff8111156110c7576110c66140c5565b5b6040519080825280602002602001820160405280156110f55781602001602082028036833780820191505090505b50905060005b8281101561113f5761110d8582610fab565b8282815181106111205761111f614a68565b5b602002602001018181525050808061113790614a97565b9150506110fb565b508092505050919050565b6111526121dd565b73ffffffffffffffffffffffffffffffffffffffff166111706118b4565b73ffffffffffffffffffffffffffffffffffffffff16146111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90614625565b60405180910390fd5b80601060156101000a81548160ff021916908360ff16021790555050565b6111ec6121dd565b73ffffffffffffffffffffffffffffffffffffffff1661120a6118b4565b73ffffffffffffffffffffffffffffffffffffffff1614611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125790614625565b60405180910390fd5b80600d8190555050565b6018546019544261127b9190614adf565b118015611289575060175447115b61129257600080fd5b426019819055506112a161264e565b5050565b6112ad6121dd565b73ffffffffffffffffffffffffffffffffffffffff166112cb6118b4565b73ffffffffffffffffffffffffffffffffffffffff1614611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131890614625565b60405180910390fd5b60005b81518160ff1610156113b857600160166000848460ff168151811061134c5761134b614a68565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113b090614b13565b915050611324565b5050565b60006113c6610e77565b8210611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614bae565b60405180910390fd5b6008828154811061141b5761141a614a68565b5b90600052602060002001549050919050565b6114356121dd565b73ffffffffffffffffffffffffffffffffffffffff166114536118b4565b73ffffffffffffffffffffffffffffffffffffffff16146114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a090614625565b60405180910390fd5b80600b90805190602001906114bf92919061398f565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157590614c40565b60405180910390fd5b80915050919050565b60006060601754471161159d57600091506115b2565b601854601954426115ae9190614adf565b1191505b9250929050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090614cd2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116786121dd565b73ffffffffffffffffffffffffffffffffffffffff166116966118b4565b73ffffffffffffffffffffffffffffffffffffffff16146116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390614625565b60405180910390fd5b6116f66000612c87565b565b6117006121dd565b73ffffffffffffffffffffffffffffffffffffffff1661171e6118b4565b73ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90614625565b60405180910390fd5b600061177e610e77565b905060005b82518160ff1610156117d7576117c4838260ff16815181106117a8576117a7614a68565b5b60200260200101518260ff16846117bf9190614cf2565b612d4d565b80806117cf90614b13565b915050611783565b505050565b6117e46121dd565b73ffffffffffffffffffffffffffffffffffffffff166118026118b4565b73ffffffffffffffffffffffffffffffffffffffff1614611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90614625565b60405180910390fd5b6000601560006101000a81548160ff021916908315150217905550565b6014818154811061188557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60185481565b6060600180546118f390614674565b80601f016020809104026020016040519081016040528092919081815260200182805461191f90614674565b801561196c5780601f106119415761010080835404028352916020019161196c565b820191906000526020600020905b81548152906001019060200180831161194f57829003601f168201915b5050505050905090565b61197e6121dd565b73ffffffffffffffffffffffffffffffffffffffff1661199c6118b4565b73ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990614625565b60405180910390fd5b60005b81518160ff161015611a8957600060166000848460ff1681518110611a1d57611a1c614a68565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a8190614b13565b9150506119f5565b5050565b601560009054906101000a900460ff1615611af957601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611af857600080fd5b5b6000611b03610e77565b9050601060009054906101000a900460ff1615611b1f57600080fd5b60008211611b2c57600080fd5b600f54821115611b3b57600080fd5b600e548282611b4a9190614cf2565b1115611b5557600080fd5b611b5d6118b4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bae5781600d54611b9d919061491c565b341015611ba957600080fd5b611c3a565b6000611bb86118b4565b73ffffffffffffffffffffffffffffffffffffffff1683600d54611bdc919061491c565b604051611be890614d79565b60006040518083038185875af1925050503d8060008114611c25576040519150601f19603f3d011682016040523d82523d6000602084013e611c2a565b606091505b5050905080611c3857600080fd5b505b6000600190505b828111611cd357611c5d338284611c589190614cf2565b612d4d565b6014339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080611ccb90614a97565b915050611c41565b505050565b611cea611ce36121dd565b8383612d6b565b5050565b601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d25611d1f6121dd565b8361230a565b611d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5b906148cd565b60405180910390fd5b611d7084848484612ed7565b50505050565b600c8054611d8390614674565b80601f0160208091040260200160405190810160405280929190818152602001828054611daf90614674565b8015611dfc5780601f10611dd157610100808354040283529160200191611dfc565b820191906000526020600020905b815481529060010190602001808311611ddf57829003601f168201915b505050505081565b6060611e0f826121e5565b611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590614e00565b60405180910390fd5b6000611e58612f33565b90506000815111611e785760405180602001604052806000815250611ea6565b80611e8284612fc5565b600c604051602001611e9693929190614ef0565b6040516020818303038152906040525b915050919050565b601060159054906101000a900460ff1681565b600e5481565b611ecf6121dd565b73ffffffffffffffffffffffffffffffffffffffff16611eed6118b4565b73ffffffffffffffffffffffffffffffffffffffff1614611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614625565b60405180910390fd5b80600c9080519060200190611f5992919061398f565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ff96121dd565b73ffffffffffffffffffffffffffffffffffffffff166120176118b4565b73ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614625565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390614f93565b60405180910390fd5b6120e581612c87565b50565b601560009054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121c657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121d657506121d582613125565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122c4836114d6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612315826121e5565b612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90615025565b60405180910390fd5b600061235f836114d6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a157506123a08185611f5d565b5b806123df57508373ffffffffffffffffffffffffffffffffffffffff166123c784610caf565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612408826114d6565b73ffffffffffffffffffffffffffffffffffffffff161461245e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612455906150b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c490615149565b60405180910390fd5b6124d883838361318f565b6124e3600082612251565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125339190614adf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461258a9190614cf2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126498383836132a1565b505050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600267ffffffffffffffff811115612692576126916140c5565b5b6040519080825280602002602001820160405280156126c05781602001602082028036833780820191505090505b5090508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561270e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612732919061517e565b8160008151811061274657612745614a68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106127b7576127b6614a68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060008273ffffffffffffffffffffffffffffffffffffffff16637ff36ab54760008530603c426128219190614cf2565b6040518663ffffffff1660e01b815260040161284094939291906152a4565b60006040518083038185885af115801561285e573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f8201168201806040525081019061288891906153c8565b90506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291d9190615411565b9050601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6129656118b4565b6002601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129c29190613cb9565b602060405180830381865afa1580156129df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a039190615411565b612a0d91906149a5565b6040518363ffffffff1660e01b8152600401612a2a929190613dfd565b6020604051808303816000875af1158015612a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6d9190615453565b50600081601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612acc9190613cb9565b602060405180830381865afa158015612ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0d9190615411565b612b1791906149a5565b90506000600190505b828160ff1611612c7f576000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401612b8791906154b1565b602060405180830381865afa158015612ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc8919061517e565b9050601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82856040518363ffffffff1660e01b8152600401612c27929190613dfd565b6020604051808303816000875af1158015612c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6a9190615453565b50508080612c7790614b13565b915050612b20565b505050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d678282604051806020016040528060008152506132a6565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd090615518565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612eca9190613ae6565b60405180910390a3505050565b612ee28484846123e8565b612eee84848484613301565b612f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f24906155aa565b60405180910390fd5b50505050565b6060600b8054612f4290614674565b80601f0160208091040260200160405190810160405280929190818152602001828054612f6e90614674565b8015612fbb5780601f10612f9057610100808354040283529160200191612fbb565b820191906000526020600020905b815481529060010190602001808311612f9e57829003601f168201915b5050505050905090565b60606000820361300c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613120565b600082905060005b6000821461303e57808061302790614a97565b915050600a8261303791906149a5565b9150613014565b60008167ffffffffffffffff81111561305a576130596140c5565b5b6040519080825280601f01601f19166020018201604052801561308c5781602001600182028036833780820191505090505b5090505b60008514613119576001826130a59190614adf565b9150600a856130b491906155ca565b60306130c09190614cf2565b60f81b8183815181106130d6576130d5614a68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561311291906149a5565b9450613090565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61319a838383613488565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131dc576131d78161348d565b61321b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461321a5761321983826134d6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361325d5761325881613643565b61329c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461329b5761329a8282613714565b5b5b505050565b505050565b6132b08383613793565b6132bd6000848484613301565b6132fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f3906155aa565b60405180910390fd5b505050565b60006133228473ffffffffffffffffffffffffffffffffffffffff1661396c565b1561347b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261334b6121dd565b8786866040518563ffffffff1660e01b815260040161336d94939291906155fb565b6020604051808303816000875af19250505080156133a957506040513d601f19601f820116820180604052508101906133a6919061565c565b60015b61342b573d80600081146133d9576040519150601f19603f3d011682016040523d82523d6000602084013e6133de565b606091505b506000815103613423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341a906155aa565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613480565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016134e3846115b9565b6134ed9190614adf565b90506000600760008481526020019081526020016000205490508181146135d2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136579190614adf565b905060006009600084815260200190815260200160002054905060006008838154811061368757613686614a68565b5b9060005260206000200154905080600883815481106136a9576136a8614a68565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806136f8576136f7615689565b5b6001900381819060005260206000200160009055905550505050565b600061371f836115b9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f990615704565b60405180910390fd5b61380b816121e5565b1561384b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384290615770565b60405180910390fd5b6138576000838361318f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138a79190614cf2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613968600083836132a1565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461399b90614674565b90600052602060002090601f0160209004810192826139bd5760008555613a04565b82601f106139d657805160ff1916838001178555613a04565b82800160010185558215613a04579182015b82811115613a035782518255916020019190600101906139e8565b5b509050613a119190613a15565b5090565b5b80821115613a2e576000816000905550600101613a16565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613a7b81613a46565b8114613a8657600080fd5b50565b600081359050613a9881613a72565b92915050565b600060208284031215613ab457613ab3613a3c565b5b6000613ac284828501613a89565b91505092915050565b60008115159050919050565b613ae081613acb565b82525050565b6000602082019050613afb6000830184613ad7565b92915050565b613b0a81613acb565b8114613b1557600080fd5b50565b600081359050613b2781613b01565b92915050565b600060208284031215613b4357613b42613a3c565b5b6000613b5184828501613b18565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b94578082015181840152602081019050613b79565b83811115613ba3576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bc582613b5a565b613bcf8185613b65565b9350613bdf818560208601613b76565b613be881613ba9565b840191505092915050565b60006020820190508181036000830152613c0d8184613bba565b905092915050565b6000819050919050565b613c2881613c15565b8114613c3357600080fd5b50565b600081359050613c4581613c1f565b92915050565b600060208284031215613c6157613c60613a3c565b5b6000613c6f84828501613c36565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ca382613c78565b9050919050565b613cb381613c98565b82525050565b6000602082019050613cce6000830184613caa565b92915050565b613cdd81613c98565b8114613ce857600080fd5b50565b600081359050613cfa81613cd4565b92915050565b60008060408385031215613d1757613d16613a3c565b5b6000613d2585828601613ceb565b9250506020613d3685828601613c36565b9150509250929050565b613d4981613c15565b82525050565b6000602082019050613d646000830184613d40565b92915050565b600080600060608486031215613d8357613d82613a3c565b5b6000613d9186828701613ceb565b9350506020613da286828701613ceb565b9250506040613db386828701613c36565b9150509250925092565b60008060408385031215613dd457613dd3613a3c565b5b6000613de285828601613c36565b9250506020613df385828601613c36565b9150509250929050565b6000604082019050613e126000830185613caa565b613e1f6020830184613d40565b9392505050565b6000819050919050565b6000613e4b613e46613e4184613c78565b613e26565b613c78565b9050919050565b6000613e5d82613e30565b9050919050565b6000613e6f82613e52565b9050919050565b613e7f81613e64565b82525050565b6000602082019050613e9a6000830184613e76565b92915050565b600060208284031215613eb657613eb5613a3c565b5b6000613ec484828501613ceb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f0281613c15565b82525050565b6000613f148383613ef9565b60208301905092915050565b6000602082019050919050565b6000613f3882613ecd565b613f428185613ed8565b9350613f4d83613ee9565b8060005b83811015613f7e578151613f658882613f08565b9750613f7083613f20565b925050600181019050613f51565b5085935050505092915050565b60006020820190508181036000830152613fa58184613f2d565b905092915050565b600060ff82169050919050565b613fc381613fad565b8114613fce57600080fd5b50565b600081359050613fe081613fba565b92915050565b600060208284031215613ffc57613ffb613a3c565b5b600061400a84828501613fd1565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261403857614037614013565b5b8235905067ffffffffffffffff81111561405557614054614018565b5b6020830191508360018202830111156140715761407061401d565b5b9250929050565b6000806020838503121561408f5761408e613a3c565b5b600083013567ffffffffffffffff8111156140ad576140ac613a41565b5b6140b985828601614022565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140fd82613ba9565b810181811067ffffffffffffffff8211171561411c5761411b6140c5565b5b80604052505050565b600061412f613a32565b905061413b82826140f4565b919050565b600067ffffffffffffffff82111561415b5761415a6140c5565b5b602082029050602081019050919050565b600061417f61417a84614140565b614125565b905080838252602082019050602084028301858111156141a2576141a161401d565b5b835b818110156141cb57806141b78882613ceb565b8452602084019350506020810190506141a4565b5050509392505050565b600082601f8301126141ea576141e9614013565b5b81356141fa84826020860161416c565b91505092915050565b60006020828403121561421957614218613a3c565b5b600082013567ffffffffffffffff81111561423757614236613a41565b5b614243848285016141d5565b91505092915050565b600080fd5b600067ffffffffffffffff82111561426c5761426b6140c5565b5b61427582613ba9565b9050602081019050919050565b82818337600083830152505050565b60006142a461429f84614251565b614125565b9050828152602081018484840111156142c0576142bf61424c565b5b6142cb848285614282565b509392505050565b600082601f8301126142e8576142e7614013565b5b81356142f8848260208601614291565b91505092915050565b60006020828403121561431757614316613a3c565b5b600082013567ffffffffffffffff81111561433557614334613a41565b5b614341848285016142d3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60006143718261434a565b61437b8185614355565b935061438b818560208601613b76565b61439481613ba9565b840191505092915050565b60006040820190506143b46000830185613ad7565b81810360208301526143c68184614366565b90509392505050565b600080604083850312156143e6576143e5613a3c565b5b60006143f485828601613ceb565b925050602061440585828601613b18565b9150509250929050565b600061441a82613e52565b9050919050565b61442a8161440f565b82525050565b60006020820190506144456000830184614421565b92915050565b600067ffffffffffffffff821115614466576144656140c5565b5b61446f82613ba9565b9050602081019050919050565b600061448f61448a8461444b565b614125565b9050828152602081018484840111156144ab576144aa61424c565b5b6144b6848285614282565b509392505050565b600082601f8301126144d3576144d2614013565b5b81356144e384826020860161447c565b91505092915050565b6000806000806080858703121561450657614505613a3c565b5b600061451487828801613ceb565b945050602061452587828801613ceb565b935050604061453687828801613c36565b925050606085013567ffffffffffffffff81111561455757614556613a41565b5b614563878288016144be565b91505092959194509250565b61457881613fad565b82525050565b6000602082019050614593600083018461456f565b92915050565b600080604083850312156145b0576145af613a3c565b5b60006145be85828601613ceb565b92505060206145cf85828601613ceb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061460f602083613b65565b915061461a826145d9565b602082019050919050565b6000602082019050818103600083015261463e81614602565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061468c57607f821691505b60208210810361469f5761469e614645565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614701602c83613b65565b915061470c826146a5565b604082019050919050565b60006020820190508181036000830152614730816146f4565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614793602183613b65565b915061479e82614737565b604082019050919050565b600060208201905081810360008301526147c281614786565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614825603883613b65565b9150614830826147c9565b604082019050919050565b6000602082019050818103600083015261485481614818565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006148b7603183613b65565b91506148c28261485b565b604082019050919050565b600060208201905081810360008301526148e6816148aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061492782613c15565b915061493283613c15565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561496b5761496a6148ed565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149b082613c15565b91506149bb83613c15565b9250826149cb576149ca614976565b5b828204905092915050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614a32602b83613b65565b9150614a3d826149d6565b604082019050919050565b60006020820190508181036000830152614a6181614a25565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614aa282613c15565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ad457614ad36148ed565b5b600182019050919050565b6000614aea82613c15565b9150614af583613c15565b925082821015614b0857614b076148ed565b5b828203905092915050565b6000614b1e82613fad565b915060ff8203614b3157614b306148ed565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614b98602c83613b65565b9150614ba382614b3c565b604082019050919050565b60006020820190508181036000830152614bc781614b8b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614c2a602983613b65565b9150614c3582614bce565b604082019050919050565b60006020820190508181036000830152614c5981614c1d565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614cbc602a83613b65565b9150614cc782614c60565b604082019050919050565b60006020820190508181036000830152614ceb81614caf565b9050919050565b6000614cfd82613c15565b9150614d0883613c15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d3d57614d3c6148ed565b5b828201905092915050565b600081905092915050565b50565b6000614d63600083614d48565b9150614d6e82614d53565b600082019050919050565b6000614d8482614d56565b9150819050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614dea602f83613b65565b9150614df582614d8e565b604082019050919050565b60006020820190508181036000830152614e1981614ddd565b9050919050565b600081905092915050565b6000614e3682613b5a565b614e408185614e20565b9350614e50818560208601613b76565b80840191505092915050565b60008190508160005260206000209050919050565b60008154614e7e81614674565b614e888186614e20565b94506001821660008114614ea35760018114614eb457614ee7565b60ff19831686528186019350614ee7565b614ebd85614e5c565b60005b83811015614edf57815481890152600182019150602081019050614ec0565b838801955050505b50505092915050565b6000614efc8286614e2b565b9150614f088285614e2b565b9150614f148284614e71565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f7d602683613b65565b9150614f8882614f21565b604082019050919050565b60006020820190508181036000830152614fac81614f70565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061500f602c83613b65565b915061501a82614fb3565b604082019050919050565b6000602082019050818103600083015261503e81615002565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006150a1602583613b65565b91506150ac82615045565b604082019050919050565b600060208201905081810360008301526150d081615094565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615133602483613b65565b915061513e826150d7565b604082019050919050565b6000602082019050818103600083015261516281615126565b9050919050565b60008151905061517881613cd4565b92915050565b60006020828403121561519457615193613a3c565b5b60006151a284828501615169565b91505092915050565b6000819050919050565b60006151d06151cb6151c6846151ab565b613e26565b613c15565b9050919050565b6151e0816151b5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61521b81613c98565b82525050565b600061522d8383615212565b60208301905092915050565b6000602082019050919050565b6000615251826151e6565b61525b81856151f1565b935061526683615202565b8060005b8381101561529757815161527e8882615221565b975061528983615239565b92505060018101905061526a565b5085935050505092915050565b60006080820190506152b960008301876151d7565b81810360208301526152cb8186615246565b90506152da6040830185613caa565b6152e76060830184613d40565b95945050505050565b600067ffffffffffffffff82111561530b5761530a6140c5565b5b602082029050602081019050919050565b60008151905061532b81613c1f565b92915050565b600061534461533f846152f0565b614125565b905080838252602082019050602084028301858111156153675761536661401d565b5b835b81811015615390578061537c888261531c565b845260208401935050602081019050615369565b5050509392505050565b600082601f8301126153af576153ae614013565b5b81516153bf848260208601615331565b91505092915050565b6000602082840312156153de576153dd613a3c565b5b600082015167ffffffffffffffff8111156153fc576153fb613a41565b5b6154088482850161539a565b91505092915050565b60006020828403121561542757615426613a3c565b5b60006154358482850161531c565b91505092915050565b60008151905061544d81613b01565b92915050565b60006020828403121561546957615468613a3c565b5b60006154778482850161543e565b91505092915050565b600061549b61549661549184613fad565b613e26565b613c15565b9050919050565b6154ab81615480565b82525050565b60006020820190506154c660008301846154a2565b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615502601983613b65565b915061550d826154cc565b602082019050919050565b60006020820190508181036000830152615531816154f5565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615594603283613b65565b915061559f82615538565b604082019050919050565b600060208201905081810360008301526155c381615587565b9050919050565b60006155d582613c15565b91506155e083613c15565b9250826155f0576155ef614976565b5b828206905092915050565b60006080820190506156106000830187613caa565b61561d6020830186613caa565b61562a6040830185613d40565b818103606083015261563c8184614366565b905095945050505050565b60008151905061565681613a72565b92915050565b60006020828403121561567257615671613a3c565b5b600061568084828501615647565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006156ee602083613b65565b91506156f9826156b8565b602082019050919050565b6000602082019050818103600083015261571d816156e1565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061575a601c83613b65565b915061576582615724565b602082019050919050565b600060208201905081810360008301526157898161574d565b905091905056fea2646970667358221220826291d5461d5763f2389c793544f7878086574ac659ac262b67e51aa60f7dc164736f6c634300080d0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000134d6f6465726e204d6f627374657273204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d697066733a2f2f516d50426766376a5147506e674c3257327137343637464d34367437343456327979617241534670506f586467762f696d616765732f000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000134d6f6465726e204d6f627374657273204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d4d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d697066733a2f2f516d50426766376a5147506e674c3257327137343637464d34367437343456327979617241534670506f586467762f696d616765732f000000
-----Decoded View---------------
Arg [0] : _name (string): Modern Mobsters NFT
Arg [1] : _symbol (string): MM
Arg [2] : _initBaseURI (string): ipfs://QmPBgf7jQGPngL2W2q7467FM46t744V2yyarASFpPoXdgv/images/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [4] : 4d6f6465726e204d6f627374657273204e465400000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4d4d000000000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000003d
Arg [8] : 697066733a2f2f516d50426766376a5147506e674c3257327137343637464d34
Arg [9] : 367437343456327979617241534670506f586467762f696d616765732f000000
Deployed ByteCode Sourcemap
53044:5861:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43763:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58732:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30582:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32142:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31665:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53207:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53464:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44403:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58391:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53279:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32892:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58812:90;;;:::i;:::-;;55217:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;44071:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53544:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53956:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33302:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56727:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58277:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58191:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54455:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57602:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44593:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58500:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53317:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30276:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53999:450;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;30006:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51624:103;;;;;;;;;;;;;:::i;:::-;;57970:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57526:70;;;;;;;;;;;;;:::i;:::-;;53694:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50973:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53921:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30751:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57784:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56081:640;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32435:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53348:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33558:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53165:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57081:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53427:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53242;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58604:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32661:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51882:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53723:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43763:224;43865:4;43904:35;43889:50;;;:11;:50;;;;:90;;;;43943:36;43967:11;43943:23;:36::i;:::-;43889:90;43882:97;;43763:224;;;:::o;58732:73::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58793:6:::1;58784;;:15;;;;;;;;;;;;;;;;;;58732:73:::0;:::o;30582:100::-;30636:13;30669:5;30662:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30582:100;:::o;32142:221::-;32218:7;32246:16;32254:7;32246;:16::i;:::-;32238:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32331:15;:24;32347:7;32331:24;;;;;;;;;;;;;;;;;;;;;32324:31;;32142:221;;;:::o;31665:411::-;31746:13;31762:23;31777:7;31762:14;:23::i;:::-;31746:39;;31810:5;31804:11;;:2;:11;;;31796:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31904:5;31888:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31913:37;31930:5;31937:12;:10;:12::i;:::-;31913:16;:37::i;:::-;31888:62;31866:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32047:21;32056:2;32060:7;32047:8;:21::i;:::-;31735:341;31665:411;;:::o;53207:30::-;;;;:::o;53464:75::-;;;;;;;;;;;;;:::o;44403:113::-;44464:7;44491:10;:17;;;;44484:24;;44403:113;:::o;58391:103::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58466:9:::1;58455:8;:20;;;;58391:103:::0;:::o;53279:33::-;;;;:::o;32892:339::-;33087:41;33106:12;:10;:12::i;:::-;33120:7;33087:18;:41::i;:::-;33079:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33195:28;33205:4;33211:2;33215:7;33195:9;:28::i;:::-;32892:339;;;:::o;58812:90::-;:::o;55217:169::-;55297:7;55306;55337:4;55376:3;55357:15;;;;;;;;;;;55345:27;;:9;:27;;;;:::i;:::-;55344:35;;;;:::i;:::-;55322:58;;;;55217:169;;;;;:::o;44071:256::-;44168:7;44204:23;44221:5;44204:16;:23::i;:::-;44196:5;:31;44188:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44293:12;:19;44306:5;44293:19;;;;;;;;;;;;;;;:26;44313:5;44293:26;;;;;;;;;;;;44286:33;;44071:256;;;;:::o;53544:95::-;;;;;;;;;;;;;:::o;53956:34::-;;;;:::o;33302:185::-;33440:39;33457:4;33463:2;33467:7;33440:39;;;;;;;;;;;;:16;:39::i;:::-;33302:185;;;:::o;56727:348::-;56802:16;56830:23;56856:17;56866:6;56856:9;:17::i;:::-;56830:43;;56880:25;56922:15;56908:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56880:58;;56950:9;56945:103;56965:15;56961:1;:19;56945:103;;;57010:30;57030:6;57038:1;57010:19;:30::i;:::-;56996:8;57005:1;56996:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;56982:3;;;;;:::i;:::-;;;;56945:103;;;;57061:8;57054:15;;;;56727:348;;;:::o;58277:108::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58363:16:::1;58345:15;;:34;;;;;;;;;;;;;;;;;;58277:108:::0;:::o;58191:80::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58257:8:::1;58250:4;:15;;;;58191:80:::0;:::o;54455:443::-;54653:8;;54636:13;;54618:15;:31;;;;:::i;:::-;54617:44;:82;;;;;54689:10;;54665:21;:34;54617:82;54609:91;;;;;;54723:15;54707:13;:31;;;;54745:12;:10;:12::i;:::-;54455:443;;:::o;57602:178::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57685:7:::1;57681:94;57702:10;:17;57698:1;:21;;;57681:94;;;57763:4;57736:9;:24;57746:10;57757:1;57746:13;;;;;;;;;;:::i;:::-;;;;;;;;57736:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;57721:3;;;;;:::i;:::-;;;;57681:94;;;;57602:178:::0;:::o;44593:233::-;44668:7;44704:30;:28;:30::i;:::-;44696:5;:38;44688:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44801:10;44812:5;44801:17;;;;;;;;:::i;:::-;;;;;;;;;;44794:24;;44593:233;;;:::o;58500:98::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58581:11:::1;58571:7;:21;;;;;;;;;;;;:::i;:::-;;58500:98:::0;:::o;53317:26::-;;;;;;;;;;;;;:::o;30276:239::-;30348:7;30368:13;30384:7;:16;30392:7;30384:16;;;;;;;;;;;;;;;;;;;;;30368:32;;30436:1;30419:19;;:5;:19;;;30411:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30502:5;30495:12;;;30276:239;;;:::o;53999:450::-;54075:17;54094:12;54162:10;;54137:21;:35;54133:202;;54233:5;54218:20;;54133:202;;;54318:8;;54301:13;;54283:15;:31;;;;:::i;:::-;54282:44;54266:61;;54133:202;53999:450;;;;;:::o;30006:208::-;30078:7;30123:1;30106:19;;:5;:19;;;30098:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30190:9;:16;30200:5;30190:16;;;;;;;;;;;;;;;;30183:23;;30006:208;;;:::o;51624:103::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51689:30:::1;51716:1;51689:18;:30::i;:::-;51624:103::o:0;57970:213::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58041:14:::1;58058:13;:11;:13::i;:::-;58041:30;;58082:7;58078:100;58099:10;:17;58095:1;:21;;;58078:100;;;58134:36;58144:10;58155:1;58144:13;;;;;;;;;;:::i;:::-;;;;;;;;58168:1;58159:10;;:6;:10;;;;:::i;:::-;58134:9;:36::i;:::-;58118:3;;;;;:::i;:::-;;;;58078:100;;;;58034:149;57970:213:::0;:::o;57526:70::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57585:5:::1;57575:7;;:15;;;;;;;;;;;;;;;;;;57526:70::o:0;53694:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50973:87::-;51019:7;51046:6;;;;;;;;;;;51039:13;;50973:87;:::o;53921:30::-;;;;:::o;30751:104::-;30807:13;30840:7;30833:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30751:104;:::o;57784:180::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57870:7:::1;57866:93;57887:10;:17;57883:1;:21;;;57866:93;;;57946:5;57919:9;:24;57929:10;57940:1;57929:13;;;;;;;;;;:::i;:::-;;;;;;;;57919:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;57906:3;;;;;:::i;:::-;;;;57866:93;;;;57784:180:::0;:::o;56081:640::-;56141:7;;;;;;;;;;;56138:58;;;56166:9;:21;56176:10;56166:21;;;;;;;;;;;;;;;;;;;;;;;;;56158:30;;;;;;56138:58;56202:14;56219:13;:11;:13::i;:::-;56202:30;;56248:6;;;;;;;;;;;56247:7;56239:16;;;;;;56284:1;56270:11;:15;56262:24;;;;;;56316:13;;56301:11;:28;;56293:37;;;;;;56369:9;;56354:11;56345:6;:20;;;;:::i;:::-;:33;;56337:42;;;;;;56406:7;:5;:7::i;:::-;56392:21;;:10;:21;;;56388:194;;56452:11;56445:4;;:18;;;;:::i;:::-;56432:9;:31;;56424:40;;;;;;56388:194;;;56491:7;56512;:5;:7::i;:::-;56504:21;;56540:11;56533:4;;:18;;;;:::i;:::-;56504:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56490:66;;;56571:2;56563:11;;;;;;56483:99;56388:194;56595:9;56607:1;56595:13;;56590:126;56615:11;56610:1;:16;56590:126;;56642:33;56652:10;56673:1;56664:6;:10;;;;:::i;:::-;56642:9;:33::i;:::-;56684:7;56697:10;56684:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56628:3;;;;;:::i;:::-;;;;56590:126;;;;56131:590;56081:640;:::o;32435:155::-;32530:52;32549:12;:10;:12::i;:::-;32563:8;32573;32530:18;:52::i;:::-;32435:155;;:::o;53348:74::-;;;;;;;;;;;;;:::o;33558:328::-;33733:41;33752:12;:10;:12::i;:::-;33766:7;33733:18;:41::i;:::-;33725:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33839:39;33853:4;33859:2;33863:7;33872:5;33839:13;:39::i;:::-;33558:328;;;;:::o;53165:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;57081:423::-;57179:13;57220:16;57228:7;57220;:16::i;:::-;57204:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;57310:28;57341:10;:8;:10::i;:::-;57310:41;;57396:1;57371:14;57365:28;:32;:133;;;;;;;;;;;;;;;;;57433:14;57449:18;:7;:16;:18::i;:::-;57469:13;57416:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57365:133;57358:140;;;57081:423;;;:::o;53427:32::-;;;;;;;;;;;;;:::o;53242:::-;;;;:::o;58604:122::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58703:17:::1;58687:13;:33;;;;;;;;;;;;:::i;:::-;;58604:122:::0;:::o;32661:164::-;32758:4;32782:18;:25;32801:5;32782:25;;;;;;;;;;;;;;;:35;32808:8;32782:35;;;;;;;;;;;;;;;;;;;;;;;;;32775:42;;32661:164;;;;:::o;51882:201::-;51204:12;:10;:12::i;:::-;51193:23;;:7;:5;:7::i;:::-;:23;;;51185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51991:1:::1;51971:22;;:8;:22;;::::0;51963:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;52047:28;52066:8;52047:18;:28::i;:::-;51882:201:::0;:::o;53723:26::-;;;;;;;;;;;;;:::o;29637:305::-;29739:4;29791:25;29776:40;;;:11;:40;;;;:105;;;;29848:33;29833:48;;;:11;:48;;;;29776:105;:158;;;;29898:36;29922:11;29898:23;:36::i;:::-;29776:158;29756:178;;29637:305;;;:::o;28016:98::-;28069:7;28096:10;28089:17;;28016:98;:::o;35396:127::-;35461:4;35513:1;35485:30;;:7;:16;35493:7;35485:16;;;;;;;;;;;;;;;;;;;;;:30;;;;35478:37;;35396:127;;;:::o;39542:174::-;39644:2;39617:15;:24;39633:7;39617:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39700:7;39696:2;39662:46;;39671:23;39686:7;39671:14;:23::i;:::-;39662:46;;;;;;;;;;;;39542:174;;:::o;35690:348::-;35783:4;35808:16;35816:7;35808;:16::i;:::-;35800:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35884:13;35900:23;35915:7;35900:14;:23::i;:::-;35884:39;;35953:5;35942:16;;:7;:16;;;:52;;;;35962:32;35979:5;35986:7;35962:16;:32::i;:::-;35942:52;:87;;;;36022:7;35998:31;;:20;36010:7;35998:11;:20::i;:::-;:31;;;35942:87;35934:96;;;35690:348;;;;:::o;38799:625::-;38958:4;38931:31;;:23;38946:7;38931:14;:23::i;:::-;:31;;;38923:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39037:1;39023:16;;:2;:16;;;39015:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39093:39;39114:4;39120:2;39124:7;39093:20;:39::i;:::-;39197:29;39214:1;39218:7;39197:8;:29::i;:::-;39258:1;39239:9;:15;39249:4;39239:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39287:1;39270:9;:13;39280:2;39270:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39318:2;39299:7;:16;39307:7;39299:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39357:7;39353:2;39338:27;;39347:4;39338:27;;;;;;;;;;;;39378:38;39398:4;39404:2;39408:7;39378:19;:38::i;:::-;38799:625;;;:::o;55392:683::-;55430:24;55474:15;;;;;;;;;;;55430:60;;55497:21;55535:1;55521:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55497:40;;55555:7;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55545:4;55550:1;55545:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;55594:7;;;;;;;;;;;55576:4;55581:1;55576:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;55609:21;55633:7;:29;;;55670:21;55693:1;55696:4;55710;55735:2;55717:15;:20;;;;:::i;:::-;55633:105;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55609:129;;55749:14;55766:6;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55749:37;;55793:7;;;;;;;;;;;:16;;;55810:7;:5;:7::i;:::-;55853:1;55820:7;;;;;;;;;;;:17;;;55846:4;55820:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;;:::i;:::-;55793:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;55863:22;55921:6;55888:7;;;;;;;;;;;:17;;;55914:4;55888:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;;:::i;:::-;55863:64;;55939:7;55949:1;55939:11;;55934:136;55957:6;55952:1;:11;;;55934:136;;55979:14;55996:6;;;;;;;;;;;:14;;;56011:1;55996:17;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55979:34;;56022:7;;;;;;;;;;;:16;;;56039:6;56047:14;56022:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;55970:100;55965:3;;;;;:::i;:::-;;;;55934:136;;;;55423:652;;;;;55392:683::o;52243:191::-;52317:16;52336:6;;;;;;;;;;;52317:25;;52362:8;52353:6;;:17;;;;;;;;;;;;;;;;;;52417:8;52386:40;;52407:8;52386:40;;;;;;;;;;;;52306:128;52243:191;:::o;36380:110::-;36456:26;36466:2;36470:7;36456:26;;;;;;;;;;;;:9;:26::i;:::-;36380:110;;:::o;39858:315::-;40013:8;40004:17;;:5;:17;;;39996:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40100:8;40062:18;:25;40081:5;40062:25;;;;;;;;;;;;;;;:35;40088:8;40062:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40146:8;40124:41;;40139:5;40124:41;;;40156:8;40124:41;;;;;;:::i;:::-;;;;;;;;39858:315;;;:::o;34768:::-;34925:28;34935:4;34941:2;34945:7;34925:9;:28::i;:::-;34972:48;34995:4;35001:2;35005:7;35014:5;34972:22;:48::i;:::-;34964:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34768:315;;;;:::o;55096:102::-;55156:13;55185:7;55178:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55096:102;:::o;3528:723::-;3584:13;3814:1;3805:5;:10;3801:53;;3832:10;;;;;;;;;;;;;;;;;;;;;3801:53;3864:12;3879:5;3864:20;;3895:14;3920:78;3935:1;3927:4;:9;3920:78;;3953:8;;;;;:::i;:::-;;;;3984:2;3976:10;;;;;:::i;:::-;;;3920:78;;;4008:19;4040:6;4030:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4008:39;;4058:154;4074:1;4065:5;:10;4058:154;;4102:1;4092:11;;;;;:::i;:::-;;;4169:2;4161:5;:10;;;;:::i;:::-;4148:2;:24;;;;:::i;:::-;4135:39;;4118:6;4125;4118:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4198:2;4189:11;;;;;:::i;:::-;;;4058:154;;;4236:6;4222:21;;;;;3528:723;;;;:::o;17524:157::-;17609:4;17648:25;17633:40;;;:11;:40;;;;17626:47;;17524:157;;;:::o;45439:589::-;45583:45;45610:4;45616:2;45620:7;45583:26;:45::i;:::-;45661:1;45645:18;;:4;:18;;;45641:187;;45680:40;45712:7;45680:31;:40::i;:::-;45641:187;;;45750:2;45742:10;;:4;:10;;;45738:90;;45769:47;45802:4;45808:7;45769:32;:47::i;:::-;45738:90;45641:187;45856:1;45842:16;;:2;:16;;;45838:183;;45875:45;45912:7;45875:36;:45::i;:::-;45838:183;;;45948:4;45942:10;;:2;:10;;;45938:83;;45969:40;45997:2;46001:7;45969:27;:40::i;:::-;45938:83;45838:183;45439:589;;;:::o;42620:125::-;;;;:::o;36717:321::-;36847:18;36853:2;36857:7;36847:5;:18::i;:::-;36898:54;36929:1;36933:2;36937:7;36946:5;36898:22;:54::i;:::-;36876:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;36717:321;;;:::o;40738:799::-;40893:4;40914:15;:2;:13;;;:15::i;:::-;40910:620;;;40966:2;40950:36;;;40987:12;:10;:12::i;:::-;41001:4;41007:7;41016:5;40950:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40946:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41209:1;41192:6;:13;:18;41188:272;;41235:60;;;;;;;;;;:::i;:::-;;;;;;;;41188:272;41410:6;41404:13;41395:6;41391:2;41387:15;41380:38;40946:529;41083:41;;;41073:51;;;:6;:51;;;;41066:58;;;;;40910:620;41514:4;41507:11;;40738:799;;;;;;;:::o;42109:126::-;;;;:::o;46751:164::-;46855:10;:17;;;;46828:15;:24;46844:7;46828:24;;;;;;;;;;;:44;;;;46883:10;46899:7;46883:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46751:164;:::o;47542:988::-;47808:22;47858:1;47833:22;47850:4;47833:16;:22::i;:::-;:26;;;;:::i;:::-;47808:51;;47870:18;47891:17;:26;47909:7;47891:26;;;;;;;;;;;;47870:47;;48038:14;48024:10;:28;48020:328;;48069:19;48091:12;:18;48104:4;48091:18;;;;;;;;;;;;;;;:34;48110:14;48091:34;;;;;;;;;;;;48069:56;;48175:11;48142:12;:18;48155:4;48142:18;;;;;;;;;;;;;;;:30;48161:10;48142:30;;;;;;;;;;;:44;;;;48292:10;48259:17;:30;48277:11;48259:30;;;;;;;;;;;:43;;;;48054:294;48020:328;48444:17;:26;48462:7;48444:26;;;;;;;;;;;48437:33;;;48488:12;:18;48501:4;48488:18;;;;;;;;;;;;;;;:34;48507:14;48488:34;;;;;;;;;;;48481:41;;;47623:907;;47542:988;;:::o;48825:1079::-;49078:22;49123:1;49103:10;:17;;;;:21;;;;:::i;:::-;49078:46;;49135:18;49156:15;:24;49172:7;49156:24;;;;;;;;;;;;49135:45;;49507:19;49529:10;49540:14;49529:26;;;;;;;;:::i;:::-;;;;;;;;;;49507:48;;49593:11;49568:10;49579;49568:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;49704:10;49673:15;:28;49689:11;49673:28;;;;;;;;;;;:41;;;;49845:15;:24;49861:7;49845:24;;;;;;;;;;;49838:31;;;49880:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48896:1008;;;48825:1079;:::o;46329:221::-;46414:14;46431:20;46448:2;46431:16;:20::i;:::-;46414:37;;46489:7;46462:12;:16;46475:2;46462:16;;;;;;;;;;;;;;;:24;46479:6;46462:24;;;;;;;;;;;:34;;;;46536:6;46507:17;:26;46525:7;46507:26;;;;;;;;;;;:35;;;;46403:147;46329:221;;:::o;37374:439::-;37468:1;37454:16;;:2;:16;;;37446:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37527:16;37535:7;37527;:16::i;:::-;37526:17;37518:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37589:45;37618:1;37622:2;37626:7;37589:20;:45::i;:::-;37664:1;37647:9;:13;37657:2;37647:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37695:2;37676:7;:16;37684:7;37676:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37740:7;37736:2;37715:33;;37732:1;37715:33;;;;;;;;;;;;37761:44;37789:1;37793:2;37797:7;37761:19;:44::i;:::-;37374:439;;:::o;6520:326::-;6580:4;6837:1;6815:7;:19;;;:23;6808:30;;6520: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:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:474::-;6573:6;6581;6630:2;6618:9;6609:7;6605:23;6601:32;6598:119;;;6636:79;;:::i;:::-;6598:119;6756:1;6781:53;6826:7;6817:6;6806:9;6802:22;6781:53;:::i;:::-;6771:63;;6727:117;6883:2;6909:53;6954:7;6945:6;6934:9;6930:22;6909:53;:::i;:::-;6899:63;;6854:118;6505:474;;;;;:::o;6985:332::-;7106:4;7144:2;7133:9;7129:18;7121:26;;7157:71;7225:1;7214:9;7210:17;7201:6;7157:71;:::i;:::-;7238:72;7306:2;7295:9;7291:18;7282:6;7238:72;:::i;:::-;6985:332;;;;;:::o;7323:60::-;7351:3;7372:5;7365:12;;7323:60;;;:::o;7389:142::-;7439:9;7472:53;7490:34;7499:24;7517:5;7499:24;:::i;:::-;7490:34;:::i;:::-;7472:53;:::i;:::-;7459:66;;7389:142;;;:::o;7537:126::-;7587:9;7620:37;7651:5;7620:37;:::i;:::-;7607:50;;7537:126;;;:::o;7669:151::-;7744:9;7777:37;7808:5;7777:37;:::i;:::-;7764:50;;7669:151;;;:::o;7826:181::-;7938:62;7994:5;7938:62;:::i;:::-;7933:3;7926:75;7826:181;;:::o;8013:272::-;8131:4;8169:2;8158:9;8154:18;8146:26;;8182:96;8275:1;8264:9;8260:17;8251:6;8182:96;:::i;:::-;8013:272;;;;:::o;8291:329::-;8350:6;8399:2;8387:9;8378:7;8374:23;8370:32;8367:119;;;8405:79;;:::i;:::-;8367:119;8525:1;8550:53;8595:7;8586:6;8575:9;8571:22;8550:53;:::i;:::-;8540:63;;8496:117;8291:329;;;;:::o;8626:114::-;8693:6;8727:5;8721:12;8711:22;;8626:114;;;:::o;8746:184::-;8845:11;8879:6;8874:3;8867:19;8919:4;8914:3;8910:14;8895:29;;8746:184;;;;:::o;8936:132::-;9003:4;9026:3;9018:11;;9056:4;9051:3;9047:14;9039:22;;8936:132;;;:::o;9074:108::-;9151:24;9169:5;9151:24;:::i;:::-;9146:3;9139:37;9074:108;;:::o;9188:179::-;9257:10;9278:46;9320:3;9312:6;9278:46;:::i;:::-;9356:4;9351:3;9347:14;9333:28;;9188:179;;;;:::o;9373:113::-;9443:4;9475;9470:3;9466:14;9458:22;;9373:113;;;:::o;9522:732::-;9641:3;9670:54;9718:5;9670:54;:::i;:::-;9740:86;9819:6;9814:3;9740:86;:::i;:::-;9733:93;;9850:56;9900:5;9850:56;:::i;:::-;9929:7;9960:1;9945:284;9970:6;9967:1;9964:13;9945:284;;;10046:6;10040:13;10073:63;10132:3;10117:13;10073:63;:::i;:::-;10066:70;;10159:60;10212:6;10159:60;:::i;:::-;10149:70;;10005:224;9992:1;9989;9985:9;9980:14;;9945:284;;;9949:14;10245:3;10238:10;;9646:608;;;9522:732;;;;:::o;10260:373::-;10403:4;10441:2;10430:9;10426:18;10418:26;;10490:9;10484:4;10480:20;10476:1;10465:9;10461:17;10454:47;10518:108;10621:4;10612:6;10518:108;:::i;:::-;10510:116;;10260:373;;;;:::o;10639:86::-;10674:7;10714:4;10707:5;10703:16;10692:27;;10639:86;;;:::o;10731:118::-;10802:22;10818:5;10802:22;:::i;:::-;10795:5;10792:33;10782:61;;10839:1;10836;10829:12;10782:61;10731:118;:::o;10855:135::-;10899:5;10937:6;10924:20;10915:29;;10953:31;10978:5;10953:31;:::i;:::-;10855:135;;;;:::o;10996:325::-;11053:6;11102:2;11090:9;11081:7;11077:23;11073:32;11070:119;;;11108:79;;:::i;:::-;11070:119;11228:1;11253:51;11296:7;11287:6;11276:9;11272:22;11253:51;:::i;:::-;11243:61;;11199:115;10996:325;;;;:::o;11327:117::-;11436:1;11433;11426:12;11450:117;11559:1;11556;11549:12;11573:117;11682:1;11679;11672:12;11709:552;11766:8;11776:6;11826:3;11819:4;11811:6;11807:17;11803:27;11793:122;;11834:79;;:::i;:::-;11793:122;11947:6;11934:20;11924:30;;11977:18;11969:6;11966:30;11963:117;;;11999:79;;:::i;:::-;11963:117;12113:4;12105:6;12101:17;12089:29;;12167:3;12159:4;12151:6;12147:17;12137:8;12133:32;12130:41;12127:128;;;12174:79;;:::i;:::-;12127:128;11709:552;;;;;:::o;12267:527::-;12337:6;12345;12394:2;12382:9;12373:7;12369:23;12365:32;12362:119;;;12400:79;;:::i;:::-;12362:119;12548:1;12537:9;12533:17;12520:31;12578:18;12570:6;12567:30;12564:117;;;12600:79;;:::i;:::-;12564:117;12713:64;12769:7;12760:6;12749:9;12745:22;12713:64;:::i;:::-;12695:82;;;;12491:296;12267:527;;;;;:::o;12800:180::-;12848:77;12845:1;12838:88;12945:4;12942:1;12935:15;12969:4;12966:1;12959:15;12986:281;13069:27;13091:4;13069:27;:::i;:::-;13061:6;13057:40;13199:6;13187:10;13184:22;13163:18;13151:10;13148:34;13145:62;13142:88;;;13210:18;;:::i;:::-;13142:88;13250:10;13246:2;13239:22;13029:238;12986:281;;:::o;13273:129::-;13307:6;13334:20;;:::i;:::-;13324:30;;13363:33;13391:4;13383:6;13363:33;:::i;:::-;13273:129;;;:::o;13408:311::-;13485:4;13575:18;13567:6;13564:30;13561:56;;;13597:18;;:::i;:::-;13561:56;13647:4;13639:6;13635:17;13627:25;;13707:4;13701;13697:15;13689:23;;13408:311;;;:::o;13742:710::-;13838:5;13863:81;13879:64;13936:6;13879:64;:::i;:::-;13863:81;:::i;:::-;13854:90;;13964:5;13993:6;13986:5;13979:21;14027:4;14020:5;14016:16;14009:23;;14080:4;14072:6;14068:17;14060:6;14056:30;14109:3;14101:6;14098:15;14095:122;;;14128:79;;:::i;:::-;14095:122;14243:6;14226:220;14260:6;14255:3;14252:15;14226:220;;;14335:3;14364:37;14397:3;14385:10;14364:37;:::i;:::-;14359:3;14352:50;14431:4;14426:3;14422:14;14415:21;;14302:144;14286:4;14281:3;14277:14;14270:21;;14226:220;;;14230:21;13844:608;;13742:710;;;;;:::o;14475:370::-;14546:5;14595:3;14588:4;14580:6;14576:17;14572:27;14562:122;;14603:79;;:::i;:::-;14562:122;14720:6;14707:20;14745:94;14835:3;14827:6;14820:4;14812:6;14808:17;14745:94;:::i;:::-;14736:103;;14552:293;14475:370;;;;:::o;14851:539::-;14935:6;14984:2;14972:9;14963:7;14959:23;14955:32;14952:119;;;14990:79;;:::i;:::-;14952:119;15138:1;15127:9;15123:17;15110:31;15168:18;15160:6;15157:30;15154:117;;;15190:79;;:::i;:::-;15154:117;15295:78;15365:7;15356:6;15345:9;15341:22;15295:78;:::i;:::-;15285:88;;15081:302;14851:539;;;;:::o;15396:117::-;15505:1;15502;15495:12;15519:308;15581:4;15671:18;15663:6;15660:30;15657:56;;;15693:18;;:::i;:::-;15657:56;15731:29;15753:6;15731:29;:::i;:::-;15723:37;;15815:4;15809;15805:15;15797:23;;15519:308;;;:::o;15833:154::-;15917:6;15912:3;15907;15894:30;15979:1;15970:6;15965:3;15961:16;15954:27;15833:154;;;:::o;15993:412::-;16071:5;16096:66;16112:49;16154:6;16112:49;:::i;:::-;16096:66;:::i;:::-;16087:75;;16185:6;16178:5;16171:21;16223:4;16216:5;16212:16;16261:3;16252:6;16247:3;16243:16;16240:25;16237:112;;;16268:79;;:::i;:::-;16237:112;16358:41;16392:6;16387:3;16382;16358:41;:::i;:::-;16077:328;15993:412;;;;;:::o;16425:340::-;16481:5;16530:3;16523:4;16515:6;16511:17;16507:27;16497:122;;16538:79;;:::i;:::-;16497:122;16655:6;16642:20;16680:79;16755:3;16747:6;16740:4;16732:6;16728:17;16680:79;:::i;:::-;16671:88;;16487:278;16425:340;;;;:::o;16771:509::-;16840:6;16889:2;16877:9;16868:7;16864:23;16860:32;16857:119;;;16895:79;;:::i;:::-;16857:119;17043:1;17032:9;17028:17;17015:31;17073:18;17065:6;17062:30;17059:117;;;17095:79;;:::i;:::-;17059:117;17200:63;17255:7;17246:6;17235:9;17231:22;17200:63;:::i;:::-;17190:73;;16986:287;16771:509;;;;:::o;17286:98::-;17337:6;17371:5;17365:12;17355:22;;17286:98;;;:::o;17390:168::-;17473:11;17507:6;17502:3;17495:19;17547:4;17542:3;17538:14;17523:29;;17390:168;;;;:::o;17564:360::-;17650:3;17678:38;17710:5;17678:38;:::i;:::-;17732:70;17795:6;17790:3;17732:70;:::i;:::-;17725:77;;17811:52;17856:6;17851:3;17844:4;17837:5;17833:16;17811:52;:::i;:::-;17888:29;17910:6;17888:29;:::i;:::-;17883:3;17879:39;17872:46;;17654:270;17564:360;;;;:::o;17930:407::-;18063:4;18101:2;18090:9;18086:18;18078:26;;18114:65;18176:1;18165:9;18161:17;18152:6;18114:65;:::i;:::-;18226:9;18220:4;18216:20;18211:2;18200:9;18196:18;18189:48;18254:76;18325:4;18316:6;18254:76;:::i;:::-;18246:84;;17930:407;;;;;:::o;18343:468::-;18408:6;18416;18465:2;18453:9;18444:7;18440:23;18436:32;18433:119;;;18471:79;;:::i;:::-;18433:119;18591:1;18616:53;18661:7;18652:6;18641:9;18637:22;18616:53;:::i;:::-;18606:63;;18562:117;18718:2;18744:50;18786:7;18777:6;18766:9;18762:22;18744:50;:::i;:::-;18734:60;;18689:115;18343:468;;;;;:::o;18817:140::-;18881:9;18914:37;18945:5;18914:37;:::i;:::-;18901:50;;18817:140;;;:::o;18963:159::-;19064:51;19109:5;19064:51;:::i;:::-;19059:3;19052:64;18963:159;;:::o;19128:250::-;19235:4;19273:2;19262:9;19258:18;19250:26;;19286:85;19368:1;19357:9;19353:17;19344:6;19286:85;:::i;:::-;19128:250;;;;:::o;19384:307::-;19445:4;19535:18;19527:6;19524:30;19521:56;;;19557:18;;:::i;:::-;19521:56;19595:29;19617:6;19595:29;:::i;:::-;19587:37;;19679:4;19673;19669:15;19661:23;;19384:307;;;:::o;19697:410::-;19774:5;19799:65;19815:48;19856:6;19815:48;:::i;:::-;19799:65;:::i;:::-;19790:74;;19887:6;19880:5;19873:21;19925:4;19918:5;19914:16;19963:3;19954:6;19949:3;19945:16;19942:25;19939:112;;;19970:79;;:::i;:::-;19939:112;20060:41;20094:6;20089:3;20084;20060:41;:::i;:::-;19780:327;19697:410;;;;;:::o;20126:338::-;20181:5;20230:3;20223:4;20215:6;20211:17;20207:27;20197:122;;20238:79;;:::i;:::-;20197:122;20355:6;20342:20;20380:78;20454:3;20446:6;20439:4;20431:6;20427:17;20380:78;:::i;:::-;20371:87;;20187:277;20126:338;;;;:::o;20470:943::-;20565:6;20573;20581;20589;20638:3;20626:9;20617:7;20613:23;20609:33;20606:120;;;20645:79;;:::i;:::-;20606:120;20765:1;20790:53;20835:7;20826:6;20815:9;20811:22;20790:53;:::i;:::-;20780:63;;20736:117;20892:2;20918:53;20963:7;20954:6;20943:9;20939:22;20918:53;:::i;:::-;20908:63;;20863:118;21020:2;21046:53;21091:7;21082:6;21071:9;21067:22;21046:53;:::i;:::-;21036:63;;20991:118;21176:2;21165:9;21161:18;21148:32;21207:18;21199:6;21196:30;21193:117;;;21229:79;;:::i;:::-;21193:117;21334:62;21388:7;21379:6;21368:9;21364:22;21334:62;:::i;:::-;21324:72;;21119:287;20470:943;;;;;;;:::o;21419:112::-;21502:22;21518:5;21502:22;:::i;:::-;21497:3;21490:35;21419:112;;:::o;21537:214::-;21626:4;21664:2;21653:9;21649:18;21641:26;;21677:67;21741:1;21730:9;21726:17;21717:6;21677:67;:::i;:::-;21537:214;;;;:::o;21757:474::-;21825:6;21833;21882:2;21870:9;21861:7;21857:23;21853:32;21850:119;;;21888:79;;:::i;:::-;21850:119;22008:1;22033:53;22078:7;22069:6;22058:9;22054:22;22033:53;:::i;:::-;22023:63;;21979:117;22135:2;22161:53;22206:7;22197:6;22186:9;22182:22;22161:53;:::i;:::-;22151:63;;22106:118;21757:474;;;;;:::o;22237:182::-;22377:34;22373:1;22365:6;22361:14;22354:58;22237:182;:::o;22425:366::-;22567:3;22588:67;22652:2;22647:3;22588:67;:::i;:::-;22581:74;;22664:93;22753:3;22664:93;:::i;:::-;22782:2;22777:3;22773:12;22766:19;;22425:366;;;:::o;22797:419::-;22963:4;23001:2;22990:9;22986:18;22978:26;;23050:9;23044:4;23040:20;23036:1;23025:9;23021:17;23014:47;23078:131;23204:4;23078:131;:::i;:::-;23070:139;;22797:419;;;:::o;23222:180::-;23270:77;23267:1;23260:88;23367:4;23364:1;23357:15;23391:4;23388:1;23381:15;23408:320;23452:6;23489:1;23483:4;23479:12;23469:22;;23536:1;23530:4;23526:12;23557:18;23547:81;;23613:4;23605:6;23601:17;23591:27;;23547:81;23675:2;23667:6;23664:14;23644:18;23641:38;23638:84;;23694:18;;:::i;:::-;23638:84;23459:269;23408:320;;;:::o;23734:231::-;23874:34;23870:1;23862:6;23858:14;23851:58;23943:14;23938:2;23930:6;23926:15;23919:39;23734:231;:::o;23971:366::-;24113:3;24134:67;24198:2;24193:3;24134:67;:::i;:::-;24127:74;;24210:93;24299:3;24210:93;:::i;:::-;24328:2;24323:3;24319:12;24312:19;;23971:366;;;:::o;24343:419::-;24509:4;24547:2;24536:9;24532:18;24524:26;;24596:9;24590:4;24586:20;24582:1;24571:9;24567:17;24560:47;24624:131;24750:4;24624:131;:::i;:::-;24616:139;;24343:419;;;:::o;24768:220::-;24908:34;24904:1;24896:6;24892:14;24885:58;24977:3;24972:2;24964:6;24960:15;24953:28;24768:220;:::o;24994:366::-;25136:3;25157:67;25221:2;25216:3;25157:67;:::i;:::-;25150:74;;25233:93;25322:3;25233:93;:::i;:::-;25351:2;25346:3;25342:12;25335:19;;24994:366;;;:::o;25366:419::-;25532:4;25570:2;25559:9;25555:18;25547:26;;25619:9;25613:4;25609:20;25605:1;25594:9;25590:17;25583:47;25647:131;25773:4;25647:131;:::i;:::-;25639:139;;25366:419;;;:::o;25791:243::-;25931:34;25927:1;25919:6;25915:14;25908:58;26000:26;25995:2;25987:6;25983:15;25976:51;25791:243;:::o;26040:366::-;26182:3;26203:67;26267:2;26262:3;26203:67;:::i;:::-;26196:74;;26279:93;26368:3;26279:93;:::i;:::-;26397:2;26392:3;26388:12;26381:19;;26040:366;;;:::o;26412:419::-;26578:4;26616:2;26605:9;26601:18;26593:26;;26665:9;26659:4;26655:20;26651:1;26640:9;26636:17;26629:47;26693:131;26819:4;26693:131;:::i;:::-;26685:139;;26412:419;;;:::o;26837:236::-;26977:34;26973:1;26965:6;26961:14;26954:58;27046:19;27041:2;27033:6;27029:15;27022:44;26837:236;:::o;27079:366::-;27221:3;27242:67;27306:2;27301:3;27242:67;:::i;:::-;27235:74;;27318:93;27407:3;27318:93;:::i;:::-;27436:2;27431:3;27427:12;27420:19;;27079:366;;;:::o;27451:419::-;27617:4;27655:2;27644:9;27640:18;27632:26;;27704:9;27698:4;27694:20;27690:1;27679:9;27675:17;27668:47;27732:131;27858:4;27732:131;:::i;:::-;27724:139;;27451:419;;;:::o;27876:180::-;27924:77;27921:1;27914:88;28021:4;28018:1;28011:15;28045:4;28042:1;28035:15;28062:348;28102:7;28125:20;28143:1;28125:20;:::i;:::-;28120:25;;28159:20;28177:1;28159:20;:::i;:::-;28154:25;;28347:1;28279:66;28275:74;28272:1;28269:81;28264:1;28257:9;28250:17;28246:105;28243:131;;;28354:18;;:::i;:::-;28243:131;28402:1;28399;28395:9;28384:20;;28062:348;;;;:::o;28416:180::-;28464:77;28461:1;28454:88;28561:4;28558:1;28551:15;28585:4;28582:1;28575:15;28602:185;28642:1;28659:20;28677:1;28659:20;:::i;:::-;28654:25;;28693:20;28711:1;28693:20;:::i;:::-;28688:25;;28732:1;28722:35;;28737:18;;:::i;:::-;28722:35;28779:1;28776;28772:9;28767:14;;28602:185;;;;:::o;28793:230::-;28933:34;28929:1;28921:6;28917:14;28910:58;29002:13;28997:2;28989:6;28985:15;28978:38;28793:230;:::o;29029:366::-;29171:3;29192:67;29256:2;29251:3;29192:67;:::i;:::-;29185:74;;29268:93;29357:3;29268:93;:::i;:::-;29386:2;29381:3;29377:12;29370:19;;29029:366;;;:::o;29401:419::-;29567:4;29605:2;29594:9;29590:18;29582:26;;29654:9;29648:4;29644:20;29640:1;29629:9;29625:17;29618:47;29682:131;29808:4;29682:131;:::i;:::-;29674:139;;29401:419;;;:::o;29826:180::-;29874:77;29871:1;29864:88;29971:4;29968:1;29961:15;29995:4;29992:1;29985:15;30012:233;30051:3;30074:24;30092:5;30074:24;:::i;:::-;30065:33;;30120:66;30113:5;30110:77;30107:103;;30190:18;;:::i;:::-;30107:103;30237:1;30230:5;30226:13;30219:20;;30012:233;;;:::o;30251:191::-;30291:4;30311:20;30329:1;30311:20;:::i;:::-;30306:25;;30345:20;30363:1;30345:20;:::i;:::-;30340:25;;30384:1;30381;30378:8;30375:34;;;30389:18;;:::i;:::-;30375:34;30434:1;30431;30427:9;30419:17;;30251:191;;;;:::o;30448:167::-;30485:3;30508:22;30524:5;30508:22;:::i;:::-;30499:31;;30552:4;30545:5;30542:15;30539:41;;30560:18;;:::i;:::-;30539:41;30607:1;30600:5;30596:13;30589:20;;30448:167;;;:::o;30621:231::-;30761:34;30757:1;30749:6;30745:14;30738:58;30830:14;30825:2;30817:6;30813:15;30806:39;30621:231;:::o;30858:366::-;31000:3;31021:67;31085:2;31080:3;31021:67;:::i;:::-;31014:74;;31097:93;31186:3;31097:93;:::i;:::-;31215:2;31210:3;31206:12;31199:19;;30858:366;;;:::o;31230:419::-;31396:4;31434:2;31423:9;31419:18;31411:26;;31483:9;31477:4;31473:20;31469:1;31458:9;31454:17;31447:47;31511:131;31637:4;31511:131;:::i;:::-;31503:139;;31230:419;;;:::o;31655:228::-;31795:34;31791:1;31783:6;31779:14;31772:58;31864:11;31859:2;31851:6;31847:15;31840:36;31655:228;:::o;31889:366::-;32031:3;32052:67;32116:2;32111:3;32052:67;:::i;:::-;32045:74;;32128:93;32217:3;32128:93;:::i;:::-;32246:2;32241:3;32237:12;32230:19;;31889:366;;;:::o;32261:419::-;32427:4;32465:2;32454:9;32450:18;32442:26;;32514:9;32508:4;32504:20;32500:1;32489:9;32485:17;32478:47;32542:131;32668:4;32542:131;:::i;:::-;32534:139;;32261:419;;;:::o;32686:229::-;32826:34;32822:1;32814:6;32810:14;32803:58;32895:12;32890:2;32882:6;32878:15;32871:37;32686:229;:::o;32921:366::-;33063:3;33084:67;33148:2;33143:3;33084:67;:::i;:::-;33077:74;;33160:93;33249:3;33160:93;:::i;:::-;33278:2;33273:3;33269:12;33262:19;;32921:366;;;:::o;33293:419::-;33459:4;33497:2;33486:9;33482:18;33474:26;;33546:9;33540:4;33536:20;33532:1;33521:9;33517:17;33510:47;33574:131;33700:4;33574:131;:::i;:::-;33566:139;;33293:419;;;:::o;33718:305::-;33758:3;33777:20;33795:1;33777:20;:::i;:::-;33772:25;;33811:20;33829:1;33811:20;:::i;:::-;33806:25;;33965:1;33897:66;33893:74;33890:1;33887:81;33884:107;;;33971:18;;:::i;:::-;33884:107;34015:1;34012;34008:9;34001:16;;33718:305;;;;:::o;34029:147::-;34130:11;34167:3;34152:18;;34029:147;;;;:::o;34182:114::-;;:::o;34302:398::-;34461:3;34482:83;34563:1;34558:3;34482:83;:::i;:::-;34475:90;;34574:93;34663:3;34574:93;:::i;:::-;34692:1;34687:3;34683:11;34676:18;;34302:398;;;:::o;34706:379::-;34890:3;34912:147;35055:3;34912:147;:::i;:::-;34905:154;;35076:3;35069:10;;34706:379;;;:::o;35091:234::-;35231:34;35227:1;35219:6;35215:14;35208:58;35300:17;35295:2;35287:6;35283:15;35276:42;35091:234;:::o;35331:366::-;35473:3;35494:67;35558:2;35553:3;35494:67;:::i;:::-;35487:74;;35570:93;35659:3;35570:93;:::i;:::-;35688:2;35683:3;35679:12;35672:19;;35331:366;;;:::o;35703:419::-;35869:4;35907:2;35896:9;35892:18;35884:26;;35956:9;35950:4;35946:20;35942:1;35931:9;35927:17;35920:47;35984:131;36110:4;35984:131;:::i;:::-;35976:139;;35703:419;;;:::o;36128:148::-;36230:11;36267:3;36252:18;;36128:148;;;;:::o;36282:377::-;36388:3;36416:39;36449:5;36416:39;:::i;:::-;36471:89;36553:6;36548:3;36471:89;:::i;:::-;36464:96;;36569:52;36614:6;36609:3;36602:4;36595:5;36591:16;36569:52;:::i;:::-;36646:6;36641:3;36637:16;36630:23;;36392:267;36282:377;;;;:::o;36665:141::-;36714:4;36737:3;36729:11;;36760:3;36757:1;36750:14;36794:4;36791:1;36781:18;36773:26;;36665:141;;;:::o;36836:845::-;36939:3;36976:5;36970:12;37005:36;37031:9;37005:36;:::i;:::-;37057:89;37139:6;37134:3;37057:89;:::i;:::-;37050:96;;37177:1;37166:9;37162:17;37193:1;37188:137;;;;37339:1;37334:341;;;;37155:520;;37188:137;37272:4;37268:9;37257;37253:25;37248:3;37241:38;37308:6;37303:3;37299:16;37292:23;;37188:137;;37334:341;37401:38;37433:5;37401:38;:::i;:::-;37461:1;37475:154;37489:6;37486:1;37483:13;37475:154;;;37563:7;37557:14;37553:1;37548:3;37544:11;37537:35;37613:1;37604:7;37600:15;37589:26;;37511:4;37508:1;37504:12;37499:17;;37475:154;;;37658:6;37653:3;37649:16;37642:23;;37341:334;;37155:520;;36943:738;;36836:845;;;;:::o;37687:589::-;37912:3;37934:95;38025:3;38016:6;37934:95;:::i;:::-;37927:102;;38046:95;38137:3;38128:6;38046:95;:::i;:::-;38039:102;;38158:92;38246:3;38237:6;38158:92;:::i;:::-;38151:99;;38267:3;38260:10;;37687:589;;;;;;:::o;38282:225::-;38422:34;38418:1;38410:6;38406:14;38399:58;38491:8;38486:2;38478:6;38474:15;38467:33;38282:225;:::o;38513:366::-;38655:3;38676:67;38740:2;38735:3;38676:67;:::i;:::-;38669:74;;38752:93;38841:3;38752:93;:::i;:::-;38870:2;38865:3;38861:12;38854:19;;38513:366;;;:::o;38885:419::-;39051:4;39089:2;39078:9;39074:18;39066:26;;39138:9;39132:4;39128:20;39124:1;39113:9;39109:17;39102:47;39166:131;39292:4;39166:131;:::i;:::-;39158:139;;38885:419;;;:::o;39310:231::-;39450:34;39446:1;39438:6;39434:14;39427:58;39519:14;39514:2;39506:6;39502:15;39495:39;39310:231;:::o;39547:366::-;39689:3;39710:67;39774:2;39769:3;39710:67;:::i;:::-;39703:74;;39786:93;39875:3;39786:93;:::i;:::-;39904:2;39899:3;39895:12;39888:19;;39547:366;;;:::o;39919:419::-;40085:4;40123:2;40112:9;40108:18;40100:26;;40172:9;40166:4;40162:20;40158:1;40147:9;40143:17;40136:47;40200:131;40326:4;40200:131;:::i;:::-;40192:139;;39919:419;;;:::o;40344:224::-;40484:34;40480:1;40472:6;40468:14;40461:58;40553:7;40548:2;40540:6;40536:15;40529:32;40344:224;:::o;40574:366::-;40716:3;40737:67;40801:2;40796:3;40737:67;:::i;:::-;40730:74;;40813:93;40902:3;40813:93;:::i;:::-;40931:2;40926:3;40922:12;40915:19;;40574:366;;;:::o;40946:419::-;41112:4;41150:2;41139:9;41135:18;41127:26;;41199:9;41193:4;41189:20;41185:1;41174:9;41170:17;41163:47;41227:131;41353:4;41227:131;:::i;:::-;41219:139;;40946:419;;;:::o;41371:223::-;41511:34;41507:1;41499:6;41495:14;41488:58;41580:6;41575:2;41567:6;41563:15;41556:31;41371:223;:::o;41600:366::-;41742:3;41763:67;41827:2;41822:3;41763:67;:::i;:::-;41756:74;;41839:93;41928:3;41839:93;:::i;:::-;41957:2;41952:3;41948:12;41941:19;;41600:366;;;:::o;41972:419::-;42138:4;42176:2;42165:9;42161:18;42153:26;;42225:9;42219:4;42215:20;42211:1;42200:9;42196:17;42189:47;42253:131;42379:4;42253:131;:::i;:::-;42245:139;;41972:419;;;:::o;42397:143::-;42454:5;42485:6;42479:13;42470:22;;42501:33;42528:5;42501:33;:::i;:::-;42397:143;;;;:::o;42546:351::-;42616:6;42665:2;42653:9;42644:7;42640:23;42636:32;42633:119;;;42671:79;;:::i;:::-;42633:119;42791:1;42816:64;42872:7;42863:6;42852:9;42848:22;42816:64;:::i;:::-;42806:74;;42762:128;42546:351;;;;:::o;42903:85::-;42948:7;42977:5;42966:16;;42903:85;;;:::o;42994:158::-;43052:9;43085:61;43103:42;43112:32;43138:5;43112:32;:::i;:::-;43103:42;:::i;:::-;43085:61;:::i;:::-;43072:74;;42994:158;;;:::o;43158:147::-;43253:45;43292:5;43253:45;:::i;:::-;43248:3;43241:58;43158:147;;:::o;43311:114::-;43378:6;43412:5;43406:12;43396:22;;43311:114;;;:::o;43431:184::-;43530:11;43564:6;43559:3;43552:19;43604:4;43599:3;43595:14;43580:29;;43431:184;;;;:::o;43621:132::-;43688:4;43711:3;43703:11;;43741:4;43736:3;43732:14;43724:22;;43621:132;;;:::o;43759:108::-;43836:24;43854:5;43836:24;:::i;:::-;43831:3;43824:37;43759:108;;:::o;43873:179::-;43942:10;43963:46;44005:3;43997:6;43963:46;:::i;:::-;44041:4;44036:3;44032:14;44018:28;;43873:179;;;;:::o;44058:113::-;44128:4;44160;44155:3;44151:14;44143:22;;44058:113;;;:::o;44207:732::-;44326:3;44355:54;44403:5;44355:54;:::i;:::-;44425:86;44504:6;44499:3;44425:86;:::i;:::-;44418:93;;44535:56;44585:5;44535:56;:::i;:::-;44614:7;44645:1;44630:284;44655:6;44652:1;44649:13;44630:284;;;44731:6;44725:13;44758:63;44817:3;44802:13;44758:63;:::i;:::-;44751:70;;44844:60;44897:6;44844:60;:::i;:::-;44834:70;;44690:224;44677:1;44674;44670:9;44665:14;;44630:284;;;44634:14;44930:3;44923:10;;44331:608;;;44207:732;;;;:::o;44945:720::-;45180:4;45218:3;45207:9;45203:19;45195:27;;45232:79;45308:1;45297:9;45293:17;45284:6;45232:79;:::i;:::-;45358:9;45352:4;45348:20;45343:2;45332:9;45328:18;45321:48;45386:108;45489:4;45480:6;45386:108;:::i;:::-;45378:116;;45504:72;45572:2;45561:9;45557:18;45548:6;45504:72;:::i;:::-;45586;45654:2;45643:9;45639:18;45630:6;45586:72;:::i;:::-;44945:720;;;;;;;:::o;45671:311::-;45748:4;45838:18;45830:6;45827:30;45824:56;;;45860:18;;:::i;:::-;45824:56;45910:4;45902:6;45898:17;45890:25;;45970:4;45964;45960:15;45952:23;;45671:311;;;:::o;45988:143::-;46045:5;46076:6;46070:13;46061:22;;46092:33;46119:5;46092:33;:::i;:::-;45988:143;;;;:::o;46154:732::-;46261:5;46286:81;46302:64;46359:6;46302:64;:::i;:::-;46286:81;:::i;:::-;46277:90;;46387:5;46416:6;46409:5;46402:21;46450:4;46443:5;46439:16;46432:23;;46503:4;46495:6;46491:17;46483:6;46479:30;46532:3;46524:6;46521:15;46518:122;;;46551:79;;:::i;:::-;46518:122;46666:6;46649:231;46683:6;46678:3;46675:15;46649:231;;;46758:3;46787:48;46831:3;46819:10;46787:48;:::i;:::-;46782:3;46775:61;46865:4;46860:3;46856:14;46849:21;;46725:155;46709:4;46704:3;46700:14;46693:21;;46649:231;;;46653:21;46267:619;;46154:732;;;;;:::o;46909:385::-;46991:5;47040:3;47033:4;47025:6;47021:17;47017:27;47007:122;;47048:79;;:::i;:::-;47007:122;47158:6;47152:13;47183:105;47284:3;47276:6;47269:4;47261:6;47257:17;47183:105;:::i;:::-;47174:114;;46997:297;46909:385;;;;:::o;47300:554::-;47395:6;47444:2;47432:9;47423:7;47419:23;47415:32;47412:119;;;47450:79;;:::i;:::-;47412:119;47591:1;47580:9;47576:17;47570:24;47621:18;47613:6;47610:30;47607:117;;;47643:79;;:::i;:::-;47607:117;47748:89;47829:7;47820:6;47809:9;47805:22;47748:89;:::i;:::-;47738:99;;47541:306;47300:554;;;;:::o;47860:351::-;47930:6;47979:2;47967:9;47958:7;47954:23;47950:32;47947:119;;;47985:79;;:::i;:::-;47947:119;48105:1;48130:64;48186:7;48177:6;48166:9;48162:22;48130:64;:::i;:::-;48120:74;;48076:128;47860:351;;;;:::o;48217:137::-;48271:5;48302:6;48296:13;48287:22;;48318:30;48342:5;48318:30;:::i;:::-;48217:137;;;;:::o;48360:345::-;48427:6;48476:2;48464:9;48455:7;48451:23;48447:32;48444:119;;;48482:79;;:::i;:::-;48444:119;48602:1;48627:61;48680:7;48671:6;48660:9;48656:22;48627:61;:::i;:::-;48617:71;;48573:125;48360:345;;;;:::o;48711:138::-;48759:9;48792:51;48810:32;48819:22;48835:5;48819:22;:::i;:::-;48810:32;:::i;:::-;48792:51;:::i;:::-;48779:64;;48711:138;;;:::o;48855:127::-;48940:35;48969:5;48940:35;:::i;:::-;48935:3;48928:48;48855:127;;:::o;48988:218::-;49079:4;49117:2;49106:9;49102:18;49094:26;;49130:69;49196:1;49185:9;49181:17;49172:6;49130:69;:::i;:::-;48988:218;;;;:::o;49212:175::-;49352:27;49348:1;49340:6;49336:14;49329:51;49212:175;:::o;49393:366::-;49535:3;49556:67;49620:2;49615:3;49556:67;:::i;:::-;49549:74;;49632:93;49721:3;49632:93;:::i;:::-;49750:2;49745:3;49741:12;49734:19;;49393:366;;;:::o;49765:419::-;49931:4;49969:2;49958:9;49954:18;49946:26;;50018:9;50012:4;50008:20;50004:1;49993:9;49989:17;49982:47;50046:131;50172:4;50046:131;:::i;:::-;50038:139;;49765:419;;;:::o;50190:237::-;50330:34;50326:1;50318:6;50314:14;50307:58;50399:20;50394:2;50386:6;50382:15;50375:45;50190:237;:::o;50433:366::-;50575:3;50596:67;50660:2;50655:3;50596:67;:::i;:::-;50589:74;;50672:93;50761:3;50672:93;:::i;:::-;50790:2;50785:3;50781:12;50774:19;;50433:366;;;:::o;50805:419::-;50971:4;51009:2;50998:9;50994:18;50986:26;;51058:9;51052:4;51048:20;51044:1;51033:9;51029:17;51022:47;51086:131;51212:4;51086:131;:::i;:::-;51078:139;;50805:419;;;:::o;51230:176::-;51262:1;51279:20;51297:1;51279:20;:::i;:::-;51274:25;;51313:20;51331:1;51313:20;:::i;:::-;51308:25;;51352:1;51342:35;;51357:18;;:::i;:::-;51342:35;51398:1;51395;51391:9;51386:14;;51230:176;;;;:::o;51412:640::-;51607:4;51645:3;51634:9;51630:19;51622:27;;51659:71;51727:1;51716:9;51712:17;51703:6;51659:71;:::i;:::-;51740:72;51808:2;51797:9;51793:18;51784:6;51740:72;:::i;:::-;51822;51890:2;51879:9;51875:18;51866:6;51822:72;:::i;:::-;51941:9;51935:4;51931:20;51926:2;51915:9;51911:18;51904:48;51969:76;52040:4;52031:6;51969:76;:::i;:::-;51961:84;;51412:640;;;;;;;:::o;52058:141::-;52114:5;52145:6;52139:13;52130:22;;52161:32;52187:5;52161:32;:::i;:::-;52058:141;;;;:::o;52205:349::-;52274:6;52323:2;52311:9;52302:7;52298:23;52294:32;52291:119;;;52329:79;;:::i;:::-;52291:119;52449:1;52474:63;52529:7;52520:6;52509:9;52505:22;52474:63;:::i;:::-;52464:73;;52420:127;52205:349;;;;:::o;52560:180::-;52608:77;52605:1;52598:88;52705:4;52702:1;52695:15;52729:4;52726:1;52719:15;52746:182;52886:34;52882:1;52874:6;52870:14;52863:58;52746:182;:::o;52934:366::-;53076:3;53097:67;53161:2;53156:3;53097:67;:::i;:::-;53090:74;;53173:93;53262:3;53173:93;:::i;:::-;53291:2;53286:3;53282:12;53275:19;;52934:366;;;:::o;53306:419::-;53472:4;53510:2;53499:9;53495:18;53487:26;;53559:9;53553:4;53549:20;53545:1;53534:9;53530:17;53523:47;53587:131;53713:4;53587:131;:::i;:::-;53579:139;;53306:419;;;:::o;53731:178::-;53871:30;53867:1;53859:6;53855:14;53848:54;53731:178;:::o;53915:366::-;54057:3;54078:67;54142:2;54137:3;54078:67;:::i;:::-;54071:74;;54154:93;54243:3;54154:93;:::i;:::-;54272:2;54267:3;54263:12;54256:19;;53915:366;;;:::o;54287:419::-;54453:4;54491:2;54480:9;54476:18;54468:26;;54540:9;54534:4;54530:20;54526:1;54515:9;54511:17;54504:47;54568:131;54694:4;54568:131;:::i;:::-;54560:139;;54287:419;;;:::o
Swarm Source
ipfs://826291d5461d5763f2389c793544f7878086574ac659ac262b67e51aa60f7dc1
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.