More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Loading...
Loading
Contract Name:
FlowerNFTStaking
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-02 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/[email protected]/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must 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 ERC721 * 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 caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/[email protected]/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/[email protected]/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/[email protected]/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: @openzeppelin/[email protected]/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: flowergrowop.sol pragma solidity ^0.8.0; interface IFlowerNFT { function levels(uint256 tokenId) external view returns (uint256); } contract FlowerNFTStaking is Ownable, ReentrancyGuard, Pausable, IERC721Receiver { IERC721 public flowerNFT; IERC20 public flowerToken; IERC721 public stonerToken; uint256 public rewardRate = 1 ether; uint256 public stonerBonusMultiplier = 10; uint256 public flowerNFTBonusMultiplier = 5; uint256 public tapBonusAmount = 0.1 ether; uint256 public tapCooldown = 1 hours; struct Stake { uint256 tokenId; uint256 stakedAt; uint256 lastTapped; } mapping(address => Stake[]) public stakes; mapping(uint256 => address) public stakedTokenOwners; mapping(address => uint256[]) public stonerStakes; event Staked(address indexed user, uint256[] flowerTokenIds, uint256[] stonerTokenIds); event Unstaked(address indexed user, uint256[] flowerTokenIds, uint256[] stonerTokenIds); event RewardClaimed(address indexed user, uint256 amount); event TapBonusClaimed(address indexed user, uint256 amount); event TokensWithdrawn(address indexed owner, uint256 amount); event RewardRateUpdated(uint256 newRate); event StonerBonusUpdated(uint256 newMultiplier); event FlowerNFTBonusUpdated(uint256 newMultiplier); event TapBonusUpdated(uint256 newAmount); event TapCooldownUpdated(uint256 newCooldown); constructor(address _flowerNFT, address _flowerToken, address _stonerToken) { flowerNFT = IERC721(_flowerNFT); flowerToken = IERC20(_flowerToken); stonerToken = IERC721(_stonerToken); } /** ADMIN FUNCTIONS TO SET REWARD PARAMETERS **/ function setRewardRate(uint256 newRate) external onlyOwner { require(newRate > 0, "Reward rate must be greater than zero"); rewardRate = newRate; emit RewardRateUpdated(newRate); } function setStonerBonusMultiplier(uint256 newMultiplier) external onlyOwner { require(newMultiplier >= 1, "Multiplier must be at least 1"); stonerBonusMultiplier = newMultiplier; emit StonerBonusUpdated(newMultiplier); } function setFlowerNFTBonusMultiplier(uint256 newMultiplier) external onlyOwner { require(newMultiplier >= 1, "Multiplier must be at least 1"); flowerNFTBonusMultiplier = newMultiplier; emit FlowerNFTBonusUpdated(newMultiplier); } function setTapBonusAmount(uint256 newAmount) external onlyOwner { require(newAmount > 0, "Bonus amount must be greater than zero"); tapBonusAmount = newAmount; emit TapBonusUpdated(newAmount); } function setTapCooldown(uint256 newCooldown) external onlyOwner { require(newCooldown > 0, "Cooldown must be greater than zero"); tapCooldown = newCooldown; emit TapCooldownUpdated(newCooldown); } /** CLAIM REWARDS WITHOUT UNSTAKING **/ function claimRewards() external nonReentrant whenNotPaused { uint256 totalReward = 0; bool tapBonusApplied = false; for (uint256 i = 0; i < stakes[msg.sender].length; i++) { uint256 tokenId = stakes[msg.sender][i].tokenId; uint256 reward = calculateReward(msg.sender, tokenId); totalReward += reward; // Reset stake time to accumulate new rewards from now stakes[msg.sender][i].stakedAt = block.timestamp; // Apply tap bonus if eligible if (!tapBonusApplied && (block.timestamp - stakes[msg.sender][i].lastTapped) >= tapCooldown) { totalReward += tapBonusAmount; stakes[msg.sender][i].lastTapped = block.timestamp; tapBonusApplied = true; } } require(totalReward > 0, "No rewards to claim"); flowerToken.transfer(msg.sender, totalReward); emit RewardClaimed(msg.sender, totalReward); if (tapBonusApplied) { emit TapBonusClaimed(msg.sender, tapBonusAmount); } } /** ADMIN FUNCTION TO WITHDRAW $FLOWER TOKENS **/ function withdrawTokens(uint256 amount) external onlyOwner { require(amount > 0, "Amount must be greater than zero"); require(flowerToken.balanceOf(address(this)) >= amount, "Not enough tokens in contract"); flowerToken.transfer(msg.sender, amount); emit TokensWithdrawn(msg.sender, amount); } /** STAKING MULTIPLE NFTs **/ function stakeMultiple(uint256[] memory flowerTokenIds, uint256[] memory stonerTokenIds) external nonReentrant whenNotPaused { require(flowerTokenIds.length > 0 || stonerTokenIds.length > 0, "No NFTs provided"); for (uint256 i = 0; i < flowerTokenIds.length; i++) { uint256 tokenId = flowerTokenIds[i]; require(flowerNFT.ownerOf(tokenId) == msg.sender, "You do not own this FlowerNFT"); require(stakedTokenOwners[tokenId] == address(0), "This NFT is already staked"); stakes[msg.sender].push(Stake({tokenId: tokenId, stakedAt: block.timestamp, lastTapped: 0})); stakedTokenOwners[tokenId] = msg.sender; flowerNFT.safeTransferFrom(msg.sender, address(this), tokenId); } for (uint256 i = 0; i < stonerTokenIds.length; i++) { uint256 stonerId = stonerTokenIds[i]; require(stonerToken.ownerOf(stonerId) == msg.sender, "You do not own this StonerNFT"); stonerToken.safeTransferFrom(msg.sender, address(this), stonerId); stonerStakes[msg.sender].push(stonerId); } emit Staked(msg.sender, flowerTokenIds, stonerTokenIds); } /** UNSTAKING MULTIPLE NFTs **/ function unstakeMultiple(uint256[] memory flowerTokenIds, uint256[] memory stonerTokenIds) external nonReentrant whenNotPaused { require(flowerTokenIds.length > 0 || stonerTokenIds.length > 0, "No NFTs provided"); uint256 totalReward = 0; for (uint256 i = 0; i < flowerTokenIds.length; i++) { uint256 tokenId = flowerTokenIds[i]; require(stakedTokenOwners[tokenId] == msg.sender, "You do not own this staked NFT"); totalReward += calculateReward(msg.sender, tokenId); _removeStake(tokenId); flowerNFT.safeTransferFrom(address(this), msg.sender, tokenId); } require(stonerStakes[msg.sender].length >= stonerTokenIds.length, "Not enough staked StonerNFTs"); for (uint256 i = 0; i < stonerTokenIds.length; i++) { uint256 stonerId = stonerTokenIds[i]; _removeStonerStake(); stonerToken.safeTransferFrom(address(this), msg.sender, stonerId); } if (totalReward > 0) { flowerToken.transfer(msg.sender, totalReward); emit RewardClaimed(msg.sender, totalReward); } emit Unstaked(msg.sender, flowerTokenIds, stonerTokenIds); } /** REWARD CALCULATION **/ function calculateReward(address user, uint256 tokenId) public view returns (uint256) { for (uint256 i = 0; i < stakes[user].length; i++) { if (stakes[user][i].tokenId == tokenId) { uint256 timeStaked = block.timestamp - stakes[user][i].stakedAt; uint256 baseReward = (timeStaked * getFlowerNFTLevel(tokenId) * rewardRate) / 1 days; return baseReward; } } return 0; } function getFlowerNFTLevel(uint256 tokenId) public view returns (uint256) { return IFlowerNFT(address(flowerNFT)).levels(tokenId); } function _removeStake(uint256 tokenId) internal { delete stakedTokenOwners[tokenId]; } function _removeStonerStake() internal {} 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
[{"inputs":[{"internalType":"address","name":"_flowerNFT","type":"address"},{"internalType":"address","name":"_flowerToken","type":"address"},{"internalType":"address","name":"_stonerToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"FlowerNFTBonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"RewardRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"flowerTokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"stonerTokenIds","type":"uint256[]"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"StonerBonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TapBonusClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"TapBonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCooldown","type":"uint256"}],"name":"TapCooldownUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"flowerTokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"stonerTokenIds","type":"uint256[]"}],"name":"Unstaked","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"calculateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flowerNFT","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flowerNFTBonusMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flowerToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getFlowerNFTLevel","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":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"setFlowerNFTBonusMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"setStonerBonusMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setTapBonusAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCooldown","type":"uint256"}],"name":"setTapCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"flowerTokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"stonerTokenIds","type":"uint256[]"}],"name":"stakeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakedTokenOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"stakedAt","type":"uint256"},{"internalType":"uint256","name":"lastTapped","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stonerBonusMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stonerStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stonerToken","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tapBonusAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tapCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"flowerTokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"stonerTokenIds","type":"uint256[]"}],"name":"unstakeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052670de0b6b3a7640000600555600a600655600560075567016345785d8a0000600855610e106009553480156200003957600080fd5b506040516200347e3803806200347e83398181016040528101906200005f9190620002a3565b6200007f620000736200016d60201b60201c565b6200017560201b60201c565b600180819055506000600260006101000a81548160ff02191690831515021790555082600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620002ff565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200026b826200023e565b9050919050565b6200027d816200025e565b81146200028957600080fd5b50565b6000815190506200029d8162000272565b92915050565b600080600060608486031215620002bf57620002be62000239565b5b6000620002cf868287016200028c565b9350506020620002e2868287016200028c565b9250506040620002f5868287016200028c565b9150509250925092565b61316f806200030f6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80635cae8f59116100f95780638da5cb5b116100975780639f60421f116100715780639f60421f14610488578063aee8c3a2146104a4578063e7d554ac146104d4578063f2fde38b146104f0576101a9565b80638da5cb5b1461043057806396e840a91461044e5780639e447fc61461046c576101a9565b8063721a1f45116100d3578063721a1f45146103a65780637b0a47ee146103c4578063851fbb54146103e25780638b3d81b314610400576101a9565b80635cae8f5914610362578063602095ce1461037e578063715018a61461039c576101a9565b80633b18dc711161016657806341cd5f731161014057806341cd5f73146102d857806351f3db48146102f6578063584b62a1146103125780635c975abb14610344576101a9565b80633b18dc711461026c5780633b3f944c1461028a5780633cfd1568146102a8576101a9565b8063150b7a02146101ae5780631852e8d9146101de5780631cc6ec931461020e5780632c583bf31461022a578063315a095d14610246578063372500ab14610262575b600080fd5b6101c860048036038101906101c39190612158565b61050c565b6040516101d59190612216565b60405180910390f35b6101f860048036038101906101f39190612231565b610520565b6040516102059190612280565b60405180910390f35b6102286004803603810190610223919061229b565b6106aa565b005b610244600480360381019061023f9190612390565b610736565b005b610260600480360381019061025b919061229b565b610da4565b005b61026a610fbf565b005b6102746113b2565b6040516102819190612280565b60405180910390f35b6102926113b8565b60405161029f9190612280565b60405180910390f35b6102c260048036038101906102bd9190612231565b6113be565b6040516102cf9190612280565b60405180910390f35b6102e06113ef565b6040516102ed9190612280565b60405180910390f35b610310600480360381019061030b919061229b565b6113f5565b005b61032c60048036038101906103279190612231565b611481565b60405161033b93929190612408565b60405180910390f35b61034c6114c8565b604051610359919061245a565b60405180910390f35b61037c6004803603810190610377919061229b565b6114df565b005b61038661156c565b60405161039391906124d4565b60405180910390f35b6103a4611592565b005b6103ae6115a6565b6040516103bb9190612510565b60405180910390f35b6103cc6115cc565b6040516103d99190612280565b60405180910390f35b6103ea6115d2565b6040516103f79190612510565b60405180910390f35b61041a6004803603810190610415919061229b565b6115f8565b604051610427919061253a565b60405180910390f35b61043861162b565b604051610445919061253a565b60405180910390f35b610456611654565b6040516104639190612280565b60405180910390f35b6104866004803603810190610481919061229b565b61165a565b005b6104a2600480360381019061049d9190612390565b6116e6565b005b6104be60048036038101906104b9919061229b565b611b8e565b6040516104cb9190612280565b60405180910390f35b6104ee60048036038101906104e9919061229b565b611c33565b005b61050a60048036038101906105059190612555565b611cc0565b005b600063150b7a0260e01b9050949350505050565b600080600090505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561069e5782600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106105c4576105c3612582565b5b9060005260206000209060030201600001540361068b576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061062e5761062d612582565b5b9060005260206000209060030201600101544261064b91906125e0565b905060006201518060055461065f87611b8e565b8461066a9190612614565b6106749190612614565b61067e9190612685565b90508093505050506106a4565b8080610696906126b6565b915050610528565b50600090505b92915050565b6106b2611d43565b600081116106f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ec90612781565b60405180910390fd5b806009819055507fa292edce75c880178d165ee8473be051a702186c35b27ea86dab6c73ce88ff578160405161072b9190612280565b60405180910390a150565b61073e611dc1565b610746611e10565b600082511180610757575060008151115b610796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078d906127ed565b60405180910390fd5b60005b8251811015610b075760008382815181106107b7576107b6612582565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016108339190612280565b602060405180830381865afa158015610850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108749190612822565b73ffffffffffffffffffffffffffffffffffffffff16146108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19061289b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390612907565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040528083815260200142815260200160008152509080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020155505033600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b8152600401610ac193929190612927565b600060405180830381600087803b158015610adb57600080fd5b505af1158015610aef573d6000803e3d6000fd5b50505050508080610aff906126b6565b915050610799565b5060005b8151811015610d47576000828281518110610b2957610b28612582565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610ba59190612280565b602060405180830381865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612822565b73ffffffffffffffffffffffffffffffffffffffff1614610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c33906129aa565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b8152600401610c9b93929190612927565b600060405180830381600087803b158015610cb557600080fd5b505af1158015610cc9573d6000803e3d6000fd5b50505050600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055508080610d3f906126b6565b915050610b0b565b503373ffffffffffffffffffffffffffffffffffffffff167f859a4049709b7ed7c28d73c9122229b70aa55880d8744d1931e98e093a1b5b918383604051610d90929190612a88565b60405180910390a2610da0611e5a565b5050565b610dac611d43565b60008111610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690612b0b565b60405180910390fd5b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e4b919061253a565b602060405180830381865afa158015610e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8c9190612b40565b1015610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec490612bb9565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f2a929190612bd9565b6020604051808303816000875af1158015610f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6d9190612c2e565b503373ffffffffffffffffffffffffffffffffffffffff167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051610fb49190612280565b60405180910390a250565b610fc7611dc1565b610fcf611e10565b60008060005b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561121c576000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061107257611071612582565b5b906000526020600020906003020160000154905060006110923383610520565b905080856110a09190612c5b565b945042600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106110f4576110f3612582565b5b906000526020600020906003020160010181905550831580156111865750600954600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811061116657611165612582565b5b9060005260206000209060030201600201544261118391906125e0565b10155b1561120757600854856111999190612c5b565b945042600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106111ed576111ec612582565b5b906000526020600020906003020160020181905550600193505b50508080611214906126b6565b915050610fd5565b5060008211611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125790612cdb565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016112bd929190612bd9565b6020604051808303816000875af11580156112dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113009190612c2e565b503373ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f7241836040516113479190612280565b60405180910390a280156113a6573373ffffffffffffffffffffffffffffffffffffffff167f6a0f4fe063f23e62798223a0c370a3dd6e2686f8de029beaed648542858f59d360085460405161139d9190612280565b60405180910390a25b50506113b0611e5a565b565b60085481565b60075481565b600c60205281600052604060002081815481106113da57600080fd5b90600052602060002001600091509150505481565b60095481565b6113fd611d43565b60008111611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790612d6d565b60405180910390fd5b806008819055507f984f97438a61d2a2abf6ae7cccfe9dc9c37c8e3111255c24be5ef1129c6f2c76816040516114769190612280565b60405180910390a150565b600a602052816000526040600020818154811061149d57600080fd5b9060005260206000209060030201600091509150508060000154908060010154908060020154905083565b6000600260009054906101000a900460ff16905090565b6114e7611d43565b600181101561152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290612dd9565b60405180910390fd5b806006819055507ff4b2d54c414c720f8a9e79192fc7b4918e9b12a7ce94b34ab404a40bccc6821d816040516115619190612280565b60405180910390a150565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61159a611d43565b6115a46000611e63565b565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065481565b611662611d43565b600081116116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90612e6b565b60405180910390fd5b806005819055507f41d466ebd06fb97e7786086ac8b69b7eb7da798592036251291d34e9791cde01816040516116db9190612280565b60405180910390a150565b6116ee611dc1565b6116f6611e10565b600082511180611707575060008151115b611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d906127ed565b60405180910390fd5b6000805b83518110156118d857600084828151811061176857611767612582565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a90612ed7565b60405180910390fd5b61181d3382610520565b836118289190612c5b565b925061183381611f27565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b815260040161189293929190612927565b600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505080806118d0906126b6565b91505061174a565b508151600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050101561195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690612f43565b60405180910390fd5b60005b8251811015611a375760008382815181106119805761197f612582565b5b60200260200101519050611992611f60565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b81526004016119f193929190612927565b600060405180830381600087803b158015611a0b57600080fd5b505af1158015611a1f573d6000803e3d6000fd5b50505050508080611a2f906126b6565b915050611962565b506000811115611b3157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611a9e929190612bd9565b6020604051808303816000875af1158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae19190612c2e565b503373ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724182604051611b289190612280565b60405180910390a25b3373ffffffffffffffffffffffffffffffffffffffff167fef3bc8b2408263209f01abd2cf8120586077da5e4cf45d8a7dd83d2a0545f1038484604051611b79929190612a88565b60405180910390a250611b8a611e5a565b5050565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2596a67836040518263ffffffff1660e01b8152600401611beb9190612280565b602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190612b40565b9050919050565b611c3b611d43565b6001811015611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690612dd9565b60405180910390fd5b806007819055507ff3570cd97015150a0e5502c9cf62bb4b8fd0d2891b81254dd7da2d319adf884181604051611cb59190612280565b60405180910390a150565b611cc8611d43565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e90612fd5565b60405180910390fd5b611d4081611e63565b50565b611d4b611f62565b73ffffffffffffffffffffffffffffffffffffffff16611d6961162b565b73ffffffffffffffffffffffffffffffffffffffff1614611dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db690613041565b60405180910390fd5b565b600260015403611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd906130ad565b60405180910390fd5b6002600181905550565b611e186114c8565b15611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613119565b60405180910390fd5b565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600b600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fa982611f7e565b9050919050565b611fb981611f9e565b8114611fc457600080fd5b50565b600081359050611fd681611fb0565b92915050565b6000819050919050565b611fef81611fdc565b8114611ffa57600080fd5b50565b60008135905061200c81611fe6565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6120658261201c565b810181811067ffffffffffffffff821117156120845761208361202d565b5b80604052505050565b6000612097611f6a565b90506120a3828261205c565b919050565b600067ffffffffffffffff8211156120c3576120c261202d565b5b6120cc8261201c565b9050602081019050919050565b82818337600083830152505050565b60006120fb6120f6846120a8565b61208d565b90508281526020810184848401111561211757612116612017565b5b6121228482856120d9565b509392505050565b600082601f83011261213f5761213e612012565b5b813561214f8482602086016120e8565b91505092915050565b6000806000806080858703121561217257612171611f74565b5b600061218087828801611fc7565b945050602061219187828801611fc7565b93505060406121a287828801611ffd565b925050606085013567ffffffffffffffff8111156121c3576121c2611f79565b5b6121cf8782880161212a565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612210816121db565b82525050565b600060208201905061222b6000830184612207565b92915050565b6000806040838503121561224857612247611f74565b5b600061225685828601611fc7565b925050602061226785828601611ffd565b9150509250929050565b61227a81611fdc565b82525050565b60006020820190506122956000830184612271565b92915050565b6000602082840312156122b1576122b0611f74565b5b60006122bf84828501611ffd565b91505092915050565b600067ffffffffffffffff8211156122e3576122e261202d565b5b602082029050602081019050919050565b600080fd5b600061230c612307846122c8565b61208d565b9050808382526020820190506020840283018581111561232f5761232e6122f4565b5b835b8181101561235857806123448882611ffd565b845260208401935050602081019050612331565b5050509392505050565b600082601f83011261237757612376612012565b5b81356123878482602086016122f9565b91505092915050565b600080604083850312156123a7576123a6611f74565b5b600083013567ffffffffffffffff8111156123c5576123c4611f79565b5b6123d185828601612362565b925050602083013567ffffffffffffffff8111156123f2576123f1611f79565b5b6123fe85828601612362565b9150509250929050565b600060608201905061241d6000830186612271565b61242a6020830185612271565b6124376040830184612271565b949350505050565b60008115159050919050565b6124548161243f565b82525050565b600060208201905061246f600083018461244b565b92915050565b6000819050919050565b600061249a61249561249084611f7e565b612475565b611f7e565b9050919050565b60006124ac8261247f565b9050919050565b60006124be826124a1565b9050919050565b6124ce816124b3565b82525050565b60006020820190506124e960008301846124c5565b92915050565b60006124fa826124a1565b9050919050565b61250a816124ef565b82525050565b60006020820190506125256000830184612501565b92915050565b61253481611f9e565b82525050565b600060208201905061254f600083018461252b565b92915050565b60006020828403121561256b5761256a611f74565b5b600061257984828501611fc7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006125eb82611fdc565b91506125f683611fdc565b925082820390508181111561260e5761260d6125b1565b5b92915050565b600061261f82611fdc565b915061262a83611fdc565b925082820261263881611fdc565b9150828204841483151761264f5761264e6125b1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061269082611fdc565b915061269b83611fdc565b9250826126ab576126aa612656565b5b828204905092915050565b60006126c182611fdc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126f3576126f26125b1565b5b600182019050919050565b600082825260208201905092915050565b7f436f6f6c646f776e206d7573742062652067726561746572207468616e207a6560008201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b600061276b6022836126fe565b91506127768261270f565b604082019050919050565b6000602082019050818103600083015261279a8161275e565b9050919050565b7f4e6f204e4654732070726f766964656400000000000000000000000000000000600082015250565b60006127d76010836126fe565b91506127e2826127a1565b602082019050919050565b60006020820190508181036000830152612806816127ca565b9050919050565b60008151905061281c81611fb0565b92915050565b60006020828403121561283857612837611f74565b5b60006128468482850161280d565b91505092915050565b7f596f7520646f206e6f74206f776e207468697320466c6f7765724e4654000000600082015250565b6000612885601d836126fe565b91506128908261284f565b602082019050919050565b600060208201905081810360008301526128b481612878565b9050919050565b7f54686973204e465420697320616c7265616479207374616b6564000000000000600082015250565b60006128f1601a836126fe565b91506128fc826128bb565b602082019050919050565b60006020820190508181036000830152612920816128e4565b9050919050565b600060608201905061293c600083018661252b565b612949602083018561252b565b6129566040830184612271565b949350505050565b7f596f7520646f206e6f74206f776e20746869732053746f6e65724e4654000000600082015250565b6000612994601d836126fe565b915061299f8261295e565b602082019050919050565b600060208201905081810360008301526129c381612987565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6129ff81611fdc565b82525050565b6000612a1183836129f6565b60208301905092915050565b6000602082019050919050565b6000612a35826129ca565b612a3f81856129d5565b9350612a4a836129e6565b8060005b83811015612a7b578151612a628882612a05565b9750612a6d83612a1d565b925050600181019050612a4e565b5085935050505092915050565b60006040820190508181036000830152612aa28185612a2a565b90508181036020830152612ab68184612a2a565b90509392505050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b6000612af56020836126fe565b9150612b0082612abf565b602082019050919050565b60006020820190508181036000830152612b2481612ae8565b9050919050565b600081519050612b3a81611fe6565b92915050565b600060208284031215612b5657612b55611f74565b5b6000612b6484828501612b2b565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e20636f6e7472616374000000600082015250565b6000612ba3601d836126fe565b9150612bae82612b6d565b602082019050919050565b60006020820190508181036000830152612bd281612b96565b9050919050565b6000604082019050612bee600083018561252b565b612bfb6020830184612271565b9392505050565b612c0b8161243f565b8114612c1657600080fd5b50565b600081519050612c2881612c02565b92915050565b600060208284031215612c4457612c43611f74565b5b6000612c5284828501612c19565b91505092915050565b6000612c6682611fdc565b9150612c7183611fdc565b9250828201905080821115612c8957612c886125b1565b5b92915050565b7f4e6f207265776172647320746f20636c61696d00000000000000000000000000600082015250565b6000612cc56013836126fe565b9150612cd082612c8f565b602082019050919050565b60006020820190508181036000830152612cf481612cb8565b9050919050565b7f426f6e757320616d6f756e74206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b6000612d576026836126fe565b9150612d6282612cfb565b604082019050919050565b60006020820190508181036000830152612d8681612d4a565b9050919050565b7f4d756c7469706c696572206d757374206265206174206c656173742031000000600082015250565b6000612dc3601d836126fe565b9150612dce82612d8d565b602082019050919050565b60006020820190508181036000830152612df281612db6565b9050919050565b7f5265776172642072617465206d7573742062652067726561746572207468616e60008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612e556025836126fe565b9150612e6082612df9565b604082019050919050565b60006020820190508181036000830152612e8481612e48565b9050919050565b7f596f7520646f206e6f74206f776e2074686973207374616b6564204e46540000600082015250565b6000612ec1601e836126fe565b9150612ecc82612e8b565b602082019050919050565b60006020820190508181036000830152612ef081612eb4565b9050919050565b7f4e6f7420656e6f756768207374616b65642053746f6e65724e46547300000000600082015250565b6000612f2d601c836126fe565b9150612f3882612ef7565b602082019050919050565b60006020820190508181036000830152612f5c81612f20565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612fbf6026836126fe565b9150612fca82612f63565b604082019050919050565b60006020820190508181036000830152612fee81612fb2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061302b6020836126fe565b915061303682612ff5565b602082019050919050565b6000602082019050818103600083015261305a8161301e565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613097601f836126fe565b91506130a282613061565b602082019050919050565b600060208201905081810360008301526130c68161308a565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006131036010836126fe565b915061310e826130cd565b602082019050919050565b60006020820190508181036000830152613132816130f6565b905091905056fea2646970667358221220f97ea11477ccd8176dc662a2d5a00ac5e1b59aac79f58b80862cf2323153b55264736f6c63430008130033000000000000000000000000a58cd405fb0f4ad5c917393518aafd71a72644890000000000000000000000003be8d7a305856dcc5f6a41ade1b2f63ce4cdc86d0000000000000000000000009b567e03d891f537b2b7874aa4a3308cfe2f4fbb
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80635cae8f59116100f95780638da5cb5b116100975780639f60421f116100715780639f60421f14610488578063aee8c3a2146104a4578063e7d554ac146104d4578063f2fde38b146104f0576101a9565b80638da5cb5b1461043057806396e840a91461044e5780639e447fc61461046c576101a9565b8063721a1f45116100d3578063721a1f45146103a65780637b0a47ee146103c4578063851fbb54146103e25780638b3d81b314610400576101a9565b80635cae8f5914610362578063602095ce1461037e578063715018a61461039c576101a9565b80633b18dc711161016657806341cd5f731161014057806341cd5f73146102d857806351f3db48146102f6578063584b62a1146103125780635c975abb14610344576101a9565b80633b18dc711461026c5780633b3f944c1461028a5780633cfd1568146102a8576101a9565b8063150b7a02146101ae5780631852e8d9146101de5780631cc6ec931461020e5780632c583bf31461022a578063315a095d14610246578063372500ab14610262575b600080fd5b6101c860048036038101906101c39190612158565b61050c565b6040516101d59190612216565b60405180910390f35b6101f860048036038101906101f39190612231565b610520565b6040516102059190612280565b60405180910390f35b6102286004803603810190610223919061229b565b6106aa565b005b610244600480360381019061023f9190612390565b610736565b005b610260600480360381019061025b919061229b565b610da4565b005b61026a610fbf565b005b6102746113b2565b6040516102819190612280565b60405180910390f35b6102926113b8565b60405161029f9190612280565b60405180910390f35b6102c260048036038101906102bd9190612231565b6113be565b6040516102cf9190612280565b60405180910390f35b6102e06113ef565b6040516102ed9190612280565b60405180910390f35b610310600480360381019061030b919061229b565b6113f5565b005b61032c60048036038101906103279190612231565b611481565b60405161033b93929190612408565b60405180910390f35b61034c6114c8565b604051610359919061245a565b60405180910390f35b61037c6004803603810190610377919061229b565b6114df565b005b61038661156c565b60405161039391906124d4565b60405180910390f35b6103a4611592565b005b6103ae6115a6565b6040516103bb9190612510565b60405180910390f35b6103cc6115cc565b6040516103d99190612280565b60405180910390f35b6103ea6115d2565b6040516103f79190612510565b60405180910390f35b61041a6004803603810190610415919061229b565b6115f8565b604051610427919061253a565b60405180910390f35b61043861162b565b604051610445919061253a565b60405180910390f35b610456611654565b6040516104639190612280565b60405180910390f35b6104866004803603810190610481919061229b565b61165a565b005b6104a2600480360381019061049d9190612390565b6116e6565b005b6104be60048036038101906104b9919061229b565b611b8e565b6040516104cb9190612280565b60405180910390f35b6104ee60048036038101906104e9919061229b565b611c33565b005b61050a60048036038101906105059190612555565b611cc0565b005b600063150b7a0260e01b9050949350505050565b600080600090505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561069e5782600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106105c4576105c3612582565b5b9060005260206000209060030201600001540361068b576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061062e5761062d612582565b5b9060005260206000209060030201600101544261064b91906125e0565b905060006201518060055461065f87611b8e565b8461066a9190612614565b6106749190612614565b61067e9190612685565b90508093505050506106a4565b8080610696906126b6565b915050610528565b50600090505b92915050565b6106b2611d43565b600081116106f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ec90612781565b60405180910390fd5b806009819055507fa292edce75c880178d165ee8473be051a702186c35b27ea86dab6c73ce88ff578160405161072b9190612280565b60405180910390a150565b61073e611dc1565b610746611e10565b600082511180610757575060008151115b610796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078d906127ed565b60405180910390fd5b60005b8251811015610b075760008382815181106107b7576107b6612582565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016108339190612280565b602060405180830381865afa158015610850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108749190612822565b73ffffffffffffffffffffffffffffffffffffffff16146108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19061289b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390612907565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040528083815260200142815260200160008152509080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020155505033600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b8152600401610ac193929190612927565b600060405180830381600087803b158015610adb57600080fd5b505af1158015610aef573d6000803e3d6000fd5b50505050508080610aff906126b6565b915050610799565b5060005b8151811015610d47576000828281518110610b2957610b28612582565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610ba59190612280565b602060405180830381865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612822565b73ffffffffffffffffffffffffffffffffffffffff1614610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c33906129aa565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b8152600401610c9b93929190612927565b600060405180830381600087803b158015610cb557600080fd5b505af1158015610cc9573d6000803e3d6000fd5b50505050600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055508080610d3f906126b6565b915050610b0b565b503373ffffffffffffffffffffffffffffffffffffffff167f859a4049709b7ed7c28d73c9122229b70aa55880d8744d1931e98e093a1b5b918383604051610d90929190612a88565b60405180910390a2610da0611e5a565b5050565b610dac611d43565b60008111610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690612b0b565b60405180910390fd5b80600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e4b919061253a565b602060405180830381865afa158015610e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8c9190612b40565b1015610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec490612bb9565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f2a929190612bd9565b6020604051808303816000875af1158015610f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6d9190612c2e565b503373ffffffffffffffffffffffffffffffffffffffff167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051610fb49190612280565b60405180910390a250565b610fc7611dc1565b610fcf611e10565b60008060005b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561121c576000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061107257611071612582565b5b906000526020600020906003020160000154905060006110923383610520565b905080856110a09190612c5b565b945042600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106110f4576110f3612582565b5b906000526020600020906003020160010181905550831580156111865750600954600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811061116657611165612582565b5b9060005260206000209060030201600201544261118391906125e0565b10155b1561120757600854856111999190612c5b565b945042600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481106111ed576111ec612582565b5b906000526020600020906003020160020181905550600193505b50508080611214906126b6565b915050610fd5565b5060008211611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125790612cdb565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016112bd929190612bd9565b6020604051808303816000875af11580156112dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113009190612c2e565b503373ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f7241836040516113479190612280565b60405180910390a280156113a6573373ffffffffffffffffffffffffffffffffffffffff167f6a0f4fe063f23e62798223a0c370a3dd6e2686f8de029beaed648542858f59d360085460405161139d9190612280565b60405180910390a25b50506113b0611e5a565b565b60085481565b60075481565b600c60205281600052604060002081815481106113da57600080fd5b90600052602060002001600091509150505481565b60095481565b6113fd611d43565b60008111611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790612d6d565b60405180910390fd5b806008819055507f984f97438a61d2a2abf6ae7cccfe9dc9c37c8e3111255c24be5ef1129c6f2c76816040516114769190612280565b60405180910390a150565b600a602052816000526040600020818154811061149d57600080fd5b9060005260206000209060030201600091509150508060000154908060010154908060020154905083565b6000600260009054906101000a900460ff16905090565b6114e7611d43565b600181101561152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290612dd9565b60405180910390fd5b806006819055507ff4b2d54c414c720f8a9e79192fc7b4918e9b12a7ce94b34ab404a40bccc6821d816040516115619190612280565b60405180910390a150565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61159a611d43565b6115a46000611e63565b565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065481565b611662611d43565b600081116116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90612e6b565b60405180910390fd5b806005819055507f41d466ebd06fb97e7786086ac8b69b7eb7da798592036251291d34e9791cde01816040516116db9190612280565b60405180910390a150565b6116ee611dc1565b6116f6611e10565b600082511180611707575060008151115b611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d906127ed565b60405180910390fd5b6000805b83518110156118d857600084828151811061176857611767612582565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a90612ed7565b60405180910390fd5b61181d3382610520565b836118289190612c5b565b925061183381611f27565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b815260040161189293929190612927565b600060405180830381600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050505080806118d0906126b6565b91505061174a565b508151600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050101561195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690612f43565b60405180910390fd5b60005b8251811015611a375760008382815181106119805761197f612582565b5b60200260200101519050611992611f60565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b81526004016119f193929190612927565b600060405180830381600087803b158015611a0b57600080fd5b505af1158015611a1f573d6000803e3d6000fd5b50505050508080611a2f906126b6565b915050611962565b506000811115611b3157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611a9e929190612bd9565b6020604051808303816000875af1158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae19190612c2e565b503373ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724182604051611b289190612280565b60405180910390a25b3373ffffffffffffffffffffffffffffffffffffffff167fef3bc8b2408263209f01abd2cf8120586077da5e4cf45d8a7dd83d2a0545f1038484604051611b79929190612a88565b60405180910390a250611b8a611e5a565b5050565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2596a67836040518263ffffffff1660e01b8152600401611beb9190612280565b602060405180830381865afa158015611c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2c9190612b40565b9050919050565b611c3b611d43565b6001811015611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690612dd9565b60405180910390fd5b806007819055507ff3570cd97015150a0e5502c9cf62bb4b8fd0d2891b81254dd7da2d319adf884181604051611cb59190612280565b60405180910390a150565b611cc8611d43565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e90612fd5565b60405180910390fd5b611d4081611e63565b50565b611d4b611f62565b73ffffffffffffffffffffffffffffffffffffffff16611d6961162b565b73ffffffffffffffffffffffffffffffffffffffff1614611dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db690613041565b60405180910390fd5b565b600260015403611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd906130ad565b60405180910390fd5b6002600181905550565b611e186114c8565b15611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613119565b60405180910390fd5b565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600b600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fa982611f7e565b9050919050565b611fb981611f9e565b8114611fc457600080fd5b50565b600081359050611fd681611fb0565b92915050565b6000819050919050565b611fef81611fdc565b8114611ffa57600080fd5b50565b60008135905061200c81611fe6565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6120658261201c565b810181811067ffffffffffffffff821117156120845761208361202d565b5b80604052505050565b6000612097611f6a565b90506120a3828261205c565b919050565b600067ffffffffffffffff8211156120c3576120c261202d565b5b6120cc8261201c565b9050602081019050919050565b82818337600083830152505050565b60006120fb6120f6846120a8565b61208d565b90508281526020810184848401111561211757612116612017565b5b6121228482856120d9565b509392505050565b600082601f83011261213f5761213e612012565b5b813561214f8482602086016120e8565b91505092915050565b6000806000806080858703121561217257612171611f74565b5b600061218087828801611fc7565b945050602061219187828801611fc7565b93505060406121a287828801611ffd565b925050606085013567ffffffffffffffff8111156121c3576121c2611f79565b5b6121cf8782880161212a565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612210816121db565b82525050565b600060208201905061222b6000830184612207565b92915050565b6000806040838503121561224857612247611f74565b5b600061225685828601611fc7565b925050602061226785828601611ffd565b9150509250929050565b61227a81611fdc565b82525050565b60006020820190506122956000830184612271565b92915050565b6000602082840312156122b1576122b0611f74565b5b60006122bf84828501611ffd565b91505092915050565b600067ffffffffffffffff8211156122e3576122e261202d565b5b602082029050602081019050919050565b600080fd5b600061230c612307846122c8565b61208d565b9050808382526020820190506020840283018581111561232f5761232e6122f4565b5b835b8181101561235857806123448882611ffd565b845260208401935050602081019050612331565b5050509392505050565b600082601f83011261237757612376612012565b5b81356123878482602086016122f9565b91505092915050565b600080604083850312156123a7576123a6611f74565b5b600083013567ffffffffffffffff8111156123c5576123c4611f79565b5b6123d185828601612362565b925050602083013567ffffffffffffffff8111156123f2576123f1611f79565b5b6123fe85828601612362565b9150509250929050565b600060608201905061241d6000830186612271565b61242a6020830185612271565b6124376040830184612271565b949350505050565b60008115159050919050565b6124548161243f565b82525050565b600060208201905061246f600083018461244b565b92915050565b6000819050919050565b600061249a61249561249084611f7e565b612475565b611f7e565b9050919050565b60006124ac8261247f565b9050919050565b60006124be826124a1565b9050919050565b6124ce816124b3565b82525050565b60006020820190506124e960008301846124c5565b92915050565b60006124fa826124a1565b9050919050565b61250a816124ef565b82525050565b60006020820190506125256000830184612501565b92915050565b61253481611f9e565b82525050565b600060208201905061254f600083018461252b565b92915050565b60006020828403121561256b5761256a611f74565b5b600061257984828501611fc7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006125eb82611fdc565b91506125f683611fdc565b925082820390508181111561260e5761260d6125b1565b5b92915050565b600061261f82611fdc565b915061262a83611fdc565b925082820261263881611fdc565b9150828204841483151761264f5761264e6125b1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061269082611fdc565b915061269b83611fdc565b9250826126ab576126aa612656565b5b828204905092915050565b60006126c182611fdc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126f3576126f26125b1565b5b600182019050919050565b600082825260208201905092915050565b7f436f6f6c646f776e206d7573742062652067726561746572207468616e207a6560008201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b600061276b6022836126fe565b91506127768261270f565b604082019050919050565b6000602082019050818103600083015261279a8161275e565b9050919050565b7f4e6f204e4654732070726f766964656400000000000000000000000000000000600082015250565b60006127d76010836126fe565b91506127e2826127a1565b602082019050919050565b60006020820190508181036000830152612806816127ca565b9050919050565b60008151905061281c81611fb0565b92915050565b60006020828403121561283857612837611f74565b5b60006128468482850161280d565b91505092915050565b7f596f7520646f206e6f74206f776e207468697320466c6f7765724e4654000000600082015250565b6000612885601d836126fe565b91506128908261284f565b602082019050919050565b600060208201905081810360008301526128b481612878565b9050919050565b7f54686973204e465420697320616c7265616479207374616b6564000000000000600082015250565b60006128f1601a836126fe565b91506128fc826128bb565b602082019050919050565b60006020820190508181036000830152612920816128e4565b9050919050565b600060608201905061293c600083018661252b565b612949602083018561252b565b6129566040830184612271565b949350505050565b7f596f7520646f206e6f74206f776e20746869732053746f6e65724e4654000000600082015250565b6000612994601d836126fe565b915061299f8261295e565b602082019050919050565b600060208201905081810360008301526129c381612987565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6129ff81611fdc565b82525050565b6000612a1183836129f6565b60208301905092915050565b6000602082019050919050565b6000612a35826129ca565b612a3f81856129d5565b9350612a4a836129e6565b8060005b83811015612a7b578151612a628882612a05565b9750612a6d83612a1d565b925050600181019050612a4e565b5085935050505092915050565b60006040820190508181036000830152612aa28185612a2a565b90508181036020830152612ab68184612a2a565b90509392505050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b6000612af56020836126fe565b9150612b0082612abf565b602082019050919050565b60006020820190508181036000830152612b2481612ae8565b9050919050565b600081519050612b3a81611fe6565b92915050565b600060208284031215612b5657612b55611f74565b5b6000612b6484828501612b2b565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e20636f6e7472616374000000600082015250565b6000612ba3601d836126fe565b9150612bae82612b6d565b602082019050919050565b60006020820190508181036000830152612bd281612b96565b9050919050565b6000604082019050612bee600083018561252b565b612bfb6020830184612271565b9392505050565b612c0b8161243f565b8114612c1657600080fd5b50565b600081519050612c2881612c02565b92915050565b600060208284031215612c4457612c43611f74565b5b6000612c5284828501612c19565b91505092915050565b6000612c6682611fdc565b9150612c7183611fdc565b9250828201905080821115612c8957612c886125b1565b5b92915050565b7f4e6f207265776172647320746f20636c61696d00000000000000000000000000600082015250565b6000612cc56013836126fe565b9150612cd082612c8f565b602082019050919050565b60006020820190508181036000830152612cf481612cb8565b9050919050565b7f426f6e757320616d6f756e74206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b6000612d576026836126fe565b9150612d6282612cfb565b604082019050919050565b60006020820190508181036000830152612d8681612d4a565b9050919050565b7f4d756c7469706c696572206d757374206265206174206c656173742031000000600082015250565b6000612dc3601d836126fe565b9150612dce82612d8d565b602082019050919050565b60006020820190508181036000830152612df281612db6565b9050919050565b7f5265776172642072617465206d7573742062652067726561746572207468616e60008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612e556025836126fe565b9150612e6082612df9565b604082019050919050565b60006020820190508181036000830152612e8481612e48565b9050919050565b7f596f7520646f206e6f74206f776e2074686973207374616b6564204e46540000600082015250565b6000612ec1601e836126fe565b9150612ecc82612e8b565b602082019050919050565b60006020820190508181036000830152612ef081612eb4565b9050919050565b7f4e6f7420656e6f756768207374616b65642053746f6e65724e46547300000000600082015250565b6000612f2d601c836126fe565b9150612f3882612ef7565b602082019050919050565b60006020820190508181036000830152612f5c81612f20565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612fbf6026836126fe565b9150612fca82612f63565b604082019050919050565b60006020820190508181036000830152612fee81612fb2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061302b6020836126fe565b915061303682612ff5565b602082019050919050565b6000602082019050818103600083015261305a8161301e565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613097601f836126fe565b91506130a282613061565b602082019050919050565b600060208201905081810360008301526130c68161308a565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006131036010836126fe565b915061310e826130cd565b602082019050919050565b60006020820190508181036000830152613132816130f6565b905091905056fea2646970667358221220f97ea11477ccd8176dc662a2d5a00ac5e1b59aac79f58b80862cf2323153b55264736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a58cd405fb0f4ad5c917393518aafd71a72644890000000000000000000000003be8d7a305856dcc5f6a41ade1b2f63ce4cdc86d0000000000000000000000009b567e03d891f537b2b7874aa4a3308cfe2f4fbb
-----Decoded View---------------
Arg [0] : _flowerNFT (address): 0xa58cD405FB0F4aD5C917393518aAFd71A7264489
Arg [1] : _flowerToken (address): 0x3be8d7A305856Dcc5f6a41aDE1B2F63CE4CDc86D
Arg [2] : _stonerToken (address): 0x9b567e03d891F537b2B7874aA4A3308Cfe2F4FBb
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000a58cd405fb0f4ad5c917393518aafd71a7264489
Arg [1] : 0000000000000000000000003be8d7a305856dcc5f6a41ade1b2f63ce4cdc86d
Arg [2] : 0000000000000000000000009b567e03d891f537b2b7874aa4a3308cfe2f4fbb
Deployed Bytecode Sourcemap
19648:7965:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27446:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26651:476;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22252:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24102:1215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23723:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22533:1127;;;:::i;:::-;;19974:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19924:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20285:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20022:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22017:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20178:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;18512:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21488:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19767:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12770:103;;;:::i;:::-;;19736:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19834:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19799:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20226:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12129:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19876:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21268:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25362:1249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27135:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21748:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13028:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27446:164;27546:6;27572:30;;;27565:37;;27446:164;;;;;;:::o;26651:476::-;26728:7;26753:9;26765:1;26753:13;;26748:353;26772:6;:12;26779:4;26772:12;;;;;;;;;;;;;;;:19;;;;26768:1;:23;26748:353;;;26844:7;26817:6;:12;26824:4;26817:12;;;;;;;;;;;;;;;26830:1;26817:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;:34;26813:277;;26872:18;26911:6;:12;26918:4;26911:12;;;;;;;;;;;;;;;26924:1;26911:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:24;;;26893:15;:42;;;;:::i;:::-;26872:63;;26954:18;27032:6;27018:10;;26989:26;27007:7;26989:17;:26::i;:::-;26976:10;:39;;;;:::i;:::-;:52;;;;:::i;:::-;26975:63;;;;:::i;:::-;26954:84;;27064:10;27057:17;;;;;;;26813:277;26793:3;;;;;:::i;:::-;;;;26748:353;;;;27118:1;27111:8;;26651:476;;;;;:::o;22252:228::-;12015:13;:11;:13::i;:::-;22349:1:::1;22335:11;:15;22327:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22414:11;22400;:25;;;;22441:31;22460:11;22441:31;;;;;;:::i;:::-;;;;;;;;22252:228:::0;:::o;24102:1215::-;15938:21;:19;:21::i;:::-;18117:19:::1;:17;:19::i;:::-;24270:1:::2;24246:14;:21;:25;:54;;;;24299:1;24275:14;:21;:25;24246:54;24238:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24339:9;24334:545;24358:14;:21;24354:1;:25;24334:545;;;24401:15;24419:14;24434:1;24419:17;;;;;;;;:::i;:::-;;;;;;;;24401:35;;24489:10;24459:40;;:9;;;;;;;;;;;:17;;;24477:7;24459:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;24451:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;24594:1;24556:40;;:17;:26;24574:7;24556:26;;;;;;;;;;;;;;;;;;;;;:40;;;24548:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;24644:6;:18;24651:10;24644:18;;;;;;;;;;;;;;;24668:67;;;;;;;;24684:7;24668:67;;;;24703:15;24668:67;;;;24732:1;24668:67;;::::0;24644:92:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24780:10;24751:17;:26;24769:7;24751:26;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24805:9;;;;;;;;;;;:26;;;24832:10;24852:4;24859:7;24805:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;24386:493;24381:3;;;;;:::i;:::-;;;;24334:545;;;;24896:9;24891:351;24915:14;:21;24911:1;:25;24891:351;;;24958:16;24977:14;24992:1;24977:17;;;;;;;;:::i;:::-;;;;;;;;24958:36;;25050:10;25017:43;;:11;;;;;;;;;;;:19;;;25037:8;25017:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;25009:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25111:11;;;;;;;;;;;:28;;;25140:10;25160:4;25167:8;25111:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;25191:12;:24;25204:10;25191:24;;;;;;;;;;;;;;;25221:8;25191:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24943:299;24938:3;;;;;:::i;:::-;;;;24891:351;;;;25266:10;25259:50;;;25278:14;25294;25259:50;;;;;;;:::i;:::-;;;;;;;;15982:20:::0;:18;:20::i;:::-;24102:1215;;:::o;23723:336::-;12015:13;:11;:13::i;:::-;23810:1:::1;23801:6;:10;23793:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;23907:6;23867:11;;;;;;;;;;;:21;;;23897:4;23867:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;23859:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;23960:11;;;;;;;;;;;:20;;;23981:10;23993:6;23960:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24032:10;24016:35;;;24044:6;24016:35;;;;;;:::i;:::-;;;;;;;;23723:336:::0;:::o;22533:1127::-;15938:21;:19;:21::i;:::-;18117:19:::1;:17;:19::i;:::-;22604::::2;22638:20:::0;22684:9:::2;22679:694;22703:6;:18;22710:10;22703:18;;;;;;;;;;;;;;;:25;;;;22699:1;:29;22679:694;;;22750:15;22768:6;:18;22775:10;22768:18;;;;;;;;;;;;;;;22787:1;22768:21;;;;;;;;:::i;:::-;;;;;;;;;;;;:29;;;22750:47;;22812:14;22829:36;22845:10;22857:7;22829:15;:36::i;:::-;22812:53;;22895:6;22880:21;;;;;:::i;:::-;;;23019:15;22986:6;:18;22993:10;22986:18;;;;;;;;;;;;;;;23005:1;22986:21;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;:48;;;;23100:15;23099:16;:87;;;;;23175:11;;23138:6;:18;23145:10;23138:18;;;;;;;;;;;;;;;23157:1;23138:21;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;;;23120:15;:50;;;;:::i;:::-;23119:67;;23099:87;23095:267;;;23222:14;;23207:29;;;;;:::i;:::-;;;23290:15;23255:6;:18;23262:10;23255:18;;;;;;;;;;;;;;;23274:1;23255:21;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;;:50;;;;23342:4;23324:22;;23095:267;22735:638;;22730:3;;;;;:::i;:::-;;;;22679:694;;;;23407:1;23393:11;:15;23385:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;23445:11;;;;;;;;;;;:20;;;23466:10;23478:11;23445:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23520:10;23506:38;;;23532:11;23506:38;;;;;;:::i;:::-;;;;;;;;23561:15;23557:96;;;23614:10;23598:43;;;23626:14;;23598:43;;;;;;:::i;:::-;;;;;;;;23557:96;22593:1067;;15982:20:::0;:18;:20::i;:::-;22533:1127::o;19974:41::-;;;;:::o;19924:43::-;;;;:::o;20285:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20022:36::-;;;;:::o;22017:227::-;12015:13;:11;:13::i;:::-;22113:1:::1;22101:9;:13;22093:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22185:9;22168:14;:26;;;;22210;22226:9;22210:26;;;;;;:::i;:::-;;;;;;;;22017:227:::0;:::o;20178:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18512:86::-;18559:4;18583:7;;;;;;;;;;;18576:14;;18512:86;:::o;21488:252::-;12015:13;:11;:13::i;:::-;21600:1:::1;21583:13;:18;;21575:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21670:13;21646:21;:37;;;;21699:33;21718:13;21699:33;;;;;;:::i;:::-;;;;;;;;21488:252:::0;:::o;19767:25::-;;;;;;;;;;;;;:::o;12770:103::-;12015:13;:11;:13::i;:::-;12835:30:::1;12862:1;12835:18;:30::i;:::-;12770:103::o:0;19736:24::-;;;;;;;;;;;;;:::o;19834:35::-;;;;:::o;19799:26::-;;;;;;;;;;;;;:::o;20226:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;12129:87::-;12175:7;12202:6;;;;;;;;;;;12195:13;;12129:87;:::o;19876:41::-;;;;:::o;21268:212::-;12015:13;:11;:13::i;:::-;21356:1:::1;21346:7;:11;21338:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21423:7;21410:10;:20;;;;21446:26;21464:7;21446:26;;;;;;:::i;:::-;;;;;;;;21268:212:::0;:::o;25362:1249::-;15938:21;:19;:21::i;:::-;18117:19:::1;:17;:19::i;:::-;25532:1:::2;25508:14;:21;:25;:54;;;;25561:1;25537:14;:21;:25;25508:54;25500:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25594:19;25635:9:::0;25630:393:::2;25654:14;:21;25650:1;:25;25630:393;;;25697:15;25715:14;25730:1;25715:17;;;;;;;;:::i;:::-;;;;;;;;25697:35;;25785:10;25755:40;;:17;:26;25773:7;25755:26;;;;;;;;;;;;;;;;;;;;;:40;;;25747:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25862:36;25878:10;25890:7;25862:15;:36::i;:::-;25847:51;;;;;:::i;:::-;;;25913:21;25926:7;25913:12;:21::i;:::-;25949:9;;;;;;;;;;;:26;;;25984:4;25991:10;26003:7;25949:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;25682:341;25677:3;;;;;:::i;:::-;;;;25630:393;;;;26078:14;:21;26043:12;:24;26056:10;26043:24;;;;;;;;;;;;;;;:31;;;;:56;;26035:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;26148:9;26143:230;26167:14;:21;26163:1;:25;26143:230;;;26210:16;26229:14;26244:1;26229:17;;;;;;;;:::i;:::-;;;;;;;;26210:36;;26261:20;:18;:20::i;:::-;26296:11;;;;;;;;;;;:28;;;26333:4;26340:10;26352:8;26296:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;26195:178;26190:3;;;;;:::i;:::-;;;;26143:230;;;;26403:1;26389:11;:15;26385:151;;;26421:11;;;;;;;;;;;:20;;;26442:10;26454:11;26421:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26500:10;26486:38;;;26512:11;26486:38;;;;;;:::i;:::-;;;;;;;;26385:151;26560:10;26551:52;;;26572:14;26588;26551:52;;;;;;;:::i;:::-;;;;;;;;25489:1122;15982:20:::0;:18;:20::i;:::-;25362:1249;;:::o;27135:146::-;27200:7;27246:9;;;;;;;;;;;27227:37;;;27265:7;27227:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27220:53;;27135:146;;;:::o;21748:261::-;12015:13;:11;:13::i;:::-;21863:1:::1;21846:13;:18;;21838:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21936:13;21909:24;:40;;;;21965:36;21987:13;21965:36;;;;;;:::i;:::-;;;;;;;;21748:261:::0;:::o;13028:201::-;12015:13;:11;:13::i;:::-;13137:1:::1;13117:22;;:8;:22;;::::0;13109:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13193:28;13212:8;13193:18;:28::i;:::-;13028:201:::0;:::o;12294:132::-;12369:12;:10;:12::i;:::-;12358:23;;:7;:5;:7::i;:::-;:23;;;12350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12294:132::o;16018:293::-;15420:1;16152:7;;:19;16144:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;15420:1;16285:7;:18;;;;16018:293::o;18671:108::-;18742:8;:6;:8::i;:::-;18741:9;18733:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18671:108::o;16319:213::-;15376:1;16502:7;:22;;;;16319:213::o;13389:191::-;13463:16;13482:6;;;;;;;;;;;13463:25;;13508:8;13499:6;;:17;;;;;;;;;;;;;;;;;;13563:8;13532:40;;13553:8;13532:40;;;;;;;;;;;;13452:128;13389:191;:::o;27289:100::-;27355:17;:26;27373:7;27355:26;;;;;;;;;;;;27348:33;;;;;;;;;;;27289:100;:::o;27397:41::-;:::o;10567:98::-;10620:7;10647:10;10640:17;;10567:98;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:117::-;1306:1;1303;1296:12;1320:117;1429:1;1426;1419:12;1443:102;1484:6;1535:2;1531:7;1526:2;1519:5;1515:14;1511:28;1501:38;;1443:102;;;:::o;1551:180::-;1599:77;1596:1;1589:88;1696:4;1693:1;1686:15;1720:4;1717:1;1710:15;1737:281;1820:27;1842:4;1820:27;:::i;:::-;1812:6;1808:40;1950:6;1938:10;1935:22;1914:18;1902:10;1899:34;1896:62;1893:88;;;1961:18;;:::i;:::-;1893:88;2001:10;1997:2;1990:22;1780:238;1737:281;;:::o;2024:129::-;2058:6;2085:20;;:::i;:::-;2075:30;;2114:33;2142:4;2134:6;2114:33;:::i;:::-;2024:129;;;:::o;2159:307::-;2220:4;2310:18;2302:6;2299:30;2296:56;;;2332:18;;:::i;:::-;2296:56;2370:29;2392:6;2370:29;:::i;:::-;2362:37;;2454:4;2448;2444:15;2436:23;;2159:307;;;:::o;2472:146::-;2569:6;2564:3;2559;2546:30;2610:1;2601:6;2596:3;2592:16;2585:27;2472:146;;;:::o;2624:423::-;2701:5;2726:65;2742:48;2783:6;2742:48;:::i;:::-;2726:65;:::i;:::-;2717:74;;2814:6;2807:5;2800:21;2852:4;2845:5;2841:16;2890:3;2881:6;2876:3;2872:16;2869:25;2866:112;;;2897:79;;:::i;:::-;2866:112;2987:54;3034:6;3029:3;3024;2987:54;:::i;:::-;2707:340;2624:423;;;;;:::o;3066:338::-;3121:5;3170:3;3163:4;3155:6;3151:17;3147:27;3137:122;;3178:79;;:::i;:::-;3137:122;3295:6;3282:20;3320:78;3394:3;3386:6;3379:4;3371:6;3367:17;3320:78;:::i;:::-;3311:87;;3127:277;3066:338;;;;:::o;3410:943::-;3505:6;3513;3521;3529;3578:3;3566:9;3557:7;3553:23;3549:33;3546:120;;;3585:79;;:::i;:::-;3546:120;3705:1;3730:53;3775:7;3766:6;3755:9;3751:22;3730:53;:::i;:::-;3720:63;;3676:117;3832:2;3858:53;3903:7;3894:6;3883:9;3879:22;3858:53;:::i;:::-;3848:63;;3803:118;3960:2;3986:53;4031:7;4022:6;4011:9;4007:22;3986:53;:::i;:::-;3976:63;;3931:118;4116:2;4105:9;4101:18;4088:32;4147:18;4139:6;4136:30;4133:117;;;4169:79;;:::i;:::-;4133:117;4274:62;4328:7;4319:6;4308:9;4304:22;4274:62;:::i;:::-;4264:72;;4059:287;3410:943;;;;;;;:::o;4359:149::-;4395:7;4435:66;4428:5;4424:78;4413:89;;4359:149;;;:::o;4514:115::-;4599:23;4616:5;4599:23;:::i;:::-;4594:3;4587:36;4514:115;;:::o;4635:218::-;4726:4;4764:2;4753:9;4749:18;4741:26;;4777:69;4843:1;4832:9;4828:17;4819:6;4777:69;:::i;:::-;4635:218;;;;:::o;4859:474::-;4927:6;4935;4984:2;4972:9;4963:7;4959:23;4955:32;4952:119;;;4990:79;;:::i;:::-;4952:119;5110:1;5135:53;5180:7;5171:6;5160:9;5156:22;5135:53;:::i;:::-;5125:63;;5081:117;5237:2;5263:53;5308:7;5299:6;5288:9;5284:22;5263:53;:::i;:::-;5253:63;;5208:118;4859:474;;;;;:::o;5339:118::-;5426:24;5444:5;5426:24;:::i;:::-;5421:3;5414:37;5339:118;;:::o;5463:222::-;5556:4;5594:2;5583:9;5579:18;5571:26;;5607:71;5675:1;5664:9;5660:17;5651:6;5607:71;:::i;:::-;5463:222;;;;:::o;5691:329::-;5750:6;5799:2;5787:9;5778:7;5774:23;5770:32;5767:119;;;5805:79;;:::i;:::-;5767:119;5925:1;5950:53;5995:7;5986:6;5975:9;5971:22;5950:53;:::i;:::-;5940:63;;5896:117;5691:329;;;;:::o;6026:311::-;6103:4;6193:18;6185:6;6182:30;6179:56;;;6215:18;;:::i;:::-;6179:56;6265:4;6257:6;6253:17;6245:25;;6325:4;6319;6315:15;6307:23;;6026:311;;;:::o;6343:117::-;6452:1;6449;6442:12;6483:710;6579:5;6604:81;6620:64;6677:6;6620:64;:::i;:::-;6604:81;:::i;:::-;6595:90;;6705:5;6734:6;6727:5;6720:21;6768:4;6761:5;6757:16;6750:23;;6821:4;6813:6;6809:17;6801:6;6797:30;6850:3;6842:6;6839:15;6836:122;;;6869:79;;:::i;:::-;6836:122;6984:6;6967:220;7001:6;6996:3;6993:15;6967:220;;;7076:3;7105:37;7138:3;7126:10;7105:37;:::i;:::-;7100:3;7093:50;7172:4;7167:3;7163:14;7156:21;;7043:144;7027:4;7022:3;7018:14;7011:21;;6967:220;;;6971:21;6585:608;;6483:710;;;;;:::o;7216:370::-;7287:5;7336:3;7329:4;7321:6;7317:17;7313:27;7303:122;;7344:79;;:::i;:::-;7303:122;7461:6;7448:20;7486:94;7576:3;7568:6;7561:4;7553:6;7549:17;7486:94;:::i;:::-;7477:103;;7293:293;7216:370;;;;:::o;7592:894::-;7710:6;7718;7767:2;7755:9;7746:7;7742:23;7738:32;7735:119;;;7773:79;;:::i;:::-;7735:119;7921:1;7910:9;7906:17;7893:31;7951:18;7943:6;7940:30;7937:117;;;7973:79;;:::i;:::-;7937:117;8078:78;8148:7;8139:6;8128:9;8124:22;8078:78;:::i;:::-;8068:88;;7864:302;8233:2;8222:9;8218:18;8205:32;8264:18;8256:6;8253:30;8250:117;;;8286:79;;:::i;:::-;8250:117;8391:78;8461:7;8452:6;8441:9;8437:22;8391:78;:::i;:::-;8381:88;;8176:303;7592:894;;;;;:::o;8492:442::-;8641:4;8679:2;8668:9;8664:18;8656:26;;8692:71;8760:1;8749:9;8745:17;8736:6;8692:71;:::i;:::-;8773:72;8841:2;8830:9;8826:18;8817:6;8773:72;:::i;:::-;8855;8923:2;8912:9;8908:18;8899:6;8855:72;:::i;:::-;8492:442;;;;;;:::o;8940:90::-;8974:7;9017:5;9010:13;9003:21;8992:32;;8940:90;;;:::o;9036:109::-;9117:21;9132:5;9117:21;:::i;:::-;9112:3;9105:34;9036:109;;:::o;9151:210::-;9238:4;9276:2;9265:9;9261:18;9253:26;;9289:65;9351:1;9340:9;9336:17;9327:6;9289:65;:::i;:::-;9151:210;;;;:::o;9367:60::-;9395:3;9416:5;9409:12;;9367:60;;;:::o;9433:142::-;9483:9;9516:53;9534:34;9543:24;9561:5;9543:24;:::i;:::-;9534:34;:::i;:::-;9516:53;:::i;:::-;9503:66;;9433:142;;;:::o;9581:126::-;9631:9;9664:37;9695:5;9664:37;:::i;:::-;9651:50;;9581:126;;;:::o;9713:140::-;9777:9;9810:37;9841:5;9810:37;:::i;:::-;9797:50;;9713:140;;;:::o;9859:159::-;9960:51;10005:5;9960:51;:::i;:::-;9955:3;9948:64;9859:159;;:::o;10024:250::-;10131:4;10169:2;10158:9;10154:18;10146:26;;10182:85;10264:1;10253:9;10249:17;10240:6;10182:85;:::i;:::-;10024:250;;;;:::o;10280:141::-;10345:9;10378:37;10409:5;10378:37;:::i;:::-;10365:50;;10280:141;;;:::o;10427:161::-;10529:52;10575:5;10529:52;:::i;:::-;10524:3;10517:65;10427:161;;:::o;10594:252::-;10702:4;10740:2;10729:9;10725:18;10717:26;;10753:86;10836:1;10825:9;10821:17;10812:6;10753:86;:::i;:::-;10594:252;;;;:::o;10852:118::-;10939:24;10957:5;10939:24;:::i;:::-;10934:3;10927:37;10852:118;;:::o;10976:222::-;11069:4;11107:2;11096:9;11092:18;11084:26;;11120:71;11188:1;11177:9;11173:17;11164:6;11120:71;:::i;:::-;10976:222;;;;:::o;11204:329::-;11263:6;11312:2;11300:9;11291:7;11287:23;11283:32;11280:119;;;11318:79;;:::i;:::-;11280:119;11438:1;11463:53;11508:7;11499:6;11488:9;11484:22;11463:53;:::i;:::-;11453:63;;11409:117;11204:329;;;;:::o;11539:180::-;11587:77;11584:1;11577:88;11684:4;11681:1;11674:15;11708:4;11705:1;11698:15;11725:180;11773:77;11770:1;11763:88;11870:4;11867:1;11860:15;11894:4;11891:1;11884:15;11911:194;11951:4;11971:20;11989:1;11971:20;:::i;:::-;11966:25;;12005:20;12023:1;12005:20;:::i;:::-;12000:25;;12049:1;12046;12042:9;12034:17;;12073:1;12067:4;12064:11;12061:37;;;12078:18;;:::i;:::-;12061:37;11911:194;;;;:::o;12111:410::-;12151:7;12174:20;12192:1;12174:20;:::i;:::-;12169:25;;12208:20;12226:1;12208:20;:::i;:::-;12203:25;;12263:1;12260;12256:9;12285:30;12303:11;12285:30;:::i;:::-;12274:41;;12464:1;12455:7;12451:15;12448:1;12445:22;12425:1;12418:9;12398:83;12375:139;;12494:18;;:::i;:::-;12375:139;12159:362;12111:410;;;;:::o;12527:180::-;12575:77;12572:1;12565:88;12672:4;12669:1;12662:15;12696:4;12693:1;12686:15;12713:185;12753:1;12770:20;12788:1;12770:20;:::i;:::-;12765:25;;12804:20;12822:1;12804:20;:::i;:::-;12799:25;;12843:1;12833:35;;12848:18;;:::i;:::-;12833:35;12890:1;12887;12883:9;12878:14;;12713:185;;;;:::o;12904:233::-;12943:3;12966:24;12984:5;12966:24;:::i;:::-;12957:33;;13012:66;13005:5;13002:77;12999:103;;13082:18;;:::i;:::-;12999:103;13129:1;13122:5;13118:13;13111:20;;12904:233;;;:::o;13143:169::-;13227:11;13261:6;13256:3;13249:19;13301:4;13296:3;13292:14;13277:29;;13143:169;;;;:::o;13318:221::-;13458:34;13454:1;13446:6;13442:14;13435:58;13527:4;13522:2;13514:6;13510:15;13503:29;13318:221;:::o;13545:366::-;13687:3;13708:67;13772:2;13767:3;13708:67;:::i;:::-;13701:74;;13784:93;13873:3;13784:93;:::i;:::-;13902:2;13897:3;13893:12;13886:19;;13545:366;;;:::o;13917:419::-;14083:4;14121:2;14110:9;14106:18;14098:26;;14170:9;14164:4;14160:20;14156:1;14145:9;14141:17;14134:47;14198:131;14324:4;14198:131;:::i;:::-;14190:139;;13917:419;;;:::o;14342:166::-;14482:18;14478:1;14470:6;14466:14;14459:42;14342:166;:::o;14514:366::-;14656:3;14677:67;14741:2;14736:3;14677:67;:::i;:::-;14670:74;;14753:93;14842:3;14753:93;:::i;:::-;14871:2;14866:3;14862:12;14855:19;;14514:366;;;:::o;14886:419::-;15052:4;15090:2;15079:9;15075:18;15067:26;;15139:9;15133:4;15129:20;15125:1;15114:9;15110:17;15103:47;15167:131;15293:4;15167:131;:::i;:::-;15159:139;;14886:419;;;:::o;15311:143::-;15368:5;15399:6;15393:13;15384:22;;15415:33;15442:5;15415:33;:::i;:::-;15311:143;;;;:::o;15460:351::-;15530:6;15579:2;15567:9;15558:7;15554:23;15550:32;15547:119;;;15585:79;;:::i;:::-;15547:119;15705:1;15730:64;15786:7;15777:6;15766:9;15762:22;15730:64;:::i;:::-;15720:74;;15676:128;15460:351;;;;:::o;15817:179::-;15957:31;15953:1;15945:6;15941:14;15934:55;15817:179;:::o;16002:366::-;16144:3;16165:67;16229:2;16224:3;16165:67;:::i;:::-;16158:74;;16241:93;16330:3;16241:93;:::i;:::-;16359:2;16354:3;16350:12;16343:19;;16002:366;;;:::o;16374:419::-;16540:4;16578:2;16567:9;16563:18;16555:26;;16627:9;16621:4;16617:20;16613:1;16602:9;16598:17;16591:47;16655:131;16781:4;16655:131;:::i;:::-;16647:139;;16374:419;;;:::o;16799:176::-;16939:28;16935:1;16927:6;16923:14;16916:52;16799:176;:::o;16981:366::-;17123:3;17144:67;17208:2;17203:3;17144:67;:::i;:::-;17137:74;;17220:93;17309:3;17220:93;:::i;:::-;17338:2;17333:3;17329:12;17322:19;;16981:366;;;:::o;17353:419::-;17519:4;17557:2;17546:9;17542:18;17534:26;;17606:9;17600:4;17596:20;17592:1;17581:9;17577:17;17570:47;17634:131;17760:4;17634:131;:::i;:::-;17626:139;;17353:419;;;:::o;17778:442::-;17927:4;17965:2;17954:9;17950:18;17942:26;;17978:71;18046:1;18035:9;18031:17;18022:6;17978:71;:::i;:::-;18059:72;18127:2;18116:9;18112:18;18103:6;18059:72;:::i;:::-;18141;18209:2;18198:9;18194:18;18185:6;18141:72;:::i;:::-;17778:442;;;;;;:::o;18226:179::-;18366:31;18362:1;18354:6;18350:14;18343:55;18226:179;:::o;18411:366::-;18553:3;18574:67;18638:2;18633:3;18574:67;:::i;:::-;18567:74;;18650:93;18739:3;18650:93;:::i;:::-;18768:2;18763:3;18759:12;18752:19;;18411:366;;;:::o;18783:419::-;18949:4;18987:2;18976:9;18972:18;18964:26;;19036:9;19030:4;19026:20;19022:1;19011:9;19007:17;19000:47;19064:131;19190:4;19064:131;:::i;:::-;19056:139;;18783:419;;;:::o;19208:114::-;19275:6;19309:5;19303:12;19293:22;;19208:114;;;:::o;19328:184::-;19427:11;19461:6;19456:3;19449:19;19501:4;19496:3;19492:14;19477:29;;19328:184;;;;:::o;19518:132::-;19585:4;19608:3;19600:11;;19638:4;19633:3;19629:14;19621:22;;19518:132;;;:::o;19656:108::-;19733:24;19751:5;19733:24;:::i;:::-;19728:3;19721:37;19656:108;;:::o;19770:179::-;19839:10;19860:46;19902:3;19894:6;19860:46;:::i;:::-;19938:4;19933:3;19929:14;19915:28;;19770:179;;;;:::o;19955:113::-;20025:4;20057;20052:3;20048:14;20040:22;;19955:113;;;:::o;20104:732::-;20223:3;20252:54;20300:5;20252:54;:::i;:::-;20322:86;20401:6;20396:3;20322:86;:::i;:::-;20315:93;;20432:56;20482:5;20432:56;:::i;:::-;20511:7;20542:1;20527:284;20552:6;20549:1;20546:13;20527:284;;;20628:6;20622:13;20655:63;20714:3;20699:13;20655:63;:::i;:::-;20648:70;;20741:60;20794:6;20741:60;:::i;:::-;20731:70;;20587:224;20574:1;20571;20567:9;20562:14;;20527:284;;;20531:14;20827:3;20820:10;;20228:608;;;20104:732;;;;:::o;20842:634::-;21063:4;21101:2;21090:9;21086:18;21078:26;;21150:9;21144:4;21140:20;21136:1;21125:9;21121:17;21114:47;21178:108;21281:4;21272:6;21178:108;:::i;:::-;21170:116;;21333:9;21327:4;21323:20;21318:2;21307:9;21303:18;21296:48;21361:108;21464:4;21455:6;21361:108;:::i;:::-;21353:116;;20842:634;;;;;:::o;21482:182::-;21622:34;21618:1;21610:6;21606:14;21599:58;21482:182;:::o;21670:366::-;21812:3;21833:67;21897:2;21892:3;21833:67;:::i;:::-;21826:74;;21909:93;21998:3;21909:93;:::i;:::-;22027:2;22022:3;22018:12;22011:19;;21670:366;;;:::o;22042:419::-;22208:4;22246:2;22235:9;22231:18;22223:26;;22295:9;22289:4;22285:20;22281:1;22270:9;22266:17;22259:47;22323:131;22449:4;22323:131;:::i;:::-;22315:139;;22042:419;;;:::o;22467:143::-;22524:5;22555:6;22549:13;22540:22;;22571:33;22598:5;22571:33;:::i;:::-;22467:143;;;;:::o;22616:351::-;22686:6;22735:2;22723:9;22714:7;22710:23;22706:32;22703:119;;;22741:79;;:::i;:::-;22703:119;22861:1;22886:64;22942:7;22933:6;22922:9;22918:22;22886:64;:::i;:::-;22876:74;;22832:128;22616:351;;;;:::o;22973:179::-;23113:31;23109:1;23101:6;23097:14;23090:55;22973:179;:::o;23158:366::-;23300:3;23321:67;23385:2;23380:3;23321:67;:::i;:::-;23314:74;;23397:93;23486:3;23397:93;:::i;:::-;23515:2;23510:3;23506:12;23499:19;;23158:366;;;:::o;23530:419::-;23696:4;23734:2;23723:9;23719:18;23711:26;;23783:9;23777:4;23773:20;23769:1;23758:9;23754:17;23747:47;23811:131;23937:4;23811:131;:::i;:::-;23803:139;;23530:419;;;:::o;23955:332::-;24076:4;24114:2;24103:9;24099:18;24091:26;;24127:71;24195:1;24184:9;24180:17;24171:6;24127:71;:::i;:::-;24208:72;24276:2;24265:9;24261:18;24252:6;24208:72;:::i;:::-;23955:332;;;;;:::o;24293:116::-;24363:21;24378:5;24363:21;:::i;:::-;24356:5;24353:32;24343:60;;24399:1;24396;24389:12;24343:60;24293:116;:::o;24415:137::-;24469:5;24500:6;24494:13;24485:22;;24516:30;24540:5;24516:30;:::i;:::-;24415:137;;;;:::o;24558:345::-;24625:6;24674:2;24662:9;24653:7;24649:23;24645:32;24642:119;;;24680:79;;:::i;:::-;24642:119;24800:1;24825:61;24878:7;24869:6;24858:9;24854:22;24825:61;:::i;:::-;24815:71;;24771:125;24558:345;;;;:::o;24909:191::-;24949:3;24968:20;24986:1;24968:20;:::i;:::-;24963:25;;25002:20;25020:1;25002:20;:::i;:::-;24997:25;;25045:1;25042;25038:9;25031:16;;25066:3;25063:1;25060:10;25057:36;;;25073:18;;:::i;:::-;25057:36;24909:191;;;;:::o;25106:169::-;25246:21;25242:1;25234:6;25230:14;25223:45;25106:169;:::o;25281:366::-;25423:3;25444:67;25508:2;25503:3;25444:67;:::i;:::-;25437:74;;25520:93;25609:3;25520:93;:::i;:::-;25638:2;25633:3;25629:12;25622:19;;25281:366;;;:::o;25653:419::-;25819:4;25857:2;25846:9;25842:18;25834:26;;25906:9;25900:4;25896:20;25892:1;25881:9;25877:17;25870:47;25934:131;26060:4;25934:131;:::i;:::-;25926:139;;25653:419;;;:::o;26078:225::-;26218:34;26214:1;26206:6;26202:14;26195:58;26287:8;26282:2;26274:6;26270:15;26263:33;26078:225;:::o;26309:366::-;26451:3;26472:67;26536:2;26531:3;26472:67;:::i;:::-;26465:74;;26548:93;26637:3;26548:93;:::i;:::-;26666:2;26661:3;26657:12;26650:19;;26309:366;;;:::o;26681:419::-;26847:4;26885:2;26874:9;26870:18;26862:26;;26934:9;26928:4;26924:20;26920:1;26909:9;26905:17;26898:47;26962:131;27088:4;26962:131;:::i;:::-;26954:139;;26681:419;;;:::o;27106:179::-;27246:31;27242:1;27234:6;27230:14;27223:55;27106:179;:::o;27291:366::-;27433:3;27454:67;27518:2;27513:3;27454:67;:::i;:::-;27447:74;;27530:93;27619:3;27530:93;:::i;:::-;27648:2;27643:3;27639:12;27632:19;;27291:366;;;:::o;27663:419::-;27829:4;27867:2;27856:9;27852:18;27844:26;;27916:9;27910:4;27906:20;27902:1;27891:9;27887:17;27880:47;27944:131;28070:4;27944:131;:::i;:::-;27936:139;;27663:419;;;:::o;28088:224::-;28228:34;28224:1;28216:6;28212:14;28205:58;28297:7;28292:2;28284:6;28280:15;28273:32;28088:224;:::o;28318:366::-;28460:3;28481:67;28545:2;28540:3;28481:67;:::i;:::-;28474:74;;28557:93;28646:3;28557:93;:::i;:::-;28675:2;28670:3;28666:12;28659:19;;28318:366;;;:::o;28690:419::-;28856:4;28894:2;28883:9;28879:18;28871:26;;28943:9;28937:4;28933:20;28929:1;28918:9;28914:17;28907:47;28971:131;29097:4;28971:131;:::i;:::-;28963:139;;28690:419;;;:::o;29115:180::-;29255:32;29251:1;29243:6;29239:14;29232:56;29115:180;:::o;29301:366::-;29443:3;29464:67;29528:2;29523:3;29464:67;:::i;:::-;29457:74;;29540:93;29629:3;29540:93;:::i;:::-;29658:2;29653:3;29649:12;29642:19;;29301:366;;;:::o;29673:419::-;29839:4;29877:2;29866:9;29862:18;29854:26;;29926:9;29920:4;29916:20;29912:1;29901:9;29897:17;29890:47;29954:131;30080:4;29954:131;:::i;:::-;29946:139;;29673:419;;;:::o;30098:178::-;30238:30;30234:1;30226:6;30222:14;30215:54;30098:178;:::o;30282:366::-;30424:3;30445:67;30509:2;30504:3;30445:67;:::i;:::-;30438:74;;30521:93;30610:3;30521:93;:::i;:::-;30639:2;30634:3;30630:12;30623:19;;30282:366;;;:::o;30654:419::-;30820:4;30858:2;30847:9;30843:18;30835:26;;30907:9;30901:4;30897:20;30893:1;30882:9;30878:17;30871:47;30935:131;31061:4;30935:131;:::i;:::-;30927:139;;30654:419;;;:::o;31079:225::-;31219:34;31215:1;31207:6;31203:14;31196:58;31288:8;31283:2;31275:6;31271:15;31264:33;31079:225;:::o;31310:366::-;31452:3;31473:67;31537:2;31532:3;31473:67;:::i;:::-;31466:74;;31549:93;31638:3;31549:93;:::i;:::-;31667:2;31662:3;31658:12;31651:19;;31310:366;;;:::o;31682:419::-;31848:4;31886:2;31875:9;31871:18;31863:26;;31935:9;31929:4;31925:20;31921:1;31910:9;31906:17;31899:47;31963:131;32089:4;31963:131;:::i;:::-;31955:139;;31682:419;;;:::o;32107:182::-;32247:34;32243:1;32235:6;32231:14;32224:58;32107:182;:::o;32295:366::-;32437:3;32458:67;32522:2;32517:3;32458:67;:::i;:::-;32451:74;;32534:93;32623:3;32534:93;:::i;:::-;32652:2;32647:3;32643:12;32636:19;;32295:366;;;:::o;32667:419::-;32833:4;32871:2;32860:9;32856:18;32848:26;;32920:9;32914:4;32910:20;32906:1;32895:9;32891:17;32884:47;32948:131;33074:4;32948:131;:::i;:::-;32940:139;;32667:419;;;:::o;33092:181::-;33232:33;33228:1;33220:6;33216:14;33209:57;33092:181;:::o;33279:366::-;33421:3;33442:67;33506:2;33501:3;33442:67;:::i;:::-;33435:74;;33518:93;33607:3;33518:93;:::i;:::-;33636:2;33631:3;33627:12;33620:19;;33279:366;;;:::o;33651:419::-;33817:4;33855:2;33844:9;33840:18;33832:26;;33904:9;33898:4;33894:20;33890:1;33879:9;33875:17;33868:47;33932:131;34058:4;33932:131;:::i;:::-;33924:139;;33651:419;;;:::o;34076:166::-;34216:18;34212:1;34204:6;34200:14;34193:42;34076:166;:::o;34248:366::-;34390:3;34411:67;34475:2;34470:3;34411:67;:::i;:::-;34404:74;;34487:93;34576:3;34487:93;:::i;:::-;34605:2;34600:3;34596:12;34589:19;;34248:366;;;:::o;34620:419::-;34786:4;34824:2;34813:9;34809:18;34801:26;;34873:9;34867:4;34863:20;34859:1;34848:9;34844:17;34837:47;34901:131;35027:4;34901:131;:::i;:::-;34893:139;;34620:419;;;:::o
Swarm Source
ipfs://f97ea11477ccd8176dc662a2d5a00ac5e1b59aac79f58b80862cf2323153b552
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.