Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 141 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stake | 68902921 | 11 days ago | IN | 0 POL | 0.00283232 | ||||
Stake | 68902912 | 11 days ago | IN | 0 POL | 0.00297719 | ||||
Stake | 68902900 | 11 days ago | IN | 0 POL | 0.00415702 | ||||
Stake | 68792978 | 14 days ago | IN | 0 POL | 0.00414357 | ||||
Stake | 65791848 | 90 days ago | IN | 0 POL | 0.00796349 | ||||
Stake | 65791837 | 90 days ago | IN | 0 POL | 0.00451144 | ||||
Stake | 65791821 | 90 days ago | IN | 0 POL | 0.0046645 | ||||
Stake | 65791809 | 90 days ago | IN | 0 POL | 0.00453341 | ||||
Stake | 65791797 | 90 days ago | IN | 0 POL | 0.00477376 | ||||
Stake | 65791781 | 90 days ago | IN | 0 POL | 0.00484191 | ||||
Stake | 65791772 | 90 days ago | IN | 0 POL | 0.00501215 | ||||
Stake | 65791751 | 90 days ago | IN | 0 POL | 0.0049508 | ||||
Stake | 65791740 | 90 days ago | IN | 0 POL | 0.00469123 | ||||
Stake | 65791723 | 90 days ago | IN | 0 POL | 0.00446234 | ||||
Stake | 65791710 | 90 days ago | IN | 0 POL | 0.00404378 | ||||
Stake | 65791695 | 90 days ago | IN | 0 POL | 0.00408386 | ||||
Stake | 65791676 | 90 days ago | IN | 0 POL | 0.00413713 | ||||
Stake | 65791658 | 90 days ago | IN | 0 POL | 0.00427116 | ||||
Stake | 65791645 | 90 days ago | IN | 0 POL | 0.00428168 | ||||
Stake | 65791631 | 90 days ago | IN | 0 POL | 0.00444238 | ||||
Stake | 65791608 | 90 days ago | IN | 0 POL | 0.00462477 | ||||
Stake | 65791592 | 90 days ago | IN | 0 POL | 0.00462841 | ||||
Stake | 65791581 | 90 days ago | IN | 0 POL | 0.00442249 | ||||
Stake | 65791557 | 90 days ago | IN | 0 POL | 0.00472655 | ||||
Stake | 65791543 | 90 days ago | IN | 0 POL | 0.00512408 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
KiwamiStaking
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2024-11-19 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; // ▀█████████▄ ▄█ ▄████████ ▄████████ ▄█ ▄█▄ // ███ ███ ███ ███ ███ ███ ███ ███ ▄███▀ // ███ ███ ███ ███ ███ ███ █▀ ███▐██▀ // ▄███▄▄▄██▀ ███ ███ ███ ███ ▄█████▀ // ▀▀███▀▀▀██▄ ███ ▀███████████ ███ ▀▀█████▄ // ███ ██▄ ███ ███ ███ ███ █▄ ███▐██▄ // ███ ███ ███▌ ▄ ███ ███ ███ ███ ███ ▀███▄ // ▄█████████▀ █████▄▄██ ███ █▀ ████████▀ ███ ▀█▀ // ▀ !!BUY GORO!! ▀ // ▄█ ▄█▄ ▄█ ▄█ █▄ ▄████████ ▄▄▄▄███▄▄▄▄ ▄█ // ███ ▄███▀ ███ ███ ███ ███ ███ ▄██▀▀▀███▀▀▀██▄ ███ // ███▐██▀ ███▌ ███ ███ ███ ███ ███ ███ ███ ███▌ // ▄█████▀ ███▌ ███ ███ ███ ███ ███ ███ ███ ███▌ // ▀▀█████▄ ███▌ ███ ███ ▀███████████ ███ ███ ███ ███▌ // ███▐██▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ // ███ ▀███▄ ███ ███ ▄█▄ ███ ███ ███ ███ ███ ███ ███ // ███ ▀█▀ █▀ ▀███▀███▀ ███ █▀ ▀█ ███ █▀ █▀ // ▀ /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * 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[ERC 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/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; /** * @dev Required interface of an ERC-721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC-721 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 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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.20; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.20; /** * @title ERC-721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC-721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be * reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (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 making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: KiwamiStaking.sol pragma solidity ^0.8.0; contract KiwamiStaking is Ownable, IERC721Receiver, ReentrancyGuard { IERC721 public goroNFT; IERC721 public kiwamiNFT; uint256 public lockPeriod = 1825 days; // ロック期間 uint256 public requiredGoroAmount = 25; // GOROの必要数 uint256[] public availableKiwamiTokens; // コントラクトが持ってるKIWAMI struct StakeInfo { uint256[] tokenIds; uint256 lockTime; } mapping(address => StakeInfo) public stakes; event Staked(address indexed user, uint256 tokenId); event Unstaked(address indexed user, uint256 tokenId); event KiwamiMinted(address indexed user, uint256 tokenId); event KiwamiTokenRemoved(uint256 tokenId); event TokenAdded(uint256 indexed tokenId, uint256 totalTokens); constructor(address initialOwner, address _goroNFT, address _kiwamiNFT) Ownable(initialOwner) { goroNFT = IERC721(_goroNFT); kiwamiNFT = IERC721(_kiwamiNFT); } function BlackGoroWisdom(uint256 seed) external pure returns (string memory) { string[20] memory messages = [ "GORO is the undisputed master of the blockchain canvas.", "GORO's art transcends time and space.", "GORO never forgets to drink matcha while coding.", "GORO once painted with starlight - true story.", "GORO's brushes are coded in Solidity.", "GORO believes every NFT has a soul.", "GORO's motto: 'Create, destroy, create again.'", "GORO has more layers than an onion in Photoshop.", "GORO's wisdom is proof-of-art.", "GORO dreams of a DAO run by painters.", "GORO knows that colors speak louder than words.", "GORO's canvas is infinite, just like Ethereum blocks.", "GORO can draw a perfect circle, digitally and by hand.", "GORO doesn't need sleep, just inspiration.", "GORO once traded a masterpiece for ramen - it was worth it.", "GORO can mint art faster than you can refresh OpenSea.", "GORO's code is as elegant as its brushstrokes.", "GORO doesn't seek approval - except on-chain.", "GORO's greatest muse is the blockchain itself.", "GORO loves the smell of freshly minted NFTs in the morning." ]; return messages[seed % messages.length]; } function stake(uint256 _tokenId) external nonReentrant { require(goroNFT.ownerOf(_tokenId) == msg.sender, "Not token owner"); StakeInfo storage userStake = stakes[msg.sender]; userStake.tokenIds.push(_tokenId); // 初回ステーキング時にロックタイムを設定 if (userStake.tokenIds.length == 1) { userStake.lockTime = block.timestamp; } goroNFT.safeTransferFrom(msg.sender, address(this), _tokenId); emit Staked(msg.sender, _tokenId); if (userStake.tokenIds.length == requiredGoroAmount) { uint256 kiwamiTokenId = mintKiwami(msg.sender); emit KiwamiMinted(msg.sender, kiwamiTokenId); } } function batchStake(uint256[] calldata _tokenIds) external nonReentrant { require(_tokenIds.length > 0 && _tokenIds.length <= 5, "You can only stake 1 to 5 NFTs"); StakeInfo storage userStake = stakes[msg.sender]; for (uint256 i = 0; i < _tokenIds.length; i++) { uint256 tokenId = _tokenIds[i]; require(goroNFT.ownerOf(tokenId) == msg.sender, "Not token owner"); userStake.tokenIds.push(tokenId); goroNFT.safeTransferFrom(msg.sender, address(this), tokenId); emit Staked(msg.sender, tokenId); } if (userStake.tokenIds.length == _tokenIds.length) { userStake.lockTime = block.timestamp; } if (userStake.tokenIds.length >= requiredGoroAmount) { uint256 kiwamiTokenId = mintKiwami(msg.sender); emit KiwamiMinted(msg.sender, kiwamiTokenId); } } function unstakePartial(uint256 count) external nonReentrant { StakeInfo storage userStake = stakes[msg.sender]; require(userStake.tokenIds.length > 0, "No staked tokens"); require(count > 0 && count <= userStake.tokenIds.length, "Invalid count"); require(block.timestamp >= userStake.lockTime + lockPeriod, "Lock period not ended"); for (uint256 i = 0; i < count; i++) { uint256 tokenId = userStake.tokenIds[userStake.tokenIds.length - 1]; // 最後のトークンを取得 goroNFT.safeTransferFrom(address(this), msg.sender, tokenId); // トークンを返却 userStake.tokenIds.pop(); // 配列から削除 emit Unstaked(msg.sender, tokenId); // イベント発行 } // 全てのトークンが解除された場合、マッピングを削除 if (userStake.tokenIds.length == 0) { delete stakes[msg.sender]; } } // ステーキング情報を取得 function getStakeInfo(address user) external view returns (StakeInfo memory) { return stakes[user];} // KIWAMIトークン残数確認バックアップ用 function getAvailableKiwamiTokens(uint256 start, uint256 count) external view returns (uint256[] memory) { require(start < availableKiwamiTokens.length, "Start index out of bounds"); uint256 end = start + count > availableKiwamiTokens.length ? availableKiwamiTokens.length : start + count; uint256[] memory tokens = new uint256[](end - start); for (uint256 i = start; i < end; i++) { tokens[i - start] = availableKiwamiTokens[i]; } return tokens; } // インターナルファンクション、ミントに使用 function mintKiwami(address _to) internal returns (uint256) { uint256 kiwamiTokenId = getAvailableKiwamiToken(); kiwamiNFT.safeTransferFrom(address(this), _to, kiwamiTokenId); return kiwamiTokenId; } function getAvailableKiwamiToken() internal returns (uint256) { require(availableKiwamiTokens.length > 0, "No KIWAMI tokens available"); uint256 tokenId = availableKiwamiTokens[availableKiwamiTokens.length - 1]; availableKiwamiTokens.pop(); return tokenId; } // 管理者用のファンクション function setNFTContracts(address _goroNFT, address _kiwamiNFT) external onlyOwner { require(_goroNFT != address(0), "Invalid Goro NFT address"); require(_kiwamiNFT != address(0), "Invalid Kiwami NFT address"); goroNFT = IERC721(_goroNFT); kiwamiNFT = IERC721(_kiwamiNFT); } function addKiwamiToken(uint256 _tokenId) external onlyOwner { // トークンIDがすでに配列に含まれていないか確認 for (uint256 i = 0; i < availableKiwamiTokens.length; i++) { if (availableKiwamiTokens[i] == _tokenId) { revert("Token already exists"); } } availableKiwamiTokens.push(_tokenId); emit TokenAdded(_tokenId, availableKiwamiTokens.length); } function removeKiwamiToken(uint256 _tokenId) external onlyOwner { for (uint256 i = 0; i < availableKiwamiTokens.length; i++) { if (availableKiwamiTokens[i] == _tokenId) { availableKiwamiTokens[i] = availableKiwamiTokens[availableKiwamiTokens.length - 1]; availableKiwamiTokens.pop(); emit KiwamiTokenRemoved(_tokenId); return; } } revert("Token ID not found in the list"); } function setLockPeriod(uint256 _newPeriod) external onlyOwner { lockPeriod = _newPeriod; } function setRequiredGoroAmount(uint256 _newAmount) external onlyOwner { require(_newAmount > 0, "Amount must be greater than 0"); requiredGoroAmount = _newAmount; } function adminUnstakePartial(address _user, uint256 count) external onlyOwner { StakeInfo storage userStake = stakes[_user]; require(userStake.tokenIds.length > 0, "No staked tokens"); require(count > 0 && count <= userStake.tokenIds.length, "Invalid count"); // 指定された数だけトークンをアンステーキング for (uint256 i = 0; i < count; i++) { uint256 tokenId = userStake.tokenIds[userStake.tokenIds.length - 1]; // 配列の最後のトークン goroNFT.safeTransferFrom(address(this), _user, tokenId); // トークンを返却 userStake.tokenIds.pop(); // 配列から削除 emit Unstaked(_user, tokenId); // アンステークのイベント発行 } // 全てのトークンが解除された場合、mappingを削除 if (userStake.tokenIds.length == 0) { delete stakes[_user]; } } function withdrawKiwami(address _to, uint256 _tokenId) external onlyOwner { require(_to != address(0), "Invalid recipient address"); require(kiwamiNFT.ownerOf(_tokenId) == address(this), "Token not owned by contract"); kiwamiNFT.safeTransferFrom(address(this), _to, _tokenId); } function rescueNFT(address _tokenContract, address _to, uint256 _tokenId) external onlyOwner { require(_to != address(0), "Invalid recipient address"); IERC721(_tokenContract).safeTransferFrom(address(this), _to, _tokenId); } function forceRescueNFT(address _tokenContract, address _to, uint256 _tokenId) external onlyOwner { require(_to != address(0), "Invalid recipient address"); IERC721(_tokenContract).transferFrom(address(this), _to, _tokenId); } function rescueETH(address payable _to) external onlyOwner { require(_to != address(0), "Invalid recipient address"); _to.transfer(address(this).balance); } function rescueERC20(address _tokenContract, address _to, uint256 _amount) external onlyOwner { require(_to != address(0), "Invalid recipient address"); require(_amount > 0, "Amount must be greater than zero"); IERC20(_tokenContract).transfer(_to, _amount); } function rescueAllNFTs(address _to, address _tokenContract) external onlyOwner { require(_to != address(0), "Invalid recipient address"); IERC721Enumerable tokenContract = IERC721Enumerable(_tokenContract); uint256 balance = tokenContract.balanceOf(address(this)); for (uint256 i = 0; i < balance; i++) { uint256 tokenId = tokenContract.tokenOfOwnerByIndex(address(this), 0); tokenContract.safeTransferFrom(address(this), _to, tokenId); } } function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_goroNFT","type":"address"},{"internalType":"address","name":"_kiwamiNFT","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"KiwamiMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"KiwamiTokenRemoved","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[{"internalType":"uint256","name":"seed","type":"uint256"}],"name":"BlackGoroWisdom","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"addKiwamiToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"adminUnstakePartial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"availableKiwamiTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"batchStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"forceRescueNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getAvailableKiwamiTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStakeInfo","outputs":[{"components":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256","name":"lockTime","type":"uint256"}],"internalType":"struct KiwamiStaking.StakeInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goroNFT","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kiwamiNFT","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"removeKiwamiToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredGoroAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"rescueAllNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"rescueNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPeriod","type":"uint256"}],"name":"setLockPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_goroNFT","type":"address"},{"internalType":"address","name":"_kiwamiNFT","type":"address"}],"name":"setNFTContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setRequiredGoroAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"lockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"unstakePartial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"withdrawKiwami","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526309660180600455601960055534801561001c575f80fd5b50604051613e18380380613e18833981810160405281019061003e919061026d565b825f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100af575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100a691906102cc565b60405180910390fd5b6100be8161014e60201b60201c565b50600180819055508160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506102e5565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61023c82610213565b9050919050565b61024c81610232565b8114610256575f80fd5b50565b5f8151905061026781610243565b92915050565b5f805f606084860312156102845761028361020f565b5b5f61029186828701610259565b93505060206102a286828701610259565b92505060406102b386828701610259565b9150509250925092565b6102c681610232565b82525050565b5f6020820190506102df5f8301846102bd565b92915050565b613b26806102f25f395ff3fe608060405234801561000f575f80fd5b50600436106101c2575f3560e01c806388226c38116100f7578063c345315311610095578063d7456b971161006f578063d7456b97146104c0578063e57542dc146104de578063f2fde38b146104fa578063f67689e114610516576101c2565b8063c345315314610458578063c7bb3fda14610488578063d35674c5146104a4576101c2565b80639f831d91116100d15780639f831d91146103d4578063a694fc3a14610404578063b2118a8d14610420578063c21277931461043c576101c2565b806388226c381461037e5780638da5cb5b1461039a5780639c13cd4d146103b8576101c2565b80633fd8b02f116101645780634b4080541161013e5780634b4080541461031e57806358c8aac41461033c578063715018a614610358578063779972da14610362576101c2565b80633fd8b02f146102c657806342dad058146102e457806348453fd114610302576101c2565b80631f6c1990116101a05780631f6c19901461024257806324ff31491461025e5780632c56f35f1461028e5780632f70e857146102aa576101c2565b806304824e70146101c6578063150b7a02146101e257806316934fc414610212575b5f80fd5b6101e060048036038101906101db919061267d565b610546565b005b6101fc60048036038101906101f79190612852565b610603565b604051610209919061290c565b60405180910390f35b61022c60048036038101906102279190612925565b610616565b604051610239919061295f565b60405180910390f35b61025c60048036038101906102579190612978565b610631565b005b61027860048036038101906102739190612978565b610767565b6040516102859190612a03565b60405180910390f35b6102a860048036038101906102a39190612a23565b610a17565b005b6102c460048036038101906102bf9190612a23565b610c22565b005b6102ce610eb9565b6040516102db919061295f565b60405180910390f35b6102ec610ebf565b6040516102f9919061295f565b60405180910390f35b61031c60048036038101906103179190612978565b610ec5565b005b610326610f19565b6040516103339190612abc565b60405180910390f35b61035660048036038101906103519190612ad5565b610f3e565b005b610360611139565b005b61037c60048036038101906103779190612978565b61114c565b005b61039860048036038101906103939190612978565b61115e565b005b6103a2611247565b6040516103af9190612b22565b60405180910390f35b6103d260048036038101906103cd9190612b3b565b61126e565b005b6103ee60048036038101906103e99190612978565b611353565b6040516103fb919061295f565b60405180910390f35b61041e60048036038101906104199190612978565b611373565b005b61043a60048036038101906104359190612b3b565b611650565b005b61045660048036038101906104519190612be8565b611789565b005b610472600480360381019061046d9190612925565b611af7565b60405161047f9190612d24565b60405180910390f35b6104a2600480360381019061049d9190612ad5565b611bad565b005b6104be60048036038101906104b99190612978565b611d15565b005b6104c8612007565b6040516104d59190612abc565b60405180910390f35b6104f860048036038101906104f39190612b3b565b61202c565b005b610514600480360381019061050f9190612925565b612111565b005b610530600480360381019061052b9190612d44565b612195565b60405161053d9190612dee565b60405180910390f35b61054e6122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b390612e58565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156105ff573d5f803e3d5ffd5b5050565b5f63150b7a0260e01b9050949350505050565b6007602052805f5260405f205f915090508060010154905081565b6106396122d4565b5f5b60068054905081101561072857816006828154811061065d5761065c612e76565b5b905f5260205f2001540361071b576006600160068054905061067f9190612ed0565b815481106106905761068f612e76565b5b905f5260205f200154600682815481106106ad576106ac612e76565b5b905f5260205f20018190555060068054806106cb576106ca612f03565b5b600190038181905f5260205f20015f905590557fae502ccfe2aeb98a8676c1ca60dc175014e62d46ad87727156a29010c320af628260405161070d919061295f565b60405180910390a150610764565b808060010191505061063b565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075b90612f7a565b60405180910390fd5b50565b60605f60405180610280016040528060405180606001604052806037815260200161379860379139815260200160405180606001604052806025815260200161383a6025913981526020016040518060600160405280603081526020016138c96030913981526020016040518060600160405280602e8152602001613927602e91398152602001604051806060016040528060258152602001613a116025913981526020016040518060600160405280602381526020016139ee6023913981526020016040518060600160405280602e81526020016138f9602e913981526020016040518060600160405280603081526020016139be6030913981526020016040518060400160405280601e81526020017f474f524f277320776973646f6d2069732070726f6f662d6f662d6172742e000081525081526020016040518060600160405280602581526020016137736025913981526020016040518060600160405280602f815260200161389a602f913981526020016040518060600160405280603581526020016138056035913981526020016040518060600160405280603681526020016137cf6036913981526020016040518060600160405280602a8152602001613a64602a913981526020016040518060600160405280603b815260200161385f603b91398152602001604051806060016040528060368152602001613a8e6036913981526020016040518060600160405280602e8152602001613a36602e913981526020016040518060600160405280602d8152602001613ac4602d913981526020016040518060600160405280602e8152602001613955602e913981526020016040518060600160405280603b8152602001613983603b91398152509050806014846109f99190612fc5565b60148110610a0a57610a09612e76565b5b6020020151915050919050565b610a1f6122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490612e58565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610afe919061295f565b602060405180830381865afa158015610b19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3d9190613009565b73ffffffffffffffffffffffffffffffffffffffff1614610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a9061307e565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3084846040518463ffffffff1660e01b8152600401610bf19392919061309c565b5f604051808303815f87803b158015610c08575f80fd5b505af1158015610c1a573d5f803e3d5ffd5b505050505050565b610c2a6122d4565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f018054905011610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca99061311b565b60405180910390fd5b5f82118015610cc75750805f01805490508211155b610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90613183565b60405180910390fd5b5f5b82811015610e50575f825f016001845f0180549050610d279190612ed0565b81548110610d3857610d37612e76565b5b905f5260205f200154905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3087846040518463ffffffff1660e01b8152600401610da19392919061309c565b5f604051808303815f87803b158015610db8575f80fd5b505af1158015610dca573d5f803e3d5ffd5b50505050825f01805480610de157610de0612f03565b5b600190038181905f5260205f20015f905590558473ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7582604051610e3a919061295f565b60405180910390a2508080600101915050610d08565b505f815f018054905003610eb45760075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f610eaa91906125c0565b600182015f905550505b505050565b60045481565b60055481565b610ecd6122d4565b5f8111610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f06906131eb565b60405180910390fd5b8060058190555050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f466122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90612e58565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ff29190612b22565b602060405180830381865afa15801561100d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611031919061321d565b90505f5b81811015611132575f8373ffffffffffffffffffffffffffffffffffffffff16632f745c59305f6040518363ffffffff1660e01b8152600401611079929190613281565b602060405180830381865afa158015611094573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b8919061321d565b90508373ffffffffffffffffffffffffffffffffffffffff166342842e0e3088846040518463ffffffff1660e01b81526004016110f79392919061309c565b5f604051808303815f87803b15801561110e575f80fd5b505af1158015611120573d5f803e3d5ffd5b50505050508080600101915050611035565b5050505050565b6111416122d4565b61114a5f61235b565b565b6111546122d4565b8060048190555050565b6111666122d4565b5f5b6006805490508110156111e057816006828154811061118a57611189612e76565b5b905f5260205f200154036111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca906132f2565b60405180910390fd5b8080600101915050611168565b50600681908060018154018082558091505060019003905f5260205f20015f9091909190915055807f7713a460c4ef3baceee6275b7dab936881047949b93f0559ce44de5c0a28e59660068054905060405161123c919061295f565b60405180910390a250565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112766122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90612e58565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166342842e0e3084846040518463ffffffff1660e01b81526004016113219392919061309c565b5f604051808303815f87803b158015611338575f80fd5b505af115801561134a573d5f803e3d5ffd5b50505050505050565b60068181548110611362575f80fd5b905f5260205f20015f915090505481565b61137b61241c565b3373ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016113ec919061295f565b602060405180830381865afa158015611407573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142b9190613009565b73ffffffffffffffffffffffffffffffffffffffff1614611481576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114789061335a565b60405180910390fd5b5f60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050805f0182908060018154018082558091505060019003905f5260205f20015f90919091909150556001815f018054905003611500574281600101819055505b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330856040518463ffffffff1660e01b815260040161155e9392919061309c565b5f604051808303815f87803b158015611575575f80fd5b505af1158015611587573d5f803e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040516115d1919061295f565b60405180910390a2600554815f018054905003611644575f6115f23361246b565b90503373ffffffffffffffffffffffffffffffffffffffff167fdeb125d58ad26ea7ecd79cbcfd0b05beda9d353d08af7a1af2632dadc264f2528260405161163a919061295f565b60405180910390a2505b5061164d61250b565b50565b6116586122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90612e58565b60405180910390fd5b5f8111611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff906133c2565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016117439291906133e0565b6020604051808303815f875af115801561175f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611783919061343c565b50505050565b61179161241c565b5f828290501180156117a7575060058282905011155b6117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd906134b1565b60405180910390fd5b5f60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f5b83839050811015611a64575f84848381811061184757611846612e76565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016118c1919061295f565b602060405180830381865afa1580156118dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119009190613009565b73ffffffffffffffffffffffffffffffffffffffff1614611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d9061335a565b60405180910390fd5b825f0181908060018154018082558091505060019003905f5260205f20015f909190919091505560025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b81526004016119db9392919061309c565b5f604051808303815f87803b1580156119f2575f80fd5b505af1158015611a04573d5f803e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d82604051611a4e919061295f565b60405180910390a2508080600101915050611828565b5082829050815f018054905003611a7f574281600101819055505b600554815f018054905010611aea575f611a983361246b565b90503373ffffffffffffffffffffffffffffffffffffffff167fdeb125d58ad26ea7ecd79cbcfd0b05beda9d353d08af7a1af2632dadc264f25282604051611ae0919061295f565b60405180910390a2505b50611af361250b565b5050565b611aff6125de565b60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060400160405290815f8201805480602002602001604051908101604052809291908181526020018280548015611b9357602002820191905f5260205f20905b815481526020019060010190808311611b7f575b505050505081526020016001820154815250509050919050565b611bb56122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a90613519565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8890613581565b60405180910390fd5b8160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611d1d61241c565b5f60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f018054905011611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c9061311b565b60405180910390fd5b5f82118015611dba5750805f01805490508211155b611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df090613183565b60405180910390fd5b6004548160010154611e0b919061359f565b421015611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e449061361c565b60405180910390fd5b5f5b82811015611f97575f825f016001845f0180549050611e6e9190612ed0565b81548110611e7f57611e7e612e76565b5b905f5260205f200154905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b8152600401611ee89392919061309c565b5f604051808303815f87803b158015611eff575f80fd5b505af1158015611f11573d5f803e3d5ffd5b50505050825f01805480611f2857611f27612f03565b5b600190038181905f5260205f20015f905590553373ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7582604051611f81919061295f565b60405180910390a2508080600101915050611e4f565b505f815f018054905003611ffb5760075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f611ff191906125c0565b600182015f905550505b5061200461250b565b50565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120346122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990612e58565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd3084846040518463ffffffff1660e01b81526004016120df9392919061309c565b5f604051808303815f87803b1580156120f6575f80fd5b505af1158015612108573d5f803e3d5ffd5b50505050505050565b6121196122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612189575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016121809190612b22565b60405180910390fd5b6121928161235b565b50565b606060068054905083106121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590613684565b60405180910390fd5b5f60068054905083856121f1919061359f565b11612207578284612202919061359f565b61220e565b6006805490505b90505f848261221d9190612ed0565b67ffffffffffffffff8111156122365761223561272e565b5b6040519080825280602002602001820160405280156122645781602001602082028036833780820191505090505b5090505f8590505b828110156122c8576006818154811061228857612287612e76565b5b905f5260205f20015482878361229e9190612ed0565b815181106122af576122ae612e76565b5b602002602001018181525050808060010191505061226c565b50809250505092915050565b6122dc612514565b73ffffffffffffffffffffffffffffffffffffffff166122fa611247565b73ffffffffffffffffffffffffffffffffffffffff16146123595761231d612514565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016123509190612b22565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600260015403612461576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612458906136ec565b60405180910390fd5b6002600181905550565b5f8061247561251b565b905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3085846040518463ffffffff1660e01b81526004016124d59392919061309c565b5f604051808303815f87803b1580156124ec575f80fd5b505af11580156124fe573d5f803e3d5ffd5b5050505080915050919050565b60018081905550565b5f33905090565b5f8060068054905011612563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255a90613754565b60405180910390fd5b5f600660016006805490506125789190612ed0565b8154811061258957612588612e76565b5b905f5260205f200154905060068054806125a6576125a5612f03565b5b600190038181905f5260205f20015f905590558091505090565b5080545f8255905f5260205f20908101906125db91906125f7565b50565b6040518060400160405280606081526020015f81525090565b5b8082111561260e575f815f9055506001016125f8565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61264c82612623565b9050919050565b61265c81612642565b8114612666575f80fd5b50565b5f8135905061267781612653565b92915050565b5f602082840312156126925761269161261b565b5b5f61269f84828501612669565b91505092915050565b5f6126b282612623565b9050919050565b6126c2816126a8565b81146126cc575f80fd5b50565b5f813590506126dd816126b9565b92915050565b5f819050919050565b6126f5816126e3565b81146126ff575f80fd5b50565b5f81359050612710816126ec565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6127648261271e565b810181811067ffffffffffffffff821117156127835761278261272e565b5b80604052505050565b5f612795612612565b90506127a1828261275b565b919050565b5f67ffffffffffffffff8211156127c0576127bf61272e565b5b6127c98261271e565b9050602081019050919050565b828183375f83830152505050565b5f6127f66127f1846127a6565b61278c565b9050828152602081018484840111156128125761281161271a565b5b61281d8482856127d6565b509392505050565b5f82601f83011261283957612838612716565b5b81356128498482602086016127e4565b91505092915050565b5f805f806080858703121561286a5761286961261b565b5b5f612877878288016126cf565b9450506020612888878288016126cf565b935050604061289987828801612702565b925050606085013567ffffffffffffffff8111156128ba576128b961261f565b5b6128c687828801612825565b91505092959194509250565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612906816128d2565b82525050565b5f60208201905061291f5f8301846128fd565b92915050565b5f6020828403121561293a5761293961261b565b5b5f612947848285016126cf565b91505092915050565b612959816126e3565b82525050565b5f6020820190506129725f830184612950565b92915050565b5f6020828403121561298d5761298c61261b565b5b5f61299a84828501612702565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6129d5826129a3565b6129df81856129ad565b93506129ef8185602086016129bd565b6129f88161271e565b840191505092915050565b5f6020820190508181035f830152612a1b81846129cb565b905092915050565b5f8060408385031215612a3957612a3861261b565b5b5f612a46858286016126cf565b9250506020612a5785828601612702565b9150509250929050565b5f819050919050565b5f612a84612a7f612a7a84612623565b612a61565b612623565b9050919050565b5f612a9582612a6a565b9050919050565b5f612aa682612a8b565b9050919050565b612ab681612a9c565b82525050565b5f602082019050612acf5f830184612aad565b92915050565b5f8060408385031215612aeb57612aea61261b565b5b5f612af8858286016126cf565b9250506020612b09858286016126cf565b9150509250929050565b612b1c816126a8565b82525050565b5f602082019050612b355f830184612b13565b92915050565b5f805f60608486031215612b5257612b5161261b565b5b5f612b5f868287016126cf565b9350506020612b70868287016126cf565b9250506040612b8186828701612702565b9150509250925092565b5f80fd5b5f80fd5b5f8083601f840112612ba857612ba7612716565b5b8235905067ffffffffffffffff811115612bc557612bc4612b8b565b5b602083019150836020820283011115612be157612be0612b8f565b5b9250929050565b5f8060208385031215612bfe57612bfd61261b565b5b5f83013567ffffffffffffffff811115612c1b57612c1a61261f565b5b612c2785828601612b93565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612c65816126e3565b82525050565b5f612c768383612c5c565b60208301905092915050565b5f602082019050919050565b5f612c9882612c33565b612ca28185612c3d565b9350612cad83612c4d565b805f5b83811015612cdd578151612cc48882612c6b565b9750612ccf83612c82565b925050600181019050612cb0565b5085935050505092915050565b5f604083015f8301518482035f860152612d048282612c8e565b9150506020830151612d196020860182612c5c565b508091505092915050565b5f6020820190508181035f830152612d3c8184612cea565b905092915050565b5f8060408385031215612d5a57612d5961261b565b5b5f612d6785828601612702565b9250506020612d7885828601612702565b9150509250929050565b5f82825260208201905092915050565b5f612d9c82612c33565b612da68185612d82565b9350612db183612c4d565b805f5b83811015612de1578151612dc88882612c6b565b9750612dd383612c82565b925050600181019050612db4565b5085935050505092915050565b5f6020820190508181035f830152612e068184612d92565b905092915050565b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f612e426019836129ad565b9150612e4d82612e0e565b602082019050919050565b5f6020820190508181035f830152612e6f81612e36565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612eda826126e3565b9150612ee5836126e3565b9250828203905081811115612efd57612efc612ea3565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f546f6b656e204944206e6f7420666f756e6420696e20746865206c69737400005f82015250565b5f612f64601e836129ad565b9150612f6f82612f30565b602082019050919050565b5f6020820190508181035f830152612f9181612f58565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612fcf826126e3565b9150612fda836126e3565b925082612fea57612fe9612f98565b5b828206905092915050565b5f81519050613003816126b9565b92915050565b5f6020828403121561301e5761301d61261b565b5b5f61302b84828501612ff5565b91505092915050565b7f546f6b656e206e6f74206f776e656420627920636f6e747261637400000000005f82015250565b5f613068601b836129ad565b915061307382613034565b602082019050919050565b5f6020820190508181035f8301526130958161305c565b9050919050565b5f6060820190506130af5f830186612b13565b6130bc6020830185612b13565b6130c96040830184612950565b949350505050565b7f4e6f207374616b656420746f6b656e73000000000000000000000000000000005f82015250565b5f6131056010836129ad565b9150613110826130d1565b602082019050919050565b5f6020820190508181035f830152613132816130f9565b9050919050565b7f496e76616c696420636f756e74000000000000000000000000000000000000005f82015250565b5f61316d600d836129ad565b915061317882613139565b602082019050919050565b5f6020820190508181035f83015261319a81613161565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f6131d5601d836129ad565b91506131e0826131a1565b602082019050919050565b5f6020820190508181035f830152613202816131c9565b9050919050565b5f81519050613217816126ec565b92915050565b5f602082840312156132325761323161261b565b5b5f61323f84828501613209565b91505092915050565b5f819050919050565b5f61326b61326661326184613248565b612a61565b6126e3565b9050919050565b61327b81613251565b82525050565b5f6040820190506132945f830185612b13565b6132a16020830184613272565b9392505050565b7f546f6b656e20616c7265616479206578697374730000000000000000000000005f82015250565b5f6132dc6014836129ad565b91506132e7826132a8565b602082019050919050565b5f6020820190508181035f830152613309816132d0565b9050919050565b7f4e6f7420746f6b656e206f776e657200000000000000000000000000000000005f82015250565b5f613344600f836129ad565b915061334f82613310565b602082019050919050565b5f6020820190508181035f83015261337181613338565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f6133ac6020836129ad565b91506133b782613378565b602082019050919050565b5f6020820190508181035f8301526133d9816133a0565b9050919050565b5f6040820190506133f35f830185612b13565b6134006020830184612950565b9392505050565b5f8115159050919050565b61341b81613407565b8114613425575f80fd5b50565b5f8151905061343681613412565b92915050565b5f602082840312156134515761345061261b565b5b5f61345e84828501613428565b91505092915050565b7f596f752063616e206f6e6c79207374616b65203120746f2035204e46547300005f82015250565b5f61349b601e836129ad565b91506134a682613467565b602082019050919050565b5f6020820190508181035f8301526134c88161348f565b9050919050565b7f496e76616c696420476f726f204e4654206164647265737300000000000000005f82015250565b5f6135036018836129ad565b915061350e826134cf565b602082019050919050565b5f6020820190508181035f830152613530816134f7565b9050919050565b7f496e76616c6964204b6977616d69204e465420616464726573730000000000005f82015250565b5f61356b601a836129ad565b915061357682613537565b602082019050919050565b5f6020820190508181035f8301526135988161355f565b9050919050565b5f6135a9826126e3565b91506135b4836126e3565b92508282019050808211156135cc576135cb612ea3565b5b92915050565b7f4c6f636b20706572696f64206e6f7420656e64656400000000000000000000005f82015250565b5f6136066015836129ad565b9150613611826135d2565b602082019050919050565b5f6020820190508181035f830152613633816135fa565b9050919050565b7f537461727420696e646578206f7574206f6620626f756e6473000000000000005f82015250565b5f61366e6019836129ad565b91506136798261363a565b602082019050919050565b5f6020820190508181035f83015261369b81613662565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6136d6601f836129ad565b91506136e1826136a2565b602082019050919050565b5f6020820190508181035f830152613703816136ca565b9050919050565b7f4e6f204b4957414d4920746f6b656e7320617661696c61626c650000000000005f82015250565b5f61373e601a836129ad565b91506137498261370a565b602082019050919050565b5f6020820190508181035f83015261376b81613732565b905091905056fe474f524f20647265616d73206f6620612044414f2072756e206279207061696e746572732e474f524f2069732074686520756e6469737075746564206d6173746572206f662074686520626c6f636b636861696e2063616e7661732e474f524f2063616e20647261772061207065726665637420636972636c652c206469676974616c6c7920616e642062792068616e642e474f524f27732063616e76617320697320696e66696e6974652c206a757374206c696b6520457468657265756d20626c6f636b732e474f524f277320617274207472616e7363656e64732074696d6520616e642073706163652e474f524f206f6e6365207472616465642061206d6173746572706965636520666f722072616d656e202d2069742077617320776f7274682069742e474f524f206b6e6f7773207468617420636f6c6f727320737065616b206c6f75646572207468616e20776f7264732e474f524f206e6576657220666f726765747320746f206472696e6b206d6174636861207768696c6520636f64696e672e474f524f2773206d6f74746f3a20274372656174652c2064657374726f792c2063726561746520616761696e2e27474f524f206f6e6365207061696e746564207769746820737461726c69676874202d20747275652073746f72792e474f524f2773206772656174657374206d7573652069732074686520626c6f636b636861696e20697473656c662e474f524f206c6f7665732074686520736d656c6c206f662066726573686c79206d696e746564204e46547320696e20746865206d6f726e696e672e474f524f20686173206d6f7265206c6179657273207468616e20616e206f6e696f6e20696e2050686f746f73686f702e474f524f2062656c6965766573206576657279204e465420686173206120736f756c2e474f524f277320627275736865732061726520636f64656420696e20536f6c69646974792e474f524f277320636f646520697320617320656c6567616e74206173206974732062727573687374726f6b65732e474f524f20646f65736e2774206e65656420736c6565702c206a75737420696e737069726174696f6e2e474f524f2063616e206d696e742061727420666173746572207468616e20796f752063616e2072656672657368204f70656e5365612e474f524f20646f65736e2774207365656b20617070726f76616c202d20657863657074206f6e2d636861696e2ea2646970667358221220ca3a1f6c4b1c4bbd2a80788d21e0729d4af7744f6ce67601ba512f9cc52d1e8a64736f6c634300081a0033000000000000000000000000fa2e047db88e0a11f575efe0649c4621e6d3ecab0000000000000000000000006c621364993e5cd4c6468930d287ba76ef64f3660000000000000000000000005e185f345837f9b39c886a8546c018c427bf01ba
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106101c2575f3560e01c806388226c38116100f7578063c345315311610095578063d7456b971161006f578063d7456b97146104c0578063e57542dc146104de578063f2fde38b146104fa578063f67689e114610516576101c2565b8063c345315314610458578063c7bb3fda14610488578063d35674c5146104a4576101c2565b80639f831d91116100d15780639f831d91146103d4578063a694fc3a14610404578063b2118a8d14610420578063c21277931461043c576101c2565b806388226c381461037e5780638da5cb5b1461039a5780639c13cd4d146103b8576101c2565b80633fd8b02f116101645780634b4080541161013e5780634b4080541461031e57806358c8aac41461033c578063715018a614610358578063779972da14610362576101c2565b80633fd8b02f146102c657806342dad058146102e457806348453fd114610302576101c2565b80631f6c1990116101a05780631f6c19901461024257806324ff31491461025e5780632c56f35f1461028e5780632f70e857146102aa576101c2565b806304824e70146101c6578063150b7a02146101e257806316934fc414610212575b5f80fd5b6101e060048036038101906101db919061267d565b610546565b005b6101fc60048036038101906101f79190612852565b610603565b604051610209919061290c565b60405180910390f35b61022c60048036038101906102279190612925565b610616565b604051610239919061295f565b60405180910390f35b61025c60048036038101906102579190612978565b610631565b005b61027860048036038101906102739190612978565b610767565b6040516102859190612a03565b60405180910390f35b6102a860048036038101906102a39190612a23565b610a17565b005b6102c460048036038101906102bf9190612a23565b610c22565b005b6102ce610eb9565b6040516102db919061295f565b60405180910390f35b6102ec610ebf565b6040516102f9919061295f565b60405180910390f35b61031c60048036038101906103179190612978565b610ec5565b005b610326610f19565b6040516103339190612abc565b60405180910390f35b61035660048036038101906103519190612ad5565b610f3e565b005b610360611139565b005b61037c60048036038101906103779190612978565b61114c565b005b61039860048036038101906103939190612978565b61115e565b005b6103a2611247565b6040516103af9190612b22565b60405180910390f35b6103d260048036038101906103cd9190612b3b565b61126e565b005b6103ee60048036038101906103e99190612978565b611353565b6040516103fb919061295f565b60405180910390f35b61041e60048036038101906104199190612978565b611373565b005b61043a60048036038101906104359190612b3b565b611650565b005b61045660048036038101906104519190612be8565b611789565b005b610472600480360381019061046d9190612925565b611af7565b60405161047f9190612d24565b60405180910390f35b6104a2600480360381019061049d9190612ad5565b611bad565b005b6104be60048036038101906104b99190612978565b611d15565b005b6104c8612007565b6040516104d59190612abc565b60405180910390f35b6104f860048036038101906104f39190612b3b565b61202c565b005b610514600480360381019061050f9190612925565b612111565b005b610530600480360381019061052b9190612d44565b612195565b60405161053d9190612dee565b60405180910390f35b61054e6122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b390612e58565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156105ff573d5f803e3d5ffd5b5050565b5f63150b7a0260e01b9050949350505050565b6007602052805f5260405f205f915090508060010154905081565b6106396122d4565b5f5b60068054905081101561072857816006828154811061065d5761065c612e76565b5b905f5260205f2001540361071b576006600160068054905061067f9190612ed0565b815481106106905761068f612e76565b5b905f5260205f200154600682815481106106ad576106ac612e76565b5b905f5260205f20018190555060068054806106cb576106ca612f03565b5b600190038181905f5260205f20015f905590557fae502ccfe2aeb98a8676c1ca60dc175014e62d46ad87727156a29010c320af628260405161070d919061295f565b60405180910390a150610764565b808060010191505061063b565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075b90612f7a565b60405180910390fd5b50565b60605f60405180610280016040528060405180606001604052806037815260200161379860379139815260200160405180606001604052806025815260200161383a6025913981526020016040518060600160405280603081526020016138c96030913981526020016040518060600160405280602e8152602001613927602e91398152602001604051806060016040528060258152602001613a116025913981526020016040518060600160405280602381526020016139ee6023913981526020016040518060600160405280602e81526020016138f9602e913981526020016040518060600160405280603081526020016139be6030913981526020016040518060400160405280601e81526020017f474f524f277320776973646f6d2069732070726f6f662d6f662d6172742e000081525081526020016040518060600160405280602581526020016137736025913981526020016040518060600160405280602f815260200161389a602f913981526020016040518060600160405280603581526020016138056035913981526020016040518060600160405280603681526020016137cf6036913981526020016040518060600160405280602a8152602001613a64602a913981526020016040518060600160405280603b815260200161385f603b91398152602001604051806060016040528060368152602001613a8e6036913981526020016040518060600160405280602e8152602001613a36602e913981526020016040518060600160405280602d8152602001613ac4602d913981526020016040518060600160405280602e8152602001613955602e913981526020016040518060600160405280603b8152602001613983603b91398152509050806014846109f99190612fc5565b60148110610a0a57610a09612e76565b5b6020020151915050919050565b610a1f6122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490612e58565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610afe919061295f565b602060405180830381865afa158015610b19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3d9190613009565b73ffffffffffffffffffffffffffffffffffffffff1614610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a9061307e565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3084846040518463ffffffff1660e01b8152600401610bf19392919061309c565b5f604051808303815f87803b158015610c08575f80fd5b505af1158015610c1a573d5f803e3d5ffd5b505050505050565b610c2a6122d4565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f018054905011610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca99061311b565b60405180910390fd5b5f82118015610cc75750805f01805490508211155b610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90613183565b60405180910390fd5b5f5b82811015610e50575f825f016001845f0180549050610d279190612ed0565b81548110610d3857610d37612e76565b5b905f5260205f200154905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3087846040518463ffffffff1660e01b8152600401610da19392919061309c565b5f604051808303815f87803b158015610db8575f80fd5b505af1158015610dca573d5f803e3d5ffd5b50505050825f01805480610de157610de0612f03565b5b600190038181905f5260205f20015f905590558473ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7582604051610e3a919061295f565b60405180910390a2508080600101915050610d08565b505f815f018054905003610eb45760075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f610eaa91906125c0565b600182015f905550505b505050565b60045481565b60055481565b610ecd6122d4565b5f8111610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f06906131eb565b60405180910390fd5b8060058190555050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f466122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90612e58565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ff29190612b22565b602060405180830381865afa15801561100d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611031919061321d565b90505f5b81811015611132575f8373ffffffffffffffffffffffffffffffffffffffff16632f745c59305f6040518363ffffffff1660e01b8152600401611079929190613281565b602060405180830381865afa158015611094573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b8919061321d565b90508373ffffffffffffffffffffffffffffffffffffffff166342842e0e3088846040518463ffffffff1660e01b81526004016110f79392919061309c565b5f604051808303815f87803b15801561110e575f80fd5b505af1158015611120573d5f803e3d5ffd5b50505050508080600101915050611035565b5050505050565b6111416122d4565b61114a5f61235b565b565b6111546122d4565b8060048190555050565b6111666122d4565b5f5b6006805490508110156111e057816006828154811061118a57611189612e76565b5b905f5260205f200154036111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca906132f2565b60405180910390fd5b8080600101915050611168565b50600681908060018154018082558091505060019003905f5260205f20015f9091909190915055807f7713a460c4ef3baceee6275b7dab936881047949b93f0559ce44de5c0a28e59660068054905060405161123c919061295f565b60405180910390a250565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112766122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90612e58565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166342842e0e3084846040518463ffffffff1660e01b81526004016113219392919061309c565b5f604051808303815f87803b158015611338575f80fd5b505af115801561134a573d5f803e3d5ffd5b50505050505050565b60068181548110611362575f80fd5b905f5260205f20015f915090505481565b61137b61241c565b3373ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016113ec919061295f565b602060405180830381865afa158015611407573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142b9190613009565b73ffffffffffffffffffffffffffffffffffffffff1614611481576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114789061335a565b60405180910390fd5b5f60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050805f0182908060018154018082558091505060019003905f5260205f20015f90919091909150556001815f018054905003611500574281600101819055505b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330856040518463ffffffff1660e01b815260040161155e9392919061309c565b5f604051808303815f87803b158015611575575f80fd5b505af1158015611587573d5f803e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040516115d1919061295f565b60405180910390a2600554815f018054905003611644575f6115f23361246b565b90503373ffffffffffffffffffffffffffffffffffffffff167fdeb125d58ad26ea7ecd79cbcfd0b05beda9d353d08af7a1af2632dadc264f2528260405161163a919061295f565b60405180910390a2505b5061164d61250b565b50565b6116586122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90612e58565b60405180910390fd5b5f8111611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff906133c2565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016117439291906133e0565b6020604051808303815f875af115801561175f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611783919061343c565b50505050565b61179161241c565b5f828290501180156117a7575060058282905011155b6117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd906134b1565b60405180910390fd5b5f60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f5b83839050811015611a64575f84848381811061184757611846612e76565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016118c1919061295f565b602060405180830381865afa1580156118dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119009190613009565b73ffffffffffffffffffffffffffffffffffffffff1614611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d9061335a565b60405180910390fd5b825f0181908060018154018082558091505060019003905f5260205f20015f909190919091505560025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b81526004016119db9392919061309c565b5f604051808303815f87803b1580156119f2575f80fd5b505af1158015611a04573d5f803e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d82604051611a4e919061295f565b60405180910390a2508080600101915050611828565b5082829050815f018054905003611a7f574281600101819055505b600554815f018054905010611aea575f611a983361246b565b90503373ffffffffffffffffffffffffffffffffffffffff167fdeb125d58ad26ea7ecd79cbcfd0b05beda9d353d08af7a1af2632dadc264f25282604051611ae0919061295f565b60405180910390a2505b50611af361250b565b5050565b611aff6125de565b60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060400160405290815f8201805480602002602001604051908101604052809291908181526020018280548015611b9357602002820191905f5260205f20905b815481526020019060010190808311611b7f575b505050505081526020016001820154815250509050919050565b611bb56122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a90613519565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8890613581565b60405180910390fd5b8160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611d1d61241c565b5f60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f018054905011611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c9061311b565b60405180910390fd5b5f82118015611dba5750805f01805490508211155b611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df090613183565b60405180910390fd5b6004548160010154611e0b919061359f565b421015611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e449061361c565b60405180910390fd5b5f5b82811015611f97575f825f016001845f0180549050611e6e9190612ed0565b81548110611e7f57611e7e612e76565b5b905f5260205f200154905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b8152600401611ee89392919061309c565b5f604051808303815f87803b158015611eff575f80fd5b505af1158015611f11573d5f803e3d5ffd5b50505050825f01805480611f2857611f27612f03565b5b600190038181905f5260205f20015f905590553373ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7582604051611f81919061295f565b60405180910390a2508080600101915050611e4f565b505f815f018054905003611ffb5760075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f611ff191906125c0565b600182015f905550505b5061200461250b565b50565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120346122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990612e58565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd3084846040518463ffffffff1660e01b81526004016120df9392919061309c565b5f604051808303815f87803b1580156120f6575f80fd5b505af1158015612108573d5f803e3d5ffd5b50505050505050565b6121196122d4565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612189575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016121809190612b22565b60405180910390fd5b6121928161235b565b50565b606060068054905083106121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590613684565b60405180910390fd5b5f60068054905083856121f1919061359f565b11612207578284612202919061359f565b61220e565b6006805490505b90505f848261221d9190612ed0565b67ffffffffffffffff8111156122365761223561272e565b5b6040519080825280602002602001820160405280156122645781602001602082028036833780820191505090505b5090505f8590505b828110156122c8576006818154811061228857612287612e76565b5b905f5260205f20015482878361229e9190612ed0565b815181106122af576122ae612e76565b5b602002602001018181525050808060010191505061226c565b50809250505092915050565b6122dc612514565b73ffffffffffffffffffffffffffffffffffffffff166122fa611247565b73ffffffffffffffffffffffffffffffffffffffff16146123595761231d612514565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016123509190612b22565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600260015403612461576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612458906136ec565b60405180910390fd5b6002600181905550565b5f8061247561251b565b905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3085846040518463ffffffff1660e01b81526004016124d59392919061309c565b5f604051808303815f87803b1580156124ec575f80fd5b505af11580156124fe573d5f803e3d5ffd5b5050505080915050919050565b60018081905550565b5f33905090565b5f8060068054905011612563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255a90613754565b60405180910390fd5b5f600660016006805490506125789190612ed0565b8154811061258957612588612e76565b5b905f5260205f200154905060068054806125a6576125a5612f03565b5b600190038181905f5260205f20015f905590558091505090565b5080545f8255905f5260205f20908101906125db91906125f7565b50565b6040518060400160405280606081526020015f81525090565b5b8082111561260e575f815f9055506001016125f8565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61264c82612623565b9050919050565b61265c81612642565b8114612666575f80fd5b50565b5f8135905061267781612653565b92915050565b5f602082840312156126925761269161261b565b5b5f61269f84828501612669565b91505092915050565b5f6126b282612623565b9050919050565b6126c2816126a8565b81146126cc575f80fd5b50565b5f813590506126dd816126b9565b92915050565b5f819050919050565b6126f5816126e3565b81146126ff575f80fd5b50565b5f81359050612710816126ec565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6127648261271e565b810181811067ffffffffffffffff821117156127835761278261272e565b5b80604052505050565b5f612795612612565b90506127a1828261275b565b919050565b5f67ffffffffffffffff8211156127c0576127bf61272e565b5b6127c98261271e565b9050602081019050919050565b828183375f83830152505050565b5f6127f66127f1846127a6565b61278c565b9050828152602081018484840111156128125761281161271a565b5b61281d8482856127d6565b509392505050565b5f82601f83011261283957612838612716565b5b81356128498482602086016127e4565b91505092915050565b5f805f806080858703121561286a5761286961261b565b5b5f612877878288016126cf565b9450506020612888878288016126cf565b935050604061289987828801612702565b925050606085013567ffffffffffffffff8111156128ba576128b961261f565b5b6128c687828801612825565b91505092959194509250565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612906816128d2565b82525050565b5f60208201905061291f5f8301846128fd565b92915050565b5f6020828403121561293a5761293961261b565b5b5f612947848285016126cf565b91505092915050565b612959816126e3565b82525050565b5f6020820190506129725f830184612950565b92915050565b5f6020828403121561298d5761298c61261b565b5b5f61299a84828501612702565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6129d5826129a3565b6129df81856129ad565b93506129ef8185602086016129bd565b6129f88161271e565b840191505092915050565b5f6020820190508181035f830152612a1b81846129cb565b905092915050565b5f8060408385031215612a3957612a3861261b565b5b5f612a46858286016126cf565b9250506020612a5785828601612702565b9150509250929050565b5f819050919050565b5f612a84612a7f612a7a84612623565b612a61565b612623565b9050919050565b5f612a9582612a6a565b9050919050565b5f612aa682612a8b565b9050919050565b612ab681612a9c565b82525050565b5f602082019050612acf5f830184612aad565b92915050565b5f8060408385031215612aeb57612aea61261b565b5b5f612af8858286016126cf565b9250506020612b09858286016126cf565b9150509250929050565b612b1c816126a8565b82525050565b5f602082019050612b355f830184612b13565b92915050565b5f805f60608486031215612b5257612b5161261b565b5b5f612b5f868287016126cf565b9350506020612b70868287016126cf565b9250506040612b8186828701612702565b9150509250925092565b5f80fd5b5f80fd5b5f8083601f840112612ba857612ba7612716565b5b8235905067ffffffffffffffff811115612bc557612bc4612b8b565b5b602083019150836020820283011115612be157612be0612b8f565b5b9250929050565b5f8060208385031215612bfe57612bfd61261b565b5b5f83013567ffffffffffffffff811115612c1b57612c1a61261f565b5b612c2785828601612b93565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612c65816126e3565b82525050565b5f612c768383612c5c565b60208301905092915050565b5f602082019050919050565b5f612c9882612c33565b612ca28185612c3d565b9350612cad83612c4d565b805f5b83811015612cdd578151612cc48882612c6b565b9750612ccf83612c82565b925050600181019050612cb0565b5085935050505092915050565b5f604083015f8301518482035f860152612d048282612c8e565b9150506020830151612d196020860182612c5c565b508091505092915050565b5f6020820190508181035f830152612d3c8184612cea565b905092915050565b5f8060408385031215612d5a57612d5961261b565b5b5f612d6785828601612702565b9250506020612d7885828601612702565b9150509250929050565b5f82825260208201905092915050565b5f612d9c82612c33565b612da68185612d82565b9350612db183612c4d565b805f5b83811015612de1578151612dc88882612c6b565b9750612dd383612c82565b925050600181019050612db4565b5085935050505092915050565b5f6020820190508181035f830152612e068184612d92565b905092915050565b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f612e426019836129ad565b9150612e4d82612e0e565b602082019050919050565b5f6020820190508181035f830152612e6f81612e36565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612eda826126e3565b9150612ee5836126e3565b9250828203905081811115612efd57612efc612ea3565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f546f6b656e204944206e6f7420666f756e6420696e20746865206c69737400005f82015250565b5f612f64601e836129ad565b9150612f6f82612f30565b602082019050919050565b5f6020820190508181035f830152612f9181612f58565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612fcf826126e3565b9150612fda836126e3565b925082612fea57612fe9612f98565b5b828206905092915050565b5f81519050613003816126b9565b92915050565b5f6020828403121561301e5761301d61261b565b5b5f61302b84828501612ff5565b91505092915050565b7f546f6b656e206e6f74206f776e656420627920636f6e747261637400000000005f82015250565b5f613068601b836129ad565b915061307382613034565b602082019050919050565b5f6020820190508181035f8301526130958161305c565b9050919050565b5f6060820190506130af5f830186612b13565b6130bc6020830185612b13565b6130c96040830184612950565b949350505050565b7f4e6f207374616b656420746f6b656e73000000000000000000000000000000005f82015250565b5f6131056010836129ad565b9150613110826130d1565b602082019050919050565b5f6020820190508181035f830152613132816130f9565b9050919050565b7f496e76616c696420636f756e74000000000000000000000000000000000000005f82015250565b5f61316d600d836129ad565b915061317882613139565b602082019050919050565b5f6020820190508181035f83015261319a81613161565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f6131d5601d836129ad565b91506131e0826131a1565b602082019050919050565b5f6020820190508181035f830152613202816131c9565b9050919050565b5f81519050613217816126ec565b92915050565b5f602082840312156132325761323161261b565b5b5f61323f84828501613209565b91505092915050565b5f819050919050565b5f61326b61326661326184613248565b612a61565b6126e3565b9050919050565b61327b81613251565b82525050565b5f6040820190506132945f830185612b13565b6132a16020830184613272565b9392505050565b7f546f6b656e20616c7265616479206578697374730000000000000000000000005f82015250565b5f6132dc6014836129ad565b91506132e7826132a8565b602082019050919050565b5f6020820190508181035f830152613309816132d0565b9050919050565b7f4e6f7420746f6b656e206f776e657200000000000000000000000000000000005f82015250565b5f613344600f836129ad565b915061334f82613310565b602082019050919050565b5f6020820190508181035f83015261337181613338565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f6133ac6020836129ad565b91506133b782613378565b602082019050919050565b5f6020820190508181035f8301526133d9816133a0565b9050919050565b5f6040820190506133f35f830185612b13565b6134006020830184612950565b9392505050565b5f8115159050919050565b61341b81613407565b8114613425575f80fd5b50565b5f8151905061343681613412565b92915050565b5f602082840312156134515761345061261b565b5b5f61345e84828501613428565b91505092915050565b7f596f752063616e206f6e6c79207374616b65203120746f2035204e46547300005f82015250565b5f61349b601e836129ad565b91506134a682613467565b602082019050919050565b5f6020820190508181035f8301526134c88161348f565b9050919050565b7f496e76616c696420476f726f204e4654206164647265737300000000000000005f82015250565b5f6135036018836129ad565b915061350e826134cf565b602082019050919050565b5f6020820190508181035f830152613530816134f7565b9050919050565b7f496e76616c6964204b6977616d69204e465420616464726573730000000000005f82015250565b5f61356b601a836129ad565b915061357682613537565b602082019050919050565b5f6020820190508181035f8301526135988161355f565b9050919050565b5f6135a9826126e3565b91506135b4836126e3565b92508282019050808211156135cc576135cb612ea3565b5b92915050565b7f4c6f636b20706572696f64206e6f7420656e64656400000000000000000000005f82015250565b5f6136066015836129ad565b9150613611826135d2565b602082019050919050565b5f6020820190508181035f830152613633816135fa565b9050919050565b7f537461727420696e646578206f7574206f6620626f756e6473000000000000005f82015250565b5f61366e6019836129ad565b91506136798261363a565b602082019050919050565b5f6020820190508181035f83015261369b81613662565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6136d6601f836129ad565b91506136e1826136a2565b602082019050919050565b5f6020820190508181035f830152613703816136ca565b9050919050565b7f4e6f204b4957414d4920746f6b656e7320617661696c61626c650000000000005f82015250565b5f61373e601a836129ad565b91506137498261370a565b602082019050919050565b5f6020820190508181035f83015261376b81613732565b905091905056fe474f524f20647265616d73206f6620612044414f2072756e206279207061696e746572732e474f524f2069732074686520756e6469737075746564206d6173746572206f662074686520626c6f636b636861696e2063616e7661732e474f524f2063616e20647261772061207065726665637420636972636c652c206469676974616c6c7920616e642062792068616e642e474f524f27732063616e76617320697320696e66696e6974652c206a757374206c696b6520457468657265756d20626c6f636b732e474f524f277320617274207472616e7363656e64732074696d6520616e642073706163652e474f524f206f6e6365207472616465642061206d6173746572706965636520666f722072616d656e202d2069742077617320776f7274682069742e474f524f206b6e6f7773207468617420636f6c6f727320737065616b206c6f75646572207468616e20776f7264732e474f524f206e6576657220666f726765747320746f206472696e6b206d6174636861207768696c6520636f64696e672e474f524f2773206d6f74746f3a20274372656174652c2064657374726f792c2063726561746520616761696e2e27474f524f206f6e6365207061696e746564207769746820737461726c69676874202d20747275652073746f72792e474f524f2773206772656174657374206d7573652069732074686520626c6f636b636861696e20697473656c662e474f524f206c6f7665732074686520736d656c6c206f662066726573686c79206d696e746564204e46547320696e20746865206d6f726e696e672e474f524f20686173206d6f7265206c6179657273207468616e20616e206f6e696f6e20696e2050686f746f73686f702e474f524f2062656c6965766573206576657279204e465420686173206120736f756c2e474f524f277320627275736865732061726520636f64656420696e20536f6c69646974792e474f524f277320636f646520697320617320656c6567616e74206173206974732062727573687374726f6b65732e474f524f20646f65736e2774206e65656420736c6565702c206a75737420696e737069726174696f6e2e474f524f2063616e206d696e742061727420666173746572207468616e20796f752063616e2072656672657368204f70656e5365612e474f524f20646f65736e2774207365656b20617070726f76616c202d20657863657074206f6e2d636861696e2ea2646970667358221220ca3a1f6c4b1c4bbd2a80788d21e0729d4af7744f6ce67601ba512f9cc52d1e8a64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fa2e047db88e0a11f575efe0649c4621e6d3ecab0000000000000000000000006c621364993e5cd4c6468930d287ba76ef64f3660000000000000000000000005e185f345837f9b39c886a8546c018c427bf01ba
-----Decoded View---------------
Arg [0] : initialOwner (address): 0xfA2E047DB88e0a11F575EfE0649c4621E6D3EcaB
Arg [1] : _goroNFT (address): 0x6C621364993E5CD4C6468930d287ba76Ef64F366
Arg [2] : _kiwamiNFT (address): 0x5E185F345837f9b39c886a8546c018c427BF01BA
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000fa2e047db88e0a11f575efe0649c4621e6d3ecab
Arg [1] : 0000000000000000000000006c621364993e5cd4c6468930d287ba76ef64f366
Arg [2] : 0000000000000000000000005e185f345837f9b39c886a8546c018c427bf01ba
Deployed Bytecode Sourcemap
20840:10762:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30392:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31392:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21284:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27879:465;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21819:1364;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29559:312;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28651:900;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20977:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21040:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28464:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20915:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30880:500;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16705:103;;;:::i;:::-;;28352:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27441:430;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16030:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29879:246;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21105:38;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23191:740;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30571:301;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23939:867;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25777:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27118:316;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24814:911;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20944:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30133:247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16963:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25952:494;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30392:171;15916:13;:11;:13::i;:::-;30481:1:::1;30466:17;;:3;:17;;::::0;30458:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30520:3;:12;;:35;30533:21;30520:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30392:171:::0;:::o;31392:207::-;31535:6;31561:30;;;31554:37;;31392:207;;;;;;:::o;21284:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;27879:465::-;15916:13;:11;:13::i;:::-;27955:9:::1;27950:340;27974:21;:28;;;;27970:1;:32;27950:340;;;28052:8;28024:21;28046:1;28024:24;;;;;;;;:::i;:::-;;;;;;;;;;:36:::0;28020:263:::1;;28104:21;28157:1;28126:21;:28;;;;:32;;;;:::i;:::-;28104:55;;;;;;;;:::i;:::-;;;;;;;;;;28077:21;28099:1;28077:24;;;;;;;;:::i;:::-;;;;;;;;;:82;;;;28174:21;:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28221:28;28240:8;28221:28;;;;;;:::i;:::-;;;;;;;;28265:7;;;28020:263;28004:3;;;;;;;27950:340;;;;28296:40;;;;;;;;;;:::i;:::-;;;;;;;;15940:1;27879:465:::0;:::o;21819:1364::-;21881:13;21903:26;:1226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23143:8;23159:15;23152:4;:22;;;;:::i;:::-;23143:32;;;;;;;:::i;:::-;;;;;;23136:39;;;21819:1364;;;:::o;29559:312::-;15916:13;:11;:13::i;:::-;29667:1:::1;29652:17;;:3;:17;;::::0;29644:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29757:4;29718:44;;:9;;;;;;;;;;;:17;;;29736:8;29718:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;;29710:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;29807:9;;;;;;;;;;;:26;;;29842:4;29849:3;29854:8;29807:56;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29559:312:::0;;:::o;28651:900::-;15916:13;:11;:13::i;:::-;28736:27:::1;28766:6;:13;28773:5;28766:13;;;;;;;;;;;;;;;28736:43;;28822:1;28794:9;:18;;:25;;;;:29;28786:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28867:1;28859:5;:9;:47;;;;;28881:9;:18;;:25;;;;28872:5;:34;;28859:47;28851:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29008:9;29003:387;29027:5;29023:1;:9;29003:387;;;29050:15;29068:9;:18;;29115:1;29087:9;:18;;:25;;;;:29;;;;:::i;:::-;29068:49;;;;;;;;:::i;:::-;;;;;;;;;;29050:67;;29162:7;;;;;;;;;;;:24;;;29195:4;29202:5;29209:7;29162:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29253:9;:18;;:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29324:5;29315:24;;;29331:7;29315:24;;;;;;:::i;:::-;;;;;;;;29039:351;29034:3;;;;;;;29003:387;;;;29502:1;29473:9;:18;;:25;;;;:30:::0;29469:75:::1;;29523:6;:13;29530:5;29523:13;;;;;;;;;;;;;;;;29516:20:::0;::::1;;;;;;;:::i;:::-;;;;;;;;;29469:75;28729:822;28651:900:::0;;:::o;20977:37::-;;;;:::o;21040:38::-;;;;:::o;28464:179::-;15916:13;:11;:13::i;:::-;28562:1:::1;28549:10;:14;28541:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28625:10;28604:18;:31;;;;28464:179:::0;:::o;20915:22::-;;;;;;;;;;;;;:::o;30880:500::-;15916:13;:11;:13::i;:::-;30989:1:::1;30974:17;;:3;:17;;::::0;30966:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31034:31;31086:14;31034:67;;31108:15;31126:13;:23;;;31158:4;31126:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31108:56;;31182:9;31177:196;31201:7;31197:1;:11;31177:196;;;31226:15;31244:13;:33;;;31286:4;31293:1;31244:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31226:69;;31306:13;:30;;;31345:4;31352:3;31357:7;31306:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31215:158;31210:3;;;;;;;31177:196;;;;30959:421;;30880:500:::0;;:::o;16705:103::-;15916:13;:11;:13::i;:::-;16770:30:::1;16797:1;16770:18;:30::i;:::-;16705:103::o:0;28352:104::-;15916:13;:11;:13::i;:::-;28438:10:::1;28425;:23;;;;28352:104:::0;:::o;27441:430::-;15916:13;:11;:13::i;:::-;27588:9:::1;27583:176;27607:21;:28;;;;27603:1;:32;27583:176;;;27685:8;27657:21;27679:1;27657:24;;;;;;;;:::i;:::-;;;;;;;;;;:36:::0;27653:99:::1;;27710:30;;;;;;;;;;:::i;:::-;;;;;;;;27653:99;27637:3;;;;;;;27583:176;;;;27765:21;27792:8;27765:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27824:8;27813:50;27834:21;:28;;;;27813:50;;;;;;:::i;:::-;;;;;;;;27441:430:::0;:::o;16030:87::-;16076:7;16103:6;;;;;;;;;;;16096:13;;16030:87;:::o;29879:246::-;15916:13;:11;:13::i;:::-;30002:1:::1;29987:17;;:3;:17;;::::0;29979:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30055:14;30047:40;;;30096:4;30103:3;30108:8;30047:70;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29879:246:::0;;;:::o;21105:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23191:740::-;19886:21;:19;:21::i;:::-;23294:10:::1;23265:39;;:7;;;;;;;;;;;:15;;;23281:8;23265:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;23257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23337:27;23367:6;:18;23374:10;23367:18;;;;;;;;;;;;;;;23337:48;;23396:9;:18;;23420:8;23396:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23543:1;23514:9;:18;;:25;;;;:30:::0;23510:99:::1;;23582:15;23561:9;:18;;:36;;;;23510:99;23621:7;;;;;;;;;;;:24;;;23646:10;23666:4;23673:8;23621:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23705:10;23698:28;;;23717:8;23698:28;;;;;;:::i;:::-;;;;;;;;23772:18;;23743:9;:18;;:25;;;;:47:::0;23739:185:::1;;23807:21;23831:22;23842:10;23831;:22::i;:::-;23807:46;;23886:10;23873:39;;;23898:13;23873:39;;;;;;:::i;:::-;;;;;;;;23792:132;23739:185;23246:685;19930:20:::0;:18;:20::i;:::-;23191:740;:::o;30571:301::-;15916:13;:11;:13::i;:::-;30699:1:::1;30684:17;;:3;:17;;::::0;30676:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30760:1;30750:7;:11;30742:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30826:14;30819:31;;;30851:3;30856:7;30819:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30571:301:::0;;;:::o;23939:867::-;19886:21;:19;:21::i;:::-;24045:1:::1;24026:9;;:16;;:20;:45;;;;;24070:1;24050:9;;:16;;:21;;24026:45;24018:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;24113:27;24143:6;:18;24150:10;24143:18;;;;;;;;;;;;;;;24113:48;;24175:9;24170:334;24194:9;;:16;;24190:1;:20;24170:334;;;24228:15;24246:9;;24256:1;24246:12;;;;;;;:::i;:::-;;;;;;;;24228:30;;24307:10;24279:38;;:7;;;;;;;;;;;:15;;;24295:7;24279:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;;24271:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24348:9;:18;;24372:7;24348:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24393:7;;;;;;;;;;;:24;;;24418:10;24438:4;24445:7;24393:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24476:10;24469:27;;;24488:7;24469:27;;;;;;:::i;:::-;;;;;;;;24217:287;24212:3;;;;;;;24170:334;;;;24545:9;;:16;;24516:9;:18;;:25;;;;:45:::0;24512:106:::1;;24595:15;24574:9;:18;;:36;;;;24512:106;24659:18;;24630:9;:18;;:25;;;;:47;24626:173;;24690:21;24714:22;24725:10;24714;:22::i;:::-;24690:46;;24765:10;24752:39;;;24777:13;24752:39;;;;;;:::i;:::-;;;;;;;;24679:120;24626:173;24011:795;19930:20:::0;:18;:20::i;:::-;23939:867;;:::o;25777:105::-;25836:16;;:::i;:::-;25868:6;:12;25875:4;25868:12;;;;;;;;;;;;;;;25861:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25777:105;;;:::o;27118:316::-;15916:13;:11;:13::i;:::-;27239:1:::1;27219:22;;:8;:22;;::::0;27211:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27311:1;27289:24;;:10;:24;;::::0;27281:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27375:8;27357:7;;:27;;;;;;;;;;;;;;;;;;27415:10;27395:9;;:31;;;;;;;;;;;;;;;;;;27118:316:::0;;:::o;24814:911::-;19886:21;:19;:21::i;:::-;24882:27:::1;24912:6;:18;24919:10;24912:18;;;;;;;;;;;;;;;24882:48;;24973:1;24945:9;:18;;:25;;;;:29;24937:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25018:1;25010:5;:9;:47;;;;;25032:9;:18;;:25;;;;25023:5;:34;;25010:47;25002:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25130:10;;25109:9;:18;;;:31;;;;:::i;:::-;25090:15;:50;;25082:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;25180:9;25175:376;25199:5;25195:1;:9;25175:376;;;25222:15;25240:9;:18;;25287:1;25259:9;:18;;:25;;;;:29;;;;:::i;:::-;25240:49;;;;;;;;:::i;:::-;;;;;;;;;;25222:67;;25334:7;;;;;;;;;;;:24;;;25367:4;25374:10;25386:7;25334:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25430:9;:18;;:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25501:10;25492:29;;;25513:7;25492:29;;;;;;:::i;:::-;;;;;;;;25211:340;25206:3;;;;;;;25175:376;;;;25671:1;25642:9;:18;;:25;;;;:30:::0;25638:80:::1;;25692:6;:18;25699:10;25692:18;;;;;;;;;;;;;;;;25685:25:::0;::::1;;;;;;;:::i;:::-;;;;;;;;;25638:80;24875:850;19930:20:::0;:18;:20::i;:::-;24814:911;:::o;20944:24::-;;;;;;;;;;;;;:::o;30133:247::-;15916:13;:11;:13::i;:::-;30261:1:::1;30246:17;;:3;:17;;::::0;30238:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30314:14;30306:36;;;30351:4;30358:3;30363:8;30306:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30133:247:::0;;;:::o;16963:220::-;15916:13;:11;:13::i;:::-;17068:1:::1;17048:22;;:8;:22;;::::0;17044:93:::1;;17122:1;17094:31;;;;;;;;;;;:::i;:::-;;;;;;;;17044:93;17147:28;17166:8;17147:18;:28::i;:::-;16963:220:::0;:::o;25952:494::-;26039:16;26080:21;:28;;;;26072:5;:36;26064:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26145:11;26175:21;:28;;;;26167:5;26159;:13;;;;:::i;:::-;:44;:91;;26245:5;26237;:13;;;;:::i;:::-;26159:91;;;26206:21;:28;;;;26159:91;26145:105;;26257:23;26303:5;26297:3;:11;;;;:::i;:::-;26283:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26257:52;;26323:9;26335:5;26323:17;;26318:101;26346:3;26342:1;:7;26318:101;;;26387:21;26409:1;26387:24;;;;;;;;:::i;:::-;;;;;;;;;;26367:6;26378:5;26374:1;:9;;;;:::i;:::-;26367:17;;;;;;;;:::i;:::-;;;;;;;:44;;;;;26351:3;;;;;;;26318:101;;;;26432:6;26425:13;;;;25952:494;;;;:::o;16195:166::-;16266:12;:10;:12::i;:::-;16255:23;;:7;:5;:7::i;:::-;:23;;;16251:103;;16329:12;:10;:12::i;:::-;16302:40;;;;;;;;;;;:::i;:::-;;;;;;;;16251:103;16195:166::o;17343:191::-;17417:16;17436:6;;;;;;;;;;;17417:25;;17462:8;17453:6;;:17;;;;;;;;;;;;;;;;;;17517:8;17486:40;;17507:8;17486:40;;;;;;;;;;;;17406:128;17343:191;:::o;19966:293::-;19368:1;20100:7;;:19;20092:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19368:1;20233:7;:18;;;;19966:293::o;26525:231::-;26576:7;26596:21;26620:25;:23;:25::i;:::-;26596:49;;26656:9;;;;;;;;;;;:26;;;26691:4;26698:3;26703:13;26656:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26735:13;26728:20;;;26525:231;;;:::o;20267:213::-;19324:1;20450:7;:22;;;;20267:213::o;14039:98::-;14092:7;14119:10;14112:17;;14039:98;:::o;26764:299::-;26817:7;26876:1;26845:21;:28;;;;:32;26837:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26919:15;26937:21;26990:1;26959:21;:28;;;;:32;;;;:::i;:::-;26937:55;;;;;;;;:::i;:::-;;;;;;;;;;26919:73;;27003:21;:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27048:7;27041:14;;;26764:299;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:104::-;511:7;540:24;558:5;540:24;:::i;:::-;529:35;;466:104;;;:::o;576:138::-;657:32;683:5;657:32;:::i;:::-;650:5;647:43;637:71;;704:1;701;694:12;637:71;576:138;:::o;720:155::-;774:5;812:6;799:20;790:29;;828:41;863:5;828:41;:::i;:::-;720:155;;;;:::o;881:345::-;948:6;997:2;985:9;976:7;972:23;968:32;965:119;;;1003:79;;:::i;:::-;965:119;1123:1;1148:61;1201:7;1192:6;1181:9;1177:22;1148:61;:::i;:::-;1138:71;;1094:125;881:345;;;;:::o;1232:96::-;1269:7;1298:24;1316:5;1298:24;:::i;:::-;1287:35;;1232:96;;;:::o;1334:122::-;1407:24;1425:5;1407:24;:::i;:::-;1400:5;1397:35;1387:63;;1446:1;1443;1436:12;1387:63;1334:122;:::o;1462:139::-;1508:5;1546:6;1533:20;1524:29;;1562:33;1589:5;1562:33;:::i;:::-;1462:139;;;;:::o;1607:77::-;1644:7;1673:5;1662:16;;1607:77;;;:::o;1690:122::-;1763:24;1781:5;1763:24;:::i;:::-;1756:5;1753:35;1743:63;;1802:1;1799;1792:12;1743:63;1690:122;:::o;1818:139::-;1864:5;1902:6;1889:20;1880:29;;1918:33;1945:5;1918:33;:::i;:::-;1818:139;;;;:::o;1963:117::-;2072:1;2069;2062:12;2086:117;2195:1;2192;2185:12;2209:102;2250:6;2301:2;2297:7;2292:2;2285:5;2281:14;2277:28;2267:38;;2209:102;;;:::o;2317:180::-;2365:77;2362:1;2355:88;2462:4;2459:1;2452:15;2486:4;2483:1;2476:15;2503:281;2586:27;2608:4;2586:27;:::i;:::-;2578:6;2574:40;2716:6;2704:10;2701:22;2680:18;2668:10;2665:34;2662:62;2659:88;;;2727:18;;:::i;:::-;2659:88;2767:10;2763:2;2756:22;2546:238;2503:281;;:::o;2790:129::-;2824:6;2851:20;;:::i;:::-;2841:30;;2880:33;2908:4;2900:6;2880:33;:::i;:::-;2790:129;;;:::o;2925:307::-;2986:4;3076:18;3068:6;3065:30;3062:56;;;3098:18;;:::i;:::-;3062:56;3136:29;3158:6;3136:29;:::i;:::-;3128:37;;3220:4;3214;3210:15;3202:23;;2925:307;;;:::o;3238:148::-;3336:6;3331:3;3326;3313:30;3377:1;3368:6;3363:3;3359:16;3352:27;3238:148;;;:::o;3392:423::-;3469:5;3494:65;3510:48;3551:6;3510:48;:::i;:::-;3494:65;:::i;:::-;3485:74;;3582:6;3575:5;3568:21;3620:4;3613:5;3609:16;3658:3;3649:6;3644:3;3640:16;3637:25;3634:112;;;3665:79;;:::i;:::-;3634:112;3755:54;3802:6;3797:3;3792;3755:54;:::i;:::-;3475:340;3392:423;;;;;:::o;3834:338::-;3889:5;3938:3;3931:4;3923:6;3919:17;3915:27;3905:122;;3946:79;;:::i;:::-;3905:122;4063:6;4050:20;4088:78;4162:3;4154:6;4147:4;4139:6;4135:17;4088:78;:::i;:::-;4079:87;;3895:277;3834:338;;;;:::o;4178:943::-;4273:6;4281;4289;4297;4346:3;4334:9;4325:7;4321:23;4317:33;4314:120;;;4353:79;;:::i;:::-;4314:120;4473:1;4498:53;4543:7;4534:6;4523:9;4519:22;4498:53;:::i;:::-;4488:63;;4444:117;4600:2;4626:53;4671:7;4662:6;4651:9;4647:22;4626:53;:::i;:::-;4616:63;;4571:118;4728:2;4754:53;4799:7;4790:6;4779:9;4775:22;4754:53;:::i;:::-;4744:63;;4699:118;4884:2;4873:9;4869:18;4856:32;4915:18;4907:6;4904:30;4901:117;;;4937:79;;:::i;:::-;4901:117;5042:62;5096:7;5087:6;5076:9;5072:22;5042:62;:::i;:::-;5032:72;;4827:287;4178:943;;;;;;;:::o;5127:149::-;5163:7;5203:66;5196:5;5192:78;5181:89;;5127:149;;;:::o;5282:115::-;5367:23;5384:5;5367:23;:::i;:::-;5362:3;5355:36;5282:115;;:::o;5403:218::-;5494:4;5532:2;5521:9;5517:18;5509:26;;5545:69;5611:1;5600:9;5596:17;5587:6;5545:69;:::i;:::-;5403:218;;;;:::o;5627:329::-;5686:6;5735:2;5723:9;5714:7;5710:23;5706:32;5703:119;;;5741:79;;:::i;:::-;5703:119;5861:1;5886:53;5931:7;5922:6;5911:9;5907:22;5886:53;:::i;:::-;5876:63;;5832:117;5627:329;;;;:::o;5962:118::-;6049:24;6067:5;6049:24;:::i;:::-;6044:3;6037:37;5962:118;;:::o;6086:222::-;6179:4;6217:2;6206:9;6202:18;6194:26;;6230:71;6298:1;6287:9;6283:17;6274:6;6230:71;:::i;:::-;6086:222;;;;:::o;6314:329::-;6373:6;6422:2;6410:9;6401:7;6397:23;6393:32;6390:119;;;6428:79;;:::i;:::-;6390:119;6548:1;6573:53;6618:7;6609:6;6598:9;6594:22;6573:53;:::i;:::-;6563:63;;6519:117;6314:329;;;;:::o;6649:99::-;6701:6;6735:5;6729:12;6719:22;;6649:99;;;:::o;6754:169::-;6838:11;6872:6;6867:3;6860:19;6912:4;6907:3;6903:14;6888:29;;6754:169;;;;:::o;6929:139::-;7018:6;7013:3;7008;7002:23;7059:1;7050:6;7045:3;7041:16;7034:27;6929:139;;;:::o;7074:377::-;7162:3;7190:39;7223:5;7190:39;:::i;:::-;7245:71;7309:6;7304:3;7245:71;:::i;:::-;7238:78;;7325:65;7383:6;7378:3;7371:4;7364:5;7360:16;7325:65;:::i;:::-;7415:29;7437:6;7415:29;:::i;:::-;7410:3;7406:39;7399:46;;7166:285;7074:377;;;;:::o;7457:313::-;7570:4;7608:2;7597:9;7593:18;7585:26;;7657:9;7651:4;7647:20;7643:1;7632:9;7628:17;7621:47;7685:78;7758:4;7749:6;7685:78;:::i;:::-;7677:86;;7457:313;;;;:::o;7776:474::-;7844:6;7852;7901:2;7889:9;7880:7;7876:23;7872:32;7869:119;;;7907:79;;:::i;:::-;7869:119;8027:1;8052:53;8097:7;8088:6;8077:9;8073:22;8052:53;:::i;:::-;8042:63;;7998:117;8154:2;8180:53;8225:7;8216:6;8205:9;8201:22;8180:53;:::i;:::-;8170:63;;8125:118;7776:474;;;;;:::o;8256:60::-;8284:3;8305:5;8298:12;;8256:60;;;:::o;8322:142::-;8372:9;8405:53;8423:34;8432:24;8450:5;8432:24;:::i;:::-;8423:34;:::i;:::-;8405:53;:::i;:::-;8392:66;;8322:142;;;:::o;8470:126::-;8520:9;8553:37;8584:5;8553:37;:::i;:::-;8540:50;;8470:126;;;:::o;8602:141::-;8667:9;8700:37;8731:5;8700:37;:::i;:::-;8687:50;;8602:141;;;:::o;8749:161::-;8851:52;8897:5;8851:52;:::i;:::-;8846:3;8839:65;8749:161;;:::o;8916:252::-;9024:4;9062:2;9051:9;9047:18;9039:26;;9075:86;9158:1;9147:9;9143:17;9134:6;9075:86;:::i;:::-;8916:252;;;;:::o;9174:474::-;9242:6;9250;9299:2;9287:9;9278:7;9274:23;9270:32;9267:119;;;9305:79;;:::i;:::-;9267:119;9425:1;9450:53;9495:7;9486:6;9475:9;9471:22;9450:53;:::i;:::-;9440:63;;9396:117;9552:2;9578:53;9623:7;9614:6;9603:9;9599:22;9578:53;:::i;:::-;9568:63;;9523:118;9174:474;;;;;:::o;9654:118::-;9741:24;9759:5;9741:24;:::i;:::-;9736:3;9729:37;9654:118;;:::o;9778:222::-;9871:4;9909:2;9898:9;9894:18;9886:26;;9922:71;9990:1;9979:9;9975:17;9966:6;9922:71;:::i;:::-;9778:222;;;;:::o;10006:619::-;10083:6;10091;10099;10148:2;10136:9;10127:7;10123:23;10119:32;10116:119;;;10154:79;;:::i;:::-;10116:119;10274:1;10299:53;10344:7;10335:6;10324:9;10320:22;10299:53;:::i;:::-;10289:63;;10245:117;10401:2;10427:53;10472:7;10463:6;10452:9;10448:22;10427:53;:::i;:::-;10417:63;;10372:118;10529:2;10555:53;10600:7;10591:6;10580:9;10576:22;10555:53;:::i;:::-;10545:63;;10500:118;10006:619;;;;;:::o;10631:117::-;10740:1;10737;10730:12;10754:117;10863:1;10860;10853:12;10894:568;10967:8;10977:6;11027:3;11020:4;11012:6;11008:17;11004:27;10994:122;;11035:79;;:::i;:::-;10994:122;11148:6;11135:20;11125:30;;11178:18;11170:6;11167:30;11164:117;;;11200:79;;:::i;:::-;11164:117;11314:4;11306:6;11302:17;11290:29;;11368:3;11360:4;11352:6;11348:17;11338:8;11334:32;11331:41;11328:128;;;11375:79;;:::i;:::-;11328:128;10894:568;;;;;:::o;11468:559::-;11554:6;11562;11611:2;11599:9;11590:7;11586:23;11582:32;11579:119;;;11617:79;;:::i;:::-;11579:119;11765:1;11754:9;11750:17;11737:31;11795:18;11787:6;11784:30;11781:117;;;11817:79;;:::i;:::-;11781:117;11930:80;12002:7;11993:6;11982:9;11978:22;11930:80;:::i;:::-;11912:98;;;;11708:312;11468:559;;;;;:::o;12033:114::-;12100:6;12134:5;12128:12;12118:22;;12033:114;;;:::o;12153:174::-;12242:11;12276:6;12271:3;12264:19;12316:4;12311:3;12307:14;12292:29;;12153:174;;;;:::o;12333:132::-;12400:4;12423:3;12415:11;;12453:4;12448:3;12444:14;12436:22;;12333:132;;;:::o;12471:108::-;12548:24;12566:5;12548:24;:::i;:::-;12543:3;12536:37;12471:108;;:::o;12585:179::-;12654:10;12675:46;12717:3;12709:6;12675:46;:::i;:::-;12753:4;12748:3;12744:14;12730:28;;12585:179;;;;:::o;12770:113::-;12840:4;12872;12867:3;12863:14;12855:22;;12770:113;;;:::o;12919:712::-;13028:3;13057:54;13105:5;13057:54;:::i;:::-;13127:76;13196:6;13191:3;13127:76;:::i;:::-;13120:83;;13227:56;13277:5;13227:56;:::i;:::-;13306:7;13337:1;13322:284;13347:6;13344:1;13341:13;13322:284;;;13423:6;13417:13;13450:63;13509:3;13494:13;13450:63;:::i;:::-;13443:70;;13536:60;13589:6;13536:60;:::i;:::-;13526:70;;13382:224;13369:1;13366;13362:9;13357:14;;13322:284;;;13326:14;13622:3;13615:10;;13033:598;;;12919:712;;;;:::o;13709:646::-;13830:3;13866:4;13861:3;13857:14;13957:4;13950:5;13946:16;13940:23;14010:3;14004:4;14000:14;13993:4;13988:3;13984:14;13977:38;14036:103;14134:4;14120:12;14036:103;:::i;:::-;14028:111;;13881:269;14236:4;14229:5;14225:16;14219:23;14255:63;14312:4;14307:3;14303:14;14289:12;14255:63;:::i;:::-;14160:168;14345:4;14338:11;;13835:520;13709:646;;;;:::o;14361:377::-;14506:4;14544:2;14533:9;14529:18;14521:26;;14593:9;14587:4;14583:20;14579:1;14568:9;14564:17;14557:47;14621:110;14726:4;14717:6;14621:110;:::i;:::-;14613:118;;14361:377;;;;:::o;14744:474::-;14812:6;14820;14869:2;14857:9;14848:7;14844:23;14840:32;14837:119;;;14875:79;;:::i;:::-;14837:119;14995:1;15020:53;15065:7;15056:6;15045:9;15041:22;15020:53;:::i;:::-;15010:63;;14966:117;15122:2;15148:53;15193:7;15184:6;15173:9;15169:22;15148:53;:::i;:::-;15138:63;;15093:118;14744:474;;;;;:::o;15224:184::-;15323:11;15357:6;15352:3;15345:19;15397:4;15392:3;15388:14;15373:29;;15224:184;;;;:::o;15444:732::-;15563:3;15592:54;15640:5;15592:54;:::i;:::-;15662:86;15741:6;15736:3;15662:86;:::i;:::-;15655:93;;15772:56;15822:5;15772:56;:::i;:::-;15851:7;15882:1;15867:284;15892:6;15889:1;15886:13;15867:284;;;15968:6;15962:13;15995:63;16054:3;16039:13;15995:63;:::i;:::-;15988:70;;16081:60;16134:6;16081:60;:::i;:::-;16071:70;;15927:224;15914:1;15911;15907:9;15902:14;;15867:284;;;15871:14;16167:3;16160:10;;15568:608;;;15444:732;;;;:::o;16182:373::-;16325:4;16363:2;16352:9;16348:18;16340:26;;16412:9;16406:4;16402:20;16398:1;16387:9;16383:17;16376:47;16440:108;16543:4;16534:6;16440:108;:::i;:::-;16432:116;;16182:373;;;;:::o;16561:175::-;16701:27;16697:1;16689:6;16685:14;16678:51;16561:175;:::o;16742:366::-;16884:3;16905:67;16969:2;16964:3;16905:67;:::i;:::-;16898:74;;16981:93;17070:3;16981:93;:::i;:::-;17099:2;17094:3;17090:12;17083:19;;16742:366;;;:::o;17114:419::-;17280:4;17318:2;17307:9;17303:18;17295:26;;17367:9;17361:4;17357:20;17353:1;17342:9;17338:17;17331:47;17395:131;17521:4;17395:131;:::i;:::-;17387:139;;17114:419;;;:::o;17539:180::-;17587:77;17584:1;17577:88;17684:4;17681:1;17674:15;17708:4;17705:1;17698:15;17725:180;17773:77;17770:1;17763:88;17870:4;17867:1;17860:15;17894:4;17891:1;17884:15;17911:194;17951:4;17971:20;17989:1;17971:20;:::i;:::-;17966:25;;18005:20;18023:1;18005:20;:::i;:::-;18000:25;;18049:1;18046;18042:9;18034:17;;18073:1;18067:4;18064:11;18061:37;;;18078:18;;:::i;:::-;18061:37;17911:194;;;;:::o;18111:180::-;18159:77;18156:1;18149:88;18256:4;18253:1;18246:15;18280:4;18277:1;18270:15;18297:180;18437:32;18433:1;18425:6;18421:14;18414:56;18297:180;:::o;18483:366::-;18625:3;18646:67;18710:2;18705:3;18646:67;:::i;:::-;18639:74;;18722:93;18811:3;18722:93;:::i;:::-;18840:2;18835:3;18831:12;18824:19;;18483:366;;;:::o;18855:419::-;19021:4;19059:2;19048:9;19044:18;19036:26;;19108:9;19102:4;19098:20;19094:1;19083:9;19079:17;19072:47;19136:131;19262:4;19136:131;:::i;:::-;19128:139;;18855:419;;;:::o;19280:180::-;19328:77;19325:1;19318:88;19425:4;19422:1;19415:15;19449:4;19446:1;19439:15;19466:176;19498:1;19515:20;19533:1;19515:20;:::i;:::-;19510:25;;19549:20;19567:1;19549:20;:::i;:::-;19544:25;;19588:1;19578:35;;19593:18;;:::i;:::-;19578:35;19634:1;19631;19627:9;19622:14;;19466:176;;;;:::o;19648:143::-;19705:5;19736:6;19730:13;19721:22;;19752:33;19779:5;19752:33;:::i;:::-;19648:143;;;;:::o;19797:351::-;19867:6;19916:2;19904:9;19895:7;19891:23;19887:32;19884:119;;;19922:79;;:::i;:::-;19884:119;20042:1;20067:64;20123:7;20114:6;20103:9;20099:22;20067:64;:::i;:::-;20057:74;;20013:128;19797:351;;;;:::o;20154:177::-;20294:29;20290:1;20282:6;20278:14;20271:53;20154:177;:::o;20337:366::-;20479:3;20500:67;20564:2;20559:3;20500:67;:::i;:::-;20493:74;;20576:93;20665:3;20576:93;:::i;:::-;20694:2;20689:3;20685:12;20678:19;;20337:366;;;:::o;20709:419::-;20875:4;20913:2;20902:9;20898:18;20890:26;;20962:9;20956:4;20952:20;20948:1;20937:9;20933:17;20926:47;20990:131;21116:4;20990:131;:::i;:::-;20982:139;;20709:419;;;:::o;21134:442::-;21283:4;21321:2;21310:9;21306:18;21298:26;;21334:71;21402:1;21391:9;21387:17;21378:6;21334:71;:::i;:::-;21415:72;21483:2;21472:9;21468:18;21459:6;21415:72;:::i;:::-;21497;21565:2;21554:9;21550:18;21541:6;21497:72;:::i;:::-;21134:442;;;;;;:::o;21582:166::-;21722:18;21718:1;21710:6;21706:14;21699:42;21582:166;:::o;21754:366::-;21896:3;21917:67;21981:2;21976:3;21917:67;:::i;:::-;21910:74;;21993:93;22082:3;21993:93;:::i;:::-;22111:2;22106:3;22102:12;22095:19;;21754:366;;;:::o;22126:419::-;22292:4;22330:2;22319:9;22315:18;22307:26;;22379:9;22373:4;22369:20;22365:1;22354:9;22350:17;22343:47;22407:131;22533:4;22407:131;:::i;:::-;22399:139;;22126:419;;;:::o;22551:163::-;22691:15;22687:1;22679:6;22675:14;22668:39;22551:163;:::o;22720:366::-;22862:3;22883:67;22947:2;22942:3;22883:67;:::i;:::-;22876:74;;22959:93;23048:3;22959:93;:::i;:::-;23077:2;23072:3;23068:12;23061:19;;22720:366;;;:::o;23092:419::-;23258:4;23296:2;23285:9;23281:18;23273:26;;23345:9;23339:4;23335:20;23331:1;23320:9;23316:17;23309:47;23373:131;23499:4;23373:131;:::i;:::-;23365:139;;23092:419;;;:::o;23517:179::-;23657:31;23653:1;23645:6;23641:14;23634:55;23517:179;:::o;23702:366::-;23844:3;23865:67;23929:2;23924:3;23865:67;:::i;:::-;23858:74;;23941:93;24030:3;23941:93;:::i;:::-;24059:2;24054:3;24050:12;24043:19;;23702:366;;;:::o;24074:419::-;24240:4;24278:2;24267:9;24263:18;24255:26;;24327:9;24321:4;24317:20;24313:1;24302:9;24298:17;24291:47;24355:131;24481:4;24355:131;:::i;:::-;24347:139;;24074:419;;;:::o;24499:143::-;24556:5;24587:6;24581:13;24572:22;;24603:33;24630:5;24603:33;:::i;:::-;24499:143;;;;:::o;24648:351::-;24718:6;24767:2;24755:9;24746:7;24742:23;24738:32;24735:119;;;24773:79;;:::i;:::-;24735:119;24893:1;24918:64;24974:7;24965:6;24954:9;24950:22;24918:64;:::i;:::-;24908:74;;24864:128;24648:351;;;;:::o;25005:85::-;25050:7;25079:5;25068:16;;25005:85;;;:::o;25096:158::-;25154:9;25187:61;25205:42;25214:32;25240:5;25214:32;:::i;:::-;25205:42;:::i;:::-;25187:61;:::i;:::-;25174:74;;25096:158;;;:::o;25260:147::-;25355:45;25394:5;25355:45;:::i;:::-;25350:3;25343:58;25260:147;;:::o;25413:348::-;25542:4;25580:2;25569:9;25565:18;25557:26;;25593:71;25661:1;25650:9;25646:17;25637:6;25593:71;:::i;:::-;25674:80;25750:2;25739:9;25735:18;25726:6;25674:80;:::i;:::-;25413:348;;;;;:::o;25767:170::-;25907:22;25903:1;25895:6;25891:14;25884:46;25767:170;:::o;25943:366::-;26085:3;26106:67;26170:2;26165:3;26106:67;:::i;:::-;26099:74;;26182:93;26271:3;26182:93;:::i;:::-;26300:2;26295:3;26291:12;26284:19;;25943:366;;;:::o;26315:419::-;26481:4;26519:2;26508:9;26504:18;26496:26;;26568:9;26562:4;26558:20;26554:1;26543:9;26539:17;26532:47;26596:131;26722:4;26596:131;:::i;:::-;26588:139;;26315:419;;;:::o;26740:165::-;26880:17;26876:1;26868:6;26864:14;26857:41;26740:165;:::o;26911:366::-;27053:3;27074:67;27138:2;27133:3;27074:67;:::i;:::-;27067:74;;27150:93;27239:3;27150:93;:::i;:::-;27268:2;27263:3;27259:12;27252:19;;26911:366;;;:::o;27283:419::-;27449:4;27487:2;27476:9;27472:18;27464:26;;27536:9;27530:4;27526:20;27522:1;27511:9;27507:17;27500:47;27564:131;27690:4;27564:131;:::i;:::-;27556:139;;27283:419;;;:::o;27708:182::-;27848:34;27844:1;27836:6;27832:14;27825:58;27708:182;:::o;27896:366::-;28038:3;28059:67;28123:2;28118:3;28059:67;:::i;:::-;28052:74;;28135:93;28224:3;28135:93;:::i;:::-;28253:2;28248:3;28244:12;28237:19;;27896:366;;;:::o;28268:419::-;28434:4;28472:2;28461:9;28457:18;28449:26;;28521:9;28515:4;28511:20;28507:1;28496:9;28492:17;28485:47;28549:131;28675:4;28549:131;:::i;:::-;28541:139;;28268:419;;;:::o;28693:332::-;28814:4;28852:2;28841:9;28837:18;28829:26;;28865:71;28933:1;28922:9;28918:17;28909:6;28865:71;:::i;:::-;28946:72;29014:2;29003:9;28999:18;28990:6;28946:72;:::i;:::-;28693:332;;;;;:::o;29031:90::-;29065:7;29108:5;29101:13;29094:21;29083:32;;29031:90;;;:::o;29127:116::-;29197:21;29212:5;29197:21;:::i;:::-;29190:5;29187:32;29177:60;;29233:1;29230;29223:12;29177:60;29127:116;:::o;29249:137::-;29303:5;29334:6;29328:13;29319:22;;29350:30;29374:5;29350:30;:::i;:::-;29249:137;;;;:::o;29392:345::-;29459:6;29508:2;29496:9;29487:7;29483:23;29479:32;29476:119;;;29514:79;;:::i;:::-;29476:119;29634:1;29659:61;29712:7;29703:6;29692:9;29688:22;29659:61;:::i;:::-;29649:71;;29605:125;29392:345;;;;:::o;29743:180::-;29883:32;29879:1;29871:6;29867:14;29860:56;29743:180;:::o;29929:366::-;30071:3;30092:67;30156:2;30151:3;30092:67;:::i;:::-;30085:74;;30168:93;30257:3;30168:93;:::i;:::-;30286:2;30281:3;30277:12;30270:19;;29929:366;;;:::o;30301:419::-;30467:4;30505:2;30494:9;30490:18;30482:26;;30554:9;30548:4;30544:20;30540:1;30529:9;30525:17;30518:47;30582:131;30708:4;30582:131;:::i;:::-;30574:139;;30301:419;;;:::o;30726:174::-;30866:26;30862:1;30854:6;30850:14;30843:50;30726:174;:::o;30906:366::-;31048:3;31069:67;31133:2;31128:3;31069:67;:::i;:::-;31062:74;;31145:93;31234:3;31145:93;:::i;:::-;31263:2;31258:3;31254:12;31247:19;;30906:366;;;:::o;31278:419::-;31444:4;31482:2;31471:9;31467:18;31459:26;;31531:9;31525:4;31521:20;31517:1;31506:9;31502:17;31495:47;31559:131;31685:4;31559:131;:::i;:::-;31551:139;;31278:419;;;:::o;31703:176::-;31843:28;31839:1;31831:6;31827:14;31820:52;31703:176;:::o;31885:366::-;32027:3;32048:67;32112:2;32107:3;32048:67;:::i;:::-;32041:74;;32124:93;32213:3;32124:93;:::i;:::-;32242:2;32237:3;32233:12;32226:19;;31885:366;;;:::o;32257:419::-;32423:4;32461:2;32450:9;32446:18;32438:26;;32510:9;32504:4;32500:20;32496:1;32485:9;32481:17;32474:47;32538:131;32664:4;32538:131;:::i;:::-;32530:139;;32257:419;;;:::o;32682:191::-;32722:3;32741:20;32759:1;32741:20;:::i;:::-;32736:25;;32775:20;32793:1;32775:20;:::i;:::-;32770:25;;32818:1;32815;32811:9;32804:16;;32839:3;32836:1;32833:10;32830:36;;;32846:18;;:::i;:::-;32830:36;32682:191;;;;:::o;32879:171::-;33019:23;33015:1;33007:6;33003:14;32996:47;32879:171;:::o;33056:366::-;33198:3;33219:67;33283:2;33278:3;33219:67;:::i;:::-;33212:74;;33295:93;33384:3;33295:93;:::i;:::-;33413:2;33408:3;33404:12;33397:19;;33056:366;;;:::o;33428:419::-;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:175::-;33993:27;33989:1;33981:6;33977:14;33970:51;33853:175;:::o;34034:366::-;34176:3;34197:67;34261:2;34256:3;34197:67;:::i;:::-;34190:74;;34273:93;34362:3;34273:93;:::i;:::-;34391:2;34386:3;34382:12;34375:19;;34034:366;;;:::o;34406:419::-;34572:4;34610:2;34599:9;34595:18;34587:26;;34659:9;34653:4;34649:20;34645:1;34634:9;34630:17;34623:47;34687:131;34813:4;34687:131;:::i;:::-;34679:139;;34406:419;;;:::o;34831:181::-;34971:33;34967:1;34959:6;34955:14;34948:57;34831:181;:::o;35018:366::-;35160:3;35181:67;35245:2;35240:3;35181:67;:::i;:::-;35174:74;;35257:93;35346:3;35257:93;:::i;:::-;35375:2;35370:3;35366:12;35359:19;;35018:366;;;:::o;35390:419::-;35556:4;35594:2;35583:9;35579:18;35571:26;;35643:9;35637:4;35633:20;35629:1;35618:9;35614:17;35607:47;35671:131;35797:4;35671:131;:::i;:::-;35663:139;;35390:419;;;:::o;35815:176::-;35955:28;35951:1;35943:6;35939:14;35932:52;35815:176;:::o;35997:366::-;36139:3;36160:67;36224:2;36219:3;36160:67;:::i;:::-;36153:74;;36236:93;36325:3;36236:93;:::i;:::-;36354:2;36349:3;36345:12;36338:19;;35997:366;;;:::o;36369:419::-;36535:4;36573:2;36562:9;36558:18;36550:26;;36622:9;36616:4;36612:20;36608:1;36597:9;36593:17;36586:47;36650:131;36776:4;36650:131;:::i;:::-;36642:139;;36369:419;;;:::o
Swarm Source
ipfs://ca3a1f6c4b1c4bbd2a80788d21e0729d4af7744f6ce67601ba512f9cc52d1e8a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ 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.