ERC-721
Overview
Max Total Supply
0 MM
Holders
58
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 MMLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
MysticalMuses
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.11; import "./ERC721.sol"; import "./Counters.sol"; import "./Ownable.sol"; contract MysticalMuses is ERC721, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenSupply; Counters.Counter private _nextTokenId; uint256 public mintPrice = 0.07 ether; uint256 public presalePrice = 0.06 ether; uint256 private reserveAtATime = 50; uint256 private reservedCount = 0; uint256 private maxReserveCount = 100; string _baseTokenURI; bool public isActive = false; bool public isPresaleActive = false; uint256 public MAX_SUPPLY = 7777; uint256 public maximumAllowedTokensPerPurchase = 5; uint256 public maximumAllowedTokensPerWallet = 10; uint256 public allowListMaxMint = 4; mapping(address => bool) private _allowList; mapping(address => uint256) private _allowListClaimed; event AssetMinted(uint256 tokenId, address sender); event SaleActivation(bool isActive); constructor(string memory baseURI) ERC721("Mystical Muses", "MM") { setBaseURI(baseURI); } modifier saleIsOpen { require(_tokenSupply.current() <= MAX_SUPPLY, "Sale has ended."); _; } modifier onlyAuthorized() { require(owner() == msg.sender); _; } function tokensMinted() public view returns (uint256) { return _tokenSupply.current(); } function setMaximumAllowedTokens(uint256 _count) public onlyAuthorized { maximumAllowedTokensPerPurchase = _count; } function setMaximumAllowedTokensPerWallet(uint256 _count) public onlyAuthorized { maximumAllowedTokensPerWallet = _count; } function setActive(bool val) public onlyAuthorized { isActive = val; emit SaleActivation(val); } function setMaxMintSupply(uint256 maxMintSupply) external onlyAuthorized { MAX_SUPPLY = maxMintSupply; } function setIsPresaleActive(bool _isPresaleActive) external onlyAuthorized { isPresaleActive = _isPresaleActive; } function setAllowListMaxMint(uint256 maxMint) external onlyAuthorized { allowListMaxMint = maxMint; } function addToAllowList(address[] calldata addresses) external onlyAuthorized { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add a null address"); _allowList[addresses[i]] = true; _allowListClaimed[addresses[i]] > 0 ? _allowListClaimed[addresses[i]] : 0; } } function checkIfOnAllowList(address addr) external view returns (bool) { return _allowList[addr]; } function removeFromAllowList(address[] calldata addresses) external onlyAuthorized { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add a null address"); _allowList[addresses[i]] = false; } } function allowListClaimedBy(address owner) external view returns (uint256){ require(owner != address(0), 'Zero address not on Allow List'); return _allowListClaimed[owner]; } function setReserveAtATime(uint256 val) public onlyAuthorized { reserveAtATime = val; } function setMaxReserve(uint256 val) public onlyAuthorized { maxReserveCount = val; } function setPrice(uint256 _price) public onlyAuthorized { mintPrice = _price; } function setPresalePrice(uint256 _presalePrice) public onlyAuthorized { presalePrice = _presalePrice; } function setBaseURI(string memory baseURI) public onlyAuthorized { _baseTokenURI = baseURI; } function getReserveAtATime() external view returns (uint256) { return reserveAtATime; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function reserveNft() public onlyAuthorized { require(reservedCount <= maxReserveCount, "Max Reserves taken already!"); uint256 i; for (i = 0; i < reserveAtATime; i++) { _tokenSupply.increment(); _safeMint(msg.sender, _tokenSupply.current()); reservedCount++; } } function reserveToCustomWallet(address _walletAddress, uint256 _count) public onlyAuthorized { for (uint256 i = 0; i < _count; i++) { _tokenSupply.increment(); _safeMint(_walletAddress, _tokenSupply.current()); } } function batchReserveToMultipleAddresses(uint256 _count, address[] calldata addresses) external onlyAuthorized { uint256 supply = _tokenSupply.current(); require(supply + _count <= MAX_SUPPLY, "Total supply exceeded."); require(supply <= MAX_SUPPLY, "Total supply spent."); for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add a null address"); for(uint256 j = 0; j < _count; j++) { _tokenSupply.increment(); _safeMint(addresses[i], _tokenSupply.current()); } } } function mint(uint256 _count) public payable saleIsOpen { uint256 mintIndex = _tokenSupply.current(); if (msg.sender != owner()) { require(isActive, "Sale is not active currently."); require(balanceOf(msg.sender) + _count <= maximumAllowedTokensPerWallet, "Max holding cap reached."); } require(mintIndex + _count <= MAX_SUPPLY, "Total supply exceeded."); require( _count <= maximumAllowedTokensPerPurchase, "Exceeds maximum allowed tokens" ); require(msg.value >= mintPrice * _count, "Insufficient ETH amount sent."); for (uint256 i = 0; i < _count; i++) { _tokenSupply.increment(); _safeMint(msg.sender, _tokenSupply.current()); } } function preSaleMint(uint256 _count) public payable saleIsOpen { uint256 mintIndex = _tokenSupply.current(); require(isPresaleActive, 'Allow List is not active'); require(_allowList[msg.sender], 'You are not on the Allow List'); require(mintIndex < MAX_SUPPLY, 'All tokens have been minted'); require(_count <= allowListMaxMint, 'Cannot purchase this many tokens'); require(_allowListClaimed[msg.sender] + _count <= allowListMaxMint, 'Purchase exceeds max allowed'); require(msg.value >= presalePrice * _count, 'Insuffient ETH amount sent.'); for (uint256 i = 0; i < _count; i++) { _tokenSupply.increment(); _safeMint(msg.sender, _tokenSupply.current()); } } function withdraw() external onlyAuthorized { uint balance = address(this).balance; payable(owner()).transfer(balance); } }
// SPDX-License-Identifier: MIT // 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); } } } }
// SPDX-License-Identifier: MIT // 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "./Strings.sol"; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @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 || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @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); } }
// SPDX-License-Identifier: MIT // 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","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":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"AssetMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"}],"name":"SaleActivation","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":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"allowListClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowListMaxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"batchReserveToMultipleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkIfOnAllowList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"getReserveAtATime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"isPresaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumAllowedTokensPerPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumAllowedTokensPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_count","type":"uint256"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeFromAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"reserveToCustomWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMint","type":"uint256"}],"name":"setAllowListMaxMint","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPresaleActive","type":"bool"}],"name":"setIsPresaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintSupply","type":"uint256"}],"name":"setMaxMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMaxReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"setMaximumAllowedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"setMaximumAllowedTokensPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presalePrice","type":"uint256"}],"name":"setPresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setReserveAtATime","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266f8b0a10e47000060095566d529ae9e860000600a556032600b556000600c556064600d556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff021916908315150217905550611e616010556005601155600a60125560046013553480156200008157600080fd5b50604051620054b5380380620054b58339818101604052810190620000a7919062000528565b6040518060400160405280600e81526020017f4d7973746963616c204d757365730000000000000000000000000000000000008152506040518060400160405280600281526020017f4d4d00000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200012b929190620002db565b50806001908051906020019062000144929190620002db565b505050620001676200015b6200017f60201b60201c565b6200018760201b60201c565b62000178816200024d60201b60201c565b50620005de565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff1662000274620002b160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200029557600080fd5b80600e9080519060200190620002ad929190620002db565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002e990620005a8565b90600052602060002090601f0160209004810192826200030d576000855562000359565b82601f106200032857805160ff191683800117855562000359565b8280016001018555821562000359579182015b82811115620003585782518255916020019190600101906200033b565b5b5090506200036891906200036c565b5090565b5b80821115620003875760008160009055506001016200036d565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003f482620003a9565b810181811067ffffffffffffffff82111715620004165762000415620003ba565b5b80604052505050565b60006200042b6200038b565b9050620004398282620003e9565b919050565b600067ffffffffffffffff8211156200045c576200045b620003ba565b5b6200046782620003a9565b9050602081019050919050565b60005b838110156200049457808201518184015260208101905062000477565b83811115620004a4576000848401525b50505050565b6000620004c1620004bb846200043e565b6200041f565b905082815260208101848484011115620004e057620004df620003a4565b5b620004ed84828562000474565b509392505050565b600082601f8301126200050d576200050c6200039f565b5b81516200051f848260208601620004aa565b91505092915050565b60006020828403121562000541576200054062000395565b5b600082015167ffffffffffffffff8111156200056257620005616200039a565b5b6200057084828501620004f5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005c157607f821691505b60208210811415620005d857620005d762000579565b5b50919050565b614ec780620005ee6000396000f3fe6080604052600436106102865760003560e01c806371e3500c1161015a578063a22cb465116100c1578063e7b62d961161007a578063e7b62d9614610970578063e82b2a711461099b578063e985e9c5146109c4578063ea6eb83614610a01578063f2fde38b14610a2a578063f6c9d9e314610a5357610286565b8063a22cb46514610864578063a51312c81461088d578063acec338a146108b6578063b88d4fde146108df578063c87b56dd14610908578063cadf88181461094557610286565b80637f44ab2f116101135780637f44ab2f146107735780638da5cb5b1461079e57806391b7f5ed146107c957806395d89b41146107f25780639a3bf7281461081d578063a0712d681461084857610286565b806371e3500c1461069c5780637263cfe2146106b35780637389fbb7146106dc57806377b501b9146107055780637835c6351461072e5780637a6685f11461074a57610286565b80633ccfd60b116101fe57806360d938dc116101b757806360d938dc1461058a5780636352211e146105b55780636817c76c146105f25780636de9f32b1461061d57806370a0823114610648578063715018a61461068557610286565b80633ccfd60b146104a657806342842e0e146104bd578063443da2a2146104e65780634dfea6271461050f57806355f804b31461053857806356a87caa1461056157610286565b8063095ea7b311610250578063095ea7b31461039857806322f3e2d4146103c157806323b872dd146103ec5780632c1205f41461041557806332cb6b0c146104525780633549345e1461047d57610286565b806208ffdd1461028b5780620e7fa8146102c857806301ffc9a7146102f357806306fdde0314610330578063081812fc1461035b575b600080fd5b34801561029757600080fd5b506102b260048036038101906102ad9190613414565b610a7c565b6040516102bf919061345a565b60405180910390f35b3480156102d457600080fd5b506102dd610b34565b6040516102ea919061345a565b60405180910390f35b3480156102ff57600080fd5b5061031a600480360381019061031591906134cd565b610b3a565b6040516103279190613515565b60405180910390f35b34801561033c57600080fd5b50610345610c1c565b60405161035291906135c9565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190613617565b610cae565b60405161038f9190613653565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba919061366e565b610d33565b005b3480156103cd57600080fd5b506103d6610e4b565b6040516103e39190613515565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906136ae565b610e5e565b005b34801561042157600080fd5b5061043c60048036038101906104379190613414565b610ebe565b6040516104499190613515565b60405180910390f35b34801561045e57600080fd5b50610467610f14565b604051610474919061345a565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613617565b610f1a565b005b3480156104b257600080fd5b506104bb610f63565b005b3480156104c957600080fd5b506104e460048036038101906104df91906136ae565b610ff8565b005b3480156104f257600080fd5b5061050d6004803603810190610508919061372d565b611018565b005b34801561051b57600080fd5b5061053660048036038101906105319190613617565b611074565b005b34801561054457600080fd5b5061055f600480360381019061055a919061388f565b6110bd565b005b34801561056d57600080fd5b5061058860048036038101906105839190613617565b611116565b005b34801561059657600080fd5b5061059f61115f565b6040516105ac9190613515565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d79190613617565b611172565b6040516105e99190613653565b60405180910390f35b3480156105fe57600080fd5b50610607611224565b604051610614919061345a565b60405180910390f35b34801561062957600080fd5b5061063261122a565b60405161063f919061345a565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190613414565b61123b565b60405161067c919061345a565b60405180910390f35b34801561069157600080fd5b5061069a6112f3565b005b3480156106a857600080fd5b506106b161137b565b005b3480156106bf57600080fd5b506106da60048036038101906106d59190613938565b611459565b005b3480156106e857600080fd5b5061070360048036038101906106fe9190613617565b6116b2565b005b34801561071157600080fd5b5061072c6004803603810190610727919061366e565b6116fb565b005b61074860048036038101906107439190613617565b61177a565b005b34801561075657600080fd5b50610771600480360381019061076c9190613617565b611a59565b005b34801561077f57600080fd5b50610788611aa2565b604051610795919061345a565b60405180910390f35b3480156107aa57600080fd5b506107b3611aa8565b6040516107c09190613653565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb9190613617565b611ad2565b005b3480156107fe57600080fd5b50610807611b1b565b60405161081491906135c9565b60405180910390f35b34801561082957600080fd5b50610832611bad565b60405161083f919061345a565b60405180910390f35b610862600480360381019061085d9190613617565b611bb3565b005b34801561087057600080fd5b5061088b60048036038101906108869190613985565b611e16565b005b34801561089957600080fd5b506108b460048036038101906108af9190613938565b611e2c565b005b3480156108c257600080fd5b506108dd60048036038101906108d8919061372d565b611fa7565b005b3480156108eb57600080fd5b5061090660048036038101906109019190613a66565b61203a565b005b34801561091457600080fd5b5061092f600480360381019061092a9190613617565b61209c565b60405161093c91906135c9565b60405180910390f35b34801561095157600080fd5b5061095a612143565b604051610967919061345a565b60405180910390f35b34801561097c57600080fd5b50610985612149565b604051610992919061345a565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd9190613ae9565b612153565b005b3480156109d057600080fd5b506109eb60048036038101906109e69190613b49565b612357565b6040516109f89190613515565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a239190613617565b6123eb565b005b348015610a3657600080fd5b50610a516004803603810190610a4c9190613414565b612434565b005b348015610a5f57600080fd5b50610a7a6004803603810190610a759190613617565b61252c565b005b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490613bd5565b60405180910390fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c155750610c1482612575565b5b9050919050565b606060008054610c2b90613c24565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5790613c24565b8015610ca45780601f10610c7957610100808354040283529160200191610ca4565b820191906000526020600020905b815481529060010190602001808311610c8757829003601f168201915b5050505050905090565b6000610cb9826125df565b610cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cef90613cc8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d3e82611172565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690613d5a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dce61264b565b73ffffffffffffffffffffffffffffffffffffffff161480610dfd5750610dfc81610df761264b565b612357565b5b610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3390613dec565b60405180910390fd5b610e468383612653565b505050565b600f60009054906101000a900460ff1681565b610e6f610e6961264b565b8261270c565b610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea590613e7e565b60405180910390fd5b610eb98383836127ea565b505050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b3373ffffffffffffffffffffffffffffffffffffffff16610f39611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614610f5957600080fd5b80600a8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16610f82611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614610fa257600080fd5b6000479050610faf611aa8565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ff4573d6000803e3d6000fd5b5050565b6110138383836040518060200160405280600081525061203a565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16611037611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461105757600080fd5b80600f60016101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16611093611aa8565b73ffffffffffffffffffffffffffffffffffffffff16146110b357600080fd5b8060118190555050565b3373ffffffffffffffffffffffffffffffffffffffff166110dc611aa8565b73ffffffffffffffffffffffffffffffffffffffff16146110fc57600080fd5b80600e90805190602001906111129291906132ff565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16611135611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461115557600080fd5b80600d8190555050565b600f60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290613f10565b60405180910390fd5b80915050919050565b60095481565b60006112366007612a51565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390613fa2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112fb61264b565b73ffffffffffffffffffffffffffffffffffffffff16611319611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461136f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113669061400e565b60405180910390fd5b6113796000612a5f565b565b3373ffffffffffffffffffffffffffffffffffffffff1661139a611aa8565b73ffffffffffffffffffffffffffffffffffffffff16146113ba57600080fd5b600d54600c541115611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f89061407a565b60405180910390fd5b60005b600b54811015611456576114186007612b25565b61142b336114266007612a51565b612b3b565b600c600081548092919061143e906140c9565b9190505550808061144e906140c9565b915050611404565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611478611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461149857600080fd5b60005b828290508110156116ad57600073ffffffffffffffffffffffffffffffffffffffff168383838181106114d1576114d0614112565b5b90506020020160208101906114e69190613414565b73ffffffffffffffffffffffffffffffffffffffff16141561153d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115349061418d565b60405180910390fd5b60016014600085858581811061155657611555614112565b5b905060200201602081019061156b9190613414565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601560008585858181106115d5576115d4614112565b5b90506020020160208101906115ea9190613414565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611631576000611699565b6015600084848481811061164857611647614112565b5b905060200201602081019061165d9190613414565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b5080806116a5906140c9565b91505061149b565b505050565b3373ffffffffffffffffffffffffffffffffffffffff166116d1611aa8565b73ffffffffffffffffffffffffffffffffffffffff16146116f157600080fd5b8060108190555050565b3373ffffffffffffffffffffffffffffffffffffffff1661171a611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461173a57600080fd5b60005b818110156117755761174f6007612b25565b6117628361175d6007612a51565b612b3b565b808061176d906140c9565b91505061173d565b505050565b6010546117876007612a51565b11156117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf906141f9565b60405180910390fd5b60006117d46007612a51565b9050600f60019054906101000a900460ff16611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c90614265565b60405180910390fd5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a8906142d1565b60405180910390fd5b60105481106118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec9061433d565b60405180910390fd5b60135482111561193a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611931906143a9565b60405180910390fd5b60135482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461198891906143c9565b11156119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c09061446b565b60405180910390fd5b81600a546119d7919061448b565b341015611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090614531565b60405180910390fd5b60005b82811015611a5457611a2e6007612b25565b611a4133611a3c6007612a51565b612b3b565b8080611a4c906140c9565b915050611a1c565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16611a78611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614611a9857600080fd5b8060138190555050565b60135481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff16611af1611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614611b1157600080fd5b8060098190555050565b606060018054611b2a90613c24565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5690613c24565b8015611ba35780601f10611b7857610100808354040283529160200191611ba3565b820191906000526020600020905b815481529060010190602001808311611b8657829003601f168201915b5050505050905090565b60115481565b601054611bc06007612a51565b1115611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf8906141f9565b60405180910390fd5b6000611c0d6007612a51565b9050611c17611aa8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf157600f60009054906101000a900460ff16611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f9061459d565b60405180910390fd5b60125482611ca53361123b565b611caf91906143c9565b1115611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce790614609565b60405180910390fd5b5b6010548282611d0091906143c9565b1115611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614675565b60405180910390fd5b601154821115611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d906146e1565b60405180910390fd5b81600954611d94919061448b565b341015611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd9061474d565b60405180910390fd5b60005b82811015611e1157611deb6007612b25565b611dfe33611df96007612a51565b612b3b565b8080611e09906140c9565b915050611dd9565b505050565b611e28611e2161264b565b8383612b59565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16611e4b611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614611e6b57600080fd5b60005b82829050811015611fa257600073ffffffffffffffffffffffffffffffffffffffff16838383818110611ea457611ea3614112565b5b9050602002016020810190611eb99190613414565b73ffffffffffffffffffffffffffffffffffffffff161415611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f079061418d565b60405180910390fd5b600060146000858585818110611f2957611f28614112565b5b9050602002016020810190611f3e9190613414565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f9a906140c9565b915050611e6e565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16611fc6611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614611fe657600080fd5b80600f60006101000a81548160ff0219169083151502179055507f58655b75d3df612fe99ead00dbf0812d415d35078fe06217a94c0818bb13967f8160405161202f9190613515565b60405180910390a150565b61204b61204561264b565b8361270c565b61208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190613e7e565b60405180910390fd5b61209684848484612cc6565b50505050565b60606120a7826125df565b6120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd906147df565b60405180910390fd5b60006120f0612d22565b90506000815111612110576040518060200160405280600081525061213b565b8061211a84612db4565b60405160200161212b92919061483b565b6040516020818303038152906040525b915050919050565b60125481565b6000600b54905090565b3373ffffffffffffffffffffffffffffffffffffffff16612172611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461219257600080fd5b600061219e6007612a51565b905060105484826121af91906143c9565b11156121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790614675565b60405180910390fd5b601054811115612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c906148ab565b60405180910390fd5b60005b8383905081101561235057600073ffffffffffffffffffffffffffffffffffffffff1684848381811061226e5761226d614112565b5b90506020020160208101906122839190613414565b73ffffffffffffffffffffffffffffffffffffffff1614156122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d19061418d565b60405180910390fd5b60005b8581101561233c576122ef6007612b25565b61232985858481811061230557612304614112565b5b905060200201602081019061231a9190613414565b6123246007612a51565b612b3b565b8080612334906140c9565b9150506122dd565b508080612348906140c9565b915050612238565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff1661240a611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461242a57600080fd5b8060128190555050565b61243c61264b565b73ffffffffffffffffffffffffffffffffffffffff1661245a611aa8565b73ffffffffffffffffffffffffffffffffffffffff16146124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a79061400e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125179061493d565b60405180910390fd5b61252981612a5f565b50565b3373ffffffffffffffffffffffffffffffffffffffff1661254b611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461256b57600080fd5b80600b8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126c683611172565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612717826125df565b612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274d906149cf565b60405180910390fd5b600061276183611172565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127d057508373ffffffffffffffffffffffffffffffffffffffff166127b884610cae565b73ffffffffffffffffffffffffffffffffffffffff16145b806127e157506127e08185612357565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661280a82611172565b73ffffffffffffffffffffffffffffffffffffffff1614612860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285790614a61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c790614af3565b60405180910390fd5b6128db838383612f15565b6128e6600082612653565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129369190614b13565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461298d91906143c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a4c838383612f1a565b505050565b600081600001549050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b612b55828260405180602001604052806000815250612f1f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf90614b93565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cb99190613515565b60405180910390a3505050565b612cd18484846127ea565b612cdd84848484612f7a565b612d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1390614c25565b60405180910390fd5b50505050565b6060600e8054612d3190613c24565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5d90613c24565b8015612daa5780601f10612d7f57610100808354040283529160200191612daa565b820191906000526020600020905b815481529060010190602001808311612d8d57829003601f168201915b5050505050905090565b60606000821415612dfc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f10565b600082905060005b60008214612e2e578080612e17906140c9565b915050600a82612e279190614c74565b9150612e04565b60008167ffffffffffffffff811115612e4a57612e49613764565b5b6040519080825280601f01601f191660200182016040528015612e7c5781602001600182028036833780820191505090505b5090505b60008514612f0957600182612e959190614b13565b9150600a85612ea49190614ca5565b6030612eb091906143c9565b60f81b818381518110612ec657612ec5614112565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f029190614c74565b9450612e80565b8093505050505b919050565b505050565b505050565b612f298383613102565b612f366000848484612f7a565b612f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6c90614c25565b60405180910390fd5b505050565b6000612f9b8473ffffffffffffffffffffffffffffffffffffffff166132dc565b156130f5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fc461264b565b8786866040518563ffffffff1660e01b8152600401612fe69493929190614d2b565b6020604051808303816000875af192505050801561302257506040513d601f19601f8201168201806040525081019061301f9190614d8c565b60015b6130a5573d8060008114613052576040519150601f19603f3d011682016040523d82523d6000602084013e613057565b606091505b5060008151141561309d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309490614c25565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130fa565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316990614e05565b60405180910390fd5b61317b816125df565b156131bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b290614e71565b60405180910390fd5b6131c760008383612f15565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461321791906143c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132d860008383612f1a565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461330b90613c24565b90600052602060002090601f01602090048101928261332d5760008555613374565b82601f1061334657805160ff1916838001178555613374565b82800160010185558215613374579182015b82811115613373578251825591602001919060010190613358565b5b5090506133819190613385565b5090565b5b8082111561339e576000816000905550600101613386565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133e1826133b6565b9050919050565b6133f1816133d6565b81146133fc57600080fd5b50565b60008135905061340e816133e8565b92915050565b60006020828403121561342a576134296133ac565b5b6000613438848285016133ff565b91505092915050565b6000819050919050565b61345481613441565b82525050565b600060208201905061346f600083018461344b565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134aa81613475565b81146134b557600080fd5b50565b6000813590506134c7816134a1565b92915050565b6000602082840312156134e3576134e26133ac565b5b60006134f1848285016134b8565b91505092915050565b60008115159050919050565b61350f816134fa565b82525050565b600060208201905061352a6000830184613506565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561356a57808201518184015260208101905061354f565b83811115613579576000848401525b50505050565b6000601f19601f8301169050919050565b600061359b82613530565b6135a5818561353b565b93506135b581856020860161354c565b6135be8161357f565b840191505092915050565b600060208201905081810360008301526135e38184613590565b905092915050565b6135f481613441565b81146135ff57600080fd5b50565b600081359050613611816135eb565b92915050565b60006020828403121561362d5761362c6133ac565b5b600061363b84828501613602565b91505092915050565b61364d816133d6565b82525050565b60006020820190506136686000830184613644565b92915050565b60008060408385031215613685576136846133ac565b5b6000613693858286016133ff565b92505060206136a485828601613602565b9150509250929050565b6000806000606084860312156136c7576136c66133ac565b5b60006136d5868287016133ff565b93505060206136e6868287016133ff565b92505060406136f786828701613602565b9150509250925092565b61370a816134fa565b811461371557600080fd5b50565b60008135905061372781613701565b92915050565b600060208284031215613743576137426133ac565b5b600061375184828501613718565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61379c8261357f565b810181811067ffffffffffffffff821117156137bb576137ba613764565b5b80604052505050565b60006137ce6133a2565b90506137da8282613793565b919050565b600067ffffffffffffffff8211156137fa576137f9613764565b5b6138038261357f565b9050602081019050919050565b82818337600083830152505050565b600061383261382d846137df565b6137c4565b90508281526020810184848401111561384e5761384d61375f565b5b613859848285613810565b509392505050565b600082601f8301126138765761387561375a565b5b813561388684826020860161381f565b91505092915050565b6000602082840312156138a5576138a46133ac565b5b600082013567ffffffffffffffff8111156138c3576138c26133b1565b5b6138cf84828501613861565b91505092915050565b600080fd5b600080fd5b60008083601f8401126138f8576138f761375a565b5b8235905067ffffffffffffffff811115613915576139146138d8565b5b602083019150836020820283011115613931576139306138dd565b5b9250929050565b6000806020838503121561394f5761394e6133ac565b5b600083013567ffffffffffffffff81111561396d5761396c6133b1565b5b613979858286016138e2565b92509250509250929050565b6000806040838503121561399c5761399b6133ac565b5b60006139aa858286016133ff565b92505060206139bb85828601613718565b9150509250929050565b600067ffffffffffffffff8211156139e0576139df613764565b5b6139e98261357f565b9050602081019050919050565b6000613a09613a04846139c5565b6137c4565b905082815260208101848484011115613a2557613a2461375f565b5b613a30848285613810565b509392505050565b600082601f830112613a4d57613a4c61375a565b5b8135613a5d8482602086016139f6565b91505092915050565b60008060008060808587031215613a8057613a7f6133ac565b5b6000613a8e878288016133ff565b9450506020613a9f878288016133ff565b9350506040613ab087828801613602565b925050606085013567ffffffffffffffff811115613ad157613ad06133b1565b5b613add87828801613a38565b91505092959194509250565b600080600060408486031215613b0257613b016133ac565b5b6000613b1086828701613602565b935050602084013567ffffffffffffffff811115613b3157613b306133b1565b5b613b3d868287016138e2565b92509250509250925092565b60008060408385031215613b6057613b5f6133ac565b5b6000613b6e858286016133ff565b9250506020613b7f858286016133ff565b9150509250929050565b7f5a65726f2061646472657373206e6f74206f6e20416c6c6f77204c6973740000600082015250565b6000613bbf601e8361353b565b9150613bca82613b89565b602082019050919050565b60006020820190508181036000830152613bee81613bb2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c3c57607f821691505b60208210811415613c5057613c4f613bf5565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613cb2602c8361353b565b9150613cbd82613c56565b604082019050919050565b60006020820190508181036000830152613ce181613ca5565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d4460218361353b565b9150613d4f82613ce8565b604082019050919050565b60006020820190508181036000830152613d7381613d37565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613dd660388361353b565b9150613de182613d7a565b604082019050919050565b60006020820190508181036000830152613e0581613dc9565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613e6860318361353b565b9150613e7382613e0c565b604082019050919050565b60006020820190508181036000830152613e9781613e5b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613efa60298361353b565b9150613f0582613e9e565b604082019050919050565b60006020820190508181036000830152613f2981613eed565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613f8c602a8361353b565b9150613f9782613f30565b604082019050919050565b60006020820190508181036000830152613fbb81613f7f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ff860208361353b565b915061400382613fc2565b602082019050919050565b6000602082019050818103600083015261402781613feb565b9050919050565b7f4d61782052657365727665732074616b656e20616c7265616479210000000000600082015250565b6000614064601b8361353b565b915061406f8261402e565b602082019050919050565b6000602082019050818103600083015261409381614057565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140d482613441565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141075761410661409a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e2774206164642061206e756c6c20616464726573730000000000000000600082015250565b600061417760188361353b565b915061418282614141565b602082019050919050565b600060208201905081810360008301526141a68161416a565b9050919050565b7f53616c652068617320656e6465642e0000000000000000000000000000000000600082015250565b60006141e3600f8361353b565b91506141ee826141ad565b602082019050919050565b60006020820190508181036000830152614212816141d6565b9050919050565b7f416c6c6f77204c697374206973206e6f74206163746976650000000000000000600082015250565b600061424f60188361353b565b915061425a82614219565b602082019050919050565b6000602082019050818103600083015261427e81614242565b9050919050565b7f596f7520617265206e6f74206f6e2074686520416c6c6f77204c697374000000600082015250565b60006142bb601d8361353b565b91506142c682614285565b602082019050919050565b600060208201905081810360008301526142ea816142ae565b9050919050565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6000614327601b8361353b565b9150614332826142f1565b602082019050919050565b600060208201905081810360008301526143568161431a565b9050919050565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e73600082015250565b600061439360208361353b565b915061439e8261435d565b602082019050919050565b600060208201905081810360008301526143c281614386565b9050919050565b60006143d482613441565b91506143df83613441565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144145761441361409a565b5b828201905092915050565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b6000614455601c8361353b565b91506144608261441f565b602082019050919050565b6000602082019050818103600083015261448481614448565b9050919050565b600061449682613441565b91506144a183613441565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144da576144d961409a565b5b828202905092915050565b7f496e7375666669656e742045544820616d6f756e742073656e742e0000000000600082015250565b600061451b601b8361353b565b9150614526826144e5565b602082019050919050565b6000602082019050818103600083015261454a8161450e565b9050919050565b7f53616c65206973206e6f74206163746976652063757272656e746c792e000000600082015250565b6000614587601d8361353b565b915061459282614551565b602082019050919050565b600060208201905081810360008301526145b68161457a565b9050919050565b7f4d617820686f6c64696e672063617020726561636865642e0000000000000000600082015250565b60006145f360188361353b565b91506145fe826145bd565b602082019050919050565b60006020820190508181036000830152614622816145e6565b9050919050565b7f546f74616c20737570706c792065786365656465642e00000000000000000000600082015250565b600061465f60168361353b565b915061466a82614629565b602082019050919050565b6000602082019050818103600083015261468e81614652565b9050919050565b7f45786365656473206d6178696d756d20616c6c6f77656420746f6b656e730000600082015250565b60006146cb601e8361353b565b91506146d682614695565b602082019050919050565b600060208201905081810360008301526146fa816146be565b9050919050565b7f496e73756666696369656e742045544820616d6f756e742073656e742e000000600082015250565b6000614737601d8361353b565b915061474282614701565b602082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006147c9602f8361353b565b91506147d48261476d565b604082019050919050565b600060208201905081810360008301526147f8816147bc565b9050919050565b600081905092915050565b600061481582613530565b61481f81856147ff565b935061482f81856020860161354c565b80840191505092915050565b6000614847828561480a565b9150614853828461480a565b91508190509392505050565b7f546f74616c20737570706c79207370656e742e00000000000000000000000000600082015250565b600061489560138361353b565b91506148a08261485f565b602082019050919050565b600060208201905081810360008301526148c481614888565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061492760268361353b565b9150614932826148cb565b604082019050919050565b600060208201905081810360008301526149568161491a565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006149b9602c8361353b565b91506149c48261495d565b604082019050919050565b600060208201905081810360008301526149e8816149ac565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614a4b60258361353b565b9150614a56826149ef565b604082019050919050565b60006020820190508181036000830152614a7a81614a3e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614add60248361353b565b9150614ae882614a81565b604082019050919050565b60006020820190508181036000830152614b0c81614ad0565b9050919050565b6000614b1e82613441565b9150614b2983613441565b925082821015614b3c57614b3b61409a565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614b7d60198361353b565b9150614b8882614b47565b602082019050919050565b60006020820190508181036000830152614bac81614b70565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614c0f60328361353b565b9150614c1a82614bb3565b604082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c7f82613441565b9150614c8a83613441565b925082614c9a57614c99614c45565b5b828204905092915050565b6000614cb082613441565b9150614cbb83613441565b925082614ccb57614cca614c45565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614cfd82614cd6565b614d078185614ce1565b9350614d1781856020860161354c565b614d208161357f565b840191505092915050565b6000608082019050614d406000830187613644565b614d4d6020830186613644565b614d5a604083018561344b565b8181036060830152614d6c8184614cf2565b905095945050505050565b600081519050614d86816134a1565b92915050565b600060208284031215614da257614da16133ac565b5b6000614db084828501614d77565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614def60208361353b565b9150614dfa82614db9565b602082019050919050565b60006020820190508181036000830152614e1e81614de2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614e5b601c8361353b565b9150614e6682614e25565b602082019050919050565b60006020820190508181036000830152614e8a81614e4e565b905091905056fea26469706673582212203e425cee16bb41b9db9faceaf7b43911ab0dd8fd4ef3c01c61147ce340c0993b64736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000088416e6e6120506574726f7379616e205475652c204d61722032322c20353a303720414d202831206461792061676f2920746f206d65202068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d646a523473455351714a613638646731696a6e4b69776e626b4b4e53717555757443626e3772546f3136734c2f000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102865760003560e01c806371e3500c1161015a578063a22cb465116100c1578063e7b62d961161007a578063e7b62d9614610970578063e82b2a711461099b578063e985e9c5146109c4578063ea6eb83614610a01578063f2fde38b14610a2a578063f6c9d9e314610a5357610286565b8063a22cb46514610864578063a51312c81461088d578063acec338a146108b6578063b88d4fde146108df578063c87b56dd14610908578063cadf88181461094557610286565b80637f44ab2f116101135780637f44ab2f146107735780638da5cb5b1461079e57806391b7f5ed146107c957806395d89b41146107f25780639a3bf7281461081d578063a0712d681461084857610286565b806371e3500c1461069c5780637263cfe2146106b35780637389fbb7146106dc57806377b501b9146107055780637835c6351461072e5780637a6685f11461074a57610286565b80633ccfd60b116101fe57806360d938dc116101b757806360d938dc1461058a5780636352211e146105b55780636817c76c146105f25780636de9f32b1461061d57806370a0823114610648578063715018a61461068557610286565b80633ccfd60b146104a657806342842e0e146104bd578063443da2a2146104e65780634dfea6271461050f57806355f804b31461053857806356a87caa1461056157610286565b8063095ea7b311610250578063095ea7b31461039857806322f3e2d4146103c157806323b872dd146103ec5780632c1205f41461041557806332cb6b0c146104525780633549345e1461047d57610286565b806208ffdd1461028b5780620e7fa8146102c857806301ffc9a7146102f357806306fdde0314610330578063081812fc1461035b575b600080fd5b34801561029757600080fd5b506102b260048036038101906102ad9190613414565b610a7c565b6040516102bf919061345a565b60405180910390f35b3480156102d457600080fd5b506102dd610b34565b6040516102ea919061345a565b60405180910390f35b3480156102ff57600080fd5b5061031a600480360381019061031591906134cd565b610b3a565b6040516103279190613515565b60405180910390f35b34801561033c57600080fd5b50610345610c1c565b60405161035291906135c9565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190613617565b610cae565b60405161038f9190613653565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba919061366e565b610d33565b005b3480156103cd57600080fd5b506103d6610e4b565b6040516103e39190613515565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906136ae565b610e5e565b005b34801561042157600080fd5b5061043c60048036038101906104379190613414565b610ebe565b6040516104499190613515565b60405180910390f35b34801561045e57600080fd5b50610467610f14565b604051610474919061345a565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613617565b610f1a565b005b3480156104b257600080fd5b506104bb610f63565b005b3480156104c957600080fd5b506104e460048036038101906104df91906136ae565b610ff8565b005b3480156104f257600080fd5b5061050d6004803603810190610508919061372d565b611018565b005b34801561051b57600080fd5b5061053660048036038101906105319190613617565b611074565b005b34801561054457600080fd5b5061055f600480360381019061055a919061388f565b6110bd565b005b34801561056d57600080fd5b5061058860048036038101906105839190613617565b611116565b005b34801561059657600080fd5b5061059f61115f565b6040516105ac9190613515565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d79190613617565b611172565b6040516105e99190613653565b60405180910390f35b3480156105fe57600080fd5b50610607611224565b604051610614919061345a565b60405180910390f35b34801561062957600080fd5b5061063261122a565b60405161063f919061345a565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190613414565b61123b565b60405161067c919061345a565b60405180910390f35b34801561069157600080fd5b5061069a6112f3565b005b3480156106a857600080fd5b506106b161137b565b005b3480156106bf57600080fd5b506106da60048036038101906106d59190613938565b611459565b005b3480156106e857600080fd5b5061070360048036038101906106fe9190613617565b6116b2565b005b34801561071157600080fd5b5061072c6004803603810190610727919061366e565b6116fb565b005b61074860048036038101906107439190613617565b61177a565b005b34801561075657600080fd5b50610771600480360381019061076c9190613617565b611a59565b005b34801561077f57600080fd5b50610788611aa2565b604051610795919061345a565b60405180910390f35b3480156107aa57600080fd5b506107b3611aa8565b6040516107c09190613653565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb9190613617565b611ad2565b005b3480156107fe57600080fd5b50610807611b1b565b60405161081491906135c9565b60405180910390f35b34801561082957600080fd5b50610832611bad565b60405161083f919061345a565b60405180910390f35b610862600480360381019061085d9190613617565b611bb3565b005b34801561087057600080fd5b5061088b60048036038101906108869190613985565b611e16565b005b34801561089957600080fd5b506108b460048036038101906108af9190613938565b611e2c565b005b3480156108c257600080fd5b506108dd60048036038101906108d8919061372d565b611fa7565b005b3480156108eb57600080fd5b5061090660048036038101906109019190613a66565b61203a565b005b34801561091457600080fd5b5061092f600480360381019061092a9190613617565b61209c565b60405161093c91906135c9565b60405180910390f35b34801561095157600080fd5b5061095a612143565b604051610967919061345a565b60405180910390f35b34801561097c57600080fd5b50610985612149565b604051610992919061345a565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd9190613ae9565b612153565b005b3480156109d057600080fd5b506109eb60048036038101906109e69190613b49565b612357565b6040516109f89190613515565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a239190613617565b6123eb565b005b348015610a3657600080fd5b50610a516004803603810190610a4c9190613414565b612434565b005b348015610a5f57600080fd5b50610a7a6004803603810190610a759190613617565b61252c565b005b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490613bd5565b60405180910390fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c155750610c1482612575565b5b9050919050565b606060008054610c2b90613c24565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5790613c24565b8015610ca45780601f10610c7957610100808354040283529160200191610ca4565b820191906000526020600020905b815481529060010190602001808311610c8757829003601f168201915b5050505050905090565b6000610cb9826125df565b610cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cef90613cc8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d3e82611172565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690613d5a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dce61264b565b73ffffffffffffffffffffffffffffffffffffffff161480610dfd5750610dfc81610df761264b565b612357565b5b610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3390613dec565b60405180910390fd5b610e468383612653565b505050565b600f60009054906101000a900460ff1681565b610e6f610e6961264b565b8261270c565b610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea590613e7e565b60405180910390fd5b610eb98383836127ea565b505050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b3373ffffffffffffffffffffffffffffffffffffffff16610f39611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614610f5957600080fd5b80600a8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16610f82611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614610fa257600080fd5b6000479050610faf611aa8565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ff4573d6000803e3d6000fd5b5050565b6110138383836040518060200160405280600081525061203a565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16611037611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461105757600080fd5b80600f60016101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16611093611aa8565b73ffffffffffffffffffffffffffffffffffffffff16146110b357600080fd5b8060118190555050565b3373ffffffffffffffffffffffffffffffffffffffff166110dc611aa8565b73ffffffffffffffffffffffffffffffffffffffff16146110fc57600080fd5b80600e90805190602001906111129291906132ff565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16611135611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461115557600080fd5b80600d8190555050565b600f60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290613f10565b60405180910390fd5b80915050919050565b60095481565b60006112366007612a51565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390613fa2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112fb61264b565b73ffffffffffffffffffffffffffffffffffffffff16611319611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461136f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113669061400e565b60405180910390fd5b6113796000612a5f565b565b3373ffffffffffffffffffffffffffffffffffffffff1661139a611aa8565b73ffffffffffffffffffffffffffffffffffffffff16146113ba57600080fd5b600d54600c541115611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f89061407a565b60405180910390fd5b60005b600b54811015611456576114186007612b25565b61142b336114266007612a51565b612b3b565b600c600081548092919061143e906140c9565b9190505550808061144e906140c9565b915050611404565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611478611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461149857600080fd5b60005b828290508110156116ad57600073ffffffffffffffffffffffffffffffffffffffff168383838181106114d1576114d0614112565b5b90506020020160208101906114e69190613414565b73ffffffffffffffffffffffffffffffffffffffff16141561153d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115349061418d565b60405180910390fd5b60016014600085858581811061155657611555614112565b5b905060200201602081019061156b9190613414565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601560008585858181106115d5576115d4614112565b5b90506020020160208101906115ea9190613414565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611631576000611699565b6015600084848481811061164857611647614112565b5b905060200201602081019061165d9190613414565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b5080806116a5906140c9565b91505061149b565b505050565b3373ffffffffffffffffffffffffffffffffffffffff166116d1611aa8565b73ffffffffffffffffffffffffffffffffffffffff16146116f157600080fd5b8060108190555050565b3373ffffffffffffffffffffffffffffffffffffffff1661171a611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461173a57600080fd5b60005b818110156117755761174f6007612b25565b6117628361175d6007612a51565b612b3b565b808061176d906140c9565b91505061173d565b505050565b6010546117876007612a51565b11156117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf906141f9565b60405180910390fd5b60006117d46007612a51565b9050600f60019054906101000a900460ff16611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c90614265565b60405180910390fd5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a8906142d1565b60405180910390fd5b60105481106118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec9061433d565b60405180910390fd5b60135482111561193a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611931906143a9565b60405180910390fd5b60135482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461198891906143c9565b11156119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c09061446b565b60405180910390fd5b81600a546119d7919061448b565b341015611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090614531565b60405180910390fd5b60005b82811015611a5457611a2e6007612b25565b611a4133611a3c6007612a51565b612b3b565b8080611a4c906140c9565b915050611a1c565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16611a78611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614611a9857600080fd5b8060138190555050565b60135481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff16611af1611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614611b1157600080fd5b8060098190555050565b606060018054611b2a90613c24565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5690613c24565b8015611ba35780601f10611b7857610100808354040283529160200191611ba3565b820191906000526020600020905b815481529060010190602001808311611b8657829003601f168201915b5050505050905090565b60115481565b601054611bc06007612a51565b1115611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf8906141f9565b60405180910390fd5b6000611c0d6007612a51565b9050611c17611aa8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf157600f60009054906101000a900460ff16611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f9061459d565b60405180910390fd5b60125482611ca53361123b565b611caf91906143c9565b1115611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce790614609565b60405180910390fd5b5b6010548282611d0091906143c9565b1115611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614675565b60405180910390fd5b601154821115611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d906146e1565b60405180910390fd5b81600954611d94919061448b565b341015611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd9061474d565b60405180910390fd5b60005b82811015611e1157611deb6007612b25565b611dfe33611df96007612a51565b612b3b565b8080611e09906140c9565b915050611dd9565b505050565b611e28611e2161264b565b8383612b59565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16611e4b611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614611e6b57600080fd5b60005b82829050811015611fa257600073ffffffffffffffffffffffffffffffffffffffff16838383818110611ea457611ea3614112565b5b9050602002016020810190611eb99190613414565b73ffffffffffffffffffffffffffffffffffffffff161415611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f079061418d565b60405180910390fd5b600060146000858585818110611f2957611f28614112565b5b9050602002016020810190611f3e9190613414565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f9a906140c9565b915050611e6e565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16611fc6611aa8565b73ffffffffffffffffffffffffffffffffffffffff1614611fe657600080fd5b80600f60006101000a81548160ff0219169083151502179055507f58655b75d3df612fe99ead00dbf0812d415d35078fe06217a94c0818bb13967f8160405161202f9190613515565b60405180910390a150565b61204b61204561264b565b8361270c565b61208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190613e7e565b60405180910390fd5b61209684848484612cc6565b50505050565b60606120a7826125df565b6120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd906147df565b60405180910390fd5b60006120f0612d22565b90506000815111612110576040518060200160405280600081525061213b565b8061211a84612db4565b60405160200161212b92919061483b565b6040516020818303038152906040525b915050919050565b60125481565b6000600b54905090565b3373ffffffffffffffffffffffffffffffffffffffff16612172611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461219257600080fd5b600061219e6007612a51565b905060105484826121af91906143c9565b11156121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790614675565b60405180910390fd5b601054811115612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c906148ab565b60405180910390fd5b60005b8383905081101561235057600073ffffffffffffffffffffffffffffffffffffffff1684848381811061226e5761226d614112565b5b90506020020160208101906122839190613414565b73ffffffffffffffffffffffffffffffffffffffff1614156122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d19061418d565b60405180910390fd5b60005b8581101561233c576122ef6007612b25565b61232985858481811061230557612304614112565b5b905060200201602081019061231a9190613414565b6123246007612a51565b612b3b565b8080612334906140c9565b9150506122dd565b508080612348906140c9565b915050612238565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff1661240a611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461242a57600080fd5b8060128190555050565b61243c61264b565b73ffffffffffffffffffffffffffffffffffffffff1661245a611aa8565b73ffffffffffffffffffffffffffffffffffffffff16146124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a79061400e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125179061493d565b60405180910390fd5b61252981612a5f565b50565b3373ffffffffffffffffffffffffffffffffffffffff1661254b611aa8565b73ffffffffffffffffffffffffffffffffffffffff161461256b57600080fd5b80600b8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126c683611172565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612717826125df565b612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274d906149cf565b60405180910390fd5b600061276183611172565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127d057508373ffffffffffffffffffffffffffffffffffffffff166127b884610cae565b73ffffffffffffffffffffffffffffffffffffffff16145b806127e157506127e08185612357565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661280a82611172565b73ffffffffffffffffffffffffffffffffffffffff1614612860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285790614a61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c790614af3565b60405180910390fd5b6128db838383612f15565b6128e6600082612653565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129369190614b13565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461298d91906143c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a4c838383612f1a565b505050565b600081600001549050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b612b55828260405180602001604052806000815250612f1f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf90614b93565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cb99190613515565b60405180910390a3505050565b612cd18484846127ea565b612cdd84848484612f7a565b612d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1390614c25565b60405180910390fd5b50505050565b6060600e8054612d3190613c24565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5d90613c24565b8015612daa5780601f10612d7f57610100808354040283529160200191612daa565b820191906000526020600020905b815481529060010190602001808311612d8d57829003601f168201915b5050505050905090565b60606000821415612dfc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f10565b600082905060005b60008214612e2e578080612e17906140c9565b915050600a82612e279190614c74565b9150612e04565b60008167ffffffffffffffff811115612e4a57612e49613764565b5b6040519080825280601f01601f191660200182016040528015612e7c5781602001600182028036833780820191505090505b5090505b60008514612f0957600182612e959190614b13565b9150600a85612ea49190614ca5565b6030612eb091906143c9565b60f81b818381518110612ec657612ec5614112565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f029190614c74565b9450612e80565b8093505050505b919050565b505050565b505050565b612f298383613102565b612f366000848484612f7a565b612f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6c90614c25565b60405180910390fd5b505050565b6000612f9b8473ffffffffffffffffffffffffffffffffffffffff166132dc565b156130f5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fc461264b565b8786866040518563ffffffff1660e01b8152600401612fe69493929190614d2b565b6020604051808303816000875af192505050801561302257506040513d601f19601f8201168201806040525081019061301f9190614d8c565b60015b6130a5573d8060008114613052576040519150601f19603f3d011682016040523d82523d6000602084013e613057565b606091505b5060008151141561309d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309490614c25565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130fa565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316990614e05565b60405180910390fd5b61317b816125df565b156131bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b290614e71565b60405180910390fd5b6131c760008383612f15565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461321791906143c9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132d860008383612f1a565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461330b90613c24565b90600052602060002090601f01602090048101928261332d5760008555613374565b82601f1061334657805160ff1916838001178555613374565b82800160010185558215613374579182015b82811115613373578251825591602001919060010190613358565b5b5090506133819190613385565b5090565b5b8082111561339e576000816000905550600101613386565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133e1826133b6565b9050919050565b6133f1816133d6565b81146133fc57600080fd5b50565b60008135905061340e816133e8565b92915050565b60006020828403121561342a576134296133ac565b5b6000613438848285016133ff565b91505092915050565b6000819050919050565b61345481613441565b82525050565b600060208201905061346f600083018461344b565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134aa81613475565b81146134b557600080fd5b50565b6000813590506134c7816134a1565b92915050565b6000602082840312156134e3576134e26133ac565b5b60006134f1848285016134b8565b91505092915050565b60008115159050919050565b61350f816134fa565b82525050565b600060208201905061352a6000830184613506565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561356a57808201518184015260208101905061354f565b83811115613579576000848401525b50505050565b6000601f19601f8301169050919050565b600061359b82613530565b6135a5818561353b565b93506135b581856020860161354c565b6135be8161357f565b840191505092915050565b600060208201905081810360008301526135e38184613590565b905092915050565b6135f481613441565b81146135ff57600080fd5b50565b600081359050613611816135eb565b92915050565b60006020828403121561362d5761362c6133ac565b5b600061363b84828501613602565b91505092915050565b61364d816133d6565b82525050565b60006020820190506136686000830184613644565b92915050565b60008060408385031215613685576136846133ac565b5b6000613693858286016133ff565b92505060206136a485828601613602565b9150509250929050565b6000806000606084860312156136c7576136c66133ac565b5b60006136d5868287016133ff565b93505060206136e6868287016133ff565b92505060406136f786828701613602565b9150509250925092565b61370a816134fa565b811461371557600080fd5b50565b60008135905061372781613701565b92915050565b600060208284031215613743576137426133ac565b5b600061375184828501613718565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61379c8261357f565b810181811067ffffffffffffffff821117156137bb576137ba613764565b5b80604052505050565b60006137ce6133a2565b90506137da8282613793565b919050565b600067ffffffffffffffff8211156137fa576137f9613764565b5b6138038261357f565b9050602081019050919050565b82818337600083830152505050565b600061383261382d846137df565b6137c4565b90508281526020810184848401111561384e5761384d61375f565b5b613859848285613810565b509392505050565b600082601f8301126138765761387561375a565b5b813561388684826020860161381f565b91505092915050565b6000602082840312156138a5576138a46133ac565b5b600082013567ffffffffffffffff8111156138c3576138c26133b1565b5b6138cf84828501613861565b91505092915050565b600080fd5b600080fd5b60008083601f8401126138f8576138f761375a565b5b8235905067ffffffffffffffff811115613915576139146138d8565b5b602083019150836020820283011115613931576139306138dd565b5b9250929050565b6000806020838503121561394f5761394e6133ac565b5b600083013567ffffffffffffffff81111561396d5761396c6133b1565b5b613979858286016138e2565b92509250509250929050565b6000806040838503121561399c5761399b6133ac565b5b60006139aa858286016133ff565b92505060206139bb85828601613718565b9150509250929050565b600067ffffffffffffffff8211156139e0576139df613764565b5b6139e98261357f565b9050602081019050919050565b6000613a09613a04846139c5565b6137c4565b905082815260208101848484011115613a2557613a2461375f565b5b613a30848285613810565b509392505050565b600082601f830112613a4d57613a4c61375a565b5b8135613a5d8482602086016139f6565b91505092915050565b60008060008060808587031215613a8057613a7f6133ac565b5b6000613a8e878288016133ff565b9450506020613a9f878288016133ff565b9350506040613ab087828801613602565b925050606085013567ffffffffffffffff811115613ad157613ad06133b1565b5b613add87828801613a38565b91505092959194509250565b600080600060408486031215613b0257613b016133ac565b5b6000613b1086828701613602565b935050602084013567ffffffffffffffff811115613b3157613b306133b1565b5b613b3d868287016138e2565b92509250509250925092565b60008060408385031215613b6057613b5f6133ac565b5b6000613b6e858286016133ff565b9250506020613b7f858286016133ff565b9150509250929050565b7f5a65726f2061646472657373206e6f74206f6e20416c6c6f77204c6973740000600082015250565b6000613bbf601e8361353b565b9150613bca82613b89565b602082019050919050565b60006020820190508181036000830152613bee81613bb2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c3c57607f821691505b60208210811415613c5057613c4f613bf5565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613cb2602c8361353b565b9150613cbd82613c56565b604082019050919050565b60006020820190508181036000830152613ce181613ca5565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d4460218361353b565b9150613d4f82613ce8565b604082019050919050565b60006020820190508181036000830152613d7381613d37565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613dd660388361353b565b9150613de182613d7a565b604082019050919050565b60006020820190508181036000830152613e0581613dc9565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613e6860318361353b565b9150613e7382613e0c565b604082019050919050565b60006020820190508181036000830152613e9781613e5b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613efa60298361353b565b9150613f0582613e9e565b604082019050919050565b60006020820190508181036000830152613f2981613eed565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613f8c602a8361353b565b9150613f9782613f30565b604082019050919050565b60006020820190508181036000830152613fbb81613f7f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ff860208361353b565b915061400382613fc2565b602082019050919050565b6000602082019050818103600083015261402781613feb565b9050919050565b7f4d61782052657365727665732074616b656e20616c7265616479210000000000600082015250565b6000614064601b8361353b565b915061406f8261402e565b602082019050919050565b6000602082019050818103600083015261409381614057565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140d482613441565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141075761410661409a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e2774206164642061206e756c6c20616464726573730000000000000000600082015250565b600061417760188361353b565b915061418282614141565b602082019050919050565b600060208201905081810360008301526141a68161416a565b9050919050565b7f53616c652068617320656e6465642e0000000000000000000000000000000000600082015250565b60006141e3600f8361353b565b91506141ee826141ad565b602082019050919050565b60006020820190508181036000830152614212816141d6565b9050919050565b7f416c6c6f77204c697374206973206e6f74206163746976650000000000000000600082015250565b600061424f60188361353b565b915061425a82614219565b602082019050919050565b6000602082019050818103600083015261427e81614242565b9050919050565b7f596f7520617265206e6f74206f6e2074686520416c6c6f77204c697374000000600082015250565b60006142bb601d8361353b565b91506142c682614285565b602082019050919050565b600060208201905081810360008301526142ea816142ae565b9050919050565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6000614327601b8361353b565b9150614332826142f1565b602082019050919050565b600060208201905081810360008301526143568161431a565b9050919050565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e73600082015250565b600061439360208361353b565b915061439e8261435d565b602082019050919050565b600060208201905081810360008301526143c281614386565b9050919050565b60006143d482613441565b91506143df83613441565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144145761441361409a565b5b828201905092915050565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b6000614455601c8361353b565b91506144608261441f565b602082019050919050565b6000602082019050818103600083015261448481614448565b9050919050565b600061449682613441565b91506144a183613441565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144da576144d961409a565b5b828202905092915050565b7f496e7375666669656e742045544820616d6f756e742073656e742e0000000000600082015250565b600061451b601b8361353b565b9150614526826144e5565b602082019050919050565b6000602082019050818103600083015261454a8161450e565b9050919050565b7f53616c65206973206e6f74206163746976652063757272656e746c792e000000600082015250565b6000614587601d8361353b565b915061459282614551565b602082019050919050565b600060208201905081810360008301526145b68161457a565b9050919050565b7f4d617820686f6c64696e672063617020726561636865642e0000000000000000600082015250565b60006145f360188361353b565b91506145fe826145bd565b602082019050919050565b60006020820190508181036000830152614622816145e6565b9050919050565b7f546f74616c20737570706c792065786365656465642e00000000000000000000600082015250565b600061465f60168361353b565b915061466a82614629565b602082019050919050565b6000602082019050818103600083015261468e81614652565b9050919050565b7f45786365656473206d6178696d756d20616c6c6f77656420746f6b656e730000600082015250565b60006146cb601e8361353b565b91506146d682614695565b602082019050919050565b600060208201905081810360008301526146fa816146be565b9050919050565b7f496e73756666696369656e742045544820616d6f756e742073656e742e000000600082015250565b6000614737601d8361353b565b915061474282614701565b602082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006147c9602f8361353b565b91506147d48261476d565b604082019050919050565b600060208201905081810360008301526147f8816147bc565b9050919050565b600081905092915050565b600061481582613530565b61481f81856147ff565b935061482f81856020860161354c565b80840191505092915050565b6000614847828561480a565b9150614853828461480a565b91508190509392505050565b7f546f74616c20737570706c79207370656e742e00000000000000000000000000600082015250565b600061489560138361353b565b91506148a08261485f565b602082019050919050565b600060208201905081810360008301526148c481614888565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061492760268361353b565b9150614932826148cb565b604082019050919050565b600060208201905081810360008301526149568161491a565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006149b9602c8361353b565b91506149c48261495d565b604082019050919050565b600060208201905081810360008301526149e8816149ac565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614a4b60258361353b565b9150614a56826149ef565b604082019050919050565b60006020820190508181036000830152614a7a81614a3e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614add60248361353b565b9150614ae882614a81565b604082019050919050565b60006020820190508181036000830152614b0c81614ad0565b9050919050565b6000614b1e82613441565b9150614b2983613441565b925082821015614b3c57614b3b61409a565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614b7d60198361353b565b9150614b8882614b47565b602082019050919050565b60006020820190508181036000830152614bac81614b70565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614c0f60328361353b565b9150614c1a82614bb3565b604082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c7f82613441565b9150614c8a83613441565b925082614c9a57614c99614c45565b5b828204905092915050565b6000614cb082613441565b9150614cbb83613441565b925082614ccb57614cca614c45565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614cfd82614cd6565b614d078185614ce1565b9350614d1781856020860161354c565b614d208161357f565b840191505092915050565b6000608082019050614d406000830187613644565b614d4d6020830186613644565b614d5a604083018561344b565b8181036060830152614d6c8184614cf2565b905095945050505050565b600081519050614d86816134a1565b92915050565b600060208284031215614da257614da16133ac565b5b6000614db084828501614d77565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614def60208361353b565b9150614dfa82614db9565b602082019050919050565b60006020820190508181036000830152614e1e81614de2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614e5b601c8361353b565b9150614e6682614e25565b602082019050919050565b60006020820190508181036000830152614e8a81614e4e565b905091905056fea26469706673582212203e425cee16bb41b9db9faceaf7b43911ab0dd8fd4ef3c01c61147ce340c0993b64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000088416e6e6120506574726f7379616e205475652c204d61722032322c20353a303720414d202831206461792061676f2920746f206d65202068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d646a523473455351714a613638646731696a6e4b69776e626b4b4e53717555757443626e3772546f3136734c2f000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): Anna Petrosyan Tue, Mar 22, 5:07 AM (1 day ago) to me https://gateway.pinata.cloud/ipfs/QmdjR4sESQqJa68dg1ijnKiwnbkKNSquUutCbn7rTo16sL/
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000088
Arg [2] : 416e6e6120506574726f7379616e205475652c204d61722032322c20353a3037
Arg [3] : 20414d202831206461792061676f2920746f206d65202068747470733a2f2f67
Arg [4] : 6174657761792e70696e6174612e636c6f75642f697066732f516d646a523473
Arg [5] : 455351714a613638646731696a6e4b69776e626b4b4e53717555757443626e37
Arg [6] : 72546f3136734c2f000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
131:6232:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;343:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1505:300:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2423:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3935:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3473:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;531:28:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4662:330:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2425:105:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;603:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3264:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6230:131;;;;;;;;;;;;;:::i;:::-;;5058:179:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1852:120:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1368:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3377:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3081:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;563:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2126:235:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;302:37:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1270:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1864:205:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:11;;;;;;;;;;;;;:::i;:::-;;3686:300:10;;;;;;;;;;;;;:::i;:::-;;2088:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1737:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3990:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5516:710;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1976:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;746:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1029:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3175::10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2585:102:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;639:50:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4799:713;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4219:153:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2534:258:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1627:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5303:320:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2753:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;693:49:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3480:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4230:565;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4438:162:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1494:129:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1911:198:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2984:93:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2796:184;2862:7;2901:1;2884:19;;:5;:19;;;;2876:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;2951:17;:24;2969:5;2951:24;;;;;;;;;;;;;;;;2944:31;;2796:184;;;:::o;343:40::-;;;;:::o;1505:300:5:-;1607:4;1657:25;1642:40;;;:11;:40;;;;:104;;;;1713:33;1698:48;;;:11;:48;;;;1642:104;:156;;;;1762:36;1786:11;1762:23;:36::i;:::-;1642:156;1623:175;;1505:300;;;:::o;2423:98::-;2477:13;2509:5;2502:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2423:98;:::o;3935:217::-;4011:7;4038:16;4046:7;4038;:16::i;:::-;4030:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4121:15;:24;4137:7;4121:24;;;;;;;;;;;;;;;;;;;;;4114:31;;3935:217;;;:::o;3473:401::-;3553:13;3569:23;3584:7;3569:14;:23::i;:::-;3553:39;;3616:5;3610:11;;:2;:11;;;;3602:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3707:5;3691:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3716:37;3733:5;3740:12;:10;:12::i;:::-;3716:16;:37::i;:::-;3691:62;3670:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3846:21;3855:2;3859:7;3846:8;:21::i;:::-;3543:331;3473:401;;:::o;531:28:10:-;;;;;;;;;;;;;:::o;4662:330:5:-;4851:41;4870:12;:10;:12::i;:::-;4884:7;4851:18;:41::i;:::-;4843:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;4957:28;4967:4;4973:2;4977:7;4957:9;:28::i;:::-;4662:330;;;:::o;2425:105:10:-;2490:4;2509:10;:16;2520:4;2509:16;;;;;;;;;;;;;;;;;;;;;;;;;2502:23;;2425:105;;;:::o;603:32::-;;;;:::o;3264:109::-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;3355:13:::1;3340:12;:28;;;;3264:109:::0;:::o;6230:131::-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;6280:12:::1;6295:21;6280:36;;6330:7;:5;:7::i;:::-;6322:25;;:34;6348:7;6322:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;6274:87;6230:131::o:0;5058:179:5:-;5191:39;5208:4;5214:2;5218:7;5191:39;;;;;;;;;;;;:16;:39::i;:::-;5058:179;;;:::o;1852:120:10:-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;1951:16:::1;1933:15;;:34;;;;;;;;;;;;;;;;;;1852:120:::0;:::o;1368:122::-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;1479:6:::1;1445:31;:40;;;;1368:122:::0;:::o;3377:99::-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;3464:7:::1;3448:13;:23;;;;;;;;;;;;:::i;:::-;;3377:99:::0;:::o;3081:90::-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;3163:3:::1;3145:15;:21;;;;3081:90:::0;:::o;563:35::-;;;;;;;;;;;;;:::o;2126:235:5:-;2198:7;2217:13;2233:7;:16;2241:7;2233:16;;;;;;;;;;;;;;;;;;;;;2217:32;;2284:1;2267:19;;:5;:19;;;;2259:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2349:5;2342:12;;;2126:235;;;:::o;302:37:10:-;;;;:::o;1270:94::-;1315:7;1337:22;:12;:20;:22::i;:::-;1330:29;;1270:94;:::o;1864:205:5:-;1936:7;1980:1;1963:19;;:5;:19;;;;1955:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2046:9;:16;2056:5;2046:16;;;;;;;;;;;;;;;;2039:23;;1864:205;;;:::o;1661:101:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;3686:300:10:-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;3761:15:::1;;3744:13;;:32;;3736:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;3814:9;3830:152;3846:14;;3842:1;:18;3830:152;;;3875:24;:12;:22;:24::i;:::-;3907:45;3917:10;3929:22;:12;:20;:22::i;:::-;3907:9;:45::i;:::-;3960:13;;:15;;;;;;;;;:::i;:::-;;;;;;3862:3;;;;;:::i;:::-;;;;3830:152;;;3730:256;3686:300::o:0;2088:333::-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;2177:9:::1;2172:245;2196:9;;:16;;2192:1;:20;2172:245;;;2259:1;2235:26;;:9;;2245:1;2235:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;2227:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2325:4;2298:10;:24;2309:9;;2319:1;2309:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2298:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;2371:1;2337:17;:31;2355:9;;2365:1;2355:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2337:31;;;;;;;;;;;;;;;;:35;:73;;2409:1;2337:73;;;2375:17;:31;2393:9;;2403:1;2393:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2375:31;;;;;;;;;;;;;;;;2337:73;;2214:3;;;;;:::i;:::-;;;;2172:245;;;;2088:333:::0;;:::o;1737:111::-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;1830:13:::1;1817:10;:26;;;;1737:111:::0;:::o;3990:236::-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;4094:9:::1;4089:133;4113:6;4109:1;:10;4089:133;;;4134:24;:12;:22;:24::i;:::-;4166:49;4176:14;4192:22;:12;:20;:22::i;:::-;4166:9;:49::i;:::-;4121:3;;;;;:::i;:::-;;;;4089:133;;;;3990:236:::0;;:::o;5516:710::-;1146:10;;1120:22;:12;:20;:22::i;:::-;:36;;1112:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;5585:17:::1;5605:22;:12;:20;:22::i;:::-;5585:42;;5642:15;;;;;;;;;;;5634:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;5700:10;:22;5711:10;5700:22;;;;;;;;;;;;;;;;;;;;;;;;;5692:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;5782:10;;5770:9;:22;5762:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;5848:16;;5838:6;:26;;5830:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5957:16;;5947:6;5915:17;:29;5933:10;5915:29;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;:58;;5907:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;6048:6;6033:12;;:21;;;;:::i;:::-;6020:9;:34;;6012:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6098:9;6093:129;6117:6;6113:1;:10;6093:129;;;6138:24;:12;:22;:24::i;:::-;6170:45;6180:10;6192:22;:12;:20;:22::i;:::-;6170:9;:45::i;:::-;6125:3;;;;;:::i;:::-;;;;6093:129;;;;5579:647;5516:710:::0;:::o;1976:108::-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;2072:7:::1;2053:16;:26;;;;1976:108:::0;:::o;746:35::-;;;;:::o;1029:85:11:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;3175::10:-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;3249:6:::1;3237:9;:18;;;;3175:85:::0;:::o;2585:102:5:-;2641:13;2673:7;2666:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2585:102;:::o;639:50:10:-;;;;:::o;4799:713::-;1146:10;;1120:22;:12;:20;:22::i;:::-;:36;;1112:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4861:17:::1;4881:22;:12;:20;:22::i;:::-;4861:42;;4928:7;:5;:7::i;:::-;4914:21;;:10;:21;;;4910:200;;4953:8;;;;;;;;;;;4945:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;5045:29;;5035:6;5011:21;5021:10;5011:9;:21::i;:::-;:30;;;;:::i;:::-;:63;;5003:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;4910:200;5147:10;;5137:6;5125:9;:18;;;;:::i;:::-;:32;;5117:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5215:31;;5205:6;:41;;5190:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;5332:6;5320:9;;:18;;;;:::i;:::-;5307:9;:31;;5299:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5384:9;5379:129;5403:6;5399:1;:10;5379:129;;;5424:24;:12;:22;:24::i;:::-;5456:45;5466:10;5478:22;:12;:20;:22::i;:::-;5456:9;:45::i;:::-;5411:3;;;;;:::i;:::-;;;;5379:129;;;;4855:657;4799:713:::0;:::o;4219:153:5:-;4313:52;4332:12;:10;:12::i;:::-;4346:8;4356;4313:18;:52::i;:::-;4219:153;;:::o;2534:258:10:-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;2628:9:::1;2623:165;2647:9;;:16;;2643:1;:20;2623:165;;;2710:1;2686:26;;:9;;2696:1;2686:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;2678:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2776:5;2749:10;:24;2760:9;;2770:1;2760:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2749:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;2665:3;;;;;:::i;:::-;;;;2623:165;;;;2534:258:::0;;:::o;1627:106::-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;1695:3:::1;1684:8;;:14;;;;;;;;;;;;;;;;;;1709:19;1724:3;1709:19;;;;;;:::i;:::-;;;;;;;;1627:106:::0;:::o;5303:320:5:-;5472:41;5491:12;:10;:12::i;:::-;5505:7;5472:18;:41::i;:::-;5464:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5577:39;5591:4;5597:2;5601:7;5610:5;5577:13;:39::i;:::-;5303:320;;;;:::o;2753:329::-;2826:13;2859:16;2867:7;2859;:16::i;:::-;2851:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2938:21;2962:10;:8;:10::i;:::-;2938:34;;3013:1;2995:7;2989:21;:25;:86;;;;;;;;;;;;;;;;;3041:7;3050:18;:7;:16;:18::i;:::-;3024:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2989:86;2982:93;;;2753:329;;;:::o;693:49:10:-;;;;:::o;3480:93::-;3532:7;3554:14;;3547:21;;3480:93;:::o;4230:565::-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;4347:14:::1;4364:22;:12;:20;:22::i;:::-;4347:39;;4420:10;;4410:6;4401;:15;;;;:::i;:::-;:29;;4393:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4481:10;;4471:6;:20;;4463:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;4527:9;4522:269;4546:9;;:16;;4542:1;:20;4522:269;;;4609:1;4585:26;;:9;;4595:1;4585:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;4577:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4653:9;4649:136;4672:6;4668:1;:10;4649:136;;;4695:24;:12;:22;:24::i;:::-;4729:47;4739:9;;4749:1;4739:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4753:22;:12;:20;:22::i;:::-;4729:9;:47::i;:::-;4680:3;;;;;:::i;:::-;;;;4649:136;;;;4564:3;;;;;:::i;:::-;;;;4522:269;;;;4341:454;4230:565:::0;;;:::o;4438:162:5:-;4535:4;4558:18;:25;4577:5;4558:25;;;;;;;;;;;;;;;:35;4584:8;4558:35;;;;;;;;;;;;;;;;;;;;;;;;;4551:42;;4438:162;;;;:::o;1494:129:10:-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;1612:6:::1;1580:29;:38;;;;1494:129:::0;:::o;1911:198:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;2984:93:10:-;1243:10;1232:21;;:7;:5;:7::i;:::-;:21;;;1224:30;;;;;;3069:3:::1;3052:14;:20;;;;2984:93:::0;:::o;829:155:4:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;7095:125:5:-;7160:4;7211:1;7183:30;;:7;:16;7191:7;7183:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7176:37;;7095:125;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;11104:171:5:-;11205:2;11178:15;:24;11194:7;11178:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11260:7;11256:2;11222:46;;11231:23;11246:7;11231:14;:23::i;:::-;11222:46;;;;;;;;;;;;11104:171;;:::o;7378:344::-;7471:4;7495:16;7503:7;7495;:16::i;:::-;7487:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7570:13;7586:23;7601:7;7586:14;:23::i;:::-;7570:39;;7638:5;7627:16;;:7;:16;;;:51;;;;7671:7;7647:31;;:20;7659:7;7647:11;:20::i;:::-;:31;;;7627:51;:87;;;;7682:32;7699:5;7706:7;7682:16;:32::i;:::-;7627:87;7619:96;;;7378:344;;;;:::o;10388:605::-;10542:4;10515:31;;:23;10530:7;10515:14;:23::i;:::-;:31;;;10507:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10620:1;10606:16;;:2;:16;;;;10598:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10674:39;10695:4;10701:2;10705:7;10674:20;:39::i;:::-;10775:29;10792:1;10796:7;10775:8;:29::i;:::-;10834:1;10815:9;:15;10825:4;10815:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10862:1;10845:9;:13;10855:2;10845:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10892:2;10873:7;:16;10881:7;10873:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10929:7;10925:2;10910:27;;10919:4;10910:27;;;;;;;;;;;;10948:38;10968:4;10974:2;10978:7;10948:19;:38::i;:::-;10388:605;;;:::o;827:112:2:-;892:7;918;:14;;;911:21;;827:112;;;:::o;2263:187:11:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;945:123:2:-;1050:1;1032:7;:14;;;:19;;;;;;;;;;;945:123;:::o;8052:108:5:-;8127:26;8137:2;8141:7;8127:26;;;;;;;;;;;;:9;:26::i;:::-;8052:108;;:::o;11410:307::-;11560:8;11551:17;;:5;:17;;;;11543:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11646:8;11608:18;:25;11627:5;11608:25;;;;;;;;;;;;;;;:35;11634:8;11608:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11691:8;11669:41;;11684:5;11669:41;;;11701:8;11669:41;;;;;;:::i;:::-;;;;;;;;11410:307;;;:::o;6485:::-;6636:28;6646:4;6652:2;6656:7;6636:9;:28::i;:::-;6682:48;6705:4;6711:2;6715:7;6724:5;6682:22;:48::i;:::-;6674:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6485:307;;;;:::o;3577:106:10:-;3637:13;3665;3658:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3577:106;:::o;328:703:12:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;13604:122:5:-;;;;:::o;14098:121::-;;;;:::o;8381:311::-;8506:18;8512:2;8516:7;8506:5;:18::i;:::-;8555:54;8586:1;8590:2;8594:7;8603:5;8555:22;:54::i;:::-;8534:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8381:311;;;:::o;12270:778::-;12420:4;12440:15;:2;:13;;;:15::i;:::-;12436:606;;;12491:2;12475:36;;;12512:12;:10;:12::i;:::-;12526:4;12532:7;12541:5;12475:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12471:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12731:1;12714:6;:13;:18;12710:266;;;12756:60;;;;;;;;;;:::i;:::-;;;;;;;;12710:266;12928:6;12922:13;12913:6;12909:2;12905:15;12898:38;12471:519;12607:41;;;12597:51;;;:6;:51;;;;12590:58;;;;;12436:606;13027:4;13020:11;;12270:778;;;;;;;:::o;9014:427::-;9107:1;9093:16;;:2;:16;;;;9085:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9165:16;9173:7;9165;:16::i;:::-;9164:17;9156:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9225:45;9254:1;9258:2;9262:7;9225:20;:45::i;:::-;9298:1;9281:9;:13;9291:2;9281:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9328:2;9309:7;:16;9317:7;9309:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9371:7;9367:2;9346:33;;9363:1;9346:33;;;;;;;;;;;;9390:44;9418:1;9422:2;9426:7;9390:19;:44::i;:::-;9014:427;;:::o;1175:320:0:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:13:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:149::-;1647:7;1687:66;1680:5;1676:78;1665:89;;1611:149;;;:::o;1766:120::-;1838:23;1855:5;1838:23;:::i;:::-;1831:5;1828:34;1818:62;;1876:1;1873;1866:12;1818:62;1766:120;:::o;1892:137::-;1937:5;1975:6;1962:20;1953:29;;1991:32;2017:5;1991:32;:::i;:::-;1892:137;;;;:::o;2035:327::-;2093:6;2142:2;2130:9;2121:7;2117:23;2113:32;2110:119;;;2148:79;;:::i;:::-;2110:119;2268:1;2293:52;2337:7;2328:6;2317:9;2313:22;2293:52;:::i;:::-;2283:62;;2239:116;2035:327;;;;:::o;2368:90::-;2402:7;2445:5;2438:13;2431:21;2420:32;;2368:90;;;:::o;2464:109::-;2545:21;2560:5;2545:21;:::i;:::-;2540:3;2533:34;2464:109;;:::o;2579:210::-;2666:4;2704:2;2693:9;2689:18;2681:26;;2717:65;2779:1;2768:9;2764:17;2755:6;2717:65;:::i;:::-;2579:210;;;;:::o;2795:99::-;2847:6;2881:5;2875:12;2865:22;;2795:99;;;:::o;2900:169::-;2984:11;3018:6;3013:3;3006:19;3058:4;3053:3;3049:14;3034:29;;2900:169;;;;:::o;3075:307::-;3143:1;3153:113;3167:6;3164:1;3161:13;3153:113;;;3252:1;3247:3;3243:11;3237:18;3233:1;3228:3;3224:11;3217:39;3189:2;3186:1;3182:10;3177:15;;3153:113;;;3284:6;3281:1;3278:13;3275:101;;;3364:1;3355:6;3350:3;3346:16;3339:27;3275:101;3124:258;3075:307;;;:::o;3388:102::-;3429:6;3480:2;3476:7;3471:2;3464:5;3460:14;3456:28;3446:38;;3388:102;;;:::o;3496:364::-;3584:3;3612:39;3645:5;3612:39;:::i;:::-;3667:71;3731:6;3726:3;3667:71;:::i;:::-;3660:78;;3747:52;3792:6;3787:3;3780:4;3773:5;3769:16;3747:52;:::i;:::-;3824:29;3846:6;3824:29;:::i;:::-;3819:3;3815:39;3808:46;;3588:272;3496:364;;;;:::o;3866:313::-;3979:4;4017:2;4006:9;4002:18;3994:26;;4066:9;4060:4;4056:20;4052:1;4041:9;4037:17;4030:47;4094:78;4167:4;4158:6;4094:78;:::i;:::-;4086:86;;3866:313;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:329::-;4517:6;4566:2;4554:9;4545:7;4541:23;4537:32;4534:119;;;4572:79;;:::i;:::-;4534:119;4692:1;4717:53;4762:7;4753:6;4742:9;4738:22;4717:53;:::i;:::-;4707:63;;4663:117;4458:329;;;;:::o;4793:118::-;4880:24;4898:5;4880:24;:::i;:::-;4875:3;4868:37;4793:118;;:::o;4917:222::-;5010:4;5048:2;5037:9;5033:18;5025:26;;5061:71;5129:1;5118:9;5114:17;5105:6;5061:71;:::i;:::-;4917:222;;;;:::o;5145:474::-;5213:6;5221;5270:2;5258:9;5249:7;5245:23;5241:32;5238:119;;;5276:79;;:::i;:::-;5238:119;5396:1;5421:53;5466:7;5457:6;5446:9;5442:22;5421:53;:::i;:::-;5411:63;;5367:117;5523:2;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5494:118;5145:474;;;;;:::o;5625:619::-;5702:6;5710;5718;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5864:117;6020:2;6046:53;6091:7;6082:6;6071:9;6067:22;6046:53;:::i;:::-;6036:63;;5991:118;6148:2;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6119:118;5625:619;;;;;:::o;6250:116::-;6320:21;6335:5;6320:21;:::i;:::-;6313:5;6310:32;6300:60;;6356:1;6353;6346:12;6300:60;6250:116;:::o;6372:133::-;6415:5;6453:6;6440:20;6431:29;;6469:30;6493:5;6469:30;:::i;:::-;6372:133;;;;:::o;6511:323::-;6567:6;6616:2;6604:9;6595:7;6591:23;6587:32;6584:119;;;6622:79;;:::i;:::-;6584:119;6742:1;6767:50;6809:7;6800:6;6789:9;6785:22;6767:50;:::i;:::-;6757:60;;6713:114;6511:323;;;;:::o;6840:117::-;6949:1;6946;6939:12;6963:117;7072:1;7069;7062:12;7086:180;7134:77;7131:1;7124:88;7231:4;7228:1;7221:15;7255:4;7252:1;7245:15;7272:281;7355:27;7377:4;7355:27;:::i;:::-;7347:6;7343:40;7485:6;7473:10;7470:22;7449:18;7437:10;7434:34;7431:62;7428:88;;;7496:18;;:::i;:::-;7428:88;7536:10;7532:2;7525:22;7315:238;7272:281;;:::o;7559:129::-;7593:6;7620:20;;:::i;:::-;7610:30;;7649:33;7677:4;7669:6;7649:33;:::i;:::-;7559:129;;;:::o;7694:308::-;7756:4;7846:18;7838:6;7835:30;7832:56;;;7868:18;;:::i;:::-;7832:56;7906:29;7928:6;7906:29;:::i;:::-;7898:37;;7990:4;7984;7980:15;7972:23;;7694:308;;;:::o;8008:154::-;8092:6;8087:3;8082;8069:30;8154:1;8145:6;8140:3;8136:16;8129:27;8008:154;;;:::o;8168:412::-;8246:5;8271:66;8287:49;8329:6;8287:49;:::i;:::-;8271:66;:::i;:::-;8262:75;;8360:6;8353:5;8346:21;8398:4;8391:5;8387:16;8436:3;8427:6;8422:3;8418:16;8415:25;8412:112;;;8443:79;;:::i;:::-;8412:112;8533:41;8567:6;8562:3;8557;8533:41;:::i;:::-;8252:328;8168:412;;;;;:::o;8600:340::-;8656:5;8705:3;8698:4;8690:6;8686:17;8682:27;8672:122;;8713:79;;:::i;:::-;8672:122;8830:6;8817:20;8855:79;8930:3;8922:6;8915:4;8907:6;8903:17;8855:79;:::i;:::-;8846:88;;8662:278;8600:340;;;;:::o;8946:509::-;9015:6;9064:2;9052:9;9043:7;9039:23;9035:32;9032:119;;;9070:79;;:::i;:::-;9032:119;9218:1;9207:9;9203:17;9190:31;9248:18;9240:6;9237:30;9234:117;;;9270:79;;:::i;:::-;9234:117;9375:63;9430:7;9421:6;9410:9;9406:22;9375:63;:::i;:::-;9365:73;;9161:287;8946:509;;;;:::o;9461:117::-;9570:1;9567;9560:12;9584:117;9693:1;9690;9683:12;9724:568;9797:8;9807:6;9857:3;9850:4;9842:6;9838:17;9834:27;9824:122;;9865:79;;:::i;:::-;9824:122;9978:6;9965:20;9955:30;;10008:18;10000:6;9997:30;9994:117;;;10030:79;;:::i;:::-;9994:117;10144:4;10136:6;10132:17;10120:29;;10198:3;10190:4;10182:6;10178:17;10168:8;10164:32;10161:41;10158:128;;;10205:79;;:::i;:::-;10158:128;9724:568;;;;;:::o;10298:559::-;10384:6;10392;10441:2;10429:9;10420:7;10416:23;10412:32;10409:119;;;10447:79;;:::i;:::-;10409:119;10595:1;10584:9;10580:17;10567:31;10625:18;10617:6;10614:30;10611:117;;;10647:79;;:::i;:::-;10611:117;10760:80;10832:7;10823:6;10812:9;10808:22;10760:80;:::i;:::-;10742:98;;;;10538:312;10298:559;;;;;:::o;10863:468::-;10928:6;10936;10985:2;10973:9;10964:7;10960:23;10956:32;10953:119;;;10991:79;;:::i;:::-;10953:119;11111:1;11136:53;11181:7;11172:6;11161:9;11157:22;11136:53;:::i;:::-;11126:63;;11082:117;11238:2;11264:50;11306:7;11297:6;11286:9;11282:22;11264:50;:::i;:::-;11254:60;;11209:115;10863:468;;;;;:::o;11337:307::-;11398:4;11488:18;11480:6;11477:30;11474:56;;;11510:18;;:::i;:::-;11474:56;11548:29;11570:6;11548:29;:::i;:::-;11540:37;;11632:4;11626;11622:15;11614:23;;11337:307;;;:::o;11650:410::-;11727:5;11752:65;11768:48;11809:6;11768:48;:::i;:::-;11752:65;:::i;:::-;11743:74;;11840:6;11833:5;11826:21;11878:4;11871:5;11867:16;11916:3;11907:6;11902:3;11898:16;11895:25;11892:112;;;11923:79;;:::i;:::-;11892:112;12013:41;12047:6;12042:3;12037;12013:41;:::i;:::-;11733:327;11650:410;;;;;:::o;12079:338::-;12134:5;12183:3;12176:4;12168:6;12164:17;12160:27;12150:122;;12191:79;;:::i;:::-;12150:122;12308:6;12295:20;12333:78;12407:3;12399:6;12392:4;12384:6;12380:17;12333:78;:::i;:::-;12324:87;;12140:277;12079:338;;;;:::o;12423:943::-;12518:6;12526;12534;12542;12591:3;12579:9;12570:7;12566:23;12562:33;12559:120;;;12598:79;;:::i;:::-;12559:120;12718:1;12743:53;12788:7;12779:6;12768:9;12764:22;12743:53;:::i;:::-;12733:63;;12689:117;12845:2;12871:53;12916:7;12907:6;12896:9;12892:22;12871:53;:::i;:::-;12861:63;;12816:118;12973:2;12999:53;13044:7;13035:6;13024:9;13020:22;12999:53;:::i;:::-;12989:63;;12944:118;13129:2;13118:9;13114:18;13101:32;13160:18;13152:6;13149:30;13146:117;;;13182:79;;:::i;:::-;13146:117;13287:62;13341:7;13332:6;13321:9;13317:22;13287:62;:::i;:::-;13277:72;;13072:287;12423:943;;;;;;;:::o;13372:704::-;13467:6;13475;13483;13532:2;13520:9;13511:7;13507:23;13503:32;13500:119;;;13538:79;;:::i;:::-;13500:119;13658:1;13683:53;13728:7;13719:6;13708:9;13704:22;13683:53;:::i;:::-;13673:63;;13629:117;13813:2;13802:9;13798:18;13785:32;13844:18;13836:6;13833:30;13830:117;;;13866:79;;:::i;:::-;13830:117;13979:80;14051:7;14042:6;14031:9;14027:22;13979:80;:::i;:::-;13961:98;;;;13756:313;13372:704;;;;;:::o;14082:474::-;14150:6;14158;14207:2;14195:9;14186:7;14182:23;14178:32;14175:119;;;14213:79;;:::i;:::-;14175:119;14333:1;14358:53;14403:7;14394:6;14383:9;14379:22;14358:53;:::i;:::-;14348:63;;14304:117;14460:2;14486:53;14531:7;14522:6;14511:9;14507:22;14486:53;:::i;:::-;14476:63;;14431:118;14082:474;;;;;:::o;14562:180::-;14702:32;14698:1;14690:6;14686:14;14679:56;14562:180;:::o;14748:366::-;14890:3;14911:67;14975:2;14970:3;14911:67;:::i;:::-;14904:74;;14987:93;15076:3;14987:93;:::i;:::-;15105:2;15100:3;15096:12;15089:19;;14748:366;;;:::o;15120:419::-;15286:4;15324:2;15313:9;15309:18;15301:26;;15373:9;15367:4;15363:20;15359:1;15348:9;15344:17;15337:47;15401:131;15527:4;15401:131;:::i;:::-;15393:139;;15120:419;;;:::o;15545:180::-;15593:77;15590:1;15583:88;15690:4;15687:1;15680:15;15714:4;15711:1;15704:15;15731:320;15775:6;15812:1;15806:4;15802:12;15792:22;;15859:1;15853:4;15849:12;15880:18;15870:81;;15936:4;15928:6;15924:17;15914:27;;15870:81;15998:2;15990:6;15987:14;15967:18;15964:38;15961:84;;;16017:18;;:::i;:::-;15961:84;15782:269;15731:320;;;:::o;16057:231::-;16197:34;16193:1;16185:6;16181:14;16174:58;16266:14;16261:2;16253:6;16249:15;16242:39;16057:231;:::o;16294:366::-;16436:3;16457:67;16521:2;16516:3;16457:67;:::i;:::-;16450:74;;16533:93;16622:3;16533:93;:::i;:::-;16651:2;16646:3;16642:12;16635:19;;16294:366;;;:::o;16666:419::-;16832:4;16870:2;16859:9;16855:18;16847:26;;16919:9;16913:4;16909:20;16905:1;16894:9;16890:17;16883:47;16947:131;17073:4;16947:131;:::i;:::-;16939:139;;16666:419;;;:::o;17091:220::-;17231:34;17227:1;17219:6;17215:14;17208:58;17300:3;17295:2;17287:6;17283:15;17276:28;17091:220;:::o;17317:366::-;17459:3;17480:67;17544:2;17539:3;17480:67;:::i;:::-;17473:74;;17556:93;17645:3;17556:93;:::i;:::-;17674:2;17669:3;17665:12;17658:19;;17317:366;;;:::o;17689:419::-;17855:4;17893:2;17882:9;17878:18;17870:26;;17942:9;17936:4;17932:20;17928:1;17917:9;17913:17;17906:47;17970:131;18096:4;17970:131;:::i;:::-;17962:139;;17689:419;;;:::o;18114:243::-;18254:34;18250:1;18242:6;18238:14;18231:58;18323:26;18318:2;18310:6;18306:15;18299:51;18114:243;:::o;18363:366::-;18505:3;18526:67;18590:2;18585:3;18526:67;:::i;:::-;18519:74;;18602:93;18691:3;18602:93;:::i;:::-;18720:2;18715:3;18711:12;18704:19;;18363:366;;;:::o;18735:419::-;18901:4;18939:2;18928:9;18924:18;18916:26;;18988:9;18982:4;18978:20;18974:1;18963:9;18959:17;18952:47;19016:131;19142:4;19016:131;:::i;:::-;19008:139;;18735:419;;;:::o;19160:236::-;19300:34;19296:1;19288:6;19284:14;19277:58;19369:19;19364:2;19356:6;19352:15;19345:44;19160:236;:::o;19402:366::-;19544:3;19565:67;19629:2;19624:3;19565:67;:::i;:::-;19558:74;;19641:93;19730:3;19641:93;:::i;:::-;19759:2;19754:3;19750:12;19743:19;;19402:366;;;:::o;19774:419::-;19940:4;19978:2;19967:9;19963:18;19955:26;;20027:9;20021:4;20017:20;20013:1;20002:9;19998:17;19991:47;20055:131;20181:4;20055:131;:::i;:::-;20047:139;;19774:419;;;:::o;20199:228::-;20339:34;20335:1;20327:6;20323:14;20316:58;20408:11;20403:2;20395:6;20391:15;20384:36;20199:228;:::o;20433:366::-;20575:3;20596:67;20660:2;20655:3;20596:67;:::i;:::-;20589:74;;20672:93;20761:3;20672:93;:::i;:::-;20790:2;20785:3;20781:12;20774:19;;20433:366;;;:::o;20805:419::-;20971:4;21009:2;20998:9;20994:18;20986:26;;21058:9;21052:4;21048:20;21044:1;21033:9;21029:17;21022:47;21086:131;21212:4;21086:131;:::i;:::-;21078:139;;20805:419;;;:::o;21230:229::-;21370:34;21366:1;21358:6;21354:14;21347:58;21439:12;21434:2;21426:6;21422:15;21415:37;21230:229;:::o;21465:366::-;21607:3;21628:67;21692:2;21687:3;21628:67;:::i;:::-;21621:74;;21704:93;21793:3;21704:93;:::i;:::-;21822:2;21817:3;21813:12;21806:19;;21465:366;;;:::o;21837:419::-;22003:4;22041:2;22030:9;22026:18;22018:26;;22090:9;22084:4;22080:20;22076:1;22065:9;22061:17;22054:47;22118:131;22244:4;22118:131;:::i;:::-;22110:139;;21837:419;;;:::o;22262:182::-;22402:34;22398:1;22390:6;22386:14;22379:58;22262:182;:::o;22450:366::-;22592:3;22613:67;22677:2;22672:3;22613:67;:::i;:::-;22606:74;;22689:93;22778:3;22689:93;:::i;:::-;22807:2;22802:3;22798:12;22791:19;;22450:366;;;:::o;22822:419::-;22988:4;23026:2;23015:9;23011:18;23003:26;;23075:9;23069:4;23065:20;23061:1;23050:9;23046:17;23039:47;23103:131;23229:4;23103:131;:::i;:::-;23095:139;;22822:419;;;:::o;23247:177::-;23387:29;23383:1;23375:6;23371:14;23364:53;23247:177;:::o;23430:366::-;23572:3;23593:67;23657:2;23652:3;23593:67;:::i;:::-;23586:74;;23669:93;23758:3;23669:93;:::i;:::-;23787:2;23782:3;23778:12;23771:19;;23430:366;;;:::o;23802:419::-;23968:4;24006:2;23995:9;23991:18;23983:26;;24055:9;24049:4;24045:20;24041:1;24030:9;24026:17;24019:47;24083:131;24209:4;24083:131;:::i;:::-;24075:139;;23802:419;;;:::o;24227:180::-;24275:77;24272:1;24265:88;24372:4;24369:1;24362:15;24396:4;24393:1;24386:15;24413:233;24452:3;24475:24;24493:5;24475:24;:::i;:::-;24466:33;;24521:66;24514:5;24511:77;24508:103;;;24591:18;;:::i;:::-;24508:103;24638:1;24631:5;24627:13;24620:20;;24413:233;;;:::o;24652:180::-;24700:77;24697:1;24690:88;24797:4;24794:1;24787:15;24821:4;24818:1;24811:15;24838:174;24978:26;24974:1;24966:6;24962:14;24955:50;24838:174;:::o;25018:366::-;25160:3;25181:67;25245:2;25240:3;25181:67;:::i;:::-;25174:74;;25257:93;25346:3;25257:93;:::i;:::-;25375:2;25370:3;25366:12;25359:19;;25018:366;;;:::o;25390:419::-;25556:4;25594:2;25583:9;25579:18;25571:26;;25643:9;25637:4;25633:20;25629:1;25618:9;25614:17;25607:47;25671:131;25797:4;25671:131;:::i;:::-;25663:139;;25390:419;;;:::o;25815:165::-;25955:17;25951:1;25943:6;25939:14;25932:41;25815:165;:::o;25986:366::-;26128:3;26149:67;26213:2;26208:3;26149:67;:::i;:::-;26142:74;;26225:93;26314:3;26225:93;:::i;:::-;26343:2;26338:3;26334:12;26327:19;;25986:366;;;:::o;26358:419::-;26524:4;26562:2;26551:9;26547:18;26539:26;;26611:9;26605:4;26601:20;26597:1;26586:9;26582:17;26575:47;26639:131;26765:4;26639:131;:::i;:::-;26631:139;;26358:419;;;:::o;26783:174::-;26923:26;26919:1;26911:6;26907:14;26900:50;26783:174;:::o;26963:366::-;27105:3;27126:67;27190:2;27185:3;27126:67;:::i;:::-;27119:74;;27202:93;27291:3;27202:93;:::i;:::-;27320:2;27315:3;27311:12;27304:19;;26963:366;;;:::o;27335:419::-;27501:4;27539:2;27528:9;27524:18;27516:26;;27588:9;27582:4;27578:20;27574:1;27563:9;27559:17;27552:47;27616:131;27742:4;27616:131;:::i;:::-;27608:139;;27335:419;;;:::o;27760:179::-;27900:31;27896:1;27888:6;27884:14;27877:55;27760:179;:::o;27945:366::-;28087:3;28108:67;28172:2;28167:3;28108:67;:::i;:::-;28101:74;;28184:93;28273:3;28184:93;:::i;:::-;28302:2;28297:3;28293:12;28286:19;;27945:366;;;:::o;28317:419::-;28483:4;28521:2;28510:9;28506:18;28498:26;;28570:9;28564:4;28560:20;28556:1;28545:9;28541:17;28534:47;28598:131;28724:4;28598:131;:::i;:::-;28590:139;;28317:419;;;:::o;28742:177::-;28882:29;28878:1;28870:6;28866:14;28859:53;28742:177;:::o;28925:366::-;29067:3;29088:67;29152:2;29147:3;29088:67;:::i;:::-;29081:74;;29164:93;29253:3;29164:93;:::i;:::-;29282:2;29277:3;29273:12;29266:19;;28925:366;;;:::o;29297:419::-;29463:4;29501:2;29490:9;29486:18;29478:26;;29550:9;29544:4;29540:20;29536:1;29525:9;29521:17;29514:47;29578:131;29704:4;29578:131;:::i;:::-;29570:139;;29297:419;;;:::o;29722:182::-;29862:34;29858:1;29850:6;29846:14;29839:58;29722:182;:::o;29910:366::-;30052:3;30073:67;30137:2;30132:3;30073:67;:::i;:::-;30066:74;;30149:93;30238:3;30149:93;:::i;:::-;30267:2;30262:3;30258:12;30251:19;;29910:366;;;:::o;30282:419::-;30448:4;30486:2;30475:9;30471:18;30463:26;;30535:9;30529:4;30525:20;30521:1;30510:9;30506:17;30499:47;30563:131;30689:4;30563:131;:::i;:::-;30555:139;;30282:419;;;:::o;30707:305::-;30747:3;30766:20;30784:1;30766:20;:::i;:::-;30761:25;;30800:20;30818:1;30800:20;:::i;:::-;30795:25;;30954:1;30886:66;30882:74;30879:1;30876:81;30873:107;;;30960:18;;:::i;:::-;30873:107;31004:1;31001;30997:9;30990:16;;30707:305;;;;:::o;31018:178::-;31158:30;31154:1;31146:6;31142:14;31135:54;31018:178;:::o;31202:366::-;31344:3;31365:67;31429:2;31424:3;31365:67;:::i;:::-;31358:74;;31441:93;31530:3;31441:93;:::i;:::-;31559:2;31554:3;31550:12;31543:19;;31202:366;;;:::o;31574:419::-;31740:4;31778:2;31767:9;31763:18;31755:26;;31827:9;31821:4;31817:20;31813:1;31802:9;31798:17;31791:47;31855:131;31981:4;31855:131;:::i;:::-;31847:139;;31574:419;;;:::o;31999:348::-;32039:7;32062:20;32080:1;32062:20;:::i;:::-;32057:25;;32096:20;32114:1;32096:20;:::i;:::-;32091:25;;32284:1;32216:66;32212:74;32209:1;32206:81;32201:1;32194:9;32187:17;32183:105;32180:131;;;32291:18;;:::i;:::-;32180:131;32339:1;32336;32332:9;32321:20;;31999:348;;;;:::o;32353:177::-;32493:29;32489:1;32481:6;32477:14;32470:53;32353:177;:::o;32536:366::-;32678:3;32699:67;32763:2;32758:3;32699:67;:::i;:::-;32692:74;;32775:93;32864:3;32775:93;:::i;:::-;32893:2;32888:3;32884:12;32877:19;;32536:366;;;:::o;32908:419::-;33074:4;33112:2;33101:9;33097:18;33089:26;;33161:9;33155:4;33151:20;33147:1;33136:9;33132:17;33125:47;33189:131;33315:4;33189:131;:::i;:::-;33181:139;;32908:419;;;:::o;33333:179::-;33473:31;33469:1;33461:6;33457:14;33450:55;33333:179;:::o;33518:366::-;33660:3;33681:67;33745:2;33740:3;33681:67;:::i;:::-;33674:74;;33757:93;33846:3;33757:93;:::i;:::-;33875:2;33870:3;33866:12;33859:19;;33518:366;;;:::o;33890:419::-;34056:4;34094:2;34083:9;34079:18;34071:26;;34143:9;34137:4;34133:20;34129:1;34118:9;34114:17;34107:47;34171:131;34297:4;34171:131;:::i;:::-;34163:139;;33890:419;;;:::o;34315:174::-;34455:26;34451:1;34443:6;34439:14;34432:50;34315:174;:::o;34495:366::-;34637:3;34658:67;34722:2;34717:3;34658:67;:::i;:::-;34651:74;;34734:93;34823:3;34734:93;:::i;:::-;34852:2;34847:3;34843:12;34836:19;;34495:366;;;:::o;34867:419::-;35033:4;35071:2;35060:9;35056:18;35048:26;;35120:9;35114:4;35110:20;35106:1;35095:9;35091:17;35084:47;35148:131;35274:4;35148:131;:::i;:::-;35140:139;;34867:419;;;:::o;35292:172::-;35432:24;35428:1;35420:6;35416:14;35409:48;35292:172;:::o;35470:366::-;35612:3;35633:67;35697:2;35692:3;35633:67;:::i;:::-;35626:74;;35709:93;35798:3;35709:93;:::i;:::-;35827:2;35822:3;35818:12;35811:19;;35470:366;;;:::o;35842:419::-;36008:4;36046:2;36035:9;36031:18;36023:26;;36095:9;36089:4;36085:20;36081:1;36070:9;36066:17;36059:47;36123:131;36249:4;36123:131;:::i;:::-;36115:139;;35842:419;;;:::o;36267:180::-;36407:32;36403:1;36395:6;36391:14;36384:56;36267:180;:::o;36453:366::-;36595:3;36616:67;36680:2;36675:3;36616:67;:::i;:::-;36609:74;;36692:93;36781:3;36692:93;:::i;:::-;36810:2;36805:3;36801:12;36794:19;;36453:366;;;:::o;36825:419::-;36991:4;37029:2;37018:9;37014:18;37006:26;;37078:9;37072:4;37068:20;37064:1;37053:9;37049:17;37042:47;37106:131;37232:4;37106:131;:::i;:::-;37098:139;;36825:419;;;:::o;37250:179::-;37390:31;37386:1;37378:6;37374:14;37367:55;37250:179;:::o;37435:366::-;37577:3;37598:67;37662:2;37657:3;37598:67;:::i;:::-;37591:74;;37674:93;37763:3;37674:93;:::i;:::-;37792:2;37787:3;37783:12;37776:19;;37435:366;;;:::o;37807:419::-;37973:4;38011:2;38000:9;37996:18;37988:26;;38060:9;38054:4;38050:20;38046:1;38035:9;38031:17;38024:47;38088:131;38214:4;38088:131;:::i;:::-;38080:139;;37807:419;;;:::o;38232:234::-;38372:34;38368:1;38360:6;38356:14;38349:58;38441:17;38436:2;38428:6;38424:15;38417:42;38232:234;:::o;38472:366::-;38614:3;38635:67;38699:2;38694:3;38635:67;:::i;:::-;38628:74;;38711:93;38800:3;38711:93;:::i;:::-;38829:2;38824:3;38820:12;38813:19;;38472:366;;;:::o;38844:419::-;39010:4;39048:2;39037:9;39033:18;39025:26;;39097:9;39091:4;39087:20;39083:1;39072:9;39068:17;39061:47;39125:131;39251:4;39125:131;:::i;:::-;39117:139;;38844:419;;;:::o;39269:148::-;39371:11;39408:3;39393:18;;39269:148;;;;:::o;39423:377::-;39529:3;39557:39;39590:5;39557:39;:::i;:::-;39612:89;39694:6;39689:3;39612:89;:::i;:::-;39605:96;;39710:52;39755:6;39750:3;39743:4;39736:5;39732:16;39710:52;:::i;:::-;39787:6;39782:3;39778:16;39771:23;;39533:267;39423:377;;;;:::o;39806:435::-;39986:3;40008:95;40099:3;40090:6;40008:95;:::i;:::-;40001:102;;40120:95;40211:3;40202:6;40120:95;:::i;:::-;40113:102;;40232:3;40225:10;;39806:435;;;;;:::o;40247:169::-;40387:21;40383:1;40375:6;40371:14;40364:45;40247:169;:::o;40422:366::-;40564:3;40585:67;40649:2;40644:3;40585:67;:::i;:::-;40578:74;;40661:93;40750:3;40661:93;:::i;:::-;40779:2;40774:3;40770:12;40763:19;;40422:366;;;:::o;40794:419::-;40960:4;40998:2;40987:9;40983:18;40975:26;;41047:9;41041:4;41037:20;41033:1;41022:9;41018:17;41011:47;41075:131;41201:4;41075:131;:::i;:::-;41067:139;;40794:419;;;:::o;41219:225::-;41359:34;41355:1;41347:6;41343:14;41336:58;41428:8;41423:2;41415:6;41411:15;41404:33;41219:225;:::o;41450:366::-;41592:3;41613:67;41677:2;41672:3;41613:67;:::i;:::-;41606:74;;41689:93;41778:3;41689:93;:::i;:::-;41807:2;41802:3;41798:12;41791:19;;41450:366;;;:::o;41822:419::-;41988:4;42026:2;42015:9;42011:18;42003:26;;42075:9;42069:4;42065:20;42061:1;42050:9;42046:17;42039:47;42103:131;42229:4;42103:131;:::i;:::-;42095:139;;41822:419;;;:::o;42247:231::-;42387:34;42383:1;42375:6;42371:14;42364:58;42456:14;42451:2;42443:6;42439:15;42432:39;42247:231;:::o;42484:366::-;42626:3;42647:67;42711:2;42706:3;42647:67;:::i;:::-;42640:74;;42723:93;42812:3;42723:93;:::i;:::-;42841:2;42836:3;42832:12;42825:19;;42484:366;;;:::o;42856:419::-;43022:4;43060:2;43049:9;43045:18;43037:26;;43109:9;43103:4;43099:20;43095:1;43084:9;43080:17;43073:47;43137:131;43263:4;43137:131;:::i;:::-;43129:139;;42856:419;;;:::o;43281:224::-;43421:34;43417:1;43409:6;43405:14;43398:58;43490:7;43485:2;43477:6;43473:15;43466:32;43281:224;:::o;43511:366::-;43653:3;43674:67;43738:2;43733:3;43674:67;:::i;:::-;43667:74;;43750:93;43839:3;43750:93;:::i;:::-;43868:2;43863:3;43859:12;43852:19;;43511:366;;;:::o;43883:419::-;44049:4;44087:2;44076:9;44072:18;44064:26;;44136:9;44130:4;44126:20;44122:1;44111:9;44107:17;44100:47;44164:131;44290:4;44164:131;:::i;:::-;44156:139;;43883:419;;;:::o;44308:223::-;44448:34;44444:1;44436:6;44432:14;44425:58;44517:6;44512:2;44504:6;44500:15;44493:31;44308:223;:::o;44537:366::-;44679:3;44700:67;44764:2;44759:3;44700:67;:::i;:::-;44693:74;;44776:93;44865:3;44776:93;:::i;:::-;44894:2;44889:3;44885:12;44878:19;;44537:366;;;:::o;44909:419::-;45075:4;45113:2;45102:9;45098:18;45090:26;;45162:9;45156:4;45152:20;45148:1;45137:9;45133:17;45126:47;45190:131;45316:4;45190:131;:::i;:::-;45182:139;;44909:419;;;:::o;45334:191::-;45374:4;45394:20;45412:1;45394:20;:::i;:::-;45389:25;;45428:20;45446:1;45428:20;:::i;:::-;45423:25;;45467:1;45464;45461:8;45458:34;;;45472:18;;:::i;:::-;45458:34;45517:1;45514;45510:9;45502:17;;45334:191;;;;:::o;45531:175::-;45671:27;45667:1;45659:6;45655:14;45648:51;45531:175;:::o;45712:366::-;45854:3;45875:67;45939:2;45934:3;45875:67;:::i;:::-;45868:74;;45951:93;46040:3;45951:93;:::i;:::-;46069:2;46064:3;46060:12;46053:19;;45712:366;;;:::o;46084:419::-;46250:4;46288:2;46277:9;46273:18;46265:26;;46337:9;46331:4;46327:20;46323:1;46312:9;46308:17;46301:47;46365:131;46491:4;46365:131;:::i;:::-;46357:139;;46084:419;;;:::o;46509:237::-;46649:34;46645:1;46637:6;46633:14;46626:58;46718:20;46713:2;46705:6;46701:15;46694:45;46509:237;:::o;46752:366::-;46894:3;46915:67;46979:2;46974:3;46915:67;:::i;:::-;46908:74;;46991:93;47080:3;46991:93;:::i;:::-;47109:2;47104:3;47100:12;47093:19;;46752:366;;;:::o;47124:419::-;47290:4;47328:2;47317:9;47313:18;47305:26;;47377:9;47371:4;47367:20;47363:1;47352:9;47348:17;47341:47;47405:131;47531:4;47405:131;:::i;:::-;47397:139;;47124:419;;;:::o;47549:180::-;47597:77;47594:1;47587:88;47694:4;47691:1;47684:15;47718:4;47715:1;47708:15;47735:185;47775:1;47792:20;47810:1;47792:20;:::i;:::-;47787:25;;47826:20;47844:1;47826:20;:::i;:::-;47821:25;;47865:1;47855:35;;47870:18;;:::i;:::-;47855:35;47912:1;47909;47905:9;47900:14;;47735:185;;;;:::o;47926:176::-;47958:1;47975:20;47993:1;47975:20;:::i;:::-;47970:25;;48009:20;48027:1;48009:20;:::i;:::-;48004:25;;48048:1;48038:35;;48053:18;;:::i;:::-;48038:35;48094:1;48091;48087:9;48082:14;;47926:176;;;;:::o;48108:98::-;48159:6;48193:5;48187:12;48177:22;;48108:98;;;:::o;48212:168::-;48295:11;48329:6;48324:3;48317:19;48369:4;48364:3;48360:14;48345:29;;48212:168;;;;:::o;48386:360::-;48472:3;48500:38;48532:5;48500:38;:::i;:::-;48554:70;48617:6;48612:3;48554:70;:::i;:::-;48547:77;;48633:52;48678:6;48673:3;48666:4;48659:5;48655:16;48633:52;:::i;:::-;48710:29;48732:6;48710:29;:::i;:::-;48705:3;48701:39;48694:46;;48476:270;48386:360;;;;:::o;48752:640::-;48947:4;48985:3;48974:9;48970:19;48962:27;;48999:71;49067:1;49056:9;49052:17;49043:6;48999:71;:::i;:::-;49080:72;49148:2;49137:9;49133:18;49124:6;49080:72;:::i;:::-;49162;49230:2;49219:9;49215:18;49206:6;49162:72;:::i;:::-;49281:9;49275:4;49271:20;49266:2;49255:9;49251:18;49244:48;49309:76;49380:4;49371:6;49309:76;:::i;:::-;49301:84;;48752:640;;;;;;;:::o;49398:141::-;49454:5;49485:6;49479:13;49470:22;;49501:32;49527:5;49501:32;:::i;:::-;49398:141;;;;:::o;49545:349::-;49614:6;49663:2;49651:9;49642:7;49638:23;49634:32;49631:119;;;49669:79;;:::i;:::-;49631:119;49789:1;49814:63;49869:7;49860:6;49849:9;49845:22;49814:63;:::i;:::-;49804:73;;49760:127;49545:349;;;;:::o;49900:182::-;50040:34;50036:1;50028:6;50024:14;50017:58;49900:182;:::o;50088:366::-;50230:3;50251:67;50315:2;50310:3;50251:67;:::i;:::-;50244:74;;50327:93;50416:3;50327:93;:::i;:::-;50445:2;50440:3;50436:12;50429:19;;50088:366;;;:::o;50460:419::-;50626:4;50664:2;50653:9;50649:18;50641:26;;50713:9;50707:4;50703:20;50699:1;50688:9;50684:17;50677:47;50741:131;50867:4;50741:131;:::i;:::-;50733:139;;50460:419;;;:::o;50885:178::-;51025:30;51021:1;51013:6;51009:14;51002:54;50885:178;:::o;51069:366::-;51211:3;51232:67;51296:2;51291:3;51232:67;:::i;:::-;51225:74;;51308:93;51397:3;51308:93;:::i;:::-;51426:2;51421:3;51417:12;51410:19;;51069:366;;;:::o;51441:419::-;51607:4;51645:2;51634:9;51630:18;51622:26;;51694:9;51688:4;51684:20;51680:1;51669:9;51665:17;51658:47;51722:131;51848:4;51722:131;:::i;:::-;51714:139;;51441:419;;;:::o
Swarm Source
ipfs://3e425cee16bb41b9db9faceaf7b43911ab0dd8fd4ef3c01c61147ce340c0993b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.