More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 41 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stake | 16433698 | 26 days ago | IN | 0 S | 0.01862641 | ||||
Stake | 16433629 | 26 days ago | IN | 0 S | 0.01862707 | ||||
Stake | 16433532 | 26 days ago | IN | 0 S | 0.01862641 | ||||
Stake | 16433465 | 26 days ago | IN | 0 S | 0.01846537 | ||||
Stake | 16144045 | 27 days ago | IN | 0 S | 0.01992907 | ||||
Stake | 15839424 | 29 days ago | IN | 0 S | 0.01710013 | ||||
Stake | 15740317 | 29 days ago | IN | 0 S | 0.01877826 | ||||
Unstake | 15740269 | 29 days ago | IN | 0 S | 0.01023555 | ||||
Stake | 15740211 | 29 days ago | IN | 0 S | 0.01877826 | ||||
Unstake | 15740044 | 29 days ago | IN | 0 S | 0.00866242 | ||||
Stake | 15740008 | 29 days ago | IN | 0 S | 0.01877826 | ||||
Unstake | 15739971 | 29 days ago | IN | 0 S | 0.00866242 | ||||
Stake | 15739934 | 29 days ago | IN | 0 S | 0.01877826 | ||||
Unstake | 15739797 | 29 days ago | IN | 0 S | 0.00866242 | ||||
Stake | 15739739 | 29 days ago | IN | 0 S | 0.01877826 | ||||
Unstake | 15739413 | 29 days ago | IN | 0 S | 0.00866242 | ||||
Stake | 15739324 | 29 days ago | IN | 0 S | 0.01877826 | ||||
Stake | 15737231 | 29 days ago | IN | 0 S | 0.01724013 | ||||
Stake | 15687535 | 29 days ago | IN | 0 S | 0.01846608 | ||||
Stake | 15687279 | 29 days ago | IN | 0 S | 0.01820208 | ||||
Stake | 15686956 | 29 days ago | IN | 0 S | 0.01846537 | ||||
Stake | 15686622 | 29 days ago | IN | 0 S | 0.01846537 | ||||
Stake | 15686352 | 29 days ago | IN | 0 S | 0.01846608 | ||||
Stake | 15685736 | 29 days ago | IN | 0 S | 0.01820137 | ||||
Stake | 15685646 | 29 days ago | IN | 0 S | 0.01846608 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15043556 | 32 days ago | Contract Creation | 0 S |
Loading...
Loading
Contract Name:
TreasuryStaking
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity Standard Json-Input format)
// File: contracts\openzeppelin\contracts\utils\Context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; /** * @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: contracts\openzeppelin\contracts\access\Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.19; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts\openzeppelin\contracts\utils\ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.19; /** * @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 EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * 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; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); 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 if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // 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: contracts\openzeppelin\contracts\token\ERC20\IERC20.sol pragma solidity ^0.8.19; interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); } // File: contracts\openzeppelin\contracts\utils\introspection\IERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.19; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: contracts\openzeppelin\contracts\token\ERC721\IERC721.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.19; /** * @dev Required interface of an ERC-721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC-721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: contracts\openzeppelin\contracts\token\ERC721\extensions\IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.19; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: contracts/sdaemon0x/treasury/TreasuryStaking.sol pragma solidity ^0.8.19; interface TreasuryStakeMarker is IERC721Enumerable { function mint(address to) external returns (uint256); function burn(address to, uint256 tokenId) external; function rarity(uint256 tokenId) external view returns (uint256); } interface TreasuryHolding { function sync() external; function is_active(uint256 tokenId) external view returns (bool, uint256); function totalStaked() external view returns (uint256); } contract TreasuryStaking is TreasuryHolding, ReentrancyGuard, Ownable { IERC20 public sdeamon = IERC20(0x16a0BfC1C6e331788E0A5096911cDCd9943D2C9c); TreasuryStakeMarker public nftContract; uint256 public constant MATURATION_PERIOD = 30 days; uint256 private constant BASE = 10 ** 18; uint256 public min_stake_amount = 2500000 * 10 ** 18; uint256 public totalStaked = 0; uint256 public rewardBank = 0; uint256 public bps_reward_exit = 500; struct Position { uint256 staked; uint256 position; } Position[] public positions; function setNewPosition(uint256 staked_) internal { if (positions.length > 0) { if (positions[positions.length - 1].position == 0) //not doted { positions[positions.length - 1].staked = staked_; return; } } positions.push(Position({staked: staked_, position: 0})); } function get_positions() external view returns (uint256) { return positions.length; } struct StakePosition { uint256 amount; uint256 position_index; uint256 position_offset; uint256 stakeStartTime; uint256 duration_lock; bool active; } mapping(uint256 => StakePosition) public stakerPositions; function is_active(uint256 tokenId) external view returns (bool, uint256) { return (stakerPositions[tokenId].active, stakerPositions[tokenId].amount); } event Staked(address indexed user, uint256 amount, uint256 tokenId); event Unstaked(address indexed user, uint256 amount, uint256 tokenId); event RewardClaimed(address indexed user, uint256 amount, uint256 tokenId); constructor() Ownable(0x88524E752144C15dc1a12BA3978c2d700dc97498) {} function init_NFT(address nftContract_) external onlyOwner { nftContract = TreasuryStakeMarker(nftContract_); } function init_ERC20(address erc20_) external onlyOwner { sdeamon = IERC20(erc20_); } function set_min_stake_amount(uint256 amount_) external onlyOwner { min_stake_amount = amount_; } function stake(uint256 amount_, uint256 duration_lock) nonReentrant external { require(address(nftContract) != address(0), "not init"); require(duration_lock <= MATURATION_PERIOD, "useless value"); require(amount_ >= min_stake_amount, "insufficient stake amount"); uint256 id = nftContract.mint(msg.sender); totalStaked += amount_; setNewPosition(totalStaked); stakerPositions[id] = StakePosition(amount_, positions.length - 1, 0, block.timestamp, duration_lock, true); sdeamon.transferFrom(msg.sender, address(this), amount_); emit Staked(msg.sender, amount_, id); } function compute_unstake_price(uint256 amount_) public view returns (uint256, uint256) { uint256 fee = amount_ * bps_reward_exit / 10000; return (amount_ - fee, fee); } function unstake(uint256 tokenId) nonReentrant external { _claim_reward(msg.sender, tokenId); require(address(nftContract) != address(0), "not init"); require(nftContract.ownerOf(tokenId) == msg.sender, "not your nft"); StakePosition storage position = stakerPositions[tokenId]; require(position.active, "Position already unstaked"); require(position.stakeStartTime < block.timestamp, "Too early"); if (position.duration_lock > 0) { uint256 age = block.timestamp - position.stakeStartTime; require(position.duration_lock < age, "locked"); } position.active = false; nftContract.burn(msg.sender, tokenId); uint256 amount_ = position.amount; totalStaked -= amount_; setNewPosition(totalStaked); (uint256 totalAmoutToPay, uint256 fee) = compute_unstake_price(amount_); sdeamon.transfer(msg.sender, totalAmoutToPay); positions[positions.length - 1].position += fee; rewardBank += fee; emit Unstaked(msg.sender, amount_, tokenId); } function compute_maturation_time(uint256 duration_) public pure returns (uint256) { return duration_ >= MATURATION_PERIOD ? BASE : (duration_ * BASE) / MATURATION_PERIOD; } function compute_current_time(uint256 stakeStartTime) public view returns (uint256) { require(stakeStartTime <= block.timestamp, "Invalid stake start time"); return compute_maturation_time(block.timestamp - stakeStartTime); } function compute_multiplier(uint256 stakeStartTime, uint256 duration_lock) public view returns (uint256) { uint256 p_lock = compute_maturation_time(duration_lock); uint256 p_elapsed = compute_current_time(stakeStartTime); uint256 ret = ((p_lock + p_elapsed) * (20 * BASE + (p_lock * 80 * BASE) / BASE)) / (100 * BASE); return (ret < BASE) ? ret : BASE; } function compute_reward(StakePosition memory rd) public view returns (uint256, uint256) { uint256 reward = 0; uint256 i = rd.position_index; while (i < positions.length) { Position storage p = positions[i]; uint256 posRel = (i==rd.position_index) ? p.position - rd.position_offset : p.position; ++i; if (posRel == 0) continue; uint256 volume = rd.amount * BASE / p.staked; reward += posRel * volume / BASE; } uint256 multiplier = compute_multiplier(rd.stakeStartTime, rd.duration_lock); return (reward, reward * multiplier / BASE); } function estimate_reward(address who, uint256 tokenId) public view returns (uint256) { require(address(nftContract) != address(0), "not init"); require(nftContract.ownerOf(tokenId) == who, "not your nft"); StakePosition storage s = stakerPositions[tokenId]; require(s.active, "Position is not active"); (,uint256 claimable) = compute_reward(s); return claimable; } function compute_reward_limited(StakePosition memory rd, uint256 max_iteration) public view returns (uint256, uint256, uint256) { uint256 reward = 0; uint256 i = rd.position_index; while (i < positions.length && i < max_iteration) { Position storage pp = positions[i]; uint256 posRel = (rd.position_index == i) ? pp.position - rd.position_offset : pp.position; ++i; if (posRel == 0) continue; uint256 volume = rd.amount * BASE / pp.staked; reward += posRel * volume / BASE; } uint256 multiplier = compute_multiplier(rd.stakeStartTime, rd.duration_lock); return (reward, reward * multiplier / BASE, i); } function estimate_reward_limited(address who, uint256 tokenId, uint256 max_iteration) public view returns (uint256) { require(address(nftContract) != address(0), "not init"); require(nftContract.ownerOf(tokenId) == who, "not your nft"); StakePosition storage s = stakerPositions[tokenId]; require(s.active, "Position is not active"); (,uint256 claimable,) = compute_reward_limited(s, max_iteration); return claimable; } function claim_reward(uint256 tokenId) nonReentrant external { _claim_reward(msg.sender, tokenId); } function _claim_reward(address to, uint256 tokenId) internal { require(address(nftContract) != address(0), "not init"); require(nftContract.ownerOf(tokenId) == to, "not your nft"); StakePosition storage s = stakerPositions[tokenId]; require(s.active, "Position is not active"); (uint256 reward, uint256 claimable) = compute_reward(s); if (reward > claimable) positions[positions.length - 1].position += (reward - claimable); s.position_index = positions.length - 1; s.position_offset = positions[positions.length - 1].position; require(rewardBank >= claimable, "no sufficient fund"); rewardBank -= claimable; sdeamon.transfer(to, claimable); emit RewardClaimed(to, claimable, tokenId); } function claim_reward_limited(uint256 tokenId, uint256 max_iteration) nonReentrant external { _claim_reward_limited(msg.sender, tokenId, max_iteration); } function _claim_reward_limited(address to, uint256 tokenId, uint256 max_iteration) internal { require(address(nftContract) != address(0), "not init"); require(nftContract.ownerOf(tokenId) == to, "not your nft"); StakePosition storage s = stakerPositions[tokenId]; require(s.active, "Position is not active"); (uint256 reward, uint256 claimable, uint256 new_position) = compute_reward_limited(s, max_iteration); if (reward > claimable) positions[positions.length - 1].position += (reward - claimable); if (new_position >= positions.length) new_position = positions.length - 1; s.position_index = new_position; s.position_offset = (new_position == positions.length - 1) ? positions[new_position].position : 0; require(rewardBank >= claimable, "no sufficient fund"); rewardBank -= claimable; sdeamon.transfer(to, claimable); emit RewardClaimed(to, claimable, tokenId); } function sync() external { if (positions.length == 0) return; uint256 amount_ = sdeamon.balanceOf(address(this)); uint256 newRewardBank = 0; if (amount_ > totalStaked) { newRewardBank = amount_ - totalStaked; } if (newRewardBank > rewardBank) { uint256 diff = newRewardBank - rewardBank; positions[positions.length - 1].position += diff; } rewardBank = newRewardBank; } function estimate_WAGMI(address who) public view returns (uint256) { uint256 totalRewarded = 0; uint256 reward = 0; uint256 amount_ = 0; uint256 nftsupply = nftContract.totalSupply(); for (uint256 i = 0; i < nftsupply; i++) { uint256 tid = nftContract.tokenByIndex(i); if (!stakerPositions[tid].active) continue; address other = nftContract.ownerOf(tid); totalRewarded += estimate_reward(other, tid); if (other == who) { reward += estimate_reward(who, tid); amount_ += stakerPositions[tid].amount; } } uint256 rest = rewardBank - totalRewarded; reward += (amount_ * rest) / totalStaked; return reward; } function WAGMI() external onlyOwner { require(totalStaked > 0, "No stakers"); uint256 nftsupply = nftContract.totalSupply(); for (uint256 i = 0; i < nftsupply; i++) { uint256 tid = nftContract.tokenByIndex(i); if (!stakerPositions[tid].active) continue; address who = nftContract.ownerOf(tid); _claim_reward(who, tid); } uint256 totalReward = rewardBank; rewardBank = 0; for (uint256 i = 0; i < nftsupply; i++) { uint256 tid = nftContract.tokenByIndex(i); if (!stakerPositions[tid].active) continue; StakePosition storage position = stakerPositions[tid]; position.position_offset = 0; if (totalReward > 0) { uint256 reward = (position.amount * totalReward) / totalStaked; address gowner = nftContract.ownerOf(tid); sdeamon.transfer(gowner, reward); emit RewardClaimed(gowner, reward, tid); } } } }
{ "metadata": { "appendCBOR": true, "bytecodeHash": "ipfs", "useLiteralContent": false }, "optimizer": { "enabled": true, "runs": 1000000 }, "viaIR": true, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"MATURATION_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WAGMI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bps_reward_exit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claim_reward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"max_iteration","type":"uint256"}],"name":"claim_reward_limited","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeStartTime","type":"uint256"}],"name":"compute_current_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration_","type":"uint256"}],"name":"compute_maturation_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeStartTime","type":"uint256"},{"internalType":"uint256","name":"duration_lock","type":"uint256"}],"name":"compute_multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"position_index","type":"uint256"},{"internalType":"uint256","name":"position_offset","type":"uint256"},{"internalType":"uint256","name":"stakeStartTime","type":"uint256"},{"internalType":"uint256","name":"duration_lock","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"internalType":"struct TreasuryStaking.StakePosition","name":"rd","type":"tuple"}],"name":"compute_reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"position_index","type":"uint256"},{"internalType":"uint256","name":"position_offset","type":"uint256"},{"internalType":"uint256","name":"stakeStartTime","type":"uint256"},{"internalType":"uint256","name":"duration_lock","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"internalType":"struct TreasuryStaking.StakePosition","name":"rd","type":"tuple"},{"internalType":"uint256","name":"max_iteration","type":"uint256"}],"name":"compute_reward_limited","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"compute_unstake_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"estimate_WAGMI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"estimate_reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"max_iteration","type":"uint256"}],"name":"estimate_reward_limited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_positions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20_","type":"address"}],"name":"init_ERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftContract_","type":"address"}],"name":"init_NFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"is_active","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"min_stake_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContract","outputs":[{"internalType":"contract TreasuryStakeMarker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"positions","outputs":[{"internalType":"uint256","name":"staked","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardBank","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sdeamon","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"set_min_stake_amount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"uint256","name":"duration_lock","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakerPositions","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"position_index","type":"uint256"},{"internalType":"uint256","name":"position_offset","type":"uint256"},{"internalType":"uint256","name":"stakeStartTime","type":"uint256"},{"internalType":"uint256","name":"duration_lock","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalStaked","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":"tokenId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608080604052346100ad5760016000557316a0bfc1c6e331788e0a5096911cdcd9943d2c9c6001547388524e752144c15dc1a12ba3978c2d700dc9749860018060a01b031991818382161760015560018060a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a360025416176002556a0211654585005212800000600455600060055560006006556101f4600755612ba990816100b38239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600092833560e01c92836316466a9814611d485750826328768b3a14611d0a5782632be8c3e114611c885782632e17de78146117ee5782633100b55f14611793578263431d431e1461174c5782634ff0269114611710578263562714c4146116d35782635d1e360a146116845782635deb9fc7146111ce5782636e539a9a14610ed6578263715018a614610e3757826373600bda14610e1b578263745dfec614610ddd5782637aaa33c514610d875782637b0472f014610a39578263817b1cd2146109fc5782638da0fc82146109bf5782638da5cb5b1461096c57826397ed1ed3146108ea57826399fbab881461088f578263b3a1ebba146105e4578263bc2130f91461058b578263bc2424301461054e578263c9d0ba8514610503578263d56d229d146104b0578263d8fd48b514610473578263e4f7337314610433578263e573edcc146103dc578263f25eb05d146102ae578263f2fde38b146101c357505063fff6cae91461018757600080fd5b346101c057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c0576101bd612a53565b80f35b80fd5b909150346102aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa576101fd611dca565b90610206611f85565b73ffffffffffffffffffffffffffffffffffffffff80921692831561027b575050600154827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b908460249251917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352820152fd5b8280fd5b909150346102aa5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa576102e8611dca565b906024359173ffffffffffffffffffffffffffffffffffffffff906020846024846003541695610319871515611fd6565b885196879384927f6352211e0000000000000000000000000000000000000000000000000000000084528301525afa9283156103d2578593879361039896936103709360209a936103a1575b50811691161461225e565b8152600985522061038760ff600583015416612538565b6103936044359161259d565b6126b0565b50915191825250f35b829193506103c4908b3d81116103cb575b6103bc8183611e38565b810190612232565b9290610365565b503d6103b2565b85513d88823e3d90fd5b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f5760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b5080fd5b83903461042f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f5761046c611f85565b8035905580f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020906008549051908152f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f5760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b83903461042f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576105479061054061209c565b35336127f5565b6001815580f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020906007549051908152f35b83346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05750356105d76127106105cf600754846121e6565b048092612077565b9082519182526020820152f35b909150346102aa57602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057610620611dca565b90808093819373ffffffffffffffffffffffffffffffffffffffff928360035416938851907f18160ddd0000000000000000000000000000000000000000000000000000000082528a828681895afa918215610885578392610856575b50938a95948392949391818516925b8681106106ca575050868b6106c38c6106bd6106b48e6106ae8f600654612077565b906121e6565b600554906121f9565b9061203b565b9051908152f35b9091929394959697988c51907f4f6ccce7000000000000000000000000000000000000000000000000000000008252828483015260249a828c818d5afa918215610808578f908f908994610820575b508389526009825260ff6005828b20015416156108125751809c7f6352211e0000000000000000000000000000000000000000000000000000000082528487830152818d5afa9a8b1561080857908f91889c6107d3575b508561078288926106bd8f87906125e8565b9c16146107a3575b505061079590612435565b908c9796959493929161068c565b9a6009610795939c6107bd849f6106bd6107cb968d6125e8565b9e8952528d8720549061203b565b99908d61078a565b87919c50838791843d8611610801575b6107ed8183611e38565b81016107f891612232565b9d925050610770565b503d6107e3565b8e513d89823e3d90fd5b505099505061079590612435565b93505082813d831161084f575b6108378183611e38565b8101031261084a578e8e92519238610719565b600080fd5b503d61082d565b9091508a81813d831161087e575b61086e8183611e38565b8101031261084a5751903861067d565b503d610864565b8a513d85823e3d90fd5b83903461042f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f5735906008548210156101c057506108d690611f1c565b506001815491015482519182526020820152f35b83346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05773ffffffffffffffffffffffffffffffffffffffff610937611dca565b61093f611f85565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600254161760025580f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020906006549051908152f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020906005549051908152f35b83823461042f57610a4936611ee8565b610a5492919261209c565b73ffffffffffffffffffffffffffffffffffffffff806003541691610a7a831515611fd6565b62278d008111610d2a5786548510610ccd579085918451937f6a62784200000000000000000000000000000000000000000000000000000000855233898601528460248160209687945af1938415610cc3578794610c94575b50610aec610ae38760055461203b565b806005556120d7565b600854907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610c685783928560058a9b946064948c8b5192610b3284611ded565b8d84528984019081528c8401908282528d60608601934285526080870195865260a087019860018a52815260098d5220945185555160018501555160028401555160038301555186820155019051151560ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691161790556002541691865198899384927f23b872dd00000000000000000000000000000000000000000000000000000000845233908401523060248401528960448401525af1948515610c5e577f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee909495610c31575b5082519485528401523392a26001815580f35b610c5090823d8411610c57575b610c488183611e38565b810190612084565b5086610c1e565b503d610c3e565b83513d88823e3d90fd5b60248860118b7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9093508281813d8311610cbc575b610cac8183611e38565b8101031261084a57519288610ad3565b503d610ca2565b85513d89823e3d90fd5b60648760208651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601960248201527f696e73756666696369656e74207374616b6520616d6f756e74000000000000006044820152fd5b60648760208651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600d60248201527f7573656c6573732076616c7565000000000000000000000000000000000000006044820152fd5b909150346102aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa5791819235815260096020522060ff6005820154169054825191151582526020820152f35b9083346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057506106c3602092356122c3565b83823461042f576020906106c3610e3136611ee8565b906123a6565b83346101c057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057610e6e611f85565b600073ffffffffffffffffffffffffffffffffffffffff6001547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b83823461042f57610ee636611ee8565b9190610ef061209c565b73ffffffffffffffffffffffffffffffffffffffff806003541690610f16821515611fd6565b835180927f6352211e000000000000000000000000000000000000000000000000000000008252848983015281602460209586935afa908115610cc35790610f699188916111b1575b508216331461225e565b82865260098252610f9084872095610f8760ff600589015416612538565b6103938761259d565b90969181908880821161112e575b5050600854809110156110fd575b508060018301556008547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116110d157928792899a9286956110829b5081146000146110c7576001611003600292611f1c565b500154915b01556110228360065461101d82821015612790565b612077565b6006556002541690898751809a819582947fa9059cbb000000000000000000000000000000000000000000000000000000008452339084016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1948515610c5e577ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e27317439495610c31575082519485528401523392a26001815580f35b5060028b91611008565b60248960118c7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810191508111610c685789610fac565b61113791612077565b6008547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161118557600161117261117c92611f1c565b500191825461203b565b90558a88610f9e565b60248b60118e7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b6111c89150843d86116103cb576103bc8183611e38565b89610f5f565b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f57611206611f85565b6005928354156116285773ffffffffffffffffffffffffffffffffffffffff6003908082541684519384917f18160ddd000000000000000000000000000000000000000000000000000000008352828260209485935afa94851561161e5787956115ef575b50865b8581106114c15750600654908760065587821515905b87811061128f578980f35b84868854168a51918280927f4f6ccce7000000000000000000000000000000000000000000000000000000008252858883015260249485915afa9081156114b757908c92918391611486575b50808352600988528d878d852060ff838201541615611301578760029687830155611315575b50505050505061131090612435565b611284565b61132c929161132491546121e6565b9054906121f9565b92888d8b8d54169051948580927f6352211e000000000000000000000000000000000000000000000000000000008252868c8301525afa92831561144f57848f8f908a8e9796958e95839861145b575b509087986113df9798939254169351968795869485937fa9059cbb00000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1801561144f576113109594937ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e2731743938f938d93611432575b5083519586528b8601521692a2908c808d8782611301565b611448908d803d10610c5757610c488183611e38565b503861141a565b8e8e51903d90823e3d90fd5b6113df97985061147b9087949392943d89116103cb576103bc8183611e38565b97969290919261137c565b809350888092503d83116114b0575b61149f8183611e38565b8101031261084a578b91518e6112db565b503d611495565b8b513d8e823e3d90fd5b838554168751907f4f6ccce7000000000000000000000000000000000000000000000000000000008252828483015260249085838381845afa9283156115e557908c8b8d899481976115ad575b508681526009855220015460ff16156115a0578a51928380927f6352211e00000000000000000000000000000000000000000000000000000000825286898301525afa908115611596579161156f9161157494938c91611579575b506127f5565b612435565b61126e565b6115909150873d89116103cb576103bc8183611e38565b8d611569565b89513d8c823e3d90fd5b5050505061157490612435565b9493965050505081813d83116115de575b6115c88183611e38565b8101031261084a57519185908c8b8d60ff61150e565b503d6115be565b8a513d8d823e3d90fd5b9094508181813d8311611617575b6116078183611e38565b8101031261084a5751938861126b565b503d6115fd565b86513d89823e3d90fd5b602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600a60248201527f4e6f207374616b657273000000000000000000000000000000000000000000006044820152fd5b5082346101c05760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057506116c76116c236611e79565b612462565b82519182526020820152f35b909150346102aa57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa5760209250549051908152f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020905162278d008152f35b83823461042f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020906106c361178a611dca565b602435906125e8565b83823461042f5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576060906117dc6117d336611e79565b60c435906126b0565b91929081519384526020840152820152f35b83823461042f57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa57833561182b61209c565b61183581336127f5565b8273ffffffffffffffffffffffffffffffffffffffff95866003541661185c811515611fd6565b8451958680927f6352211e000000000000000000000000000000000000000000000000000000008252868583015260249889915afa908115610cc357906118ae918891611c6b575b508816331461225e565b8286526009825283862060058101805460ff811615611c1057600383015442811015611bb557848401549081611b43575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558760035416803b15611b3f5787865180927f9dc29fac00000000000000000000000000000000000000000000000000000000825281838161196c8b338b84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af18015611aef57611af9575b50549461198d610ae387600554612077565b8683611a0a6127106119a16007548b6121e6565b049a6119ad8c8b612077565b90600254169089519485809481937fa9059cbb000000000000000000000000000000000000000000000000000000008352338b84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af18015611aef57611ad2575b50600854917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301928311611aa85750507f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e9495966001611a7c611a9393611f1c565b5001611a8982825461203b565b905560065461203b565b60065582519485528401523392a26001815580f35b601188917f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b611ae890843d8611610c5757610c488183611e38565b5088611a19565b86513d8a823e3d90fd5b67ffffffffffffffff8198929811611b14578552958861197b565b50604186927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8780fd5b611b4d9042612077565b1115611b5a578a806118df565b60648460068a888b51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f6c6f636b656400000000000000000000000000000000000000000000000000006044820152fd5b60648560098b898c51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f546f6f206561726c7900000000000000000000000000000000000000000000006044820152fd5b60648460198a888b51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f506f736974696f6e20616c726561647920756e7374616b6564000000000000006044820152fd5b611c829150843d86116103cb576103bc8183611e38565b896118a4565b83346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05773ffffffffffffffffffffffffffffffffffffffff611cd5611dca565b611cdd611f85565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035580f35b9083346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057506106c36020923561232c565b925034611dc65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611dc6578160c094823581526009602052209081549260018301549060028401549160ff600560038701549587015496015416958752602087015285015260608401526080830152151560a0820152f35b8380fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361084a57565b60c0810190811067ffffffffffffffff821117611e0957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611e0957604052565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c091011261084a5760405190611eb082611ded565b6004358252602435602083015260443560408301526064356060830152608435608083015260a43582811515820361084a5760a00152565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261084a576004359060243590565b600854811015611f5657600860005260011b7ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff600154163303611fa657565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b15611fdd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e6f7420696e69740000000000000000000000000000000000000000000000006044820152fd5b9190820180921161204857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820391821161204857565b9081602091031261084a5751801515810361084a5790565b6002600054146120ad576002600055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b6008548061219d575b50604051906040820182811067ffffffffffffffff821117611e0957604052815260208101600091828252600854680100000000000000008110156121705780600161212f9201600855611f1c565b93909361214457509060019151835551910155565b807f4e487b71000000000000000000000000000000000000000000000000000000006024925280600452fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116120485760016121d282611f1c565b5001546120e0576121e290611f1c565b5055565b8181029291811591840414171561204857565b8115612203570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9081602091031261084a575173ffffffffffffffffffffffffffffffffffffffff8116810361084a5790565b1561226557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f7420796f7572206e667400000000000000000000000000000000000000006044820152fd5b62278d009060008282106122e057505050670de0b6b3a764000090565b670de0b6b3a7640000918281029281840414901517156122ff57500490565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b428111612348576123406123459142612077565b6122c3565b90565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c6964207374616b652073746172742074696d6500000000000000006044820152fd5b906123bc6123b66123c2926122c3565b9261232c565b8261203b565b605082029180830460501481151715612048576804563918244f4000000290670de0b6b3a76400009280830484149015171561204857826801158e460913d00000920482018092116120485768056bc75e2d6310000091612422916121e6565b049080821015612430575090565b905090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120485760010190565b9060009160208101805190600854915b8281106124a6575050506124a261249c8260806060670de0b6b3a7640000950151910151906123a6565b846121e6565b0490565b9091946124b282611f1c565b50908351831460001461252a576124db6124d56001840154604088015190612077565b93612435565b928015612521578551670de0b6b3a76400009182820291808304841490151715612048576106ae612511926125189654906121f9565b049061203b565b945b9190612472565b5095905061251a565b6124db600183015493612435565b1561253f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f506f736974696f6e206973206e6f7420616374697665000000000000000000006044820152fd5b906040516125aa81611ded565b60a060ff6005839580548552600181015460208601526002810154604086015260038101546060860152600481015460808601520154161515910152565b60249073ffffffffffffffffffffffffffffffffffffffff60208160035416612612811515611fd6565b604051948580927f6352211e0000000000000000000000000000000000000000000000000000000082528860048301525afa9182156126a457612661936000936126895750811691161461225e565b60005260096020526124306116c2604060002061268460ff600583015416612538565b61259d565b829193506103c49060203d81116103cb576103bc8183611e38565b6040513d6000823e3d90fd5b906000916020810193845192600854945b85851080612787575b15612756576126d885611f1c565b509085885114600014612748576127016126fb6001840154604088015190612077565b96612435565b95801561273f578551670de0b6b3a76400009182820291808304841490151715612048576106ae612511926127379654906121f9565b945b946126c1565b50959050612739565b612701600183015496612435565b95505091925061278261277c670de0b6b3a76400009260806060820151910151906123a6565b856121e6565b049190565b508185106126ca565b1561279757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f2073756666696369656e742066756e6400000000000000000000000000006044820152fd5b9173ffffffffffffffffffffffffffffffffffffffff9182600354169361281d851515611fd6565b604091825180967f6352211e00000000000000000000000000000000000000000000000000000000825282600483015281602460209384935afa9687156129de57869761287c91600098979891612a36575b508487169616861461225e565b81600052600981528360002061289860ff600583015416612538565b6128a46116c28261259d565b9490858082116129e9575b5050600854907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9182810190811161204857600184015560085491820191821161204857612981998493600260016129078a96611f1c565b5001549101556129208360065461101d82821015612790565b600655600254169060008851809c819582947fa9059cbb000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19687156129de577ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e27317439596976129c1575b508351928352820152a2565b6129d790823d8411610c5757610c488183611e38565b50386129b5565b84513d6000823e3d90fd5b6129f291612077565b6008547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111612048576001611172612a2d92611f1c565b905538856128af565b612a4d9150833d85116103cb576103bc8183611e38565b3861286f565b6008548015612b7057602490602073ffffffffffffffffffffffffffffffffffffffff60025416604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9182156126a457600092612b3d575b50600554600092818111612b2a575b5050600654808311612ade575b5050600655565b612ae89083612077565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111612048576001611172612b2192611f1c565b90553880612ad7565b612b35929350612077565b903880612aca565b90916020823d8211612b68575b81612b5760209383611e38565b810103126101c05750519038612abb565b3d9150612b4a565b5056fea26469706673582212204b92ae46c52a3e749c6f601020d7376cce095125b1ea14d5c8a4b111f457837764736f6c63430008130033
Deployed Bytecode
0x60806040908082526004918236101561001757600080fd5b600092833560e01c92836316466a9814611d485750826328768b3a14611d0a5782632be8c3e114611c885782632e17de78146117ee5782633100b55f14611793578263431d431e1461174c5782634ff0269114611710578263562714c4146116d35782635d1e360a146116845782635deb9fc7146111ce5782636e539a9a14610ed6578263715018a614610e3757826373600bda14610e1b578263745dfec614610ddd5782637aaa33c514610d875782637b0472f014610a39578263817b1cd2146109fc5782638da0fc82146109bf5782638da5cb5b1461096c57826397ed1ed3146108ea57826399fbab881461088f578263b3a1ebba146105e4578263bc2130f91461058b578263bc2424301461054e578263c9d0ba8514610503578263d56d229d146104b0578263d8fd48b514610473578263e4f7337314610433578263e573edcc146103dc578263f25eb05d146102ae578263f2fde38b146101c357505063fff6cae91461018757600080fd5b346101c057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c0576101bd612a53565b80f35b80fd5b909150346102aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa576101fd611dca565b90610206611f85565b73ffffffffffffffffffffffffffffffffffffffff80921692831561027b575050600154827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b908460249251917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352820152fd5b8280fd5b909150346102aa5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa576102e8611dca565b906024359173ffffffffffffffffffffffffffffffffffffffff906020846024846003541695610319871515611fd6565b885196879384927f6352211e0000000000000000000000000000000000000000000000000000000084528301525afa9283156103d2578593879361039896936103709360209a936103a1575b50811691161461225e565b8152600985522061038760ff600583015416612538565b6103936044359161259d565b6126b0565b50915191825250f35b829193506103c4908b3d81116103cb575b6103bc8183611e38565b810190612232565b9290610365565b503d6103b2565b85513d88823e3d90fd5b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f5760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b5080fd5b83903461042f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f5761046c611f85565b8035905580f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020906008549051908152f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f5760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b83903461042f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576105479061054061209c565b35336127f5565b6001815580f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020906007549051908152f35b83346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05750356105d76127106105cf600754846121e6565b048092612077565b9082519182526020820152f35b909150346102aa57602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057610620611dca565b90808093819373ffffffffffffffffffffffffffffffffffffffff928360035416938851907f18160ddd0000000000000000000000000000000000000000000000000000000082528a828681895afa918215610885578392610856575b50938a95948392949391818516925b8681106106ca575050868b6106c38c6106bd6106b48e6106ae8f600654612077565b906121e6565b600554906121f9565b9061203b565b9051908152f35b9091929394959697988c51907f4f6ccce7000000000000000000000000000000000000000000000000000000008252828483015260249a828c818d5afa918215610808578f908f908994610820575b508389526009825260ff6005828b20015416156108125751809c7f6352211e0000000000000000000000000000000000000000000000000000000082528487830152818d5afa9a8b1561080857908f91889c6107d3575b508561078288926106bd8f87906125e8565b9c16146107a3575b505061079590612435565b908c9796959493929161068c565b9a6009610795939c6107bd849f6106bd6107cb968d6125e8565b9e8952528d8720549061203b565b99908d61078a565b87919c50838791843d8611610801575b6107ed8183611e38565b81016107f891612232565b9d925050610770565b503d6107e3565b8e513d89823e3d90fd5b505099505061079590612435565b93505082813d831161084f575b6108378183611e38565b8101031261084a578e8e92519238610719565b600080fd5b503d61082d565b9091508a81813d831161087e575b61086e8183611e38565b8101031261084a5751903861067d565b503d610864565b8a513d85823e3d90fd5b83903461042f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f5735906008548210156101c057506108d690611f1c565b506001815491015482519182526020820152f35b83346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05773ffffffffffffffffffffffffffffffffffffffff610937611dca565b61093f611f85565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600254161760025580f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020906006549051908152f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020906005549051908152f35b83823461042f57610a4936611ee8565b610a5492919261209c565b73ffffffffffffffffffffffffffffffffffffffff806003541691610a7a831515611fd6565b62278d008111610d2a5786548510610ccd579085918451937f6a62784200000000000000000000000000000000000000000000000000000000855233898601528460248160209687945af1938415610cc3578794610c94575b50610aec610ae38760055461203b565b806005556120d7565b600854907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610c685783928560058a9b946064948c8b5192610b3284611ded565b8d84528984019081528c8401908282528d60608601934285526080870195865260a087019860018a52815260098d5220945185555160018501555160028401555160038301555186820155019051151560ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691161790556002541691865198899384927f23b872dd00000000000000000000000000000000000000000000000000000000845233908401523060248401528960448401525af1948515610c5e577f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee909495610c31575b5082519485528401523392a26001815580f35b610c5090823d8411610c57575b610c488183611e38565b810190612084565b5086610c1e565b503d610c3e565b83513d88823e3d90fd5b60248860118b7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9093508281813d8311610cbc575b610cac8183611e38565b8101031261084a57519288610ad3565b503d610ca2565b85513d89823e3d90fd5b60648760208651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601960248201527f696e73756666696369656e74207374616b6520616d6f756e74000000000000006044820152fd5b60648760208651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600d60248201527f7573656c6573732076616c7565000000000000000000000000000000000000006044820152fd5b909150346102aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa5791819235815260096020522060ff6005820154169054825191151582526020820152f35b9083346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057506106c3602092356122c3565b83823461042f576020906106c3610e3136611ee8565b906123a6565b83346101c057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057610e6e611f85565b600073ffffffffffffffffffffffffffffffffffffffff6001547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b83823461042f57610ee636611ee8565b9190610ef061209c565b73ffffffffffffffffffffffffffffffffffffffff806003541690610f16821515611fd6565b835180927f6352211e000000000000000000000000000000000000000000000000000000008252848983015281602460209586935afa908115610cc35790610f699188916111b1575b508216331461225e565b82865260098252610f9084872095610f8760ff600589015416612538565b6103938761259d565b90969181908880821161112e575b5050600854809110156110fd575b508060018301556008547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116110d157928792899a9286956110829b5081146000146110c7576001611003600292611f1c565b500154915b01556110228360065461101d82821015612790565b612077565b6006556002541690898751809a819582947fa9059cbb000000000000000000000000000000000000000000000000000000008452339084016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1948515610c5e577ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e27317439495610c31575082519485528401523392a26001815580f35b5060028b91611008565b60248960118c7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810191508111610c685789610fac565b61113791612077565b6008547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161118557600161117261117c92611f1c565b500191825461203b565b90558a88610f9e565b60248b60118e7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b6111c89150843d86116103cb576103bc8183611e38565b89610f5f565b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f57611206611f85565b6005928354156116285773ffffffffffffffffffffffffffffffffffffffff6003908082541684519384917f18160ddd000000000000000000000000000000000000000000000000000000008352828260209485935afa94851561161e5787956115ef575b50865b8581106114c15750600654908760065587821515905b87811061128f578980f35b84868854168a51918280927f4f6ccce7000000000000000000000000000000000000000000000000000000008252858883015260249485915afa9081156114b757908c92918391611486575b50808352600988528d878d852060ff838201541615611301578760029687830155611315575b50505050505061131090612435565b611284565b61132c929161132491546121e6565b9054906121f9565b92888d8b8d54169051948580927f6352211e000000000000000000000000000000000000000000000000000000008252868c8301525afa92831561144f57848f8f908a8e9796958e95839861145b575b509087986113df9798939254169351968795869485937fa9059cbb00000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1801561144f576113109594937ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e2731743938f938d93611432575b5083519586528b8601521692a2908c808d8782611301565b611448908d803d10610c5757610c488183611e38565b503861141a565b8e8e51903d90823e3d90fd5b6113df97985061147b9087949392943d89116103cb576103bc8183611e38565b97969290919261137c565b809350888092503d83116114b0575b61149f8183611e38565b8101031261084a578b91518e6112db565b503d611495565b8b513d8e823e3d90fd5b838554168751907f4f6ccce7000000000000000000000000000000000000000000000000000000008252828483015260249085838381845afa9283156115e557908c8b8d899481976115ad575b508681526009855220015460ff16156115a0578a51928380927f6352211e00000000000000000000000000000000000000000000000000000000825286898301525afa908115611596579161156f9161157494938c91611579575b506127f5565b612435565b61126e565b6115909150873d89116103cb576103bc8183611e38565b8d611569565b89513d8c823e3d90fd5b5050505061157490612435565b9493965050505081813d83116115de575b6115c88183611e38565b8101031261084a57519185908c8b8d60ff61150e565b503d6115be565b8a513d8d823e3d90fd5b9094508181813d8311611617575b6116078183611e38565b8101031261084a5751938861126b565b503d6115fd565b86513d89823e3d90fd5b602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600a60248201527f4e6f207374616b657273000000000000000000000000000000000000000000006044820152fd5b5082346101c05760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057506116c76116c236611e79565b612462565b82519182526020820152f35b909150346102aa57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa5760209250549051908152f35b83823461042f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020905162278d008152f35b83823461042f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576020906106c361178a611dca565b602435906125e8565b83823461042f5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261042f576060906117dc6117d336611e79565b60c435906126b0565b91929081519384526020840152820152f35b83823461042f57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa57833561182b61209c565b61183581336127f5565b8273ffffffffffffffffffffffffffffffffffffffff95866003541661185c811515611fd6565b8451958680927f6352211e000000000000000000000000000000000000000000000000000000008252868583015260249889915afa908115610cc357906118ae918891611c6b575b508816331461225e565b8286526009825283862060058101805460ff811615611c1057600383015442811015611bb557848401549081611b43575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558760035416803b15611b3f5787865180927f9dc29fac00000000000000000000000000000000000000000000000000000000825281838161196c8b338b84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af18015611aef57611af9575b50549461198d610ae387600554612077565b8683611a0a6127106119a16007548b6121e6565b049a6119ad8c8b612077565b90600254169089519485809481937fa9059cbb000000000000000000000000000000000000000000000000000000008352338b84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af18015611aef57611ad2575b50600854917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301928311611aa85750507f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e9495966001611a7c611a9393611f1c565b5001611a8982825461203b565b905560065461203b565b60065582519485528401523392a26001815580f35b601188917f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b611ae890843d8611610c5757610c488183611e38565b5088611a19565b86513d8a823e3d90fd5b67ffffffffffffffff8198929811611b14578552958861197b565b50604186927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8780fd5b611b4d9042612077565b1115611b5a578a806118df565b60648460068a888b51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f6c6f636b656400000000000000000000000000000000000000000000000000006044820152fd5b60648560098b898c51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f546f6f206561726c7900000000000000000000000000000000000000000000006044820152fd5b60648460198a888b51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f506f736974696f6e20616c726561647920756e7374616b6564000000000000006044820152fd5b611c829150843d86116103cb576103bc8183611e38565b896118a4565b83346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c05773ffffffffffffffffffffffffffffffffffffffff611cd5611dca565b611cdd611f85565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035580f35b9083346101c05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c057506106c36020923561232c565b925034611dc65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611dc6578160c094823581526009602052209081549260018301549060028401549160ff600560038701549587015496015416958752602087015285015260608401526080830152151560a0820152f35b8380fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361084a57565b60c0810190811067ffffffffffffffff821117611e0957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611e0957604052565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c091011261084a5760405190611eb082611ded565b6004358252602435602083015260443560408301526064356060830152608435608083015260a43582811515820361084a5760a00152565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261084a576004359060243590565b600854811015611f5657600860005260011b7ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff600154163303611fa657565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b15611fdd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e6f7420696e69740000000000000000000000000000000000000000000000006044820152fd5b9190820180921161204857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820391821161204857565b9081602091031261084a5751801515810361084a5790565b6002600054146120ad576002600055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b6008548061219d575b50604051906040820182811067ffffffffffffffff821117611e0957604052815260208101600091828252600854680100000000000000008110156121705780600161212f9201600855611f1c565b93909361214457509060019151835551910155565b807f4e487b71000000000000000000000000000000000000000000000000000000006024925280600452fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116120485760016121d282611f1c565b5001546120e0576121e290611f1c565b5055565b8181029291811591840414171561204857565b8115612203570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9081602091031261084a575173ffffffffffffffffffffffffffffffffffffffff8116810361084a5790565b1561226557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f7420796f7572206e667400000000000000000000000000000000000000006044820152fd5b62278d009060008282106122e057505050670de0b6b3a764000090565b670de0b6b3a7640000918281029281840414901517156122ff57500490565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b428111612348576123406123459142612077565b6122c3565b90565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c6964207374616b652073746172742074696d6500000000000000006044820152fd5b906123bc6123b66123c2926122c3565b9261232c565b8261203b565b605082029180830460501481151715612048576804563918244f4000000290670de0b6b3a76400009280830484149015171561204857826801158e460913d00000920482018092116120485768056bc75e2d6310000091612422916121e6565b049080821015612430575090565b905090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120485760010190565b9060009160208101805190600854915b8281106124a6575050506124a261249c8260806060670de0b6b3a7640000950151910151906123a6565b846121e6565b0490565b9091946124b282611f1c565b50908351831460001461252a576124db6124d56001840154604088015190612077565b93612435565b928015612521578551670de0b6b3a76400009182820291808304841490151715612048576106ae612511926125189654906121f9565b049061203b565b945b9190612472565b5095905061251a565b6124db600183015493612435565b1561253f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f506f736974696f6e206973206e6f7420616374697665000000000000000000006044820152fd5b906040516125aa81611ded565b60a060ff6005839580548552600181015460208601526002810154604086015260038101546060860152600481015460808601520154161515910152565b60249073ffffffffffffffffffffffffffffffffffffffff60208160035416612612811515611fd6565b604051948580927f6352211e0000000000000000000000000000000000000000000000000000000082528860048301525afa9182156126a457612661936000936126895750811691161461225e565b60005260096020526124306116c2604060002061268460ff600583015416612538565b61259d565b829193506103c49060203d81116103cb576103bc8183611e38565b6040513d6000823e3d90fd5b906000916020810193845192600854945b85851080612787575b15612756576126d885611f1c565b509085885114600014612748576127016126fb6001840154604088015190612077565b96612435565b95801561273f578551670de0b6b3a76400009182820291808304841490151715612048576106ae612511926127379654906121f9565b945b946126c1565b50959050612739565b612701600183015496612435565b95505091925061278261277c670de0b6b3a76400009260806060820151910151906123a6565b856121e6565b049190565b508185106126ca565b1561279757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f2073756666696369656e742066756e6400000000000000000000000000006044820152fd5b9173ffffffffffffffffffffffffffffffffffffffff9182600354169361281d851515611fd6565b604091825180967f6352211e00000000000000000000000000000000000000000000000000000000825282600483015281602460209384935afa9687156129de57869761287c91600098979891612a36575b508487169616861461225e565b81600052600981528360002061289860ff600583015416612538565b6128a46116c28261259d565b9490858082116129e9575b5050600854907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9182810190811161204857600184015560085491820191821161204857612981998493600260016129078a96611f1c565b5001549101556129208360065461101d82821015612790565b600655600254169060008851809c819582947fa9059cbb000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19687156129de577ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e27317439596976129c1575b508351928352820152a2565b6129d790823d8411610c5757610c488183611e38565b50386129b5565b84513d6000823e3d90fd5b6129f291612077565b6008547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111612048576001611172612a2d92611f1c565b905538856128af565b612a4d9150833d85116103cb576103bc8183611e38565b3861286f565b6008548015612b7057602490602073ffffffffffffffffffffffffffffffffffffffff60025416604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9182156126a457600092612b3d575b50600554600092818111612b2a575b5050600654808311612ade575b5050600655565b612ae89083612077565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111612048576001611172612b2192611f1c565b90553880612ad7565b612b35929350612077565b903880612aca565b90916020823d8211612b68575b81612b5760209383611e38565b810103126101c05750519038612abb565b3d9150612b4a565b5056fea26469706673582212204b92ae46c52a3e749c6f601020d7376cce095125b1ea14d5c8a4b111f457837764736f6c63430008130033
Deployed Bytecode Sourcemap
15914:11934:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2488:65;;;:::i;:::-;15914:11934;;;;3644:22;;;3640:93;;15914:11934;;4030:6;15914:11934;;;;;;4030:6;15914:11934;;4080:40;15914:11934;4080:40;;15914:11934;;3640:93;15914:11934;;;;;3690:31;;;;;;15914:11934;3690:31;15914:11934;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;22955:11;15914:11934;;22947:34;22939:55;22947:34;;;22939:55;:::i;:::-;15914:11934;;23013:28;;;;;15914:11934;23013:28;;;;15914:11934;23013:28;;;;;;;;;;;23215:40;23013:28;;23005:60;23013:28;15914:11934;23013:28;;;;15914:11934;;;;;;23013:35;23005:60;:::i;:::-;15914:11934;;23102:15;15914:11934;;;23137:43;15914:11934;23145:8;;;15914:11934;;23137:43;:::i;:::-;15914:11934;;;;;:::i;:::-;23215:40;:::i;:::-;-1:-1:-1;15914:11934:0;;;;;-1:-1:-1;15914:11934:0;23013:28;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;;15991:74;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;;2488:65;;:::i;:::-;15914:11934;;;;;;;;;;;;;;;;;;;;;16971:9;15914:11934;;;;;;;;;;;;;;;;;;;;;;;16072:38;15914:11934;;;;;;;;;;;;;;;;;;;;;23394:7;6678:107;;;:::i;:::-;15914:11934;23382:10;23394:7;:::i;:::-;15914:11934;;;;;;;;;;;;;;;;;;;;16360:36;15914:11934;;;;;;;;;;;;;;;;;;;;;18942:13;18918:5;18890:25;18900:15;15914:11934;18890:25;;:::i;:::-;15914:11934;18942:13;;;:::i;:::-;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25992:25;;26028:18;26057:19;;15914:11934;;;;26107:11;15914:11934;;;;;26107:25;15914:11934;26107:25;;;;;;;;;;;;;;;;;;15914:11934;26148:13;;;;;;;;;15914:11934;;;;26143:456;26163:13;;;;;;15914:11934;;;;26661:40;15914:11934;26671:30;26672:14;15914:11934;26624:26;15914:11934;26624:10;15914:11934;26624:26;:::i;:::-;26672:14;;:::i;:::-;26259:27;15914:11934;26671:30;;:::i;:::-;26661:40;;:::i;:::-;15914:11934;;;;;;26178:3;15914:11934;;;;;;;;;;;26212:27;15914:11934;26212:27;;;;;;15914:11934;;26212:27;;;;;;;;;;;;;;;;;;;;26178:3;15914:11934;;;;26259:15;15914:11934;;;26259:27;15914:11934;;;26259:27;15914:11934;;26258:28;26254:60;;15914:11934;26345:24;;15914:11934;26345:24;;;;;;15914:11934;26345:24;;;;;;;;;;;;;;;;26178:3;26401:27;;26384:44;26401:27;;;;;;;:::i;26384:44::-;15914:11934;;26447:12;26443:145;;26178:3;;;;;;:::i;:::-;26148:13;;;;;;;;;;;26443:145;26490:25;26259:15;26178:3;26490:25;;26480:35;26490:25;;;26534:38;26490:25;;;:::i;26480:35::-;15914:11934;;;;;;;;26534:38;;:::i;:::-;26443:145;;;;;26345:24;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;15914:11934;;;;;;;;;26254:60;26306:8;;;;;26178:3;26306:8;26178:3;:::i;26212:27::-;;;;;;;;;;;;;;;;:::i;:::-;;;15914:11934;;;;;;;;26212:27;;;;15914:11934;;;;26212:27;;;;;26107:25;;;;;;;;;;;;;;;;;:::i;:::-;;;15914:11934;;;;;26107:25;;;;;;;;;;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;16485:27;15914:11934;16485:27;;;;;;;;;:::i;:::-;15914:11934;;;;16485:27;;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2488:65;;:::i;:::-;15914:11934;;17964:24;15914:11934;;;17964:24;15914:11934;;;;;;;;;;;;;;;;;;;2705:6;15914:11934;;;;;;;;;;;;;;;;;;;;;;;16324:29;15914:11934;;;;;;;;;;;;;;;;;;;;;;16287:30;15914:11934;;;;;;;;;;;;;;;;:::i;:::-;6678:107;;;;;:::i;:::-;15914:11934;;18223:11;15914:11934;;18215:34;18207:55;18215:34;;;18207:55;:::i;:::-;16167:7;18281:34;;15914:11934;;;;18352:27;;15914:11934;;;;;;;18433:28;15914:11934;18433:28;;18450:10;18433:28;;;15914:11934;18433:28;15914:11934;18433:28;;;;;;;;;;;;;;;;15914:11934;;18520:11;18472:22;15914:11934;18472:22;15914:11934;18472:22;:::i;:::-;15914:11934;18472:22;15914:11934;18520:11;:::i;:::-;18588:9;15914:11934;;;;;;;;;;;;;18472:22;15914:11934;;;;;;;;;;;;:::i;:::-;;;;18565:85;;;15914:11934;;;18565:85;;;15914:11934;;;;18565:85;;;;18613:15;;15914:11934;;18565:85;;;15914:11934;;;18565:85;;;15914:11934;18607:1;15914:11934;;;;18543:15;15914:11934;;;;;;;;18607:1;15914:11934;;;;;;;;;18223:11;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18661:56;;;;;15914:11934;18661:56;;18450:10;18661:56;;;15914:11934;18702:4;15914:11934;;;;;;;;;18661:56;;;;;;;18733:31;18661:56;;;;15914:11934;;;;;;;;;;18450:10;18733:31;;18607:1;15914:11934;;;;18661:56;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;15914:11934;;;;;;;;;;;;;;;;;;;18433:28;;;;;;;;;;;;;;;;;:::i;:::-;;;15914:11934;;;;;18433:28;;;;;;;;;;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17377:15;15914:11934;;;;17377:31;;;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;2488:65;;:::i;:::-;15914:11934;;4030:6;15914:11934;;;;4030:6;15914:11934;;4080:40;;;;15914:11934;;;;;;;;;;;:::i;:::-;6678:107;;;;:::i;:::-;15914:11934;;24528:11;15914:11934;;24520:34;24512:55;24520:34;;;24512:55;:::i;:::-;15914:11934;;24586:28;;15914:11934;24586:28;;;;;;15914:11934;24586:28;15914:11934;24586:28;;;;;;;;;;;;24578:59;24586:28;;;;;15914:11934;-1:-1:-1;15914:11934:0;;24360:10;24586:34;24578:59;:::i;:::-;15914:11934;;;24674:15;15914:11934;;24823:40;15914:11934;;;24717:8;24709:43;15914:11934;24717:8;;;15914:11934;;24709:43;:::i;:::-;15914:11934;;;:::i;24823:40::-;24763:100;;;;;;24878:18;;;24874:101;;15914:11934;;;25006:9;15914:11934;24990:32;;;;24986:73;;15914:11934;25070:16;;;;;15914:11934;25006:9;15914:11934;;;;;;;;;25132:77;;;;;;;;25319:31;25132:77;25133:36;;;25132:77;25133:36;;;25070:16;25173:23;25112:17;25173:23;;:::i;:::-;:32;;15914:11934;25132:77;;25112:17;15914:11934;25285:23;15914:11934;25228:10;15914:11934;25220:54;25228:23;;;;25220:54;:::i;:::-;25285:23;:::i;:::-;25228:10;15914:11934;25112:17;15914:11934;;;;;;25319:31;;;;;;15914:11934;25319:31;;24360:10;25319:31;;;15914:11934;;;;;;;;;;;;;;;;;25319:31;;;;;;;;;;25366:37;25319:31;;;;15914:11934;;;;;;;;;24360:10;25366:37;;25070:16;15914:11934;;;;25132:77;;25112:17;25132:77;;;;15914:11934;;;;;;;;;;24986:73;15914:11934;;;;-1:-1:-1;15914:11934:0;;;;24986:73;;;24874:101;24956:18;;;:::i;:::-;24911:9;15914:11934;;;;;;;;;24940:1;24911:31;:64;:31;;:::i;:::-;:40;;15914:11934;;;24911:64;:::i;:::-;15914:11934;;24874:101;;;;15914:11934;;;;;;;;;;24586:28;;;;;;;;;;;;;;:::i;:::-;;;;15914:11934;;;;;;;;;;;;;2488:65;;:::i;:::-;26794:11;15914:11934;;;26794:15;15914:11934;;;26855:11;15914:11934;;;;;;;26855:25;;;15914:11934;26855:25;;;;;;;;;;;;;;;;;;;15914:11934;26896:13;;26911;;;;;;15914:11934;27197:10;15914:11934;;;27197:10;15914:11934;27248:13;27544:15;;;27243:595;27263:13;;;;;;15914:11934;;;27278:3;15914:11934;;;;;;;27312:27;;;;15914:11934;27312:27;;;;;;15914:11934;;27312:27;;;;;;;;;;;;;;;;;;27278:3;15914:11934;;;;27007:15;15914:11934;;;;;;;;27359:27;;;15914:11934;;27358:28;27354:60;;27497:24;;;;;;15914:11934;27540:287;;27278:3;;;;;;;;;;:::i;:::-;27248:13;;27540:287;27597:45;15914:11934;;27598:29;15914:11934;;27598:29;:::i;:::-;15914:11934;;27597:45;;:::i;:::-;15914:11934;;;;;;;;;27678:24;;;;15914:11934;27678:24;;;;;;15914:11934;27678:24;;;;;;;;;;;;;;;;;;;;;;27540:287;15914:11934;;;;27721:32;15914:11934;;;;;;;;27721:32;;;;;;;15914:11934;27721:32;;;;15914:11934;;;;;;;;;;;;;;;;;27721:32;;;;;;;;;27278:3;27721:32;;;27777:34;27721:32;;;;;;;27540:287;15914:11934;;;;;;;;;;;27777:34;;27540:287;;;;;;;;27721:32;;;;;;-1:-1:-1;27721:32:0;;;;;;:::i;:::-;;;;;;15914:11934;;;;;;;;;;;27678:24;27721:32;27678:24;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;27312:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;15914:11934;;;;;;;27312:27;;;;;;;;;15914:11934;;;;;;;;;26926:3;15914:11934;;;;;;26960:27;15914:11934;26960:27;;;;;;15914:11934;;26960:27;;;;;;;;;;;;;;;;;;;;;;;26926:3;-1:-1:-1;15914:11934:0;;;27007:15;15914:11934;;;27007:27;15914:11934;;;27006:28;27002:60;;15914:11934;;27091:24;;;;15914:11934;27091:24;;;;;;15914:11934;27091:24;;;;;;;;27149:3;27091:24;26926:3;27091:24;;;;;;26926:3;27149;;:::i;:::-;26926;:::i;:::-;26896:13;;27091:24;;;;;;;;;;;;;;:::i;:::-;;;;;15914:11934;;;;;;;;;27002:60;27054:8;;;;26926:3;27054:8;26926:3;:::i;26960:27::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15914:11934;;;;;;;;;;;;26960:27;;;;;;;;15914:11934;;;;;;;;;26855:25;;;;;;;;;;;;;;;;;:::i;:::-;;;15914:11934;;;;;26855:25;;;;;;;;;;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16167:7;15914:11934;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6678:107;;:::i;:::-;19068:7;19056:10;;19068:7;:::i;:::-;15914:11934;;;;19103:11;15914:11934;;19087:55;19095:34;;;19087:55;:::i;:::-;15914:11934;;19161:28;;;;15914:11934;19161:28;;;;;;15914:11934;;19161:28;;;;;;;;;;;19153:67;19161:28;;;;;15914:11934;-1:-1:-1;15914:11934:0;;19056:10;19161:42;19153:67;:::i;:::-;15914:11934;;;19264:15;15914:11934;;;;;19307:15;;;15914:11934;;;;;;;;19103:11;19371:23;;15914:11934;19397:15;19371:41;;15914:11934;;;19441:22;;;15914:11934;19441:26;;19437:176;;15914:11934;;;;;;;;19103:11;15914:11934;;19657:37;;;;;15914:11934;;;19657:37;;15914:11934;19657:37;;19056:10;;;19657:37;19056:10;;19657:37;;;15914:11934;;;;;;;;;;;;;;;;;19657:37;;;;;;;;;;;15914:11934;;;;19797:11;19749:22;15914:11934;19307:15;15914:11934;19749:22;:::i;19797:11::-;15914:11934;;19902:45;18918:5;18890:25;18900:15;15914:11934;18890:25;;:::i;:::-;15914:11934;18942:13;;;;;:::i;:::-;15914:11934;19902:7;15914:11934;;;;;19902:45;;;;;;15914:11934;19902:45;;19056:10;19902:45;;;15914:11934;;;;;;;;;;;;;;;;;19902:45;;;;;;;;;;;15914:11934;;19958:9;15914:11934;;;;;;;;;;19958:31;;20049:38;19958:31;;;15914:11934;19958:31;20016:17;19958:31;;:::i;:::-;:40;;:47;15914:11934;;;19958:47;:::i;:::-;15914:11934;;20016:17;15914:11934;20016:17;:::i;:::-;;15914:11934;;;;;;;;;19056:10;20049:38;;15914:11934;;;;;;;;;;;;;;19902:45;;;;;;;;;;;;;:::i;:::-;;;;;;15914:11934;;;;;;;;;19657:37;15914:11934;;;;;;;;;;19657:37;;;;15914:11934;;;;;;;;;;19657:37;15914:11934;;;19437:176;19498:41;19397:15;;19498:41;:::i;:::-;-1:-1:-1;15914:11934:0;;;19437:176;;;;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;;;;19264:15;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19161:28;;;;;;;;;;;;;;:::i;:::-;;;;15914:11934;;;;;;;;;;;;;;;:::i;:::-;2488:65;;:::i;:::-;15914:11934;;17837:47;15914:11934;;;17837:47;15914:11934;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;17221:56;15914:11934;;;;;;17221:56;15914:11934;17221:56;;15914:11934;17221:56;;;;15914:11934;17221:56;15914:11934;17221:56;;;;15914:11934;17221:56;;;15914:11934;17221:56;;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o;:::-;19958:9;15914:11934;;;;;;19958:9;-1:-1:-1;15914:11934:0;;;;;;-1:-1:-1;15914:11934:0;:::o;:::-;;;;;;;;;;2795:166;15914:11934;2705:6;15914:11934;;740:10;2855:23;2851:103;;2795:166::o;2851:103::-;15914:11934;;;2902:40;;;740:10;2902:40;;;15914:11934;2902:40;15914:11934;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;6791:313::-;6099:1;6920:7;15914:11934;6920:18;6916:88;;6099:1;6920:7;15914:11934;6791:313::o;6916:88::-;6962:30;15914:11934;;6962:30;;;;16519:371;16584:9;15914:11934;16584:20;16580:236;;16519:371;15914:11934;;;;;;;;;;;;;;;;;;;;16841:40;;;16603:1;15914:11934;;;;16584:9;15914:11934;;;;;;;;;;;;16584:9;15914:11934;;:::i;:::-;;;;;;;;;;;;;;;;;16519:371::o;15914:11934::-;;;;;;;;;;;;;;;;;;;;16580:236;15914:11934;;;;;;;;16654:1;16625:31;;;:::i;:::-;:40;;15914:11934;16580:236;16621:184;16716:31;;;:::i;:::-;15914:11934;;16783:7::o;15914:11934::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;20101:186;16167:7;;-1:-1:-1;20201:30:0;;;16167:7;;20201:78;;;16213:8;20101:186;:::o;20201:78::-;16213:8;15914:11934;;;;;;;;;;;;;;;;;20101:186;:::o;15914:11934::-;;;;;;;;;;20293:248;20414:15;20396:33;;15914:11934;;20500:32;20476:57;20414:15;;20500:32;:::i;:::-;20476:57;:::i;:::-;20293:248;:::o;15914:11934::-;;;;;;;;;;;;;;;;;;;;;;;20547:397;;20749:36;20680:38;20812:18;20547:397;20680:38;:::i;:::-;20749:36;;:::i;:::-;20812:18;;:::i;:::-;20857:2;15914:11934;;;;;;20857:2;15914:11934;;;;;;;;;16213:8;;15914:11934;;;;;;;;;;;;;;;;;;;;;;;;20811:64;;;;:::i;:::-;15914:11934;;20912:10;;;16213:8;;;20911:25;20547:397;:::o;20911:25::-;;;20547:397;:::o;15914:11934::-;;;;;;;;;:::o;20950:672::-;;21066:1;21090:17;;;;15914:11934;;;21129:9;15914:11934;21118:356;21125:20;;;;;;21524:17;;;21587:19;21505:55;21524:17;21543:16;21524:17;16213:8;21524:17;;15914:11934;21543:16;;15914:11934;21505:55;;:::i;:::-;21587:19;;:::i;:::-;15914:11934;20950:672;:::o;21118:356::-;21183:12;;;;;;:::i;:::-;15914:11934;;;;21228:20;;21227:69;;;;21311:3;21252:31;:10;;;15914:11934;21265:18;;;15914:11934;21252:31;;:::i;:::-;21227:69;21311:3;:::i;:::-;21333:11;;;21329:25;;15914:11934;;16213:8;15914:11934;;;;;;;;;;;;;;;;21386:27;21440:15;15914:11934;21430:32;15914:11934;;21386:27;;:::i;21440:15::-;15914:11934;21430:32;;:::i;:::-;21118:356;;;;;;21329:25;21346:8;;;;;;21227:69;21311:3;21286:10;;;15914:11934;21227:69;21311:3;:::i;15914:11934::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21634:423::-;15914:11934;21634:423;15914:11934;21804:28;15914:11934;21746:11;15914:11934;;21730:55;21738:34;;;21730:55;:::i;:::-;15914:11934;;21804:28;;;;15914:11934;21804:28;;;;;;15914:11934;21804:28;;;;;;;21796:60;21804:28;-1:-1:-1;21804:28:0;;;15914:11934;;;;;21804:35;21796:60;:::i;:::-;-1:-1:-1;15914:11934:0;21893:15;21804:28;15914:11934;22005:17;15914:11934;;-1:-1:-1;15914:11934:0;21928:43;15914:11934;21936:8;;;15914:11934;;21928:43;:::i;:::-;15914:11934;:::i;21804:28::-;;;;;;;;;;;;;;;;;:::i;:::-;15914:11934;;;-1:-1:-1;15914:11934:0;;;;;22063:743;;22219:1;22243:17;;;;15914:11934;;;;22282:9;15914:11934;22271:384;;22278:20;;;:41;;;22271:384;22278:41;;;22359:12;;;:::i;:::-;15914:11934;;;;;22404:22;22403:73;;;;22491:3;22430:32;:11;;;15914:11934;22444:18;;;15914:11934;22430:32;;:::i;:::-;22403:73;22491:3;:::i;:::-;22513:11;;;22509:25;;15914:11934;;16213:8;15914:11934;;;;;;;;;;;;;;;;22566:28;22621:15;15914:11934;22611:32;15914:11934;;22566:28;;:::i;22611:32::-;22271:384;;;;;22509:25;22526:8;;;;;;22403:73;22491:3;22465:11;;;15914:11934;22403:73;22491:3;:::i;22278:41::-;;;;;;;22768:19;22686:55;16213:8;22278:41;22724:16;22705:17;;;15914:11934;22724:16;;15914:11934;22686:55;;:::i;:::-;22768:19;;:::i;:::-;15914:11934;22752:46;22063:743;:::o;22278:41::-;22302:17;;;;22278:41;;15914:11934;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;23416:813;;15914:11934;;;23504:11;15914:11934;;23496:34;23488:55;23496:34;;;23488:55;:::i;:::-;15914:11934;;;;23562:28;;15914:11934;23562:28;;;;;;15914:11934;23562:28;15914:11934;23562:28;;;;;;;;;;;;;23554:59;23562:28;-1:-1:-1;23562:28:0;;;;;;23416:813;-1:-1:-1;15914:11934:0;;;;;23562:34;;23554:59;:::i;:::-;15914:11934;-1:-1:-1;15914:11934:0;23650:15;15914:11934;;;-1:-1:-1;15914:11934:0;23685:43;15914:11934;23693:8;;;15914:11934;;23685:43;:::i;:::-;23777:17;15914:11934;;;:::i;23777:17::-;23809:18;;;;;;23805:101;;23416:813;15914:11934;;23936:9;15914:11934;;;;;;;;;;;;23955:1;23917:16;;15914:11934;23936:9;15914:11934;;;;;;;;;24137:31;23987;;;23967:17;23955:1;23987:31;;;;:::i;:::-;:40;;15914:11934;23967:17;;15914:11934;24103:23;15914:11934;24046:10;15914:11934;24038:54;24046:23;;;;24038:54;:::i;24103:23::-;24046:10;15914:11934;23967:17;15914:11934;;;-1:-1:-1;15914:11934:0;;24137:31;;;;;;15914:11934;24137:31;;23562:28;24137:31;;15914:11934;;;;;;;;;;;;;;;;;24137:31;;;;;;;;;;24184:37;24137:31;;;;;23416:813;15914:11934;;;;;;;;;24184:37;23416:813::o;24137:31::-;;;;;;;;;;;;;:::i;:::-;;;;;;15914:11934;;;-1:-1:-1;15914:11934:0;;;;;23805:101;23887:18;;;:::i;:::-;23842:9;15914:11934;;;;;;;;;23871:1;23842:31;:64;:31;;:::i;:64::-;15914:11934;;23805:101;;;;23562:28;;;;;;;;;;;;;;:::i;:::-;;;;25417:485;25457:9;15914:11934;25457:21;;25453:34;;15914:11934;;25515:32;15914:11934;25515:7;15914:11934;;;;25515:32;;;;15914:11934;25515:32;;25541:4;25515:32;;;15914:11934;25515:32;;;;;;;25477:1;25515:32;;;25417:485;-1:-1:-1;25608:11:0;15914:11934;25477:1;;25598:21;;;25594:91;;25417:485;15914:11934;;25715:10;15914:11934;25699:26;;;25695:163;;25417:485;15914:11934;;25715:10;15914:11934;25417:485::o;25695:163::-;25757:26;;;;:::i;:::-;15914:11934;;;;;;;;;25827:1;25798:31;:48;:31;;:::i;:48::-;15914:11934;;25695:163;;;;25594:91;25652:21;;;;;:::i;:::-;25594:91;;;;;25515:32;;;;;;;;;;;;;;;;;:::i;:::-;;;15914:11934;;;;;;25515:32;;;;;;;-1:-1:-1;25515:32:0;;25453:34;25480:7;:::o
Swarm Source
ipfs://4b92ae46c52a3e749c6f601020d7376cce095125b1ea14d5c8a4b111f4578377
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.