Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 313 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 21472965 | 1120 days ago | IN | 0 POL | 0.0019899 | ||||
Safe Transfer Fr... | 20717290 | 1140 days ago | IN | 0 POL | 0.0026532 | ||||
Safe Transfer Fr... | 20680466 | 1141 days ago | IN | 0 POL | 0.0019899 | ||||
Safe Transfer Fr... | 20676683 | 1141 days ago | IN | 0 POL | 0.0019899 | ||||
Safe Transfer Fr... | 20638902 | 1142 days ago | IN | 0 POL | 0.0019899 | ||||
Safe Transfer Fr... | 20635551 | 1142 days ago | IN | 0 POL | 0.00199026 | ||||
Safe Transfer Fr... | 20633251 | 1142 days ago | IN | 0 POL | 0.0019899 | ||||
Safe Transfer Fr... | 20632322 | 1142 days ago | IN | 0 POL | 0.0019899 | ||||
Set Approval For... | 20599434 | 1143 days ago | IN | 0 POL | 0.00140307 | ||||
Transfer | 20599344 | 1143 days ago | IN | 0.0015 POL | 0.000735 | ||||
Safe Transfer Fr... | 20599146 | 1143 days ago | IN | 0 POL | 0.0019899 | ||||
Set Approval For... | 20595215 | 1143 days ago | IN | 0 POL | 0.00140307 | ||||
Create | 20565276 | 1144 days ago | IN | 0 POL | 0.30388764 | ||||
Create | 20565253 | 1144 days ago | IN | 0 POL | 0.22037715 | ||||
Create | 20565235 | 1144 days ago | IN | 0 POL | 0.25614963 | ||||
Create | 20565214 | 1144 days ago | IN | 0 POL | 0.39433086 | ||||
Create | 20565186 | 1144 days ago | IN | 0 POL | 0.24427752 | ||||
Create | 20565170 | 1144 days ago | IN | 0 POL | 0.25250979 | ||||
Create | 20565157 | 1144 days ago | IN | 0 POL | 0.24801393 | ||||
Create | 20565146 | 1144 days ago | IN | 0 POL | 0.29122692 | ||||
Create | 20565128 | 1144 days ago | IN | 0 POL | 0.3047379 | ||||
Create | 20565111 | 1144 days ago | IN | 0 POL | 0.29494281 | ||||
Create | 20565098 | 1144 days ago | IN | 0 POL | 0.2405301 | ||||
Create | 20565085 | 1144 days ago | IN | 0 POL | 0.2479626 | ||||
Create | 20565072 | 1144 days ago | IN | 0 POL | 0.26873939 |
Loading...
Loading
Contract Name:
MUSES
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-10-24 */ // File: base64-sol/base64.sol pragma solidity >=0.6.0; /// @title Base64 /// @author Brecht Devos - <[email protected]> /// @notice Provides functions for encoding/decoding base64 library Base64 { string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; bytes internal constant TABLE_DECODE = hex"0000000000000000000000000000000000000000000000000000000000000000" hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000" hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000" hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000"; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE_ENCODE; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((data.length + 2) / 3); // add some extra buffer at the end required for the writing string memory result = new string(encodedLen + 32); assembly { // set the actual output length mstore(result, encodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 3 bytes at a time for {} lt(dataPtr, endPtr) {} { // read 3 bytes dataPtr := add(dataPtr, 3) let input := mload(dataPtr) // write 4 characters mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F)))) resultPtr := add(resultPtr, 1) mstore8(resultPtr, mload(add(tablePtr, and( input, 0x3F)))) resultPtr := add(resultPtr, 1) } // padding with '=' switch mod(mload(data), 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } } return result; } function decode(string memory _data) internal pure returns (bytes memory) { bytes memory data = bytes(_data); if (data.length == 0) return new bytes(0); require(data.length % 4 == 0, "invalid base64 decoder input"); // load the table into memory bytes memory table = TABLE_DECODE; // every 4 characters represent 3 bytes uint256 decodedLen = (data.length / 4) * 3; // add some extra buffer at the end required for the writing bytes memory result = new bytes(decodedLen + 32); assembly { // padding with '=' let lastBytes := mload(add(data, mload(data))) if eq(and(lastBytes, 0xFF), 0x3d) { decodedLen := sub(decodedLen, 1) if eq(and(lastBytes, 0xFFFF), 0x3d3d) { decodedLen := sub(decodedLen, 1) } } // set the actual output length mstore(result, decodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 4 characters at a time for {} lt(dataPtr, endPtr) {} { // read 4 characters dataPtr := add(dataPtr, 4) let input := mload(dataPtr) // write 3 bytes let output := add( add( shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)), shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))), add( shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)), and(mload(add(tablePtr, and( input , 0xFF))), 0xFF) ) ) mstore(resultPtr, shl(232, output)) resultPtr := add(resultPtr, 3) } } return result; } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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 {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: contracts/Muses.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; //Contract for the Mu::ses collection contract MUSES is ERC721URIStorage, ReentrancyGuard, Ownable { uint256 public tokenCounter; mapping(uint256 => string) Score; event CreatedNFT(uint256 indexed tokenId, string tokenURI); constructor() ERC721('Muses', "mu::ses"){ tokenCounter = 1; } function create( string memory _name, string memory _keySignature, string memory _score, string memory _preview ) public nonReentrant onlyOwner { require(tokenCounter <= 300); _safeMint(msg.sender, tokenCounter); Score[tokenCounter] = _score; string memory scoreURI = score_URI(_score); string memory tokenURI = formatTokenURI(_name, _keySignature, scoreURI, _preview); _setTokenURI(tokenCounter, tokenURI); emit CreatedNFT(tokenCounter, tokenURI); tokenCounter ++; } function score_URI(string memory _score) public pure returns (string memory) { string memory finalSvg = string(abi.encodePacked('<svg viewBox="0 0 350 350" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" > <style> div { color: #F2F2F2; font: 06px courier; height: 100%; word-wrap: break-word; overflow: auto; } </style> <rect width="100%" height="100%" fill="#020A1D" /> <foreignObject x="10" y="10" width="95%" height="95%"> <div xmlns="http://www.w3.org/1999/xhtml">')); finalSvg = string(abi.encodePacked(finalSvg, _score)); finalSvg = string(abi.encodePacked(finalSvg, '</div></foreignObject></svg>')); string memory baseURL = "data:image/svg+xml;base64,"; string memory Base64Encoded = Base64.encode(bytes(string(abi.encodePacked(finalSvg)))); string memory scoreURI = string(abi.encodePacked(baseURL, Base64Encoded)); return scoreURI; } function formatTokenURI( string memory _name, string memory _keySignature, string memory _scoreURI, string memory _preview ) public pure returns(string memory) { string memory baseURL = "data:application/json;base64,"; return string(abi.encodePacked( baseURL, Base64.encode( bytes(abi.encodePacked( '{"name": "', _name, '", ', '"description": "Mu::ses is a collection of 300 unique melodies, generated by AI, serialized in text format, and stored on-chain. A Muse is a source of inspiration, not a finished composition. Be creative! Royalty free!", ', '"attributes": [ { "trait_type": "Key Signature", "value": "',_keySignature,'" } ],', '"image": "', _scoreURI, '",', '"animation_url": "', _preview, '"}' ) ) ) )); } function getScore(uint256 _tokenID) public view returns(string memory) { return Score[_tokenID]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tokenURI","type":"string"}],"name":"CreatedNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"string","name":"_name","type":"string"},{"internalType":"string","name":"_keySignature","type":"string"},{"internalType":"string","name":"_score","type":"string"},{"internalType":"string","name":"_preview","type":"string"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_keySignature","type":"string"},{"internalType":"string","name":"_scoreURI","type":"string"},{"internalType":"string","name":"_preview","type":"string"}],"name":"formatTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"}],"name":"getScore","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_score","type":"string"}],"name":"score_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600581526020017f4d757365730000000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f6d753a3a73657300000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001b6565b508060019080519060200190620000af929190620001b6565b5050506001600781905550620000da620000ce620000e860201b60201c565b620000f060201b60201c565b6001600981905550620002cb565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001c49062000266565b90600052602060002090601f016020900481019282620001e8576000855562000234565b82601f106200020357805160ff191683800117855562000234565b8280016001018555821562000234579182015b828111156200023357825182559160200191906001019062000216565b5b50905062000243919062000247565b5090565b5b808211156200026257600081600090555060010162000248565b5090565b600060028204905060018216806200027f57607f821691505b602082108114156200029657620002956200029c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613e6080620002db6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806376e99193116100b8578063b88d4fde1161007c578063b88d4fde1461034c578063c87b56dd14610368578063d082e38114610398578063e985e9c5146103b6578063f2fde38b146103e6578063f66d61a31461040257610137565b806376e99193146102a857806378ff6ee3146102d85780638da5cb5b146102f457806395d89b4114610312578063a22cb4651461033057610137565b806323b872dd116100ff57806323b872dd1461020657806342842e0e146102225780636352211e1461023e57806370a082311461026e578063715018a61461029e57610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba5780630e1af57b146101d6575b600080fd5b610156600480360381019061015191906124b5565b610432565b6040516101639190612cc2565b60405180910390f35b610174610514565b6040516101819190612cdd565b60405180910390f35b6101a4600480360381019061019f919061262f565b6105a6565b6040516101b19190612c5b565b60405180910390f35b6101d460048036038101906101cf9190612475565b61062b565b005b6101f060048036038101906101eb919061262f565b610743565b6040516101fd9190612cdd565b60405180910390f35b610220600480360381019061021b919061235f565b6107e8565b005b61023c6004803603810190610237919061235f565b610848565b005b6102586004803603810190610253919061262f565b610868565b6040516102659190612c5b565b60405180910390f35b610288600480360381019061028391906122f2565b61091a565b6040516102959190612f5f565b60405180910390f35b6102a66109d2565b005b6102c260048036038101906102bd919061250f565b610a5a565b6040516102cf9190612cdd565b60405180910390f35b6102f260048036038101906102ed9190612558565b610b5c565b005b6102fc610cf8565b6040516103099190612c5b565b60405180910390f35b61031a610d22565b6040516103279190612cdd565b60405180910390f35b61034a60048036038101906103459190612435565b610db4565b005b610366600480360381019061036191906123b2565b610f35565b005b610382600480360381019061037d919061262f565b610f97565b60405161038f9190612cdd565b60405180910390f35b6103a06110e9565b6040516103ad9190612f5f565b60405180910390f35b6103d060048036038101906103cb919061231f565b6110ef565b6040516103dd9190612cc2565b60405180910390f35b61040060048036038101906103fb91906122f2565b611183565b005b61041c60048036038101906104179190612558565b61127b565b6040516104299190612cdd565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104fd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061050d575061050c82611311565b5b9050919050565b6060600080546105239061320f565b80601f016020809104026020016040519081016040528092919081815260200182805461054f9061320f565b801561059c5780601f106105715761010080835404028352916020019161059c565b820191906000526020600020905b81548152906001019060200180831161057f57829003601f168201915b5050505050905090565b60006105b18261137b565b6105f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e790612e7f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061063682610868565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069e90612eff565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106c66113e7565b73ffffffffffffffffffffffffffffffffffffffff1614806106f557506106f4816106ef6113e7565b6110ef565b5b610734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072b90612dbf565b60405180910390fd5b61073e83836113ef565b505050565b6060600a600083815260200190815260200160002080546107639061320f565b80601f016020809104026020016040519081016040528092919081815260200182805461078f9061320f565b80156107dc5780601f106107b1576101008083540402835291602001916107dc565b820191906000526020600020905b8154815290600101906020018083116107bf57829003601f168201915b50505050509050919050565b6107f96107f36113e7565b826114a8565b610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f90612f1f565b60405180910390fd5b610843838383611586565b505050565b61086383838360405180602001604052806000815250610f35565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890612dff565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561098b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098290612ddf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109da6113e7565b73ffffffffffffffffffffffffffffffffffffffff166109f8610cf8565b73ffffffffffffffffffffffffffffffffffffffff1614610a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4590612e9f565b60405180910390fd5b610a5860006117e2565b565b60606000604051602001610a6d90612ba5565b60405160208183030381529060405290508083604051602001610a91929190612b5f565b604051602081830303815290604052905080604051602001610ab39190612b83565b604051602081830303815290604052905060006040518060400160405280601a81526020017f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081525090506000610b2883604051602001610b149190612b48565b6040516020818303038152906040526118a8565b905060008282604051602001610b3f929190612b5f565b604051602081830303815290604052905080945050505050919050565b60026007541415610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9990612f3f565b60405180910390fd5b6002600781905550610bb26113e7565b73ffffffffffffffffffffffffffffffffffffffff16610bd0610cf8565b73ffffffffffffffffffffffffffffffffffffffff1614610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90612e9f565b60405180910390fd5b61012c6009541115610c3757600080fd5b610c4333600954611a21565b81600a600060095481526020019081526020016000209080519060200190610c6c929190612106565b506000610c7883610a5a565b90506000610c888686848661127b565b9050610c9660095482611a3f565b6009547fb5a8d8cf5d01b5006e471421ba7da032446e2a82412342ed548b7aeed0ea9b6982604051610cc89190612cdd565b60405180910390a260096000815480929190610ce390613272565b91905055505050600160078190555050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d319061320f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5d9061320f565b8015610daa5780601f10610d7f57610100808354040283529160200191610daa565b820191906000526020600020905b815481529060010190602001808311610d8d57829003601f168201915b5050505050905090565b610dbc6113e7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2190612d7f565b60405180910390fd5b8060056000610e376113e7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ee46113e7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f299190612cc2565b60405180910390a35050565b610f46610f406113e7565b836114a8565b610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90612f1f565b60405180910390fd5b610f9184848484611ab3565b50505050565b6060610fa28261137b565b610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890612e5f565b60405180910390fd5b60006006600084815260200190815260200160002080546110019061320f565b80601f016020809104026020016040519081016040528092919081815260200182805461102d9061320f565b801561107a5780601f1061104f5761010080835404028352916020019161107a565b820191906000526020600020905b81548152906001019060200180831161105d57829003601f168201915b50505050509050600061108b611b0f565b90506000815114156110a15781925050506110e4565b6000825111156110d65780826040516020016110be929190612b5f565b604051602081830303815290604052925050506110e4565b6110df84611b26565b925050505b919050565b60095481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61118b6113e7565b73ffffffffffffffffffffffffffffffffffffffff166111a9610cf8565b73ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690612e9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690612d1f565b60405180910390fd5b611278816117e2565b50565b606060006040518060400160405280601d81526020017f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152509050806112e6878787876040516020016112d29493929190612bba565b6040516020818303038152906040526118a8565b6040516020016112f7929190612b5f565b604051602081830303815290604052915050949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661146283610868565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114b38261137b565b6114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990612d9f565b60405180910390fd5b60006114fd83610868565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061156c57508373ffffffffffffffffffffffffffffffffffffffff16611554846105a6565b73ffffffffffffffffffffffffffffffffffffffff16145b8061157d575061157c81856110ef565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166115a682610868565b73ffffffffffffffffffffffffffffffffffffffff16146115fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f390612ebf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390612d5f565b60405180910390fd5b611677838383611bcd565b6116826000826113ef565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116d29190613125565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117299190613044565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60606000825114156118cb57604051806020016040528060008152509050611a1c565b6000604051806060016040528060408152602001613deb60409139905060006003600285516118fa9190613044565b611904919061309a565b600461191091906130cb565b905060006020826119219190613044565b67ffffffffffffffff81111561193a576119396133a8565b5b6040519080825280601f01601f19166020018201604052801561196c5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b818310156119db576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050611980565b6003895106600181146119f55760028114611a0557611a10565b613d3d60f01b6002830352611a10565b603d60f81b60018303525b50505050508093505050505b919050565b611a3b828260405180602001604052806000815250611bd2565b5050565b611a488261137b565b611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90612e1f565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611aae929190612106565b505050565b611abe848484611586565b611aca84848484611c2d565b611b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0090612cff565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060611b318261137b565b611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790612edf565b60405180910390fd5b6000611b7a611b0f565b90506000815111611b9a5760405180602001604052806000815250611bc5565b80611ba484611dc4565b604051602001611bb5929190612b5f565b6040516020818303038152906040525b915050919050565b505050565b611bdc8383611f25565b611be96000848484611c2d565b611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90612cff565b60405180910390fd5b505050565b6000611c4e8473ffffffffffffffffffffffffffffffffffffffff166120f3565b15611db7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c776113e7565b8786866040518563ffffffff1660e01b8152600401611c999493929190612c76565b602060405180830381600087803b158015611cb357600080fd5b505af1925050508015611ce457506040513d601f19601f82011682018060405250810190611ce191906124e2565b60015b611d67573d8060008114611d14576040519150601f19603f3d011682016040523d82523d6000602084013e611d19565b606091505b50600081511415611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690612cff565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611dbc565b600190505b949350505050565b60606000821415611e0c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f20565b600082905060005b60008214611e3e578080611e2790613272565b915050600a82611e37919061309a565b9150611e14565b60008167ffffffffffffffff811115611e5a57611e596133a8565b5b6040519080825280601f01601f191660200182016040528015611e8c5781602001600182028036833780820191505090505b5090505b60008514611f1957600182611ea59190613125565b9150600a85611eb491906132bb565b6030611ec09190613044565b60f81b818381518110611ed657611ed5613379565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f12919061309a565b9450611e90565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c90612e3f565b60405180910390fd5b611f9e8161137b565b15611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590612d3f565b60405180910390fd5b611fea60008383611bcd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203a9190613044565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546121129061320f565b90600052602060002090601f016020900481019282612134576000855561217b565b82601f1061214d57805160ff191683800117855561217b565b8280016001018555821561217b579182015b8281111561217a57825182559160200191906001019061215f565b5b509050612188919061218c565b5090565b5b808211156121a557600081600090555060010161218d565b5090565b60006121bc6121b784612f9f565b612f7a565b9050828152602081018484840111156121d8576121d76133dc565b5b6121e38482856131cd565b509392505050565b60006121fe6121f984612fd0565b612f7a565b90508281526020810184848401111561221a576122196133dc565b5b6122258482856131cd565b509392505050565b60008135905061223c81613d8e565b92915050565b60008135905061225181613da5565b92915050565b60008135905061226681613dbc565b92915050565b60008151905061227b81613dbc565b92915050565b600082601f830112612296576122956133d7565b5b81356122a68482602086016121a9565b91505092915050565b600082601f8301126122c4576122c36133d7565b5b81356122d48482602086016121eb565b91505092915050565b6000813590506122ec81613dd3565b92915050565b600060208284031215612308576123076133e6565b5b60006123168482850161222d565b91505092915050565b60008060408385031215612336576123356133e6565b5b60006123448582860161222d565b92505060206123558582860161222d565b9150509250929050565b600080600060608486031215612378576123776133e6565b5b60006123868682870161222d565b93505060206123978682870161222d565b92505060406123a8868287016122dd565b9150509250925092565b600080600080608085870312156123cc576123cb6133e6565b5b60006123da8782880161222d565b94505060206123eb8782880161222d565b93505060406123fc878288016122dd565b925050606085013567ffffffffffffffff81111561241d5761241c6133e1565b5b61242987828801612281565b91505092959194509250565b6000806040838503121561244c5761244b6133e6565b5b600061245a8582860161222d565b925050602061246b85828601612242565b9150509250929050565b6000806040838503121561248c5761248b6133e6565b5b600061249a8582860161222d565b92505060206124ab858286016122dd565b9150509250929050565b6000602082840312156124cb576124ca6133e6565b5b60006124d984828501612257565b91505092915050565b6000602082840312156124f8576124f76133e6565b5b60006125068482850161226c565b91505092915050565b600060208284031215612525576125246133e6565b5b600082013567ffffffffffffffff811115612543576125426133e1565b5b61254f848285016122af565b91505092915050565b60008060008060808587031215612572576125716133e6565b5b600085013567ffffffffffffffff8111156125905761258f6133e1565b5b61259c878288016122af565b945050602085013567ffffffffffffffff8111156125bd576125bc6133e1565b5b6125c9878288016122af565b935050604085013567ffffffffffffffff8111156125ea576125e96133e1565b5b6125f6878288016122af565b925050606085013567ffffffffffffffff811115612617576126166133e1565b5b612623878288016122af565b91505092959194509250565b600060208284031215612645576126446133e6565b5b6000612653848285016122dd565b91505092915050565b61266581613159565b82525050565b6126748161316b565b82525050565b600061268582613001565b61268f8185613017565b935061269f8185602086016131dc565b6126a8816133eb565b840191505092915050565b60006126be8261300c565b6126c88185613028565b93506126d88185602086016131dc565b6126e1816133eb565b840191505092915050565b60006126f78261300c565b6127018185613039565b93506127118185602086016131dc565b80840191505092915050565b600061272a600683613039565b9150612735826133fc565b600682019050919050565b600061274d603283613028565b915061275882613425565b604082019050919050565b6000612770602683613028565b915061277b82613474565b604082019050919050565b6000612793600283613039565b915061279e826134c3565b600282019050919050565b60006127b6601c83613028565b91506127c1826134ec565b602082019050919050565b60006127d960dd83613039565b91506127e482613515565b60dd82019050919050565b60006127fd61016a83613039565b915061280882613622565b61016a82019050919050565b6000612821602483613028565b915061282c826137f1565b604082019050919050565b6000612844601983613028565b915061284f82613840565b602082019050919050565b6000612867602c83613028565b915061287282613869565b604082019050919050565b600061288a603b83613039565b9150612895826138b8565b603b82019050919050565b60006128ad603883613028565b91506128b882613907565b604082019050919050565b60006128d0602a83613028565b91506128db82613956565b604082019050919050565b60006128f3602983613028565b91506128fe826139a5565b604082019050919050565b6000612916602e83613028565b9150612921826139f4565b604082019050919050565b6000612939600283613039565b915061294482613a43565b600282019050919050565b600061295c601c83613039565b915061296782613a6c565b601c82019050919050565b600061297f602083613028565b915061298a82613a95565b602082019050919050565b60006129a2603183613028565b91506129ad82613abe565b604082019050919050565b60006129c5602c83613028565b91506129d082613b0d565b604082019050919050565b60006129e8602083613028565b91506129f382613b5c565b602082019050919050565b6000612a0b602983613028565b9150612a1682613b85565b604082019050919050565b6000612a2e602f83613028565b9150612a3982613bd4565b604082019050919050565b6000612a51600a83613039565b9150612a5c82613c23565b600a82019050919050565b6000612a74602183613028565b9150612a7f82613c4c565b604082019050919050565b6000612a97601283613039565b9150612aa282613c9b565b601282019050919050565b6000612aba603183613028565b9150612ac582613cc4565b604082019050919050565b6000612add600383613039565b9150612ae882613d13565b600382019050919050565b6000612b00600a83613039565b9150612b0b82613d3c565b600a82019050919050565b6000612b23601f83613028565b9150612b2e82613d65565b602082019050919050565b612b42816131c3565b82525050565b6000612b5482846126ec565b915081905092915050565b6000612b6b82856126ec565b9150612b7782846126ec565b91508190509392505050565b6000612b8f82846126ec565b9150612b9a8261294f565b915081905092915050565b6000612bb0826127ef565b9150819050919050565b6000612bc582612a44565b9150612bd182876126ec565b9150612bdc82612ad0565b9150612be7826127cc565b9150612bf28261287d565b9150612bfe82866126ec565b9150612c098261271d565b9150612c1482612af3565b9150612c2082856126ec565b9150612c2b82612786565b9150612c3682612a8a565b9150612c4282846126ec565b9150612c4d8261292c565b915081905095945050505050565b6000602082019050612c70600083018461265c565b92915050565b6000608082019050612c8b600083018761265c565b612c98602083018661265c565b612ca56040830185612b39565b8181036060830152612cb7818461267a565b905095945050505050565b6000602082019050612cd7600083018461266b565b92915050565b60006020820190508181036000830152612cf781846126b3565b905092915050565b60006020820190508181036000830152612d1881612740565b9050919050565b60006020820190508181036000830152612d3881612763565b9050919050565b60006020820190508181036000830152612d58816127a9565b9050919050565b60006020820190508181036000830152612d7881612814565b9050919050565b60006020820190508181036000830152612d9881612837565b9050919050565b60006020820190508181036000830152612db88161285a565b9050919050565b60006020820190508181036000830152612dd8816128a0565b9050919050565b60006020820190508181036000830152612df8816128c3565b9050919050565b60006020820190508181036000830152612e18816128e6565b9050919050565b60006020820190508181036000830152612e3881612909565b9050919050565b60006020820190508181036000830152612e5881612972565b9050919050565b60006020820190508181036000830152612e7881612995565b9050919050565b60006020820190508181036000830152612e98816129b8565b9050919050565b60006020820190508181036000830152612eb8816129db565b9050919050565b60006020820190508181036000830152612ed8816129fe565b9050919050565b60006020820190508181036000830152612ef881612a21565b9050919050565b60006020820190508181036000830152612f1881612a67565b9050919050565b60006020820190508181036000830152612f3881612aad565b9050919050565b60006020820190508181036000830152612f5881612b16565b9050919050565b6000602082019050612f746000830184612b39565b92915050565b6000612f84612f95565b9050612f908282613241565b919050565b6000604051905090565b600067ffffffffffffffff821115612fba57612fb96133a8565b5b612fc3826133eb565b9050602081019050919050565b600067ffffffffffffffff821115612feb57612fea6133a8565b5b612ff4826133eb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061304f826131c3565b915061305a836131c3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561308f5761308e6132ec565b5b828201905092915050565b60006130a5826131c3565b91506130b0836131c3565b9250826130c0576130bf61331b565b5b828204905092915050565b60006130d6826131c3565b91506130e1836131c3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561311a576131196132ec565b5b828202905092915050565b6000613130826131c3565b915061313b836131c3565b92508282101561314e5761314d6132ec565b5b828203905092915050565b6000613164826131a3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156131fa5780820151818401526020810190506131df565b83811115613209576000848401525b50505050565b6000600282049050600182168061322757607f821691505b6020821081141561323b5761323a61334a565b5b50919050565b61324a826133eb565b810181811067ffffffffffffffff82111715613269576132686133a8565b5b80604052505050565b600061327d826131c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132b0576132af6132ec565b5b600182019050919050565b60006132c6826131c3565b91506132d1836131c3565b9250826132e1576132e061331b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f22207d205d2c0000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f226465736372697074696f6e223a20224d753a3a736573206973206120636f6c60008201527f6c656374696f6e206f662033303020756e69717565206d656c6f646965732c2060208201527f67656e6572617465642062792041492c2073657269616c697a656420696e207460408201527f65787420666f726d61742c20616e642073746f726564206f6e2d636861696e2e60608201527f2041204d757365206973206120736f75726365206f6620696e7370697261746960808201527f6f6e2c206e6f7420612066696e697368656420636f6d706f736974696f6e2e2060a08201527f42652063726561746976652120526f79616c7479206672656521222c2000000060c082015250565b7f3c7376672076696577426f783d2230203020333530203335302220786d6c6e7360008201527f3d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220707260208201527f657365727665417370656374526174696f3d22784d696e594d696e206d65657460408201527f22203e203c7374796c653e20646976207b20636f6c6f723a202346324632463260608201527f3b20666f6e743a203036707820636f75726965723b206865696768743a20313060808201527f30253b20776f72642d777261703a20627265616b2d776f72643b206f7665726660a08201527f6c6f773a206175746f3b207d203c2f7374796c653e203c72656374207769647460c08201527f683d223130302522206865696768743d2231303025222066696c6c3d2223303260e08201527f3041314422202f3e203c666f726569676e4f626a65637420783d2231302220796101008201527f3d223130222077696474683d2239352522206865696768743d22393525223e206101208201527f3c64697620786d6c6e733d22687474703a2f2f7777772e77332e6f72672f31396101408201527f39392f7868746d6c223e0000000000000000000000000000000000000000000061016082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2261747472696275746573223a205b207b202274726169745f74797065223a2060008201527f224b6579205369676e6174757265222c202276616c7565223a20220000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f3c2f6469763e3c2f666f726569676e4f626a6563743e3c2f7376673e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f7b226e616d65223a202200000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f22616e696d6174696f6e5f75726c223a20220000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f222c200000000000000000000000000000000000000000000000000000000000600082015250565b7f22696d616765223a202200000000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613d9781613159565b8114613da257600080fd5b50565b613dae8161316b565b8114613db957600080fd5b50565b613dc581613177565b8114613dd057600080fd5b50565b613ddc816131c3565b8114613de757600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220db11b8ebdbf90fb704c23dee7c88ccd19d191f69f98a0d02029fecc46ab4c3df64736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c806376e99193116100b8578063b88d4fde1161007c578063b88d4fde1461034c578063c87b56dd14610368578063d082e38114610398578063e985e9c5146103b6578063f2fde38b146103e6578063f66d61a31461040257610137565b806376e99193146102a857806378ff6ee3146102d85780638da5cb5b146102f457806395d89b4114610312578063a22cb4651461033057610137565b806323b872dd116100ff57806323b872dd1461020657806342842e0e146102225780636352211e1461023e57806370a082311461026e578063715018a61461029e57610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba5780630e1af57b146101d6575b600080fd5b610156600480360381019061015191906124b5565b610432565b6040516101639190612cc2565b60405180910390f35b610174610514565b6040516101819190612cdd565b60405180910390f35b6101a4600480360381019061019f919061262f565b6105a6565b6040516101b19190612c5b565b60405180910390f35b6101d460048036038101906101cf9190612475565b61062b565b005b6101f060048036038101906101eb919061262f565b610743565b6040516101fd9190612cdd565b60405180910390f35b610220600480360381019061021b919061235f565b6107e8565b005b61023c6004803603810190610237919061235f565b610848565b005b6102586004803603810190610253919061262f565b610868565b6040516102659190612c5b565b60405180910390f35b610288600480360381019061028391906122f2565b61091a565b6040516102959190612f5f565b60405180910390f35b6102a66109d2565b005b6102c260048036038101906102bd919061250f565b610a5a565b6040516102cf9190612cdd565b60405180910390f35b6102f260048036038101906102ed9190612558565b610b5c565b005b6102fc610cf8565b6040516103099190612c5b565b60405180910390f35b61031a610d22565b6040516103279190612cdd565b60405180910390f35b61034a60048036038101906103459190612435565b610db4565b005b610366600480360381019061036191906123b2565b610f35565b005b610382600480360381019061037d919061262f565b610f97565b60405161038f9190612cdd565b60405180910390f35b6103a06110e9565b6040516103ad9190612f5f565b60405180910390f35b6103d060048036038101906103cb919061231f565b6110ef565b6040516103dd9190612cc2565b60405180910390f35b61040060048036038101906103fb91906122f2565b611183565b005b61041c60048036038101906104179190612558565b61127b565b6040516104299190612cdd565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104fd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061050d575061050c82611311565b5b9050919050565b6060600080546105239061320f565b80601f016020809104026020016040519081016040528092919081815260200182805461054f9061320f565b801561059c5780601f106105715761010080835404028352916020019161059c565b820191906000526020600020905b81548152906001019060200180831161057f57829003601f168201915b5050505050905090565b60006105b18261137b565b6105f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e790612e7f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061063682610868565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069e90612eff565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106c66113e7565b73ffffffffffffffffffffffffffffffffffffffff1614806106f557506106f4816106ef6113e7565b6110ef565b5b610734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072b90612dbf565b60405180910390fd5b61073e83836113ef565b505050565b6060600a600083815260200190815260200160002080546107639061320f565b80601f016020809104026020016040519081016040528092919081815260200182805461078f9061320f565b80156107dc5780601f106107b1576101008083540402835291602001916107dc565b820191906000526020600020905b8154815290600101906020018083116107bf57829003601f168201915b50505050509050919050565b6107f96107f36113e7565b826114a8565b610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f90612f1f565b60405180910390fd5b610843838383611586565b505050565b61086383838360405180602001604052806000815250610f35565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890612dff565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561098b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098290612ddf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109da6113e7565b73ffffffffffffffffffffffffffffffffffffffff166109f8610cf8565b73ffffffffffffffffffffffffffffffffffffffff1614610a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4590612e9f565b60405180910390fd5b610a5860006117e2565b565b60606000604051602001610a6d90612ba5565b60405160208183030381529060405290508083604051602001610a91929190612b5f565b604051602081830303815290604052905080604051602001610ab39190612b83565b604051602081830303815290604052905060006040518060400160405280601a81526020017f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081525090506000610b2883604051602001610b149190612b48565b6040516020818303038152906040526118a8565b905060008282604051602001610b3f929190612b5f565b604051602081830303815290604052905080945050505050919050565b60026007541415610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9990612f3f565b60405180910390fd5b6002600781905550610bb26113e7565b73ffffffffffffffffffffffffffffffffffffffff16610bd0610cf8565b73ffffffffffffffffffffffffffffffffffffffff1614610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d90612e9f565b60405180910390fd5b61012c6009541115610c3757600080fd5b610c4333600954611a21565b81600a600060095481526020019081526020016000209080519060200190610c6c929190612106565b506000610c7883610a5a565b90506000610c888686848661127b565b9050610c9660095482611a3f565b6009547fb5a8d8cf5d01b5006e471421ba7da032446e2a82412342ed548b7aeed0ea9b6982604051610cc89190612cdd565b60405180910390a260096000815480929190610ce390613272565b91905055505050600160078190555050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d319061320f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5d9061320f565b8015610daa5780601f10610d7f57610100808354040283529160200191610daa565b820191906000526020600020905b815481529060010190602001808311610d8d57829003601f168201915b5050505050905090565b610dbc6113e7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2190612d7f565b60405180910390fd5b8060056000610e376113e7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ee46113e7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f299190612cc2565b60405180910390a35050565b610f46610f406113e7565b836114a8565b610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90612f1f565b60405180910390fd5b610f9184848484611ab3565b50505050565b6060610fa28261137b565b610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890612e5f565b60405180910390fd5b60006006600084815260200190815260200160002080546110019061320f565b80601f016020809104026020016040519081016040528092919081815260200182805461102d9061320f565b801561107a5780601f1061104f5761010080835404028352916020019161107a565b820191906000526020600020905b81548152906001019060200180831161105d57829003601f168201915b50505050509050600061108b611b0f565b90506000815114156110a15781925050506110e4565b6000825111156110d65780826040516020016110be929190612b5f565b604051602081830303815290604052925050506110e4565b6110df84611b26565b925050505b919050565b60095481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61118b6113e7565b73ffffffffffffffffffffffffffffffffffffffff166111a9610cf8565b73ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690612e9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690612d1f565b60405180910390fd5b611278816117e2565b50565b606060006040518060400160405280601d81526020017f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152509050806112e6878787876040516020016112d29493929190612bba565b6040516020818303038152906040526118a8565b6040516020016112f7929190612b5f565b604051602081830303815290604052915050949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661146283610868565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114b38261137b565b6114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990612d9f565b60405180910390fd5b60006114fd83610868565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061156c57508373ffffffffffffffffffffffffffffffffffffffff16611554846105a6565b73ffffffffffffffffffffffffffffffffffffffff16145b8061157d575061157c81856110ef565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166115a682610868565b73ffffffffffffffffffffffffffffffffffffffff16146115fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f390612ebf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390612d5f565b60405180910390fd5b611677838383611bcd565b6116826000826113ef565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116d29190613125565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117299190613044565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60606000825114156118cb57604051806020016040528060008152509050611a1c565b6000604051806060016040528060408152602001613deb60409139905060006003600285516118fa9190613044565b611904919061309a565b600461191091906130cb565b905060006020826119219190613044565b67ffffffffffffffff81111561193a576119396133a8565b5b6040519080825280601f01601f19166020018201604052801561196c5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b818310156119db576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050611980565b6003895106600181146119f55760028114611a0557611a10565b613d3d60f01b6002830352611a10565b603d60f81b60018303525b50505050508093505050505b919050565b611a3b828260405180602001604052806000815250611bd2565b5050565b611a488261137b565b611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90612e1f565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611aae929190612106565b505050565b611abe848484611586565b611aca84848484611c2d565b611b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0090612cff565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060611b318261137b565b611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790612edf565b60405180910390fd5b6000611b7a611b0f565b90506000815111611b9a5760405180602001604052806000815250611bc5565b80611ba484611dc4565b604051602001611bb5929190612b5f565b6040516020818303038152906040525b915050919050565b505050565b611bdc8383611f25565b611be96000848484611c2d565b611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90612cff565b60405180910390fd5b505050565b6000611c4e8473ffffffffffffffffffffffffffffffffffffffff166120f3565b15611db7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c776113e7565b8786866040518563ffffffff1660e01b8152600401611c999493929190612c76565b602060405180830381600087803b158015611cb357600080fd5b505af1925050508015611ce457506040513d601f19601f82011682018060405250810190611ce191906124e2565b60015b611d67573d8060008114611d14576040519150601f19603f3d011682016040523d82523d6000602084013e611d19565b606091505b50600081511415611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690612cff565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611dbc565b600190505b949350505050565b60606000821415611e0c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f20565b600082905060005b60008214611e3e578080611e2790613272565b915050600a82611e37919061309a565b9150611e14565b60008167ffffffffffffffff811115611e5a57611e596133a8565b5b6040519080825280601f01601f191660200182016040528015611e8c5781602001600182028036833780820191505090505b5090505b60008514611f1957600182611ea59190613125565b9150600a85611eb491906132bb565b6030611ec09190613044565b60f81b818381518110611ed657611ed5613379565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f12919061309a565b9450611e90565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c90612e3f565b60405180910390fd5b611f9e8161137b565b15611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590612d3f565b60405180910390fd5b611fea60008383611bcd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203a9190613044565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546121129061320f565b90600052602060002090601f016020900481019282612134576000855561217b565b82601f1061214d57805160ff191683800117855561217b565b8280016001018555821561217b579182015b8281111561217a57825182559160200191906001019061215f565b5b509050612188919061218c565b5090565b5b808211156121a557600081600090555060010161218d565b5090565b60006121bc6121b784612f9f565b612f7a565b9050828152602081018484840111156121d8576121d76133dc565b5b6121e38482856131cd565b509392505050565b60006121fe6121f984612fd0565b612f7a565b90508281526020810184848401111561221a576122196133dc565b5b6122258482856131cd565b509392505050565b60008135905061223c81613d8e565b92915050565b60008135905061225181613da5565b92915050565b60008135905061226681613dbc565b92915050565b60008151905061227b81613dbc565b92915050565b600082601f830112612296576122956133d7565b5b81356122a68482602086016121a9565b91505092915050565b600082601f8301126122c4576122c36133d7565b5b81356122d48482602086016121eb565b91505092915050565b6000813590506122ec81613dd3565b92915050565b600060208284031215612308576123076133e6565b5b60006123168482850161222d565b91505092915050565b60008060408385031215612336576123356133e6565b5b60006123448582860161222d565b92505060206123558582860161222d565b9150509250929050565b600080600060608486031215612378576123776133e6565b5b60006123868682870161222d565b93505060206123978682870161222d565b92505060406123a8868287016122dd565b9150509250925092565b600080600080608085870312156123cc576123cb6133e6565b5b60006123da8782880161222d565b94505060206123eb8782880161222d565b93505060406123fc878288016122dd565b925050606085013567ffffffffffffffff81111561241d5761241c6133e1565b5b61242987828801612281565b91505092959194509250565b6000806040838503121561244c5761244b6133e6565b5b600061245a8582860161222d565b925050602061246b85828601612242565b9150509250929050565b6000806040838503121561248c5761248b6133e6565b5b600061249a8582860161222d565b92505060206124ab858286016122dd565b9150509250929050565b6000602082840312156124cb576124ca6133e6565b5b60006124d984828501612257565b91505092915050565b6000602082840312156124f8576124f76133e6565b5b60006125068482850161226c565b91505092915050565b600060208284031215612525576125246133e6565b5b600082013567ffffffffffffffff811115612543576125426133e1565b5b61254f848285016122af565b91505092915050565b60008060008060808587031215612572576125716133e6565b5b600085013567ffffffffffffffff8111156125905761258f6133e1565b5b61259c878288016122af565b945050602085013567ffffffffffffffff8111156125bd576125bc6133e1565b5b6125c9878288016122af565b935050604085013567ffffffffffffffff8111156125ea576125e96133e1565b5b6125f6878288016122af565b925050606085013567ffffffffffffffff811115612617576126166133e1565b5b612623878288016122af565b91505092959194509250565b600060208284031215612645576126446133e6565b5b6000612653848285016122dd565b91505092915050565b61266581613159565b82525050565b6126748161316b565b82525050565b600061268582613001565b61268f8185613017565b935061269f8185602086016131dc565b6126a8816133eb565b840191505092915050565b60006126be8261300c565b6126c88185613028565b93506126d88185602086016131dc565b6126e1816133eb565b840191505092915050565b60006126f78261300c565b6127018185613039565b93506127118185602086016131dc565b80840191505092915050565b600061272a600683613039565b9150612735826133fc565b600682019050919050565b600061274d603283613028565b915061275882613425565b604082019050919050565b6000612770602683613028565b915061277b82613474565b604082019050919050565b6000612793600283613039565b915061279e826134c3565b600282019050919050565b60006127b6601c83613028565b91506127c1826134ec565b602082019050919050565b60006127d960dd83613039565b91506127e482613515565b60dd82019050919050565b60006127fd61016a83613039565b915061280882613622565b61016a82019050919050565b6000612821602483613028565b915061282c826137f1565b604082019050919050565b6000612844601983613028565b915061284f82613840565b602082019050919050565b6000612867602c83613028565b915061287282613869565b604082019050919050565b600061288a603b83613039565b9150612895826138b8565b603b82019050919050565b60006128ad603883613028565b91506128b882613907565b604082019050919050565b60006128d0602a83613028565b91506128db82613956565b604082019050919050565b60006128f3602983613028565b91506128fe826139a5565b604082019050919050565b6000612916602e83613028565b9150612921826139f4565b604082019050919050565b6000612939600283613039565b915061294482613a43565b600282019050919050565b600061295c601c83613039565b915061296782613a6c565b601c82019050919050565b600061297f602083613028565b915061298a82613a95565b602082019050919050565b60006129a2603183613028565b91506129ad82613abe565b604082019050919050565b60006129c5602c83613028565b91506129d082613b0d565b604082019050919050565b60006129e8602083613028565b91506129f382613b5c565b602082019050919050565b6000612a0b602983613028565b9150612a1682613b85565b604082019050919050565b6000612a2e602f83613028565b9150612a3982613bd4565b604082019050919050565b6000612a51600a83613039565b9150612a5c82613c23565b600a82019050919050565b6000612a74602183613028565b9150612a7f82613c4c565b604082019050919050565b6000612a97601283613039565b9150612aa282613c9b565b601282019050919050565b6000612aba603183613028565b9150612ac582613cc4565b604082019050919050565b6000612add600383613039565b9150612ae882613d13565b600382019050919050565b6000612b00600a83613039565b9150612b0b82613d3c565b600a82019050919050565b6000612b23601f83613028565b9150612b2e82613d65565b602082019050919050565b612b42816131c3565b82525050565b6000612b5482846126ec565b915081905092915050565b6000612b6b82856126ec565b9150612b7782846126ec565b91508190509392505050565b6000612b8f82846126ec565b9150612b9a8261294f565b915081905092915050565b6000612bb0826127ef565b9150819050919050565b6000612bc582612a44565b9150612bd182876126ec565b9150612bdc82612ad0565b9150612be7826127cc565b9150612bf28261287d565b9150612bfe82866126ec565b9150612c098261271d565b9150612c1482612af3565b9150612c2082856126ec565b9150612c2b82612786565b9150612c3682612a8a565b9150612c4282846126ec565b9150612c4d8261292c565b915081905095945050505050565b6000602082019050612c70600083018461265c565b92915050565b6000608082019050612c8b600083018761265c565b612c98602083018661265c565b612ca56040830185612b39565b8181036060830152612cb7818461267a565b905095945050505050565b6000602082019050612cd7600083018461266b565b92915050565b60006020820190508181036000830152612cf781846126b3565b905092915050565b60006020820190508181036000830152612d1881612740565b9050919050565b60006020820190508181036000830152612d3881612763565b9050919050565b60006020820190508181036000830152612d58816127a9565b9050919050565b60006020820190508181036000830152612d7881612814565b9050919050565b60006020820190508181036000830152612d9881612837565b9050919050565b60006020820190508181036000830152612db88161285a565b9050919050565b60006020820190508181036000830152612dd8816128a0565b9050919050565b60006020820190508181036000830152612df8816128c3565b9050919050565b60006020820190508181036000830152612e18816128e6565b9050919050565b60006020820190508181036000830152612e3881612909565b9050919050565b60006020820190508181036000830152612e5881612972565b9050919050565b60006020820190508181036000830152612e7881612995565b9050919050565b60006020820190508181036000830152612e98816129b8565b9050919050565b60006020820190508181036000830152612eb8816129db565b9050919050565b60006020820190508181036000830152612ed8816129fe565b9050919050565b60006020820190508181036000830152612ef881612a21565b9050919050565b60006020820190508181036000830152612f1881612a67565b9050919050565b60006020820190508181036000830152612f3881612aad565b9050919050565b60006020820190508181036000830152612f5881612b16565b9050919050565b6000602082019050612f746000830184612b39565b92915050565b6000612f84612f95565b9050612f908282613241565b919050565b6000604051905090565b600067ffffffffffffffff821115612fba57612fb96133a8565b5b612fc3826133eb565b9050602081019050919050565b600067ffffffffffffffff821115612feb57612fea6133a8565b5b612ff4826133eb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061304f826131c3565b915061305a836131c3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561308f5761308e6132ec565b5b828201905092915050565b60006130a5826131c3565b91506130b0836131c3565b9250826130c0576130bf61331b565b5b828204905092915050565b60006130d6826131c3565b91506130e1836131c3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561311a576131196132ec565b5b828202905092915050565b6000613130826131c3565b915061313b836131c3565b92508282101561314e5761314d6132ec565b5b828203905092915050565b6000613164826131a3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156131fa5780820151818401526020810190506131df565b83811115613209576000848401525b50505050565b6000600282049050600182168061322757607f821691505b6020821081141561323b5761323a61334a565b5b50919050565b61324a826133eb565b810181811067ffffffffffffffff82111715613269576132686133a8565b5b80604052505050565b600061327d826131c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132b0576132af6132ec565b5b600182019050919050565b60006132c6826131c3565b91506132d1836131c3565b9250826132e1576132e061331b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f22207d205d2c0000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f226465736372697074696f6e223a20224d753a3a736573206973206120636f6c60008201527f6c656374696f6e206f662033303020756e69717565206d656c6f646965732c2060208201527f67656e6572617465642062792041492c2073657269616c697a656420696e207460408201527f65787420666f726d61742c20616e642073746f726564206f6e2d636861696e2e60608201527f2041204d757365206973206120736f75726365206f6620696e7370697261746960808201527f6f6e2c206e6f7420612066696e697368656420636f6d706f736974696f6e2e2060a08201527f42652063726561746976652120526f79616c7479206672656521222c2000000060c082015250565b7f3c7376672076696577426f783d2230203020333530203335302220786d6c6e7360008201527f3d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220707260208201527f657365727665417370656374526174696f3d22784d696e594d696e206d65657460408201527f22203e203c7374796c653e20646976207b20636f6c6f723a202346324632463260608201527f3b20666f6e743a203036707820636f75726965723b206865696768743a20313060808201527f30253b20776f72642d777261703a20627265616b2d776f72643b206f7665726660a08201527f6c6f773a206175746f3b207d203c2f7374796c653e203c72656374207769647460c08201527f683d223130302522206865696768743d2231303025222066696c6c3d2223303260e08201527f3041314422202f3e203c666f726569676e4f626a65637420783d2231302220796101008201527f3d223130222077696474683d2239352522206865696768743d22393525223e206101208201527f3c64697620786d6c6e733d22687474703a2f2f7777772e77332e6f72672f31396101408201527f39392f7868746d6c223e0000000000000000000000000000000000000000000061016082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2261747472696275746573223a205b207b202274726169745f74797065223a2060008201527f224b6579205369676e6174757265222c202276616c7565223a20220000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f3c2f6469763e3c2f666f726569676e4f626a6563743e3c2f7376673e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f7b226e616d65223a202200000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f22616e696d6174696f6e5f75726c223a20220000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f222c200000000000000000000000000000000000000000000000000000000000600082015250565b7f22696d616765223a202200000000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613d9781613159565b8114613da257600080fd5b50565b613dae8161316b565b8114613db957600080fd5b50565b613dc581613177565b8114613dd057600080fd5b50565b613ddc816131c3565b8114613de757600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220db11b8ebdbf90fb704c23dee7c88ccd19d191f69f98a0d02029fecc46ab4c3df64736f6c63430008070033
Deployed Bytecode Sourcemap
44761:3129:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30575:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31520:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33079:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32602:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47768:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33969:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34379:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31214:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30944:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12210:94;;;:::i;:::-;;45768:948;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45056:696;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11559:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31689:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33372:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34635:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43128:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44831:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33738:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12459:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46726:1030;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30575:305;30677:4;30729:25;30714:40;;;:11;:40;;;;:105;;;;30786:33;30771:48;;;:11;:48;;;;30714:105;:158;;;;30836:36;30860:11;30836:23;:36::i;:::-;30714:158;30694:178;;30575:305;;;:::o;31520:100::-;31574:13;31607:5;31600:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31520:100;:::o;33079:221::-;33155:7;33183:16;33191:7;33183;:16::i;:::-;33175:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33268:15;:24;33284:7;33268:24;;;;;;;;;;;;;;;;;;;;;33261:31;;33079:221;;;:::o;32602:411::-;32683:13;32699:23;32714:7;32699:14;:23::i;:::-;32683:39;;32747:5;32741:11;;:2;:11;;;;32733:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32841:5;32825:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32850:37;32867:5;32874:12;:10;:12::i;:::-;32850:16;:37::i;:::-;32825:62;32803:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32984:21;32993:2;32997:7;32984:8;:21::i;:::-;32672:341;32602:411;;:::o;47768:113::-;47825:13;47858:5;:15;47864:8;47858:15;;;;;;;;;;;47851:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47768:113;;;:::o;33969:339::-;34164:41;34183:12;:10;:12::i;:::-;34197:7;34164:18;:41::i;:::-;34156:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34272:28;34282:4;34288:2;34292:7;34272:9;:28::i;:::-;33969:339;;;:::o;34379:185::-;34517:39;34534:4;34540:2;34544:7;34517:39;;;;;;;;;;;;:16;:39::i;:::-;34379:185;;;:::o;31214:239::-;31286:7;31306:13;31322:7;:16;31330:7;31322:16;;;;;;;;;;;;;;;;;;;;;31306:32;;31374:1;31357:19;;:5;:19;;;;31349:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31440:5;31433:12;;;31214:239;;;:::o;30944:208::-;31016:7;31061:1;31044:19;;:5;:19;;;;31036:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31128:9;:16;31138:5;31128:16;;;;;;;;;;;;;;;;31121:23;;30944:208;;;:::o;12210:94::-;11790:12;:10;:12::i;:::-;11779:23;;:7;:5;:7::i;:::-;:23;;;11771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12275:21:::1;12293:1;12275:9;:21::i;:::-;12210:94::o:0;45768:948::-;45830:13;45866:22;45898:382;;;;;;;:::i;:::-;;;;;;;;;;;;;45866:415;;46327:8;46337:6;46310:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46292:53;;46391:8;46374:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;46356:77;;46446:21;:52;;;;;;;;;;;;;;;;;;;46509:27;46539:56;46583:8;46566:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;46539:13;:56::i;:::-;46509:86;;46606:22;46655:7;46664:13;46638:40;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46606:73;;46699:8;46692:15;;;;;;45768:948;;;:::o;45056:696::-;6707:1;7303:7;;:19;;7295:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;6707:1;7436:7;:18;;;;11790:12:::1;:10;:12::i;:::-;11779:23;;:7;:5;:7::i;:::-;:23;;;11771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45301:3:::2;45285:12;;:19;;45277:28;;;::::0;::::2;;45322:35;45332:10;45344:12;;45322:9;:35::i;:::-;45408:6;45386:5;:19;45392:12;;45386:19;;;;;;;;;;;:28;;;;;;;;;;;;:::i;:::-;;45443:22;45468:17;45478:6;45468:9;:17::i;:::-;45443:42;;45500:22;45525:56;45540:5;45547:13;45562:8;45572;45525:14;:56::i;:::-;45500:81;;45596:36;45609:12;;45623:8;45596:12;:36::i;:::-;45677:12;;45666:34;45691:8;45666:34;;;;;;:::i;:::-;;;;;;;;45715:12;;:15;;;;;;;;;:::i;:::-;;;;;;45248:504;;6663:1:::0;7615:7;:22;;;;45056:696;;;;:::o;11559:87::-;11605:7;11632:6;;;;;;;;;;;11625:13;;11559:87;:::o;31689:104::-;31745:13;31778:7;31771:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31689:104;:::o;33372:295::-;33487:12;:10;:12::i;:::-;33475:24;;:8;:24;;;;33467:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33587:8;33542:18;:32;33561:12;:10;:12::i;:::-;33542:32;;;;;;;;;;;;;;;:42;33575:8;33542:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33640:8;33611:48;;33626:12;:10;:12::i;:::-;33611:48;;;33650:8;33611:48;;;;;;:::i;:::-;;;;;;;;33372:295;;:::o;34635:328::-;34810:41;34829:12;:10;:12::i;:::-;34843:7;34810:18;:41::i;:::-;34802:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34916:39;34930:4;34936:2;34940:7;34949:5;34916:13;:39::i;:::-;34635:328;;;;:::o;43128:679::-;43201:13;43235:16;43243:7;43235;:16::i;:::-;43227:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;43318:23;43344:10;:19;43355:7;43344:19;;;;;;;;;;;43318:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43374:18;43395:10;:8;:10::i;:::-;43374:31;;43503:1;43487:4;43481:18;:23;43477:72;;;43528:9;43521:16;;;;;;43477:72;43679:1;43659:9;43653:23;:27;43649:108;;;43728:4;43734:9;43711:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43697:48;;;;;;43649:108;43776:23;43791:7;43776:14;:23::i;:::-;43769:30;;;;43128:679;;;;:::o;44831:27::-;;;;:::o;33738:164::-;33835:4;33859:18;:25;33878:5;33859:25;;;;;;;;;;;;;;;:35;33885:8;33859:35;;;;;;;;;;;;;;;;;;;;;;;;;33852:42;;33738:164;;;;:::o;12459:192::-;11790:12;:10;:12::i;:::-;11779:23;;:7;:5;:7::i;:::-;:23;;;11771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12568:1:::1;12548:22;;:8;:22;;;;12540:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12624:19;12634:8;12624:9;:19::i;:::-;12459:192:::0;:::o;46726:1030::-;46913:13;46951:21;:55;;;;;;;;;;;;;;;;;;;47074:7;47096:640;47187:5;47538:13;47601:9;47665:8;47134:568;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47096:13;:640::i;:::-;47043:704;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47028:720;;;46726:1030;;;;;;:::o;23545:157::-;23630:4;23669:25;23654:40;;;:11;:40;;;;23647:47;;23545:157;;;:::o;36473:127::-;36538:4;36590:1;36562:30;;:7;:16;36570:7;36562:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36555:37;;36473:127;;;:::o;10347:98::-;10400:7;10427:10;10420:17;;10347:98;:::o;40455:174::-;40557:2;40530:15;:24;40546:7;40530:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40613:7;40609:2;40575:46;;40584:23;40599:7;40584:14;:23::i;:::-;40575:46;;;;;;;;;;;;40455:174;;:::o;36767:348::-;36860:4;36885:16;36893:7;36885;:16::i;:::-;36877:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36961:13;36977:23;36992:7;36977:14;:23::i;:::-;36961:39;;37030:5;37019:16;;:7;:16;;;:51;;;;37063:7;37039:31;;:20;37051:7;37039:11;:20::i;:::-;:31;;;37019:51;:87;;;;37074:32;37091:5;37098:7;37074:16;:32::i;:::-;37019:87;37011:96;;;36767:348;;;;:::o;39759:578::-;39918:4;39891:31;;:23;39906:7;39891:14;:23::i;:::-;:31;;;39883:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40001:1;39987:16;;:2;:16;;;;39979:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40057:39;40078:4;40084:2;40088:7;40057:20;:39::i;:::-;40161:29;40178:1;40182:7;40161:8;:29::i;:::-;40222:1;40203:9;:15;40213:4;40203:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40251:1;40234:9;:13;40244:2;40234:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40282:2;40263:7;:16;40271:7;40263:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40321:7;40317:2;40302:27;;40311:4;40302:27;;;;;;;;;;;;39759:578;;;:::o;12659:173::-;12715:16;12734:6;;;;;;;;;;;12715:25;;12760:8;12751:6;;:17;;;;;;;;;;;;;;;;;;12815:8;12784:40;;12805:8;12784:40;;;;;;;;;;;;12704:128;12659:173;:::o;794:1912::-;852:13;897:1;882:4;:11;:16;878:31;;;900:9;;;;;;;;;;;;;;;;878:31;961:19;983:12;;;;;;;;;;;;;;;;;961:34;;1047:18;1093:1;1088;1074:4;:11;:15;;;;:::i;:::-;1073:21;;;;:::i;:::-;1068:1;:27;;;;:::i;:::-;1047:48;;1178:20;1225:2;1212:10;:15;;;;:::i;:::-;1201:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1178:50;;1325:10;1317:6;1310:26;1420:1;1413:5;1409:13;1479:4;1530;1524:11;1515:7;1511:25;1626:2;1618:6;1614:15;1699:754;1718:6;1709:7;1706:19;1699:754;;;1818:1;1809:7;1805:15;1794:26;;1857:7;1851:14;1983:4;1975:5;1971:2;1967:14;1963:25;1953:8;1949:40;1943:47;1932:9;1924:67;2037:1;2026:9;2022:17;2009:30;;2116:4;2108:5;2104:2;2100:14;2096:25;2086:8;2082:40;2076:47;2065:9;2057:67;2170:1;2159:9;2155:17;2142:30;;2249:4;2241:5;2238:1;2233:14;2229:25;2219:8;2215:40;2209:47;2198:9;2190:67;2303:1;2292:9;2288:17;2275:30;;2382:4;2374:5;2362:25;2352:8;2348:40;2342:47;2331:9;2323:67;2436:1;2425:9;2421:17;2408:30;;1742:711;1699:754;;;2526:1;2519:4;2513:11;2509:19;2547:1;2542:54;;;;2615:1;2610:52;;;;2502:160;;2542:54;2586:6;2581:3;2577:16;2573:1;2562:9;2558:17;2551:43;2542:54;;2610:52;2654:4;2649:3;2645:14;2641:1;2630:9;2626:17;2619:41;2502:160;;1250:1423;;;;2692:6;2685:13;;;;;794:1912;;;;:::o;37457:110::-;37533:26;37543:2;37547:7;37533:26;;;;;;;;;;;;:9;:26::i;:::-;37457:110;;:::o;43963:217::-;44063:16;44071:7;44063;:16::i;:::-;44055:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44163:9;44141:10;:19;44152:7;44141:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;43963:217;;:::o;35845:315::-;36002:28;36012:4;36018:2;36022:7;36002:9;:28::i;:::-;36049:48;36072:4;36078:2;36082:7;36091:5;36049:22;:48::i;:::-;36041:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35845:315;;;;:::o;32446:94::-;32497:13;32523:9;;;;;;;;;;;;;;32446:94;:::o;31864:334::-;31937:13;31971:16;31979:7;31971;:16::i;:::-;31963:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32052:21;32076:10;:8;:10::i;:::-;32052:34;;32128:1;32110:7;32104:21;:25;:86;;;;;;;;;;;;;;;;;32156:7;32165:18;:7;:16;:18::i;:::-;32139:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32104:86;32097:93;;;31864:334;;;:::o;42565:126::-;;;;:::o;37794:321::-;37924:18;37930:2;37934:7;37924:5;:18::i;:::-;37975:54;38006:1;38010:2;38014:7;38023:5;37975:22;:54::i;:::-;37953:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37794:321;;;:::o;41194:799::-;41349:4;41370:15;:2;:13;;;:15::i;:::-;41366:620;;;41422:2;41406:36;;;41443:12;:10;:12::i;:::-;41457:4;41463:7;41472:5;41406:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41402:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41665:1;41648:6;:13;:18;41644:272;;;41691:60;;;;;;;;;;:::i;:::-;;;;;;;;41644:272;41866:6;41860:13;41851:6;41847:2;41843:15;41836:38;41402:529;41539:41;;;41529:51;;;:6;:51;;;;41522:58;;;;;41366:620;41970:4;41963:11;;41194:799;;;;;;;:::o;7963:723::-;8019:13;8249:1;8240:5;:10;8236:53;;;8267:10;;;;;;;;;;;;;;;;;;;;;8236:53;8299:12;8314:5;8299:20;;8330:14;8355:78;8370:1;8362:4;:9;8355:78;;8388:8;;;;;:::i;:::-;;;;8419:2;8411:10;;;;;:::i;:::-;;;8355:78;;;8443:19;8475:6;8465:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8443:39;;8493:154;8509:1;8500:5;:10;8493:154;;8537:1;8527:11;;;;;:::i;:::-;;;8604:2;8596:5;:10;;;;:::i;:::-;8583:2;:24;;;;:::i;:::-;8570:39;;8553:6;8560;8553:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8633:2;8624:11;;;;;:::i;:::-;;;8493:154;;;8671:6;8657:21;;;;;7963:723;;;;:::o;38451:382::-;38545:1;38531:16;;:2;:16;;;;38523:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38604:16;38612:7;38604;:16::i;:::-;38603:17;38595:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38666:45;38695:1;38699:2;38703:7;38666:20;:45::i;:::-;38741:1;38724:9;:13;38734:2;38724:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38772:2;38753:7;:16;38761:7;38753:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38817:7;38813:2;38792:33;;38809:1;38792:33;;;;;;;;;;;;38451:382;;:::o;13605:387::-;13665:4;13873:12;13940:7;13928:20;13920:28;;13983:1;13976:4;:8;13969:15;;;13605:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:1485::-;6949:6;6957;6965;6973;7022:3;7010:9;7001:7;6997:23;6993:33;6990:120;;;7029:79;;:::i;:::-;6990:120;7177:1;7166:9;7162:17;7149:31;7207:18;7199:6;7196:30;7193:117;;;7229:79;;:::i;:::-;7193:117;7334:63;7389:7;7380:6;7369:9;7365:22;7334:63;:::i;:::-;7324:73;;7120:287;7474:2;7463:9;7459:18;7446:32;7505:18;7497:6;7494:30;7491:117;;;7527:79;;:::i;:::-;7491:117;7632:63;7687:7;7678:6;7667:9;7663:22;7632:63;:::i;:::-;7622:73;;7417:288;7772:2;7761:9;7757:18;7744:32;7803:18;7795:6;7792:30;7789:117;;;7825:79;;:::i;:::-;7789:117;7930:63;7985:7;7976:6;7965:9;7961:22;7930:63;:::i;:::-;7920:73;;7715:288;8070:2;8059:9;8055:18;8042:32;8101:18;8093:6;8090:30;8087:117;;;8123:79;;:::i;:::-;8087:117;8228:63;8283:7;8274:6;8263:9;8259:22;8228:63;:::i;:::-;8218:73;;8013:288;6823:1485;;;;;;;:::o;8314:329::-;8373:6;8422:2;8410:9;8401:7;8397:23;8393:32;8390:119;;;8428:79;;:::i;:::-;8390:119;8548:1;8573:53;8618:7;8609:6;8598:9;8594:22;8573:53;:::i;:::-;8563:63;;8519:117;8314:329;;;;:::o;8649:118::-;8736:24;8754:5;8736:24;:::i;:::-;8731:3;8724:37;8649:118;;:::o;8773:109::-;8854:21;8869:5;8854:21;:::i;:::-;8849:3;8842:34;8773:109;;:::o;8888:360::-;8974:3;9002:38;9034:5;9002:38;:::i;:::-;9056:70;9119:6;9114:3;9056:70;:::i;:::-;9049:77;;9135:52;9180:6;9175:3;9168:4;9161:5;9157:16;9135:52;:::i;:::-;9212:29;9234:6;9212:29;:::i;:::-;9207:3;9203:39;9196:46;;8978:270;8888:360;;;;:::o;9254:364::-;9342:3;9370:39;9403:5;9370:39;:::i;:::-;9425:71;9489:6;9484:3;9425:71;:::i;:::-;9418:78;;9505:52;9550:6;9545:3;9538:4;9531:5;9527:16;9505:52;:::i;:::-;9582:29;9604:6;9582:29;:::i;:::-;9577:3;9573:39;9566:46;;9346:272;9254:364;;;;:::o;9624:377::-;9730:3;9758:39;9791:5;9758:39;:::i;:::-;9813:89;9895:6;9890:3;9813:89;:::i;:::-;9806:96;;9911:52;9956:6;9951:3;9944:4;9937:5;9933:16;9911:52;:::i;:::-;9988:6;9983:3;9979:16;9972:23;;9734:267;9624:377;;;;:::o;10007:400::-;10167:3;10188:84;10270:1;10265:3;10188:84;:::i;:::-;10181:91;;10281:93;10370:3;10281:93;:::i;:::-;10399:1;10394:3;10390:11;10383:18;;10007:400;;;:::o;10413:366::-;10555:3;10576:67;10640:2;10635:3;10576:67;:::i;:::-;10569:74;;10652:93;10741:3;10652:93;:::i;:::-;10770:2;10765:3;10761:12;10754:19;;10413:366;;;:::o;10785:::-;10927:3;10948:67;11012:2;11007:3;10948:67;:::i;:::-;10941:74;;11024:93;11113:3;11024:93;:::i;:::-;11142:2;11137:3;11133:12;11126:19;;10785:366;;;:::o;11157:400::-;11317:3;11338:84;11420:1;11415:3;11338:84;:::i;:::-;11331:91;;11431:93;11520:3;11431:93;:::i;:::-;11549:1;11544:3;11540:11;11533:18;;11157:400;;;:::o;11563:366::-;11705:3;11726:67;11790:2;11785:3;11726:67;:::i;:::-;11719:74;;11802:93;11891:3;11802:93;:::i;:::-;11920:2;11915:3;11911:12;11904:19;;11563:366;;;:::o;11935:404::-;12095:3;12116:86;12198:3;12193;12116:86;:::i;:::-;12109:93;;12211;12300:3;12211:93;:::i;:::-;12329:3;12324;12320:13;12313:20;;11935:404;;;:::o;12345:::-;12505:3;12526:86;12608:3;12603;12526:86;:::i;:::-;12519:93;;12621;12710:3;12621:93;:::i;:::-;12739:3;12734;12730:13;12723:20;;12345:404;;;:::o;12755:366::-;12897:3;12918:67;12982:2;12977:3;12918:67;:::i;:::-;12911:74;;12994:93;13083:3;12994:93;:::i;:::-;13112:2;13107:3;13103:12;13096:19;;12755:366;;;:::o;13127:::-;13269:3;13290:67;13354:2;13349:3;13290:67;:::i;:::-;13283:74;;13366:93;13455:3;13366:93;:::i;:::-;13484:2;13479:3;13475:12;13468:19;;13127:366;;;:::o;13499:::-;13641:3;13662:67;13726:2;13721:3;13662:67;:::i;:::-;13655:74;;13738:93;13827:3;13738:93;:::i;:::-;13856:2;13851:3;13847:12;13840:19;;13499:366;;;:::o;13871:402::-;14031:3;14052:85;14134:2;14129:3;14052:85;:::i;:::-;14045:92;;14146:93;14235:3;14146:93;:::i;:::-;14264:2;14259:3;14255:12;14248:19;;13871:402;;;:::o;14279:366::-;14421:3;14442:67;14506:2;14501:3;14442:67;:::i;:::-;14435:74;;14518:93;14607:3;14518:93;:::i;:::-;14636:2;14631:3;14627:12;14620:19;;14279:366;;;:::o;14651:::-;14793:3;14814:67;14878:2;14873:3;14814:67;:::i;:::-;14807:74;;14890:93;14979:3;14890:93;:::i;:::-;15008:2;15003:3;14999:12;14992:19;;14651:366;;;:::o;15023:::-;15165:3;15186:67;15250:2;15245:3;15186:67;:::i;:::-;15179:74;;15262:93;15351:3;15262:93;:::i;:::-;15380:2;15375:3;15371:12;15364:19;;15023:366;;;:::o;15395:::-;15537:3;15558:67;15622:2;15617:3;15558:67;:::i;:::-;15551:74;;15634:93;15723:3;15634:93;:::i;:::-;15752:2;15747:3;15743:12;15736:19;;15395:366;;;:::o;15767:400::-;15927:3;15948:84;16030:1;16025:3;15948:84;:::i;:::-;15941:91;;16041:93;16130:3;16041:93;:::i;:::-;16159:1;16154:3;16150:11;16143:18;;15767:400;;;:::o;16173:402::-;16333:3;16354:85;16436:2;16431:3;16354:85;:::i;:::-;16347:92;;16448:93;16537:3;16448:93;:::i;:::-;16566:2;16561:3;16557:12;16550:19;;16173:402;;;:::o;16581:366::-;16723:3;16744:67;16808:2;16803:3;16744:67;:::i;:::-;16737:74;;16820:93;16909:3;16820:93;:::i;:::-;16938:2;16933:3;16929:12;16922:19;;16581:366;;;:::o;16953:::-;17095:3;17116:67;17180:2;17175:3;17116:67;:::i;:::-;17109:74;;17192:93;17281:3;17192:93;:::i;:::-;17310:2;17305:3;17301:12;17294:19;;16953:366;;;:::o;17325:::-;17467:3;17488:67;17552:2;17547:3;17488:67;:::i;:::-;17481:74;;17564:93;17653:3;17564:93;:::i;:::-;17682:2;17677:3;17673:12;17666:19;;17325:366;;;:::o;17697:::-;17839:3;17860:67;17924:2;17919:3;17860:67;:::i;:::-;17853:74;;17936:93;18025:3;17936:93;:::i;:::-;18054:2;18049:3;18045:12;18038:19;;17697:366;;;:::o;18069:::-;18211:3;18232:67;18296:2;18291:3;18232:67;:::i;:::-;18225:74;;18308:93;18397:3;18308:93;:::i;:::-;18426:2;18421:3;18417:12;18410:19;;18069:366;;;:::o;18441:::-;18583:3;18604:67;18668:2;18663:3;18604:67;:::i;:::-;18597:74;;18680:93;18769:3;18680:93;:::i;:::-;18798:2;18793:3;18789:12;18782:19;;18441:366;;;:::o;18813:402::-;18973:3;18994:85;19076:2;19071:3;18994:85;:::i;:::-;18987:92;;19088:93;19177:3;19088:93;:::i;:::-;19206:2;19201:3;19197:12;19190:19;;18813:402;;;:::o;19221:366::-;19363:3;19384:67;19448:2;19443:3;19384:67;:::i;:::-;19377:74;;19460:93;19549:3;19460:93;:::i;:::-;19578:2;19573:3;19569:12;19562:19;;19221:366;;;:::o;19593:402::-;19753:3;19774:85;19856:2;19851:3;19774:85;:::i;:::-;19767:92;;19868:93;19957:3;19868:93;:::i;:::-;19986:2;19981:3;19977:12;19970:19;;19593:402;;;:::o;20001:366::-;20143:3;20164:67;20228:2;20223:3;20164:67;:::i;:::-;20157:74;;20240:93;20329:3;20240:93;:::i;:::-;20358:2;20353:3;20349:12;20342:19;;20001:366;;;:::o;20373:400::-;20533:3;20554:84;20636:1;20631:3;20554:84;:::i;:::-;20547:91;;20647:93;20736:3;20647:93;:::i;:::-;20765:1;20760:3;20756:11;20749:18;;20373:400;;;:::o;20779:402::-;20939:3;20960:85;21042:2;21037:3;20960:85;:::i;:::-;20953:92;;21054:93;21143:3;21054:93;:::i;:::-;21172:2;21167:3;21163:12;21156:19;;20779:402;;;:::o;21187:366::-;21329:3;21350:67;21414:2;21409:3;21350:67;:::i;:::-;21343:74;;21426:93;21515:3;21426:93;:::i;:::-;21544:2;21539:3;21535:12;21528:19;;21187:366;;;:::o;21559:118::-;21646:24;21664:5;21646:24;:::i;:::-;21641:3;21634:37;21559:118;;:::o;21683:275::-;21815:3;21837:95;21928:3;21919:6;21837:95;:::i;:::-;21830:102;;21949:3;21942:10;;21683:275;;;;:::o;21964:435::-;22144:3;22166:95;22257:3;22248:6;22166:95;:::i;:::-;22159:102;;22278:95;22369:3;22360:6;22278:95;:::i;:::-;22271:102;;22390:3;22383:10;;21964:435;;;;;:::o;22405:541::-;22638:3;22660:95;22751:3;22742:6;22660:95;:::i;:::-;22653:102;;22772:148;22916:3;22772:148;:::i;:::-;22765:155;;22937:3;22930:10;;22405:541;;;;:::o;22952:381::-;23137:3;23159:148;23303:3;23159:148;:::i;:::-;23152:155;;23324:3;23317:10;;22952:381;;;:::o;23339:3149::-;24524:3;24546:148;24690:3;24546:148;:::i;:::-;24539:155;;24711:95;24802:3;24793:6;24711:95;:::i;:::-;24704:102;;24823:148;24967:3;24823:148;:::i;:::-;24816:155;;24988:148;25132:3;24988:148;:::i;:::-;24981:155;;25153:148;25297:3;25153:148;:::i;:::-;25146:155;;25318:95;25409:3;25400:6;25318:95;:::i;:::-;25311:102;;25430:148;25574:3;25430:148;:::i;:::-;25423:155;;25595:148;25739:3;25595:148;:::i;:::-;25588:155;;25760:95;25851:3;25842:6;25760:95;:::i;:::-;25753:102;;25872:148;26016:3;25872:148;:::i;:::-;25865:155;;26037:148;26181:3;26037:148;:::i;:::-;26030:155;;26202:95;26293:3;26284:6;26202:95;:::i;:::-;26195:102;;26314:148;26458:3;26314:148;:::i;:::-;26307:155;;26479:3;26472:10;;23339:3149;;;;;;;:::o;26494:222::-;26587:4;26625:2;26614:9;26610:18;26602:26;;26638:71;26706:1;26695:9;26691:17;26682:6;26638:71;:::i;:::-;26494:222;;;;:::o;26722:640::-;26917:4;26955:3;26944:9;26940:19;26932:27;;26969:71;27037:1;27026:9;27022:17;27013:6;26969:71;:::i;:::-;27050:72;27118:2;27107:9;27103:18;27094:6;27050:72;:::i;:::-;27132;27200:2;27189:9;27185:18;27176:6;27132:72;:::i;:::-;27251:9;27245:4;27241:20;27236:2;27225:9;27221:18;27214:48;27279:76;27350:4;27341:6;27279:76;:::i;:::-;27271:84;;26722:640;;;;;;;:::o;27368:210::-;27455:4;27493:2;27482:9;27478:18;27470:26;;27506:65;27568:1;27557:9;27553:17;27544:6;27506:65;:::i;:::-;27368:210;;;;:::o;27584:313::-;27697:4;27735:2;27724:9;27720:18;27712:26;;27784:9;27778:4;27774:20;27770:1;27759:9;27755:17;27748:47;27812:78;27885:4;27876:6;27812:78;:::i;:::-;27804:86;;27584:313;;;;:::o;27903:419::-;28069:4;28107:2;28096:9;28092:18;28084:26;;28156:9;28150:4;28146:20;28142:1;28131:9;28127:17;28120:47;28184:131;28310:4;28184:131;:::i;:::-;28176:139;;27903:419;;;:::o;28328:::-;28494:4;28532:2;28521:9;28517:18;28509:26;;28581:9;28575:4;28571:20;28567:1;28556:9;28552:17;28545:47;28609:131;28735:4;28609:131;:::i;:::-;28601:139;;28328:419;;;:::o;28753:::-;28919:4;28957:2;28946:9;28942:18;28934:26;;29006:9;29000:4;28996:20;28992:1;28981:9;28977:17;28970:47;29034:131;29160:4;29034:131;:::i;:::-;29026:139;;28753:419;;;:::o;29178:::-;29344:4;29382:2;29371:9;29367:18;29359:26;;29431:9;29425:4;29421:20;29417:1;29406:9;29402:17;29395:47;29459:131;29585:4;29459:131;:::i;:::-;29451:139;;29178:419;;;:::o;29603:::-;29769:4;29807:2;29796:9;29792:18;29784:26;;29856:9;29850:4;29846:20;29842:1;29831:9;29827:17;29820:47;29884:131;30010:4;29884:131;:::i;:::-;29876:139;;29603:419;;;:::o;30028:::-;30194:4;30232:2;30221:9;30217:18;30209:26;;30281:9;30275:4;30271:20;30267:1;30256:9;30252:17;30245:47;30309:131;30435:4;30309:131;:::i;:::-;30301:139;;30028:419;;;:::o;30453:::-;30619:4;30657:2;30646:9;30642:18;30634:26;;30706:9;30700:4;30696:20;30692:1;30681:9;30677:17;30670:47;30734:131;30860:4;30734:131;:::i;:::-;30726:139;;30453:419;;;:::o;30878:::-;31044:4;31082:2;31071:9;31067:18;31059:26;;31131:9;31125:4;31121:20;31117:1;31106:9;31102:17;31095:47;31159:131;31285:4;31159:131;:::i;:::-;31151:139;;30878:419;;;:::o;31303:::-;31469:4;31507:2;31496:9;31492:18;31484:26;;31556:9;31550:4;31546:20;31542:1;31531:9;31527:17;31520:47;31584:131;31710:4;31584:131;:::i;:::-;31576:139;;31303:419;;;:::o;31728:::-;31894:4;31932:2;31921:9;31917:18;31909:26;;31981:9;31975:4;31971:20;31967:1;31956:9;31952:17;31945:47;32009:131;32135:4;32009:131;:::i;:::-;32001:139;;31728:419;;;:::o;32153:::-;32319:4;32357:2;32346:9;32342:18;32334:26;;32406:9;32400:4;32396:20;32392:1;32381:9;32377:17;32370:47;32434:131;32560:4;32434:131;:::i;:::-;32426:139;;32153:419;;;:::o;32578:::-;32744:4;32782:2;32771:9;32767:18;32759:26;;32831:9;32825:4;32821:20;32817:1;32806:9;32802:17;32795:47;32859:131;32985:4;32859:131;:::i;:::-;32851:139;;32578:419;;;:::o;33003:::-;33169:4;33207:2;33196:9;33192:18;33184:26;;33256:9;33250:4;33246:20;33242:1;33231:9;33227:17;33220:47;33284:131;33410:4;33284:131;:::i;:::-;33276:139;;33003:419;;;:::o;33428:::-;33594:4;33632:2;33621:9;33617:18;33609:26;;33681:9;33675:4;33671:20;33667:1;33656:9;33652:17;33645:47;33709:131;33835:4;33709:131;:::i;:::-;33701:139;;33428:419;;;:::o;33853:::-;34019:4;34057:2;34046:9;34042:18;34034:26;;34106:9;34100:4;34096:20;34092:1;34081:9;34077:17;34070:47;34134:131;34260:4;34134:131;:::i;:::-;34126:139;;33853:419;;;:::o;34278:::-;34444:4;34482:2;34471:9;34467:18;34459:26;;34531:9;34525:4;34521:20;34517:1;34506:9;34502:17;34495:47;34559:131;34685:4;34559:131;:::i;:::-;34551:139;;34278:419;;;:::o;34703:::-;34869:4;34907:2;34896:9;34892:18;34884:26;;34956:9;34950:4;34946:20;34942:1;34931:9;34927:17;34920:47;34984:131;35110:4;34984:131;:::i;:::-;34976:139;;34703:419;;;:::o;35128:::-;35294:4;35332:2;35321:9;35317:18;35309:26;;35381:9;35375:4;35371:20;35367:1;35356:9;35352:17;35345:47;35409:131;35535:4;35409:131;:::i;:::-;35401:139;;35128:419;;;:::o;35553:::-;35719:4;35757:2;35746:9;35742:18;35734:26;;35806:9;35800:4;35796:20;35792:1;35781:9;35777:17;35770:47;35834:131;35960:4;35834:131;:::i;:::-;35826:139;;35553:419;;;:::o;35978:222::-;36071:4;36109:2;36098:9;36094:18;36086:26;;36122:71;36190:1;36179:9;36175:17;36166:6;36122:71;:::i;:::-;35978:222;;;;:::o;36206:129::-;36240:6;36267:20;;:::i;:::-;36257:30;;36296:33;36324:4;36316:6;36296:33;:::i;:::-;36206:129;;;:::o;36341:75::-;36374:6;36407:2;36401:9;36391:19;;36341:75;:::o;36422:307::-;36483:4;36573:18;36565:6;36562:30;36559:56;;;36595:18;;:::i;:::-;36559:56;36633:29;36655:6;36633:29;:::i;:::-;36625:37;;36717:4;36711;36707:15;36699:23;;36422:307;;;:::o;36735:308::-;36797:4;36887:18;36879:6;36876:30;36873:56;;;36909:18;;:::i;:::-;36873:56;36947:29;36969:6;36947:29;:::i;:::-;36939:37;;37031:4;37025;37021:15;37013:23;;36735:308;;;:::o;37049:98::-;37100:6;37134:5;37128:12;37118:22;;37049:98;;;:::o;37153:99::-;37205:6;37239:5;37233:12;37223:22;;37153:99;;;:::o;37258:168::-;37341:11;37375:6;37370:3;37363:19;37415:4;37410:3;37406:14;37391:29;;37258:168;;;;:::o;37432:169::-;37516:11;37550:6;37545:3;37538:19;37590:4;37585:3;37581:14;37566:29;;37432:169;;;;:::o;37607:148::-;37709:11;37746:3;37731:18;;37607:148;;;;:::o;37761:305::-;37801:3;37820:20;37838:1;37820:20;:::i;:::-;37815:25;;37854:20;37872:1;37854:20;:::i;:::-;37849:25;;38008:1;37940:66;37936:74;37933:1;37930:81;37927:107;;;38014:18;;:::i;:::-;37927:107;38058:1;38055;38051:9;38044:16;;37761:305;;;;:::o;38072:185::-;38112:1;38129:20;38147:1;38129:20;:::i;:::-;38124:25;;38163:20;38181:1;38163:20;:::i;:::-;38158:25;;38202:1;38192:35;;38207:18;;:::i;:::-;38192:35;38249:1;38246;38242:9;38237:14;;38072:185;;;;:::o;38263:348::-;38303:7;38326:20;38344:1;38326:20;:::i;:::-;38321:25;;38360:20;38378:1;38360:20;:::i;:::-;38355:25;;38548:1;38480:66;38476:74;38473:1;38470:81;38465:1;38458:9;38451:17;38447:105;38444:131;;;38555:18;;:::i;:::-;38444:131;38603:1;38600;38596:9;38585:20;;38263:348;;;;:::o;38617:191::-;38657:4;38677:20;38695:1;38677:20;:::i;:::-;38672:25;;38711:20;38729:1;38711:20;:::i;:::-;38706:25;;38750:1;38747;38744:8;38741:34;;;38755:18;;:::i;:::-;38741:34;38800:1;38797;38793:9;38785:17;;38617:191;;;;:::o;38814:96::-;38851:7;38880:24;38898:5;38880:24;:::i;:::-;38869:35;;38814:96;;;:::o;38916:90::-;38950:7;38993:5;38986:13;38979:21;38968:32;;38916:90;;;:::o;39012:149::-;39048:7;39088:66;39081:5;39077:78;39066:89;;39012:149;;;:::o;39167:126::-;39204:7;39244:42;39237:5;39233:54;39222:65;;39167:126;;;:::o;39299:77::-;39336:7;39365:5;39354:16;;39299:77;;;:::o;39382:154::-;39466:6;39461:3;39456;39443:30;39528:1;39519:6;39514:3;39510:16;39503:27;39382:154;;;:::o;39542:307::-;39610:1;39620:113;39634:6;39631:1;39628:13;39620:113;;;39719:1;39714:3;39710:11;39704:18;39700:1;39695:3;39691:11;39684:39;39656:2;39653:1;39649:10;39644:15;;39620:113;;;39751:6;39748:1;39745:13;39742:101;;;39831:1;39822:6;39817:3;39813:16;39806:27;39742:101;39591:258;39542:307;;;:::o;39855:320::-;39899:6;39936:1;39930:4;39926:12;39916:22;;39983:1;39977:4;39973:12;40004:18;39994:81;;40060:4;40052:6;40048:17;40038:27;;39994:81;40122:2;40114:6;40111:14;40091:18;40088:38;40085:84;;;40141:18;;:::i;:::-;40085:84;39906:269;39855:320;;;:::o;40181:281::-;40264:27;40286:4;40264:27;:::i;:::-;40256:6;40252:40;40394:6;40382:10;40379:22;40358:18;40346:10;40343:34;40340:62;40337:88;;;40405:18;;:::i;:::-;40337:88;40445:10;40441:2;40434:22;40224:238;40181:281;;:::o;40468:233::-;40507:3;40530:24;40548:5;40530:24;:::i;:::-;40521:33;;40576:66;40569:5;40566:77;40563:103;;;40646:18;;:::i;:::-;40563:103;40693:1;40686:5;40682:13;40675:20;;40468:233;;;:::o;40707:176::-;40739:1;40756:20;40774:1;40756:20;:::i;:::-;40751:25;;40790:20;40808:1;40790:20;:::i;:::-;40785:25;;40829:1;40819:35;;40834:18;;:::i;:::-;40819:35;40875:1;40872;40868:9;40863:14;;40707:176;;;;:::o;40889:180::-;40937:77;40934:1;40927:88;41034:4;41031:1;41024:15;41058:4;41055:1;41048:15;41075:180;41123:77;41120:1;41113:88;41220:4;41217:1;41210:15;41244:4;41241:1;41234:15;41261:180;41309:77;41306:1;41299:88;41406:4;41403:1;41396:15;41430:4;41427:1;41420:15;41447:180;41495:77;41492:1;41485:88;41592:4;41589:1;41582:15;41616:4;41613:1;41606:15;41633:180;41681:77;41678:1;41671:88;41778:4;41775:1;41768:15;41802:4;41799:1;41792:15;41819:117;41928:1;41925;41918:12;41942:117;42051:1;42048;42041:12;42065:117;42174:1;42171;42164:12;42188:117;42297:1;42294;42287:12;42311:102;42352:6;42403:2;42399:7;42394:2;42387:5;42383:14;42379:28;42369:38;;42311:102;;;:::o;42419:214::-;42559:66;42555:1;42547:6;42543:14;42536:90;42419:214;:::o;42639:237::-;42779:34;42775:1;42767:6;42763:14;42756:58;42848:20;42843:2;42835:6;42831:15;42824:45;42639:237;:::o;42882:225::-;43022:34;43018:1;43010:6;43006:14;42999:58;43091:8;43086:2;43078:6;43074:15;43067:33;42882:225;:::o;43113:214::-;43253:66;43249:1;43241:6;43237:14;43230:90;43113:214;:::o;43333:178::-;43473:30;43469:1;43461:6;43457:14;43450:54;43333:178;:::o;43517:663::-;43657:66;43653:1;43645:6;43641:14;43634:90;43758:34;43753:2;43745:6;43741:15;43734:59;43827:34;43822:2;43814:6;43810:15;43803:59;43896:34;43891:2;43883:6;43879:15;43872:59;43966:34;43960:3;43952:6;43948:16;43941:60;44036:34;44030:3;44022:6;44018:16;44011:60;44106:66;44100:3;44092:6;44088:16;44081:92;43517:663;:::o;44186:1209::-;44326:66;44322:1;44314:6;44310:14;44303:90;44427:66;44422:2;44414:6;44410:15;44403:91;44528:66;44523:2;44515:6;44511:15;44504:91;44629:66;44624:2;44616:6;44612:15;44605:91;44731:34;44725:3;44717:6;44713:16;44706:60;44801:34;44795:3;44787:6;44783:16;44776:60;44867:34;44861:3;44853:6;44849:16;44842:60;44933:66;44927:3;44919:6;44915:16;44908:92;45031:66;45025:3;45017:6;45013:16;45006:92;45129:66;45123:3;45115:6;45111:16;45104:92;45227:66;45221:3;45213:6;45209:16;45202:92;45325:66;45319:3;45311:6;45307:16;45300:92;44186:1209;:::o;45397:211::-;45533:34;45529:1;45521:6;45517:14;45510:58;45598:6;45593:2;45585:6;45581:15;45574:31;45397:211;:::o;45610:167::-;45746:27;45742:1;45734:6;45730:14;45723:51;45610:167;:::o;45779:219::-;45915:34;45911:1;45903:6;45899:14;45892:58;45980:14;45975:2;45967:6;45963:15;45956:39;45779:219;:::o;46000:303::-;46136:66;46132:1;46124:6;46120:14;46113:90;46233:66;46228:2;46220:6;46216:15;46209:91;46000:303;:::o;46305:231::-;46441:34;46437:1;46429:6;46425:14;46418:58;46506:26;46501:2;46493:6;46489:15;46482:51;46305:231;:::o;46538:217::-;46674:34;46670:1;46662:6;46658:14;46651:58;46739:12;46734:2;46726:6;46722:15;46715:37;46538:217;:::o;46757:216::-;46893:34;46889:1;46881:6;46877:14;46870:58;46958:11;46953:2;46945:6;46941:15;46934:36;46757:216;:::o;46975:221::-;47111:34;47107:1;47099:6;47095:14;47088:58;47176:16;47171:2;47163:6;47159:15;47152:41;46975:221;:::o;47198:206::-;47334:66;47330:1;47322:6;47318:14;47311:90;47198:206;:::o;47406:170::-;47542:30;47538:1;47530:6;47526:14;47519:54;47406:170;:::o;47578:174::-;47714:34;47710:1;47702:6;47698:14;47691:58;47578:174;:::o;47754:224::-;47890:34;47886:1;47878:6;47874:14;47867:58;47955:19;47950:2;47942:6;47938:15;47931:44;47754:224;:::o;47980:219::-;48116:34;48112:1;48104:6;48100:14;48093:58;48181:14;48176:2;48168:6;48164:15;48157:39;47980:219;:::o;48201:174::-;48337:34;48333:1;48325:6;48321:14;48314:58;48201:174;:::o;48377:216::-;48513:34;48509:1;48501:6;48497:14;48490:58;48578:11;48573:2;48565:6;48561:15;48554:36;48377:216;:::o;48595:222::-;48731:34;48727:1;48719:6;48715:14;48708:58;48796:17;48791:2;48783:6;48779:15;48772:42;48595:222;:::o;48819:206::-;48955:66;48951:1;48943:6;48939:14;48932:90;48819:206;:::o;49027:208::-;49163:34;49159:1;49151:6;49147:14;49140:58;49228:3;49223:2;49215:6;49211:15;49204:28;49027:208;:::o;49237:206::-;49373:66;49369:1;49361:6;49357:14;49350:90;49237:206;:::o;49445:224::-;49581:34;49577:1;49569:6;49565:14;49558:58;49646:19;49641:2;49633:6;49629:15;49622:44;49445:224;:::o;49671:206::-;49807:66;49803:1;49795:6;49791:14;49784:90;49671:206;:::o;49879:::-;50015:66;50011:1;50003:6;49999:14;49992:90;49879:206;:::o;50087:173::-;50223:33;50219:1;50211:6;50207:14;50200:57;50087:173;:::o;50262:114::-;50331:24;50349:5;50331:24;:::i;:::-;50324:5;50321:35;50311:63;;50370:1;50367;50360:12;50311:63;50262:114;:::o;50378:108::-;50444:21;50459:5;50444:21;:::i;:::-;50437:5;50434:32;50424:60;;50480:1;50477;50470:12;50424:60;50378:108;:::o;50488:112::-;50556:23;50573:5;50556:23;:::i;:::-;50549:5;50546:34;50536:62;;50594:1;50591;50584:12;50536:62;50488:112;:::o;50602:114::-;50671:24;50689:5;50671:24;:::i;:::-;50664:5;50661:35;50651:63;;50710:1;50707;50700:12;50651:63;50602:114;:::o
Swarm Source
ipfs://db11b8ebdbf90fb704c23dee7c88ccd19d191f69f98a0d02029fecc46ab4c3df
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.