More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 415 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 12098085 | 1435 days ago | IN | 0 ETH | 0.00388411 | ||||
Transfer Ownersh... | 11999063 | 1450 days ago | IN | 0 ETH | 0.00506208 | ||||
Unstake All | 11576116 | 1515 days ago | IN | 0 ETH | 0.01298759 | ||||
Unstake All | 11574408 | 1515 days ago | IN | 0 ETH | 0.00418332 | ||||
Unstake All | 11572730 | 1516 days ago | IN | 0 ETH | 0.0037398 | ||||
Claim All Reward... | 11566113 | 1517 days ago | IN | 0 ETH | 0.00660468 | ||||
Unstake All | 11564761 | 1517 days ago | IN | 0 ETH | 0.00554924 | ||||
Unstake All | 11563834 | 1517 days ago | IN | 0 ETH | 0.00685718 | ||||
Unstake All | 11553403 | 1519 days ago | IN | 0 ETH | 0.00994952 | ||||
Unstake All | 11547941 | 1519 days ago | IN | 0 ETH | 0.00993386 | ||||
Unstake All | 11538704 | 1521 days ago | IN | 0 ETH | 0.00467476 | ||||
Unstake All | 11538632 | 1521 days ago | IN | 0 ETH | 0.00485039 | ||||
Unstake All | 11536981 | 1521 days ago | IN | 0 ETH | 0.01433974 | ||||
Unstake All | 11536391 | 1521 days ago | IN | 0 ETH | 0.02220511 | ||||
Unstake All | 11536383 | 1521 days ago | IN | 0 ETH | 0.02549564 | ||||
Set Daily Reward | 11536352 | 1521 days ago | IN | 0 ETH | 0.0023982 | ||||
Update Pool | 11536351 | 1521 days ago | IN | 0 ETH | 0.01218525 | ||||
Unstake All | 11536347 | 1521 days ago | IN | 0 ETH | 0.02168284 | ||||
Unstake All | 11536095 | 1521 days ago | IN | 0 ETH | 0.0061599 | ||||
Unstake All | 11535948 | 1521 days ago | IN | 0 ETH | 0.01489957 | ||||
Unstake All | 11533456 | 1522 days ago | IN | 0 ETH | 0.00862515 | ||||
Unstake All | 11531612 | 1522 days ago | IN | 0 ETH | 0.00552068 | ||||
Unstake All | 11529701 | 1522 days ago | IN | 0 ETH | 0.0065349 | ||||
Unstake All | 11527960 | 1522 days ago | IN | 0 ETH | 0.00425033 | ||||
Unstake All | 11524346 | 1523 days ago | IN | 0 ETH | 0.01025556 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
LPStaking
Compiler Version
v0.6.10+commit.00c0fcaf
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-29 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: contracts/Ownable.sol pragma solidity ^0.6.10; contract Ownable is Context { address payable public owner; event TransferredOwnership(address _previous, address _next, uint256 _time); event AddedPlatformAddress(address _platformAddress, uint256 _time); modifier onlyOwner() { require(_msgSender() == owner, "Owner only"); _; } modifier onlyPlatform() { require(platformAddress[_msgSender()] == true, "Only Platform"); _; } mapping(address => bool) platformAddress; constructor() public { owner = _msgSender(); } function transferOwnership(address payable _owner) public onlyOwner() { address previousOwner = owner; owner = _owner; emit TransferredOwnership(previousOwner, owner, now); } function addPlatformAddress(address _platformAddress) public onlyOwner() { platformAddress[_platformAddress] = true; emit AddedPlatformAddress(_platformAddress, now); } } // File: contracts/LPStaking.sol pragma solidity ^0.6.10; interface ILPStakingNFT { function nftTokenId(address _stakeholder) external view returns(uint256 id); function revertNftTokenId(address _stakeholder, uint256 _tokenId) external; function ownerOf(uint256 tokenId) external view returns (address owner); function balanceOf(address owner) external view returns (uint256 balance); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); } contract LPStaking is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; struct NFT { address _addressOfMinter; uint256 _LPDeposited; bool _inCirculation; uint256 _rewardDebt; } event StakeCompleted(address _staker, uint256 _amount, uint256 _tokenId, uint256 _totalStaked, uint256 _time); event PoolUpdated(uint256 _blocksRewarded, uint256 _amountRewarded, uint256 _time); event RewardsClaimed(address _staker, uint256 _rewardsClaimed, uint256 _tokenId, uint256 _time); event MintedToken(address _staker, uint256 _tokenId, uint256 _time); event EmergencyWithdrawOn(address _caller, bool _emergencyWithdraw, uint256 _time); event WithdrawCompleted(address _staker, uint256 _amount, uint256 _tokenId, uint256 _time); IERC20 public LPToken; IERC20 public NFYToken; ILPStakingNFT public StakingNFT; address public rewardPool; address public staking; uint256 public dailyReward; uint256 public accNfyPerShare; uint256 public lastRewardBlock; uint256 public totalStaked; bool public emergencyWithdraw = false; mapping(uint256 => NFT) public NFTDetails; // Constructor will set the address of NFY/ETH LP token and address of NFY/ETH LP token staking NFT constructor(address _LPToken, address _NFYToken, address _StakingNFT, address _staking, address _rewardPool, uint256 _dailyReward) Ownable() public { LPToken = IERC20(_LPToken); NFYToken = IERC20(_NFYToken); StakingNFT = ILPStakingNFT(_StakingNFT); staking = _staking; rewardPool = _rewardPool; // 10:30 EST October 29th lastRewardBlock = 11152600; setDailyReward(_dailyReward); accNfyPerShare = 0; } // 6500 blocks in average day --- decimals * NFY balance of rewardPool / blocks / 10000 * dailyReward (in hundredths of %) = rewardPerBlock function getRewardPerBlock() public view returns(uint256) { return NFYToken.balanceOf(rewardPool).div(6500).div(10000).mul(dailyReward); } // % of reward pool to be distributed each day --- in hundredths of % 30 == 0.3% function setDailyReward(uint256 _dailyReward) public onlyOwner { dailyReward = _dailyReward; } // Function that will get balance of a NFY balance of a certain stake function getNFTBalance(uint256 _tokenId) public view returns(uint256 _amountStaked) { return NFTDetails[_tokenId]._LPDeposited; } // Function that will check if a NFY/ETH LP stake NFT is in circulation function checkIfNFTInCirculation(uint256 _tokenId) public view returns(bool _inCirculation) { return NFTDetails[_tokenId]._inCirculation; } // Function that returns NFT's pending rewards function pendingRewards(uint256 _NFT) public view returns(uint256) { NFT storage nft = NFTDetails[_NFT]; uint256 _accNfyPerShare = accNfyPerShare; if (block.number > lastRewardBlock && totalStaked != 0) { uint256 blocksToReward = block.number.sub(lastRewardBlock); uint256 nfyReward = blocksToReward.mul(getRewardPerBlock()); _accNfyPerShare = _accNfyPerShare.add(nfyReward.mul(1e18).div(totalStaked)); } return nft._LPDeposited.mul(_accNfyPerShare).div(1e18).sub(nft._rewardDebt); } // Get total rewards for all of user's NFY/ETH LP nfts function getTotalRewards(address _address) public view returns(uint256) { uint256 totalRewards; for(uint256 i = 0; i < StakingNFT.balanceOf(_address); i++) { uint256 _rewardPerNFT = pendingRewards(StakingNFT.tokenOfOwnerByIndex(_address, i)); totalRewards = totalRewards.add(_rewardPerNFT); } return totalRewards; } // Get total stake for all user's NFY/ETH LP nfts function getTotalBalance(address _address) public view returns(uint256) { uint256 totalBalance; for(uint256 i = 0; i < StakingNFT.balanceOf(_address); i++) { uint256 _balancePerNFT = getNFTBalance(StakingNFT.tokenOfOwnerByIndex(_address, i)); totalBalance = totalBalance.add(_balancePerNFT); } return totalBalance; } // Function that updates NFY/ETH LP pool function updatePool() public { if (block.number <= lastRewardBlock) { return; } if (totalStaked == 0) { lastRewardBlock = block.number; return; } uint256 blocksToReward = block.number.sub(lastRewardBlock); uint256 nfyReward = blocksToReward.mul(getRewardPerBlock()); NFYToken.transferFrom(rewardPool, address(this), nfyReward); accNfyPerShare = accNfyPerShare.add(nfyReward.mul(1e18).div(totalStaked)); lastRewardBlock = block.number; emit PoolUpdated(blocksToReward, nfyReward, now); } // Function that lets user stake NFY function stakeLP(uint256 _amount) public { require(emergencyWithdraw == false, "emergency withdraw is on, cannot stake"); require(_amount > 0, "Can not stake 0 LP tokens"); require(LPToken.balanceOf(_msgSender()) >= _amount, "Do not have enough LP tokens to stake"); updatePool(); if(StakingNFT.nftTokenId(_msgSender()) == 0){ addStakeholder(_msgSender()); } NFT storage nft = NFTDetails[StakingNFT.nftTokenId(_msgSender())]; if(nft._LPDeposited > 0) { uint256 _pendingRewards = nft._LPDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); if(_pendingRewards > 0) { NFYToken.transfer(_msgSender(), _pendingRewards); emit RewardsClaimed(_msgSender(), _pendingRewards, StakingNFT.nftTokenId(_msgSender()), now); } } LPToken.transferFrom(_msgSender(), address(this), _amount); nft._LPDeposited = nft._LPDeposited.add(_amount); totalStaked = totalStaked.add(_amount); nft._rewardDebt = nft._LPDeposited.mul(accNfyPerShare).div(1e18); emit StakeCompleted(_msgSender(), _amount, StakingNFT.nftTokenId(_msgSender()), nft._LPDeposited, now); } function addStakeholder(address _stakeholder) private { (bool success, bytes memory data) = staking.call(abi.encodeWithSignature("mint(address)", _stakeholder)); require(success == true, "Mint call failed"); NFTDetails[StakingNFT.nftTokenId(_msgSender())]._addressOfMinter = _stakeholder; NFTDetails[StakingNFT.nftTokenId(_msgSender())]._inCirculation = true; } function addStakeholderExternal(address _stakeholder) external onlyPlatform() { (bool success, bytes memory data) = staking.call(abi.encodeWithSignature("mint(address)", _stakeholder)); require(success == true, "Mint call failed"); NFTDetails[StakingNFT.nftTokenId(_msgSender())]._addressOfMinter = _stakeholder; NFTDetails[StakingNFT.nftTokenId(_msgSender())]._inCirculation = true; } // Function that will allow user to claim rewards function claimRewards(uint256 _tokenId) public { require(StakingNFT.ownerOf(_tokenId) == _msgSender(), "User is not owner of token"); require(NFTDetails[_tokenId]._inCirculation == true, "Stake has already been withdrawn"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; uint256 _pendingRewards = nft._LPDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); require(_pendingRewards > 0, "No rewards to claim!"); NFYToken.transfer(_msgSender(), _pendingRewards); nft._rewardDebt = nft._LPDeposited.mul(accNfyPerShare).div(1e18); emit RewardsClaimed(_msgSender(), _pendingRewards, _tokenId, now); } // Function that lets user claim all rewards from all their nfts function claimAllRewards() public { require(StakingNFT.balanceOf(_msgSender()) > 0, "User has no stake"); for(uint256 i = 0; i < StakingNFT.balanceOf(_msgSender()); i++) { uint256 _currentNFT = StakingNFT.tokenOfOwnerByIndex(_msgSender(), i); claimRewards(_currentNFT); } } // Function that lets user unstake NFY in system. 5% fee that gets redistributed back to reward pool function unstakeLP(uint256 _tokenId) public { require(emergencyWithdraw == true, "Can not withdraw"); // Require that user is owner of token id require(StakingNFT.ownerOf(_tokenId) == _msgSender(), "User is not owner of token"); require(NFTDetails[_tokenId]._inCirculation == true, "Stake has already been withdrawn"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; uint256 _pendingRewards = nft._LPDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); uint256 amountStaked = getNFTBalance(_tokenId); uint256 beingWithdrawn = nft._LPDeposited; nft._LPDeposited = 0; nft._inCirculation = false; totalStaked = totalStaked.sub(beingWithdrawn); StakingNFT.revertNftTokenId(_msgSender(), _tokenId); (bool success, bytes memory data) = staking.call(abi.encodeWithSignature("burn(uint256)", _tokenId)); require(success == true, "burn call failed"); LPToken.transfer(_msgSender(), amountStaked); NFYToken.transfer(_msgSender(), _pendingRewards); emit WithdrawCompleted(_msgSender(), amountStaked, _tokenId, now); emit RewardsClaimed(_msgSender(), _pendingRewards, _tokenId, now); } // Function that will unstake every user's NFY/ETH LP stake NFT for user function unstakeAll() public { require(StakingNFT.balanceOf(_msgSender()) > 0, "User has no stake"); while(StakingNFT.balanceOf(_msgSender()) > 0) { uint256 _currentNFT = StakingNFT.tokenOfOwnerByIndex(_msgSender(), 0); unstakeLP(_currentNFT); } } // Will increment value of staking NFT when trade occurs function incrementNFTValue (uint256 _tokenId, uint256 _amount) external onlyPlatform() { require(checkIfNFTInCirculation(_tokenId) == true, "Token not in circulation"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; if(nft._LPDeposited > 0) { uint256 _pendingRewards = nft._LPDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); if(_pendingRewards > 0) { NFYToken.transfer(StakingNFT.ownerOf(_tokenId), _pendingRewards); emit RewardsClaimed(StakingNFT.ownerOf(_tokenId), _pendingRewards, _tokenId, now); } } NFTDetails[_tokenId]._LPDeposited = NFTDetails[_tokenId]._LPDeposited.add(_amount); nft._rewardDebt = nft._LPDeposited.mul(accNfyPerShare).div(1e18); } // Will decrement value of staking NFT when trade occurs function decrementNFTValue (uint256 _tokenId, uint256 _amount) external onlyPlatform() { require(checkIfNFTInCirculation(_tokenId) == true, "Token not in circulation"); require(getNFTBalance(_tokenId) >= _amount, "Not enough stake in NFT"); updatePool(); NFT storage nft = NFTDetails[_tokenId]; if(nft._LPDeposited > 0) { uint256 _pendingRewards = nft._LPDeposited.mul(accNfyPerShare).div(1e18).sub(nft._rewardDebt); if(_pendingRewards > 0) { NFYToken.transfer(StakingNFT.ownerOf(_tokenId), _pendingRewards); emit RewardsClaimed(StakingNFT.ownerOf(_tokenId), _pendingRewards, _tokenId, now); } } NFTDetails[_tokenId]._LPDeposited = NFTDetails[_tokenId]._LPDeposited.sub(_amount); nft._rewardDebt = nft._LPDeposited.mul(accNfyPerShare).div(1e18); } // Function that will turn on emergency withdraws function turnEmergencyWithdrawOn() public onlyOwner() { require(emergencyWithdraw == false, "emergency withdrawing already allowed"); emergencyWithdraw = true; emit EmergencyWithdrawOn(_msgSender(), emergencyWithdraw, now); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_LPToken","type":"address"},{"internalType":"address","name":"_NFYToken","type":"address"},{"internalType":"address","name":"_StakingNFT","type":"address"},{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address","name":"_rewardPool","type":"address"},{"internalType":"uint256","name":"_dailyReward","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_platformAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"AddedPlatformAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_caller","type":"address"},{"indexed":false,"internalType":"bool","name":"_emergencyWithdraw","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"EmergencyWithdrawOn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"MintedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_blocksRewarded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amountRewarded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"PoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_rewardsClaimed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalStaked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"StakeCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_previous","type":"address"},{"indexed":false,"internalType":"address","name":"_next","type":"address"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"TransferredOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"}],"name":"WithdrawCompleted","type":"event"},{"inputs":[],"name":"LPToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTDetails","outputs":[{"internalType":"address","name":"_addressOfMinter","type":"address"},{"internalType":"uint256","name":"_LPDeposited","type":"uint256"},{"internalType":"bool","name":"_inCirculation","type":"bool"},{"internalType":"uint256","name":"_rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFYToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"StakingNFT","outputs":[{"internalType":"contract ILPStakingNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accNfyPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_platformAddress","type":"address"}],"name":"addPlatformAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakeholder","type":"address"}],"name":"addStakeholderExternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkIfNFTInCirculation","outputs":[{"internalType":"bool","name":"_inCirculation","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"decrementNFTValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getNFTBalance","outputs":[{"internalType":"uint256","name":"_amountStaked","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getTotalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"incrementNFTValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_NFT","type":"uint256"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dailyReward","type":"uint256"}],"name":"setDailyReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turnEmergencyWithdrawOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unstakeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600b60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051620051f3380380620051f3833981810160405260c08110156200005257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050620000a56200025860201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062aa2cd860098190555062000244816200026060201b60201c565b60006008819055505050505050506200033c565b600033905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620002a86200025860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b614ea7806200034c6000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c80636c9128e21161010f578063c964ad45116100a2578063e5da2cb211610071578063e5da2cb2146107ba578063f2fde38b146107e8578063f7929e441461082c578063fd5e0fe214610836576101e4565b8063c964ad4514610718578063d3d3819314610736578063db2e21bc1461078e578063e3161ddd146107b0576101e4565b80638da5cb5b116100de5780638da5cb5b1461063e5780639ca152f114610688578063a9f8d181146106cc578063c4778998146106ea576101e4565b80636c9128e21461055c5780637dcb2abf146105a6578063817b1cd2146105e85780638306fddb14610606576101e4565b80632bcf161c1161018757806349df8d331161015657806349df8d33146104235780634cf088d91461044157806366666aa91461048b5780636bdb744e146104d5576101e4565b80632bcf161c1461033f57806331455f2a1461039757806333a1cb27146103cf57806335322f3714610419576101e4565b80630962ef79116101c35780630962ef79146102bb5780630aa43533146102e95780630b83a727146103175780631190615d14610321576101e4565b80628e5c2a146101e9578063011cee361461022f57806302d24d9414610279575b600080fd5b610215600480360360208110156101ff57600080fd5b810190808035906020019092919050505061087a565b604051808215151515815260200191505060405180910390f35b6102376108a7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102a56004803603602081101561028f57600080fd5b81019080803590602001909291905050506108cd565b6040518082815260200191505060405180910390f35b6102e7600480360360208110156102d157600080fd5b81019080803590602001909291905050506108ed565b005b610315600480360360208110156102ff57600080fd5b8101908080359060200190929190505050610d6f565b005b61031f610e42565b005b61032961118d565b6040518082815260200191505060405180910390f35b6103816004803603602081101561035557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611193565b6040518082815260200191505060405180910390f35b6103cd600480360360408110156103ad57600080fd5b810190808035906020019092919080359060200190929190505050611398565b005b6103d7611927565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61042161194d565b005b61042b611c8c565b6040518082815260200191505060405180910390f35b610449611dcb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610493611df1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610501600480360360208110156104eb57600080fd5b8101908080359060200190929190505050611e17565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390f35b610564611e74565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d2600480360360208110156105bc57600080fd5b8101908080359060200190929190505050611e9a565b6040518082815260200191505060405180910390f35b6105f0611f9f565b6040518082815260200191505060405180910390f35b61063c6004803603604081101561061c57600080fd5b810190808035906020019092919080359060200190929190505050611fa5565b005b6106466124b6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106ca6004803603602081101561069e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124db565b005b6106d4612a01565b6040518082815260200191505060405180910390f35b6107166004803603602081101561070057600080fd5b8101908080359060200190929190505050612a07565b005b6107206132d7565b6040518082815260200191505060405180910390f35b6107786004803603602081101561074c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132dd565b6040518082815260200191505060405180910390f35b6107966134e2565b604051808215151515815260200191505060405180910390f35b6107b86134f5565b005b6107e6600480360360208110156107d057600080fd5b8101908080359060200190929190505050613728565b005b61082a600480360360208110156107fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506140f7565b005b6108346142ea565b005b6108786004803603602081101561084c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506144c9565b005b6000600c600083815260200190815260200160002060020160009054906101000a900460ff169050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c6000838152602001908152602001600020600101549050919050565b6108f5614657565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561097e57600080fd5b505afa158015610992573d6000803e3d6000fd5b505050506040513d60208110156109a857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614610a42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600c600083815260200190815260200160002060020160009054906101000a900460ff16151514610adf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b610ae76134f5565b6000600c600083815260200190815260200160002090506000610b498260030154610b3b670de0b6b3a7640000610b2d600854876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b905060008111610bc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f207265776172647320746f20636c61696d2100000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610c07614657565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c7157600080fd5b505af1158015610c85573d6000803e3d6000fd5b505050506040513d6020811015610c9b57600080fd5b810190808051906020019092919050505050610ce0670de0b6b3a7640000610cd2600854856001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b82600301819055507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf610d11614657565b828542604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610daf614657565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610e8a614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610eea57600080fd5b505afa158015610efe573d6000803e3d6000fd5b505050506040513d6020811015610f1457600080fd5b810190808051906020019092919050505011610f98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b60008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610fe4614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561104457600080fd5b505afa158015611058573d6000803e3d6000fd5b505050506040513d602081101561106e57600080fd5b810190808051906020019092919050505081101561118a576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c596110ce614657565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561113657600080fd5b505afa15801561114a573d6000803e3d6000fd5b505050506040513d602081101561116057600080fd5b8101908080519060200190929190505050905061117c816108ed565b508080600101915050610f9e565b50565b60085481565b60008060008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561123b57600080fd5b505afa15801561124f573d6000803e3d6000fd5b505050506040513d602081101561126557600080fd5b810190808051906020019092919050505081101561138e576000611369600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561132957600080fd5b505afa15801561133d573d6000803e3d6000fd5b505050506040513d602081101561135357600080fd5b8101908080519060200190929190505050611e9a565b905061137e818461477990919063ffffffff16565b925050808060010191505061119c565b5080915050919050565b60011515600160006113a8614657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b600115156114728361087a565b1515146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b806114f1836108cd565b1015611565576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f7420656e6f756768207374616b6520696e204e465400000000000000000081525060200191505060405180910390fd5b61156d6134f5565b6000600c600084815260200190815260200160002090506000816001015411156118a45760006115dc82600301546115ce670de0b6b3a76400006115c0600854876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b905060008111156118a257600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561169857600080fd5b505afa1580156116ac573d6000803e3d6000fd5b505050506040513d60208110156116c257600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561173d57600080fd5b505af1158015611751573d6000803e3d6000fd5b505050506040513d602081101561176757600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561180d57600080fd5b505afa158015611821573d6000803e3d6000fd5b505050506040513d602081101561183757600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b6118cd82600c60008681526020019081526020016000206001015461472f90919063ffffffff16565b600c60008581526020019081526020016000206001018190555061191a670de0b6b3a764000061190c600854846001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b8160030181905550505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231611995614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119f557600080fd5b505afa158015611a09573d6000803e3d6000fd5b505050506040513d6020811015611a1f57600080fd5b810190808051906020019092919050505011611aa3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231611aec614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b4c57600080fd5b505afa158015611b60573d6000803e3d6000fd5b505050506040513d6020811015611b7657600080fd5b81019080805190602001909291905050501115611c8a576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59611bd5614657565b60006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015611c3e57600080fd5b505afa158015611c52573d6000803e3d6000fd5b505050506040513d6020811015611c6857600080fd5b81019080805190602001909291905050509050611c8481612a07565b50611aa4565b565b6000611dc6600754611db8612710611daa611964600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d6157600080fd5b505afa158015611d75573d6000803e3d6000fd5b505050506040513d6020811015611d8b57600080fd5b81019080805190602001909291905050506146e590919063ffffffff16565b6146e590919063ffffffff16565b61465f90919063ffffffff16565b905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154905084565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c600084815260200190815260200160002090506000600854905060095443118015611ecd57506000600a5414155b15611f4f576000611ee96009544361472f90919063ffffffff16565b90506000611f07611ef8611c8c565b8361465f90919063ffffffff16565b9050611f4a611f3b600a54611f2d670de0b6b3a76400008561465f90919063ffffffff16565b6146e590919063ffffffff16565b8461477990919063ffffffff16565b925050505b611f968260030154611f88670de0b6b3a7640000611f7a85876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b92505050919050565b600a5481565b6001151560016000611fb5614657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b6001151561207f8361087a565b1515146120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b6120fc6134f5565b6000600c6000848152602001908152602001600020905060008160010154111561243357600061216b826003015461215d670de0b6b3a764000061214f600854876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b9050600081111561243157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561222757600080fd5b505afa15801561223b573d6000803e3d6000fd5b505050506040513d602081101561225157600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156122cc57600080fd5b505af11580156122e0573d6000803e3d6000fd5b505050506040513d60208110156122f657600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561239c57600080fd5b505afa1580156123b0573d6000803e3d6000fd5b505050506040513d60208110156123c657600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b61245c82600c60008681526020019081526020016000206001015461477990919063ffffffff16565b600c6000858152602001908152602001600020600101819055506124a9670de0b6b3a764000061249b600854846001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b8160030181905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60011515600160006124eb614657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146125a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b60006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106126d257805182526020820191506020810190506020830392506126af565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612734576040519150601f19603f3d011682016040523d82523d6000602084013e612739565b606091505b509150915060011515821515146127b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb612803614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561286357600080fd5b505afa158015612877573d6000803e3d6000fd5b505050506040513d602081101561288d57600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb612939614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561299957600080fd5b505afa1580156129ad573d6000803e3d6000fd5b505050506040513d60208110156129c357600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b60095481565b60011515600b60009054906101000a900460ff16151514612a90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e206e6f742077697468647261770000000000000000000000000000000081525060200191505060405180910390fd5b612a98614657565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b2157600080fd5b505afa158015612b35573d6000803e3d6000fd5b505050506040513d6020811015612b4b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614612be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600c600083815260200190815260200160002060020160009054906101000a900460ff16151514612c82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b612c8a6134f5565b6000600c600083815260200190815260200160002090506000612cec8260030154612cde670de0b6b3a7640000612cd0600854876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b90506000612cf9846108cd565b90506000836001015490506000846001018190555060008460020160006101000a81548160ff021916908315150217905550612d4081600a5461472f90919063ffffffff16565b600a81905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386de6c65612d8c614657565b876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612df657600080fd5b505af1158015612e0a573d6000803e3d6000fd5b5050505060006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1687604051602401808281526020019150506040516020818303038152906040527f42966c68000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f0c5780518252602082019150602081019050602083039250612ee9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612f6e576040519150601f19603f3d011682016040523d82523d6000602084013e612f73565b606091505b50915091506001151582151514612ff2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6275726e2063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613038614657565b866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156130a257600080fd5b505af11580156130b6573d6000803e3d6000fd5b505050506040513d60208110156130cc57600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613124614657565b876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561318e57600080fd5b505af11580156131a2573d6000803e3d6000fd5b505050506040513d60208110156131b857600080fd5b8101908080519060200190929190505050507ffada57d3c4b7d2ba1d17dd51770436f3164806d8cf30ca643ad4c050f07019ea6131f3614657565b858942604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a17f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf613275614657565b868942604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a150505050505050565b60075481565b60008060008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561338557600080fd5b505afa158015613399573d6000803e3d6000fd5b505050506040513d60208110156133af57600080fd5b81019080805190602001909291905050508110156134d85760006134b3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561347357600080fd5b505afa158015613487573d6000803e3d6000fd5b505050506040513d602081101561349d57600080fd5b81019080805190602001909291905050506108cd565b90506134c8818461477990919063ffffffff16565b92505080806001019150506132e6565b5080915050919050565b600b60009054906101000a900460ff1681565b600954431161350357613726565b6000600a54141561351a5743600981905550613726565b60006135316009544361472f90919063ffffffff16565b9050600061354f613540611c8c565b8361465f90919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561365057600080fd5b505af1158015613664573d6000803e3d6000fd5b505050506040513d602081101561367a57600080fd5b8101908080519060200190929190505050506136cf6136be600a546136b0670de0b6b3a76400008561465f90919063ffffffff16565b6146e590919063ffffffff16565b60085461477990919063ffffffff16565b600881905550436009819055507f17b8644f386d1c7c7138ef98b3c8035622bbe94d7be9b26f71d2654a547c294382824260405180848152602001838152602001828152602001935050505060405180910390a150505b565b60001515600b60009054906101000a900460ff16151514613794576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614e4c6026913960400191505060405180910390fd5b6000811161380a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616e206e6f74207374616b652030204c5020746f6b656e730000000000000081525060200191505060405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231613851614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156138b157600080fd5b505afa1580156138c5573d6000803e3d6000fd5b505050506040513d60208110156138db57600080fd5b81019080805190602001909291905050501015613943576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614de16025913960400191505060405180910390fd5b61394b6134f5565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613993614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156139f357600080fd5b505afa158015613a07573d6000803e3d6000fd5b505050506040513d6020811015613a1d57600080fd5b81019080805190602001909291905050501415613a4557613a44613a3f614657565b614801565b5b6000600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613a91614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613af157600080fd5b505afa158015613b05573d6000803e3d6000fd5b505050506040513d6020811015613b1b57600080fd5b810190808051906020019092919050505081526020019081526020016000209050600081600101541115613df0576000613b948260030154613b86670de0b6b3a7640000613b78600854876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b90506000811115613dee57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613be5614657565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613c4f57600080fd5b505af1158015613c63573d6000803e3d6000fd5b505050506040513d6020811015613c7957600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf613cb4614657565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613cfb614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613d5b57600080fd5b505afa158015613d6f573d6000803e3d6000fd5b505050506040513d6020811015613d8557600080fd5b810190808051906020019092919050505042604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd613e36614657565b30856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613ed457600080fd5b505af1158015613ee8573d6000803e3d6000fd5b505050506040513d6020811015613efe57600080fd5b810190808051906020019092919050505050613f2782826001015461477990919063ffffffff16565b8160010181905550613f4482600a5461477990919063ffffffff16565b600a81905550613f7d670de0b6b3a7640000613f6f600854846001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b81600301819055507fa00b8f7d82e0096e45945f9300a4d40ff0d5d951e0611805a257d8c30a93e6fc613fae614657565b83600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613ff5614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561405557600080fd5b505afa158015614069573d6000803e3d6000fd5b505050506040513d602081101561407f57600080fd5b8101908080519060200190929190505050846001015442604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614137614657565b73ffffffffffffffffffffffffffffffffffffffff16146141c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f30e048e48a73aeea72c325c17c7dec1889a58fef3848c2d5fbb81502c4702f31816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1642604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661432a614657565b73ffffffffffffffffffffffffffffffffffffffff16146143b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60001515600b60009054906101000a900460ff1615151461441f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614e066025913960400191505060405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f0ddc38832c76d85de8f93d2b696c8851487fb920787fb5270a3e78a3f4d0d423614463614657565b600b60009054906101000a900460ff1642604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183151515158152602001828152602001935050505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614509614657565b73ffffffffffffffffffffffffffffffffffffffff1614614592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe6599c7f1b3687d38d7eb4fc4e63d64fd89455e0abaf9cc757d5476a5a54a0068142604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b600033905090565b60008083141561467257600090506146df565b600082840290508284828161468357fe5b04146146da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e2b6021913960400191505060405180910390fd5b809150505b92915050565b600061472783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c5a565b905092915050565b600061477183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614d20565b905092915050565b6000808284019050838110156147f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061492b5780518252602082019150602081019050602083039250614908565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461498d576040519150601f19603f3d011682016040523d82523d6000602084013e614992565b606091505b50915091506001151582151514614a11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614a5c614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614abc57600080fd5b505afa158015614ad0573d6000803e3d6000fd5b505050506040513d6020811015614ae657600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614b92614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614bf257600080fd5b505afa158015614c06573d6000803e3d6000fd5b505050506040513d6020811015614c1c57600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b60008083118290614d06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614ccb578082015181840152602081019050614cb0565b50505050905090810190601f168015614cf85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614d1257fe5b049050809150509392505050565b6000838311158290614dcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614d92578082015181840152602081019050614d77565b50505050905090810190601f168015614dbf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe446f206e6f74206861766520656e6f756768204c5020746f6b656e7320746f207374616b65656d657267656e6379207769746864726177696e6720616c726561647920616c6c6f776564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77656d657267656e6379207769746864726177206973206f6e2c2063616e6e6f74207374616b65a2646970667358221220f7b75af49d2a07eda676b10c1809aa9fb4edc91a6e67643f6379992ebd37f28d64736f6c634300060a0033000000000000000000000000146d3401b6a41122bd318ba676a01c44cb0795e20000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc000000000000000000000000a197d1829bfca8bfad6e6d2a6f7580e6b91196e7000000000000000000000000a197d1829bfca8bfad6e6d2a6f7580e6b91196e70000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac57000000000000000000000000000000000000000000000000000000000000001e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e45760003560e01c80636c9128e21161010f578063c964ad45116100a2578063e5da2cb211610071578063e5da2cb2146107ba578063f2fde38b146107e8578063f7929e441461082c578063fd5e0fe214610836576101e4565b8063c964ad4514610718578063d3d3819314610736578063db2e21bc1461078e578063e3161ddd146107b0576101e4565b80638da5cb5b116100de5780638da5cb5b1461063e5780639ca152f114610688578063a9f8d181146106cc578063c4778998146106ea576101e4565b80636c9128e21461055c5780637dcb2abf146105a6578063817b1cd2146105e85780638306fddb14610606576101e4565b80632bcf161c1161018757806349df8d331161015657806349df8d33146104235780634cf088d91461044157806366666aa91461048b5780636bdb744e146104d5576101e4565b80632bcf161c1461033f57806331455f2a1461039757806333a1cb27146103cf57806335322f3714610419576101e4565b80630962ef79116101c35780630962ef79146102bb5780630aa43533146102e95780630b83a727146103175780631190615d14610321576101e4565b80628e5c2a146101e9578063011cee361461022f57806302d24d9414610279575b600080fd5b610215600480360360208110156101ff57600080fd5b810190808035906020019092919050505061087a565b604051808215151515815260200191505060405180910390f35b6102376108a7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102a56004803603602081101561028f57600080fd5b81019080803590602001909291905050506108cd565b6040518082815260200191505060405180910390f35b6102e7600480360360208110156102d157600080fd5b81019080803590602001909291905050506108ed565b005b610315600480360360208110156102ff57600080fd5b8101908080359060200190929190505050610d6f565b005b61031f610e42565b005b61032961118d565b6040518082815260200191505060405180910390f35b6103816004803603602081101561035557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611193565b6040518082815260200191505060405180910390f35b6103cd600480360360408110156103ad57600080fd5b810190808035906020019092919080359060200190929190505050611398565b005b6103d7611927565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61042161194d565b005b61042b611c8c565b6040518082815260200191505060405180910390f35b610449611dcb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610493611df1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610501600480360360208110156104eb57600080fd5b8101908080359060200190929190505050611e17565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390f35b610564611e74565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d2600480360360208110156105bc57600080fd5b8101908080359060200190929190505050611e9a565b6040518082815260200191505060405180910390f35b6105f0611f9f565b6040518082815260200191505060405180910390f35b61063c6004803603604081101561061c57600080fd5b810190808035906020019092919080359060200190929190505050611fa5565b005b6106466124b6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106ca6004803603602081101561069e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124db565b005b6106d4612a01565b6040518082815260200191505060405180910390f35b6107166004803603602081101561070057600080fd5b8101908080359060200190929190505050612a07565b005b6107206132d7565b6040518082815260200191505060405180910390f35b6107786004803603602081101561074c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132dd565b6040518082815260200191505060405180910390f35b6107966134e2565b604051808215151515815260200191505060405180910390f35b6107b86134f5565b005b6107e6600480360360208110156107d057600080fd5b8101908080359060200190929190505050613728565b005b61082a600480360360208110156107fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506140f7565b005b6108346142ea565b005b6108786004803603602081101561084c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506144c9565b005b6000600c600083815260200190815260200160002060020160009054906101000a900460ff169050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c6000838152602001908152602001600020600101549050919050565b6108f5614657565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561097e57600080fd5b505afa158015610992573d6000803e3d6000fd5b505050506040513d60208110156109a857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614610a42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600c600083815260200190815260200160002060020160009054906101000a900460ff16151514610adf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b610ae76134f5565b6000600c600083815260200190815260200160002090506000610b498260030154610b3b670de0b6b3a7640000610b2d600854876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b905060008111610bc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f207265776172647320746f20636c61696d2100000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610c07614657565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c7157600080fd5b505af1158015610c85573d6000803e3d6000fd5b505050506040513d6020811015610c9b57600080fd5b810190808051906020019092919050505050610ce0670de0b6b3a7640000610cd2600854856001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b82600301819055507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf610d11614657565b828542604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610daf614657565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610e8a614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610eea57600080fd5b505afa158015610efe573d6000803e3d6000fd5b505050506040513d6020811015610f1457600080fd5b810190808051906020019092919050505011610f98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b60008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610fe4614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561104457600080fd5b505afa158015611058573d6000803e3d6000fd5b505050506040513d602081101561106e57600080fd5b810190808051906020019092919050505081101561118a576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c596110ce614657565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561113657600080fd5b505afa15801561114a573d6000803e3d6000fd5b505050506040513d602081101561116057600080fd5b8101908080519060200190929190505050905061117c816108ed565b508080600101915050610f9e565b50565b60085481565b60008060008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561123b57600080fd5b505afa15801561124f573d6000803e3d6000fd5b505050506040513d602081101561126557600080fd5b810190808051906020019092919050505081101561138e576000611369600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561132957600080fd5b505afa15801561133d573d6000803e3d6000fd5b505050506040513d602081101561135357600080fd5b8101908080519060200190929190505050611e9a565b905061137e818461477990919063ffffffff16565b925050808060010191505061119c565b5080915050919050565b60011515600160006113a8614657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b600115156114728361087a565b1515146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b806114f1836108cd565b1015611565576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f7420656e6f756768207374616b6520696e204e465400000000000000000081525060200191505060405180910390fd5b61156d6134f5565b6000600c600084815260200190815260200160002090506000816001015411156118a45760006115dc82600301546115ce670de0b6b3a76400006115c0600854876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b905060008111156118a257600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561169857600080fd5b505afa1580156116ac573d6000803e3d6000fd5b505050506040513d60208110156116c257600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561173d57600080fd5b505af1158015611751573d6000803e3d6000fd5b505050506040513d602081101561176757600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561180d57600080fd5b505afa158015611821573d6000803e3d6000fd5b505050506040513d602081101561183757600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b6118cd82600c60008681526020019081526020016000206001015461472f90919063ffffffff16565b600c60008581526020019081526020016000206001018190555061191a670de0b6b3a764000061190c600854846001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b8160030181905550505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231611995614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119f557600080fd5b505afa158015611a09573d6000803e3d6000fd5b505050506040513d6020811015611a1f57600080fd5b810190808051906020019092919050505011611aa3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5573657220686173206e6f207374616b6500000000000000000000000000000081525060200191505060405180910390fd5b5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231611aec614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b4c57600080fd5b505afa158015611b60573d6000803e3d6000fd5b505050506040513d6020811015611b7657600080fd5b81019080805190602001909291905050501115611c8a576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c59611bd5614657565b60006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015611c3e57600080fd5b505afa158015611c52573d6000803e3d6000fd5b505050506040513d6020811015611c6857600080fd5b81019080805190602001909291905050509050611c8481612a07565b50611aa4565b565b6000611dc6600754611db8612710611daa611964600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d6157600080fd5b505afa158015611d75573d6000803e3d6000fd5b505050506040513d6020811015611d8b57600080fd5b81019080805190602001909291905050506146e590919063ffffffff16565b6146e590919063ffffffff16565b61465f90919063ffffffff16565b905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154905084565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c600084815260200190815260200160002090506000600854905060095443118015611ecd57506000600a5414155b15611f4f576000611ee96009544361472f90919063ffffffff16565b90506000611f07611ef8611c8c565b8361465f90919063ffffffff16565b9050611f4a611f3b600a54611f2d670de0b6b3a76400008561465f90919063ffffffff16565b6146e590919063ffffffff16565b8461477990919063ffffffff16565b925050505b611f968260030154611f88670de0b6b3a7640000611f7a85876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b92505050919050565b600a5481565b6001151560016000611fb5614657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b6001151561207f8361087a565b1515146120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f6b656e206e6f7420696e2063697263756c6174696f6e000000000000000081525060200191505060405180910390fd5b6120fc6134f5565b6000600c6000848152602001908152602001600020905060008160010154111561243357600061216b826003015461215d670de0b6b3a764000061214f600854876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b9050600081111561243157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561222757600080fd5b505afa15801561223b573d6000803e3d6000fd5b505050506040513d602081101561225157600080fd5b8101908080519060200190929190505050836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156122cc57600080fd5b505af11580156122e0573d6000803e3d6000fd5b505050506040513d60208110156122f657600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561239c57600080fd5b505afa1580156123b0573d6000803e3d6000fd5b505050506040513d60208110156123c657600080fd5b8101908080519060200190929190505050828642604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b61245c82600c60008681526020019081526020016000206001015461477990919063ffffffff16565b600c6000858152602001908152602001600020600101819055506124a9670de0b6b3a764000061249b600854846001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b8160030181905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60011515600160006124eb614657565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146125a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4f6e6c7920506c6174666f726d0000000000000000000000000000000000000081525060200191505060405180910390fd5b60006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106126d257805182526020820191506020810190506020830392506126af565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612734576040519150601f19603f3d011682016040523d82523d6000602084013e612739565b606091505b509150915060011515821515146127b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb612803614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561286357600080fd5b505afa158015612877573d6000803e3d6000fd5b505050506040513d602081101561288d57600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb612939614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561299957600080fd5b505afa1580156129ad573d6000803e3d6000fd5b505050506040513d60208110156129c357600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b60095481565b60011515600b60009054906101000a900460ff16151514612a90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e206e6f742077697468647261770000000000000000000000000000000081525060200191505060405180910390fd5b612a98614657565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b2157600080fd5b505afa158015612b35573d6000803e3d6000fd5b505050506040513d6020811015612b4b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614612be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f55736572206973206e6f74206f776e6572206f6620746f6b656e00000000000081525060200191505060405180910390fd5b60011515600c600083815260200190815260200160002060020160009054906101000a900460ff16151514612c82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374616b652068617320616c7265616479206265656e2077697468647261776e81525060200191505060405180910390fd5b612c8a6134f5565b6000600c600083815260200190815260200160002090506000612cec8260030154612cde670de0b6b3a7640000612cd0600854876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b90506000612cf9846108cd565b90506000836001015490506000846001018190555060008460020160006101000a81548160ff021916908315150217905550612d4081600a5461472f90919063ffffffff16565b600a81905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386de6c65612d8c614657565b876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612df657600080fd5b505af1158015612e0a573d6000803e3d6000fd5b5050505060006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1687604051602401808281526020019150506040516020818303038152906040527f42966c68000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612f0c5780518252602082019150602081019050602083039250612ee9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612f6e576040519150601f19603f3d011682016040523d82523d6000602084013e612f73565b606091505b50915091506001151582151514612ff2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6275726e2063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613038614657565b866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156130a257600080fd5b505af11580156130b6573d6000803e3d6000fd5b505050506040513d60208110156130cc57600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613124614657565b876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561318e57600080fd5b505af11580156131a2573d6000803e3d6000fd5b505050506040513d60208110156131b857600080fd5b8101908080519060200190929190505050507ffada57d3c4b7d2ba1d17dd51770436f3164806d8cf30ca643ad4c050f07019ea6131f3614657565b858942604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a17f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf613275614657565b868942604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a150505050505050565b60075481565b60008060008090505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561338557600080fd5b505afa158015613399573d6000803e3d6000fd5b505050506040513d60208110156133af57600080fd5b81019080805190602001909291905050508110156134d85760006134b3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561347357600080fd5b505afa158015613487573d6000803e3d6000fd5b505050506040513d602081101561349d57600080fd5b81019080805190602001909291905050506108cd565b90506134c8818461477990919063ffffffff16565b92505080806001019150506132e6565b5080915050919050565b600b60009054906101000a900460ff1681565b600954431161350357613726565b6000600a54141561351a5743600981905550613726565b60006135316009544361472f90919063ffffffff16565b9050600061354f613540611c8c565b8361465f90919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561365057600080fd5b505af1158015613664573d6000803e3d6000fd5b505050506040513d602081101561367a57600080fd5b8101908080519060200190929190505050506136cf6136be600a546136b0670de0b6b3a76400008561465f90919063ffffffff16565b6146e590919063ffffffff16565b60085461477990919063ffffffff16565b600881905550436009819055507f17b8644f386d1c7c7138ef98b3c8035622bbe94d7be9b26f71d2654a547c294382824260405180848152602001838152602001828152602001935050505060405180910390a150505b565b60001515600b60009054906101000a900460ff16151514613794576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614e4c6026913960400191505060405180910390fd5b6000811161380a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616e206e6f74207374616b652030204c5020746f6b656e730000000000000081525060200191505060405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231613851614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156138b157600080fd5b505afa1580156138c5573d6000803e3d6000fd5b505050506040513d60208110156138db57600080fd5b81019080805190602001909291905050501015613943576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614de16025913960400191505060405180910390fd5b61394b6134f5565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613993614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156139f357600080fd5b505afa158015613a07573d6000803e3d6000fd5b505050506040513d6020811015613a1d57600080fd5b81019080805190602001909291905050501415613a4557613a44613a3f614657565b614801565b5b6000600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613a91614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613af157600080fd5b505afa158015613b05573d6000803e3d6000fd5b505050506040513d6020811015613b1b57600080fd5b810190808051906020019092919050505081526020019081526020016000209050600081600101541115613df0576000613b948260030154613b86670de0b6b3a7640000613b78600854876001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b61472f90919063ffffffff16565b90506000811115613dee57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613be5614657565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613c4f57600080fd5b505af1158015613c63573d6000803e3d6000fd5b505050506040513d6020811015613c7957600080fd5b8101908080519060200190929190505050507f56253d287efacdb2c4cd76dd03624a4821c1ce721d1152e8f5f5718f6087c9bf613cb4614657565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613cfb614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613d5b57600080fd5b505afa158015613d6f573d6000803e3d6000fd5b505050506040513d6020811015613d8557600080fd5b810190808051906020019092919050505042604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390a15b505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd613e36614657565b30856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613ed457600080fd5b505af1158015613ee8573d6000803e3d6000fd5b505050506040513d6020811015613efe57600080fd5b810190808051906020019092919050505050613f2782826001015461477990919063ffffffff16565b8160010181905550613f4482600a5461477990919063ffffffff16565b600a81905550613f7d670de0b6b3a7640000613f6f600854846001015461465f90919063ffffffff16565b6146e590919063ffffffff16565b81600301819055507fa00b8f7d82e0096e45945f9300a4d40ff0d5d951e0611805a257d8c30a93e6fc613fae614657565b83600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb613ff5614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561405557600080fd5b505afa158015614069573d6000803e3d6000fd5b505050506040513d602081101561407f57600080fd5b8101908080519060200190929190505050846001015442604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614137614657565b73ffffffffffffffffffffffffffffffffffffffff16146141c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f30e048e48a73aeea72c325c17c7dec1889a58fef3848c2d5fbb81502c4702f31816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1642604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661432a614657565b73ffffffffffffffffffffffffffffffffffffffff16146143b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60001515600b60009054906101000a900460ff1615151461441f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614e066025913960400191505060405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f0ddc38832c76d85de8f93d2b696c8851487fb920787fb5270a3e78a3f4d0d423614463614657565b600b60009054906101000a900460ff1642604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183151515158152602001828152602001935050505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614509614657565b73ffffffffffffffffffffffffffffffffffffffff1614614592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe6599c7f1b3687d38d7eb4fc4e63d64fd89455e0abaf9cc757d5476a5a54a0068142604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b600033905090565b60008083141561467257600090506146df565b600082840290508284828161468357fe5b04146146da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e2b6021913960400191505060405180910390fd5b809150505b92915050565b600061472783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c5a565b905092915050565b600061477183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614d20565b905092915050565b6000808284019050838110156147f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006060600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f6a627842000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061492b5780518252602082019150602081019050602083039250614908565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461498d576040519150601f19603f3d011682016040523d82523d6000602084013e614992565b606091505b50915091506001151582151514614a11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4d696e742063616c6c206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b82600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614a5c614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614abc57600080fd5b505afa158015614ad0573d6000803e3d6000fd5b505050506040513d6020811015614ae657600080fd5b8101908080519060200190929190505050815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4b7deb614b92614657565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614bf257600080fd5b505afa158015614c06573d6000803e3d6000fd5b505050506040513d6020811015614c1c57600080fd5b8101908080519060200190929190505050815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b60008083118290614d06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614ccb578082015181840152602081019050614cb0565b50505050905090810190601f168015614cf85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614d1257fe5b049050809150509392505050565b6000838311158290614dcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614d92578082015181840152602081019050614d77565b50505050905090810190601f168015614dbf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe446f206e6f74206861766520656e6f756768204c5020746f6b656e7320746f207374616b65656d657267656e6379207769746864726177696e6720616c726561647920616c6c6f776564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77656d657267656e6379207769746864726177206973206f6e2c2063616e6e6f74207374616b65a2646970667358221220f7b75af49d2a07eda676b10c1809aa9fb4edc91a6e67643f6379992ebd37f28d64736f6c634300060a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000146d3401b6a41122bd318ba676a01c44cb0795e20000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc000000000000000000000000a197d1829bfca8bfad6e6d2a6f7580e6b91196e7000000000000000000000000a197d1829bfca8bfad6e6d2a6f7580e6b91196e70000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac57000000000000000000000000000000000000000000000000000000000000001e
-----Decoded View---------------
Arg [0] : _LPToken (address): 0x146D3401B6a41122Bd318ba676A01c44cB0795E2
Arg [1] : _NFYToken (address): 0x1cBb83EbcD552D5EBf8131eF8c9CD9d9BAB342bC
Arg [2] : _StakingNFT (address): 0xa197D1829BFCa8BfaD6E6d2A6f7580e6b91196e7
Arg [3] : _staking (address): 0xa197D1829BFCa8BfaD6E6d2A6f7580e6b91196e7
Arg [4] : _rewardPool (address): 0x2f822dA8016d5e8ce3c93b53eE1528392Ca3ac57
Arg [5] : _dailyReward (uint256): 30
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000146d3401b6a41122bd318ba676a01c44cb0795e2
Arg [1] : 0000000000000000000000001cbb83ebcd552d5ebf8131ef8c9cd9d9bab342bc
Arg [2] : 000000000000000000000000a197d1829bfca8bfad6e6d2a6f7580e6b91196e7
Arg [3] : 000000000000000000000000a197d1829bfca8bfad6e6d2a6f7580e6b91196e7
Arg [4] : 0000000000000000000000002f822da8016d5e8ce3c93b53ee1528392ca3ac57
Arg [5] : 000000000000000000000000000000000000000000000000000000000000001e
Deployed Bytecode Sourcemap
20558:12365:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23189:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21385:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22961:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27804:709;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22770:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28591:331;;;:::i;:::-;;21574:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24048:386;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31688:910;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21442:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30404:315;;;:::i;:::-;;22524:152;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21512:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21480:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21728:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21413:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23402:578;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21647:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30789:829;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19078:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27315:426;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21610:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29036:1282;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21541:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24497:387;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21682:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24938:632;;;:::i;:::-;;25620:1277;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19620:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32661:257;;;:::i;:::-;;19834:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23189:153;23260:19;23299:10;:20;23310:8;23299:20;;;;;;;;;;;:35;;;;;;;;;;;;23292:42;;23189:153;;;:::o;21385:21::-;;;;;;;;;;;;;:::o;22961:143::-;23022:21;23063:10;:20;23074:8;23063:20;;;;;;;;;;;:33;;;23056:40;;22961:143;;;:::o;27804:709::-;27902:12;:10;:12::i;:::-;27870:44;;:10;;;;;;;;;;;:18;;;27889:8;27870:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;27862:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28003:4;27964:43;;:10;:20;27975:8;27964:20;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;27956:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28057:12;:10;:12::i;:::-;28082:15;28100:10;:20;28111:8;28100:20;;;;;;;;;;;28082:38;;28133:23;28159:67;28210:3;:15;;;28159:46;28200:4;28159:36;28180:14;;28159:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;:50;;:67;;;;:::i;:::-;28133:93;;28263:1;28245:15;:19;28237:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28302:8;;;;;;;;;;;:17;;;28320:12;:10;:12::i;:::-;28334:15;28302:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28381:46;28422:4;28381:36;28402:14;;28381:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;28363:3;:15;;:64;;;;28445:60;28460:12;:10;:12::i;:::-;28474:15;28491:8;28501:3;28445:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27804:709;;;:::o;22770:108::-;19329:5;;;;;;;;;;;19313:21;;:12;:10;:12::i;:::-;:21;;;19305:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22858:12:::1;22844:11;:26;;;;22770:108:::0;:::o;28591:331::-;28681:1;28644:10;;;;;;;;;;;:20;;;28665:12;:10;:12::i;:::-;28644:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;28636:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28719:9;28731:1;28719:13;;28715:200;28738:10;;;;;;;;;;;:20;;;28759:12;:10;:12::i;:::-;28738:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28734:1;:38;28715:200;;;28794:19;28816:10;;;;;;;;;;;:30;;;28847:12;:10;:12::i;:::-;28861:1;28816:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28794:69;;28878:25;28891:11;28878:12;:25::i;:::-;28715:200;28774:3;;;;;;;28715:200;;;;28591:331::o;21574:29::-;;;;:::o;24048:386::-;24111:7;24131:20;24168:9;24180:1;24168:13;;24164:231;24187:10;;;;;;;;;;;:20;;;24208:8;24187:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24183:1;:34;24164:231;;;24239:21;24263:59;24278:10;;;;;;;;;;;:30;;;24309:8;24319:1;24278:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24263:14;:59::i;:::-;24239:83;;24352:31;24369:13;24352:12;:16;;:31;;;;:::i;:::-;24337:46;;24164:231;24219:3;;;;;;;24164:231;;;;24414:12;24407:19;;;24048:386;;;:::o;31688:910::-;19453:4;19420:37;;:15;:29;19436:12;:10;:12::i;:::-;19420:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;19412:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31831:4:::1;31794:41;;:33;31818:8;31794:23;:33::i;:::-;:41;;;31786:78;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31910:7;31883:23;31897:8;31883:13;:23::i;:::-;:34;;31875:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31958:12;:10;:12::i;:::-;31983:15;32001:10;:20;32012:8;32001:20;;;;;;;;;;;31983:38;;32056:1;32037:3;:16;;;:20;32034:384;;;32074:23;32100:67;32151:3;:15;;;32100:46;32141:4;32100:36;32121:14;;32100:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;:50;;:67;;;;:::i;:::-;32074:93;;32205:1;32187:15;:19;32184:223;;;32227:8;;;;;;;;;;;:17;;;32245:10;;;;;;;;;;;:18;;;32264:8;32245:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;32275:15;32227:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;32315:76;32330:10;;;;;;;;;;;:18;;;32349:8;32330:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;32360:15;32377:8;32387:3;32315:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32184:223;32034:384;;32467:46;32505:7;32467:10;:20;32478:8;32467:20;;;;;;;;;;;:33;;;:37;;:46;;;;:::i;:::-;32430:10;:20;32441:8;32430:20;;;;;;;;;;;:33;;:83;;;;32544:46;32585:4;32544:36;32565:14;;32544:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;32526:3;:15;;:64;;;;19486:1;31688:910:::0;;:::o;21442:31::-;;;;;;;;;;;;;:::o;30404:315::-;30489:1;30452:10;;;;;;;;;;;:20;;;30473:12;:10;:12::i;:::-;30452:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;30444:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30533:179;30576:1;30539:10;;;;;;;;;;;:20;;;30560:12;:10;:12::i;:::-;30539:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;30533:179;;;30594:19;30616:10;;;;;;;;;;;:30;;;30647:12;:10;:12::i;:::-;30661:1;30616:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30594:69;;30678:22;30688:11;30678:9;:22::i;:::-;30533:179;;;;30404:315::o;22524:152::-;22573:7;22600:68;22656:11;;22600:51;22645:5;22600:40;22635:4;22600:8;;;;;;;;;;;:18;;;22619:10;;;;;;;;;;;22600:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;;:40;;;;:::i;:::-;:44;;:51;;;;:::i;:::-;:55;;:68;;;;:::i;:::-;22593:75;;22524:152;:::o;21512:22::-;;;;;;;;;;;;;:::o;21480:25::-;;;;;;;;;;;;;:::o;21728:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21413:22::-;;;;;;;;;;;;;:::o;23402:578::-;23460:7;23480:15;23498:10;:16;23509:4;23498:16;;;;;;;;;;;23480:34;;23527:23;23553:14;;23527:40;;23599:15;;23584:12;:30;:50;;;;;23633:1;23618:11;;:16;;23584:50;23580:305;;;23651:22;23676:33;23693:15;;23676:12;:16;;:33;;;;:::i;:::-;23651:58;;23724:17;23744:39;23763:19;:17;:19::i;:::-;23744:14;:18;;:39;;;;:::i;:::-;23724:59;;23816:57;23836:36;23860:11;;23836:19;23850:4;23836:9;:13;;:19;;;;:::i;:::-;:23;;:36;;;;:::i;:::-;23816:15;:19;;:57;;;;:::i;:::-;23798:75;;23580:305;;;23904:68;23956:3;:15;;;23904:47;23946:4;23904:37;23925:15;23904:3;:16;;;:20;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;23897:75;;;;23402:578;;;:::o;21647:26::-;;;;:::o;30789:829::-;19453:4;19420:37;;:15;:29;19436:12;:10;:12::i;:::-;19420:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;19412:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30932:4:::1;30895:41;;:33;30919:8;30895:23;:33::i;:::-;:41;;;30887:78;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30976:12;:10;:12::i;:::-;31001:15;31019:10;:20;31030:8;31019:20;;;;;;;;;;;31001:38;;31074:1;31055:3;:16;;;:20;31052:384;;;31092:23;31118:67;31169:3;:15;;;31118:46;31159:4;31118:36;31139:14;;31118:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;:50;;:67;;;;:::i;:::-;31092:93;;31223:1;31205:15;:19;31202:223;;;31245:8;;;;;;;;;;;:17;;;31263:10;;;;;;;;;;;:18;;;31282:8;31263:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;31293:15;31245:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;31333:76;31348:10;;;;;;;;;;;:18;;;31367:8;31348:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;31378:15;31395:8;31405:3;31333:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31202:223;31052:384;;31485:46;31523:7;31485:10;:20;31496:8;31485:20;;;;;;;;;;;:33;;;:37;;:46;;;;:::i;:::-;31448:10;:20;31459:8;31448:20;;;;;;;;;;;:33;;:83;;;;31562:46;31603:4;31562:36;31583:14;;31562:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;31544:3;:15;;:64;;;;19486:1;30789:829:::0;;:::o;19078:28::-;;;;;;;;;;;;;:::o;27315:426::-;19453:4;19420:37;;:15;:29;19436:12;:10;:12::i;:::-;19420:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;19412:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27405:12:::1;27419:17;27440:7;;;;;;;;;;;:12;;27494;27453:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27440:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27404:104;;;;27538:4;27527:15;;:7;:15;;;27519:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27641:12;27574:10;:47;27585:10;;;;;;;;;;;:21;;;27607:12;:10;:12::i;:::-;27585:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;27574:47;;;;;;;;;;;:64;;;:79;;;;;;;;;;;;;;;;;;27729:4;27664:10;:47;27675:10;;;;;;;;;;;:21;;;27697:12;:10;:12::i;:::-;27675:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;27664:47;;;;;;;;;;;:62;;;:69;;;;;;;;;;;;;;;;;;19486:1;;27315:426:::0;:::o;21610:30::-;;;;:::o;29036:1282::-;29120:4;29099:25;;:17;;;;;;;;;;;:25;;;29091:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29247:12;:10;:12::i;:::-;29215:44;;:10;;;;;;;;;;;:18;;;29234:8;29215:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;29207:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29348:4;29309:43;;:10;:20;29320:8;29309:20;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;29301:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29402:12;:10;:12::i;:::-;29427:15;29445:10;:20;29456:8;29445:20;;;;;;;;;;;29427:38;;29478:23;29504:67;29555:3;:15;;;29504:46;29545:4;29504:36;29525:14;;29504:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;:50;;:67;;;;:::i;:::-;29478:93;;29584:20;29607:23;29621:8;29607:13;:23::i;:::-;29584:46;;29641:22;29666:3;:16;;;29641:41;;29714:1;29695:3;:16;;:20;;;;29747:5;29726:3;:18;;;:26;;;;;;;;;;;;;;;;;;29779:31;29795:14;29779:11;;:15;;:31;;;;:::i;:::-;29765:11;:45;;;;29821:10;;;;;;;;;;;:27;;;29849:12;:10;:12::i;:::-;29863:8;29821:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29886:12;29900:17;29921:7;;;;;;;;;;;:12;;29975:8;29934:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29921:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29885:100;;;;30015:4;30004:15;;:7;:15;;;29996:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30053:7;;;;;;;;;;;:16;;;30070:12;:10;:12::i;:::-;30084;30053:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30108:8;;;;;;;;;;;:17;;;30126:12;:10;:12::i;:::-;30140:15;30108:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30174:60;30192:12;:10;:12::i;:::-;30206;30220:8;30230:3;30174:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30250;30265:12;:10;:12::i;:::-;30279:15;30296:8;30306:3;30250:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29036:1282;;;;;;;:::o;21541:26::-;;;;:::o;24497:387::-;24560:7;24580:20;24617:9;24629:1;24617:13;;24613:232;24636:10;;;;;;;;;;;:20;;;24657:8;24636:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24632:1;:34;24613:232;;;24688:22;24713:58;24727:10;;;;;;;;;;;:30;;;24758:8;24768:1;24727:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24713:13;:58::i;:::-;24688:83;;24801:32;24818:14;24801:12;:16;;:32;;;;:::i;:::-;24786:47;;24613:232;24668:3;;;;;;;24613:232;;;;24864:12;24857:19;;;24497:387;;;:::o;21682:37::-;;;;;;;;;;;;;:::o;24938:632::-;24998:15;;24982:12;:31;24978:70;;25030:7;;24978:70;25079:1;25064:11;;:16;25060:100;;;25115:12;25097:15;:30;;;;25142:7;;25060:100;25172:22;25197:33;25214:15;;25197:12;:16;;:33;;;;:::i;:::-;25172:58;;25243:17;25263:39;25282:19;:17;:19::i;:::-;25263:14;:18;;:39;;;;:::i;:::-;25243:59;;25315:8;;;;;;;;;;;:21;;;25337:10;;;;;;;;;;;25357:4;25364:9;25315:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25404:56;25423:36;25447:11;;25423:19;25437:4;25423:9;:13;;:19;;;;:::i;:::-;:23;;:36;;;;:::i;:::-;25404:14;;:18;;:56;;;;:::i;:::-;25387:14;:73;;;;25489:12;25471:15;:30;;;;25519:43;25531:14;25547:9;25558:3;25519:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24938:632;;;:::o;25620:1277::-;25701:5;25680:26;;:17;;;;;;;;;;;:26;;;25672:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25778:1;25768:7;:11;25760:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25863:7;25828;;;;;;;;;;;:17;;;25846:12;:10;:12::i;:::-;25828:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;25820:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25925:12;:10;:12::i;:::-;25992:1;25953:10;;;;;;;;;;;:21;;;25975:12;:10;:12::i;:::-;25953:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;25950:100;;;26010:28;26025:12;:10;:12::i;:::-;26010:14;:28::i;:::-;25950:100;26062:15;26080:10;:47;26091:10;;;;;;;;;;;:21;;;26113:12;:10;:12::i;:::-;26091:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26080:47;;;;;;;;;;;26062:65;;26162:1;26143:3;:16;;;:20;26140:379;;;26180:23;26206:67;26257:3;:15;;;26206:46;26247:4;26206:36;26227:14;;26206:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;:50;;:67;;;;:::i;:::-;26180:93;;26311:1;26293:15;:19;26290:218;;;26333:8;;;;;;;;;;;:17;;;26351:12;:10;:12::i;:::-;26365:15;26333:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26405:87;26420:12;:10;:12::i;:::-;26434:15;26451:10;;;;;;;;;;;:21;;;26473:12;:10;:12::i;:::-;26451:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26488:3;26405:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26290:218;26140:379;;26531:7;;;;;;;;;;;:20;;;26552:12;:10;:12::i;:::-;26574:4;26581:7;26531:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26619:29;26640:7;26619:3;:16;;;:20;;:29;;;;:::i;:::-;26600:3;:16;;:48;;;;26673:24;26689:7;26673:11;;:15;;:24;;;;:::i;:::-;26659:11;:38;;;;26728:46;26769:4;26728:36;26749:14;;26728:3;:16;;;:20;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;26710:3;:15;;:64;;;;26792:97;26807:12;:10;:12::i;:::-;26821:7;26830:10;;;;;;;;;;;:21;;;26852:12;:10;:12::i;:::-;26830:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26867:3;:16;;;26885:3;26792:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25620:1277;;:::o;19620:206::-;19329:5;;;;;;;;;;;19313:21;;:12;:10;:12::i;:::-;:21;;;19305:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19701:21:::1;19725:5:::0;::::1;;;;;;;;;;19701:29;;19749:6;19741:5;::::0;:14:::1;;;;;;;;;;;;;;;;;;19771:47;19792:13;19807:5;::::0;::::1;;;;;;;;;19814:3;19771:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19360:1;19620:206:::0;:::o;32661:257::-;19329:5;;;;;;;;;;;19313:21;;:12;:10;:12::i;:::-;:21;;;19305:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32755:5:::1;32734:26;;:17;;;;;;;;;;;:26;;;32726:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32833:4;32813:17;;:24;;;;;;;;;;;;;;;;;;32853:57;32873:12;:10;:12::i;:::-;32887:17;;;;;;;;;;;32906:3;32853:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32661:257::o:0;19834:193::-;19329:5;;;;;;;;;;;19313:21;;:12;:10;:12::i;:::-;:21;;;19305:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19954:4:::1;19918:15:::0;:33:::1;19934:16;19918:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;19976:43;19997:16;20015:3;19976:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;19834:193:::0;:::o;18623:106::-;18676:15;18711:10;18704:17;;18623:106;:::o;5113:471::-;5171:7;5421:1;5416;:6;5412:47;;;5446:1;5439:8;;;;5412:47;5471:9;5487:1;5483;:5;5471:17;;5516:1;5511;5507;:5;;;;;;:10;5499:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5575:1;5568:8;;;5113:471;;;;;:::o;6060:132::-;6118:7;6145:39;6149:1;6152;6145:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6138:46;;6060:132;;;;:::o;4223:136::-;4281:7;4308:43;4312:1;4315;4308:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4301:50;;4223:136;;;;:::o;3759:181::-;3817:7;3837:9;3853:1;3849;:5;3837:17;;3878:1;3873;:6;;3865:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3931:1;3924:8;;;3759:181;;;;:::o;26905:402::-;26971:12;26985:17;27006:7;;;;;;;;;;;:12;;27060;27019:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27006:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26970:104;;;;27104:4;27093:15;;:7;:15;;;27085:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27207:12;27140:10;:47;27151:10;;;;;;;;;;;:21;;;27173:12;:10;:12::i;:::-;27151:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27140:47;;;;;;;;;;;:64;;;:79;;;;;;;;;;;;;;;;;;27295:4;27230:10;:47;27241:10;;;;;;;;;;;:21;;;27263:12;:10;:12::i;:::-;27241:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27230:47;;;;;;;;;;;:62;;;:69;;;;;;;;;;;;;;;;;;26905:402;;;:::o;6688:278::-;6774:7;6806:1;6802;:5;6809:12;6794:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6833:9;6849:1;6845;:5;;;;;;6833:17;;6957:1;6950:8;;;6688:278;;;;;:::o;4662:192::-;4748:7;4781:1;4776;:6;;4784:12;4768:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4808:9;4824:1;4820;:5;4808:17;;4845:1;4838:8;;;4662:192;;;;;:::o
Swarm Source
ipfs://f7b75af49d2a07eda676b10c1809aa9fb4edc91a6e67643f6379992ebd37f28d
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.