More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 492 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 16933514 | 483 days ago | IN | 0 ETH | 0.00208525 | ||||
Claim | 16752837 | 508 days ago | IN | 0 ETH | 0.00112319 | ||||
Claim | 16646178 | 523 days ago | IN | 0 ETH | 0.00150728 | ||||
Claim | 16626888 | 526 days ago | IN | 0 ETH | 0.00085071 | ||||
Leave Staking | 16607680 | 529 days ago | IN | 0 ETH | 0.00168743 | ||||
Leave Staking | 16574193 | 533 days ago | IN | 0 ETH | 0.00274273 | ||||
Leave Staking | 16555274 | 536 days ago | IN | 0 ETH | 0.00213917 | ||||
Leave Staking | 16555186 | 536 days ago | IN | 0 ETH | 0.00202751 | ||||
Leave Staking | 16545187 | 537 days ago | IN | 0 ETH | 0.00300675 | ||||
Claim | 16544757 | 537 days ago | IN | 0 ETH | 0.00154816 | ||||
Leave Staking | 16527901 | 540 days ago | IN | 0 ETH | 0.00427923 | ||||
Leave Staking | 16527886 | 540 days ago | IN | 0 ETH | 0.00463036 | ||||
Leave Staking | 16527874 | 540 days ago | IN | 0 ETH | 0.00553153 | ||||
Leave Staking | 16527856 | 540 days ago | IN | 0 ETH | 0.00366495 | ||||
Leave Staking | 16521996 | 541 days ago | IN | 0 ETH | 0.00278327 | ||||
Leave Staking | 16521280 | 541 days ago | IN | 0 ETH | 0.00202528 | ||||
Leave Staking | 16517304 | 541 days ago | IN | 0 ETH | 0.00169341 | ||||
Leave Staking | 16517291 | 541 days ago | IN | 0 ETH | 0.00180226 | ||||
Leave Staking | 16516598 | 541 days ago | IN | 0 ETH | 0.00168084 | ||||
Leave Staking | 16516268 | 541 days ago | IN | 0 ETH | 0.00227037 | ||||
Leave Staking | 16516119 | 541 days ago | IN | 0 ETH | 0.0017196 | ||||
Claim | 16515922 | 541 days ago | IN | 0 ETH | 0.00091259 | ||||
Claim | 16475784 | 547 days ago | IN | 0 ETH | 0.00076182 | ||||
Claim | 16444061 | 551 days ago | IN | 0 ETH | 0.00092608 | ||||
Claim | 16430254 | 553 days ago | IN | 0 ETH | 0.0009979 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17603114 | 388 days ago | 0.00628072 ETH | ||||
17302737 | 431 days ago | 0.00768463 ETH | ||||
16951940 | 480 days ago | 0.00969495 ETH | ||||
16933514 | 483 days ago | 0.02564556 ETH | ||||
16918889 | 485 days ago | 0.01136096 ETH | ||||
16914578 | 485 days ago | 0.01428459 ETH | ||||
16752837 | 508 days ago | 0.0112203 ETH | ||||
16751883 | 508 days ago | 0.0112203 ETH | ||||
16646178 | 523 days ago | 0.02540292 ETH | ||||
16643853 | 523 days ago | 0.01005628 ETH | ||||
16643813 | 523 days ago | 0.01534664 ETH | ||||
16626888 | 526 days ago | 0.01304435 ETH | ||||
16619842 | 527 days ago | 0.01304435 ETH | ||||
16544757 | 537 days ago | 0.01517019 ETH | ||||
16539073 | 538 days ago | 0.01517019 ETH | ||||
16515922 | 541 days ago | 0.02464231 ETH | ||||
16502720 | 543 days ago | 0.02464231 ETH | ||||
16475784 | 547 days ago | 0.02955127 ETH | ||||
16464909 | 548 days ago | 0.02955127 ETH | ||||
16444061 | 551 days ago | 0.04278246 ETH | ||||
16431999 | 553 days ago | 0.03997048 ETH | ||||
16402851 | 557 days ago | 0.09092062 ETH | ||||
16402803 | 557 days ago | 0.09077812 ETH | ||||
16392452 | 559 days ago | 0.09552788 ETH | ||||
16383983 | 560 days ago | 0.09633837 ETH |
Loading...
Loading
Contract Name:
ToFStake
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-02 */ pragma solidity ^0.8.17; interface IPancakeRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountToFsired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IPancakeRouter02 is IPancakeRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IPancakeFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: Context.sol pragma solidity ^0.8.17; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: Ownable.sol pragma solidity ^0.8.17; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: IERC20.sol pragma solidity ^0.8.17; /** * @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); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: ReentrancyGuard.sol pragma solidity ^0.8.17; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } modifier isHuman() { require(tx.origin == msg.sender, "Humans only"); _; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.15; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: ToFStake.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.17; contract ToFStake is Ownable, ReentrancyGuard { using SafeMath for uint256; uint256 public DECIMALS = 9; IPancakeRouter02 internal _router; IERC20 public ToF; //address of the token uint256 public poolFee = 3; // % fee deducted from, deposits, withdrawals uint256 public earlyWithdrawFee = 25; uint256 public earlyWithdrawFeeTime = 7 days; address public feeAddress = 0x431c71594CAE3a8935AFCf2133D294e37b84e6F2; // ToF Token Rhllor Contract Address struct userStakeProfile { uint256 stakedAmount; uint256 claimedAmount; uint256 lastBlockCompounded; uint256 lastBlockStaked; } mapping (address => userStakeProfile) public stakings; uint256 public ETHPerBlock; uint256 public totalUsers; uint256 public totalStaked; uint256 public totalClaimed; event StakeUpdated (address indexed recipeint, uint256 indexed _amount); constructor () { setRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Uniswap V2 Router ToF = IERC20(0x90E2Fa98DfC518317600Dd3DC571DE8D071a7238); //ToF Token Rhllor Contract Address setETHPerBlock(40000000000000); // 40000000000000 | Set ETH per block to 0.00004 ETH. ~6646 blocks in 24h. 0.00004 x 6646 = 0.26584 ETH } function setRouter(address routerAddress) public onlyOwner { require(routerAddress != address(0), "Cannot use the zero address as router address"); _router = IPancakeRouter02(routerAddress); } function totalPoolReserve() public view returns(uint256){ return address(this).balance; } function swapETHForTokens(address to, address token, uint256 ETHAmount) internal returns(bool) { // Generate pair for WETH -> Future address[] memory path = new address[](2); path[0] = _router.WETH(); path[1] = token; // Swap and send the tokens to the 'to' address try _router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: ETHAmount }(0, path, to, block.timestamp + 360) { return true; } catch { return false; } } // Set reward amount per block function setETHPerBlock (uint256 _amount) public onlyOwner { require(_amount >= 0, "ToF per Block can not be negative" ); ETHPerBlock = _amount; } /// Stake the provided amount function enterStaking (uint256 _amount) public isHuman { require(ToF.balanceOf(msg.sender) >= _amount, "Insufficient ToF tokens for transfer"); require(_amount > 0,"Invalid staking amount"); require(totalPoolReserve() > 0, "Reward Pool Exhausted"); ToF.transferFrom(msg.sender, address(this), _amount); _amount = takeToFPoolFee(_amount); userStakeProfile memory profile = stakings[msg.sender]; if(profile.stakedAmount == 0){ profile.lastBlockCompounded = block.number; totalUsers++; } profile.stakedAmount += _amount; profile.lastBlockStaked = block.number; totalStaked += _amount; stakings[msg.sender] = profile; } //leaves staking function leaveStaking (uint256 _amount) public isHuman { userStakeProfile memory profile = stakings[msg.sender]; require(profile.stakedAmount >= _amount, "Withdraw amount can not be greater than stake"); totalStaked -= _amount; profile.stakedAmount -= _amount; stakings[msg.sender] = profile; // claim pending reward if(getReward(msg.sender) > 0){ claim(); } if(block.number < stakings[msg.sender].lastBlockStaked.add(earlyWithdrawFeeTime)){ uint256 withdrawalFee = _amount * earlyWithdrawFee / 100; _amount -= withdrawalFee; ToF.transfer(feeAddress, withdrawalFee); }else{ _amount = takeToFPoolFee(_amount); } profile.lastBlockCompounded = block.number; ToF.transfer(msg.sender, _amount); //remove if(stakings[msg.sender].stakedAmount == 0){ totalUsers--; delete stakings[msg.sender]; } } // gets reward amount from a user function getReward(address _address) internal view returns (uint256) { if(block.number <= stakings[_address].lastBlockCompounded){ return 0; }else { uint256 totalPool = totalPoolReserve(); if(totalPool == 0 || totalStaked == 0 ){ return 0; }else { uint256 blocks = block.number.sub(stakings[_address].lastBlockCompounded); //if the staker reward is greater than total pool => set it to total pool uint256 totalReward = blocks.mul(ETHPerBlock); uint256 stakerReward = totalReward.mul(stakings[_address].stakedAmount).div(totalStaked); if(stakerReward > totalPool){ stakerReward = totalPool; } return stakerReward; } } } /// Get pending rewards of a user to display on DAPP, even if farming is disabled it shows remaining balance function pendingReward (address _address) public view returns (uint256){ return getReward(_address); } /// transfers the rewards of a user to their address function claim() public isHuman{ uint256 reward = getReward(msg.sender); (bool os, ) = payable(msg.sender).call{value: reward}(""); require(os,"failed claim"); stakings[msg.sender].claimedAmount = stakings[msg.sender].claimedAmount.add(reward); stakings[msg.sender].lastBlockCompounded = block.number; totalClaimed = totalClaimed.add(reward); } /// compounds the rewards of the caller, buys more ToF and stakes that function singleCompound() public isHuman { require(stakings[msg.sender].stakedAmount > 0, "Please Stake ToF to compound"); uint256 reward = getReward(msg.sender); reward = takeETHPoolFee(reward); // swap reward to extra tokens and log uint256 initialBalance = ToF.balanceOf(address(this)); require(swapETHForTokens(address(this), address(ToF), reward),"swapping failed"); uint256 addedBalance = ToF.balanceOf(address(this)) - initialBalance; // add extra tokens stakings[msg.sender].stakedAmount += addedBalance; totalStaked += addedBalance; stakings[msg.sender].lastBlockCompounded = block.number; totalClaimed = totalClaimed.add(reward); emit StakeUpdated(msg.sender,reward); } // update ecosystem wallet to Token of Fires contract address function updatefeeAddress(address wallet) public onlyOwner{ feeAddress = wallet; } // update pool fee function updatePoolFee(uint256 _amount) public onlyOwner{ poolFee = _amount; } // remove ETH from totalpool in case of emergency/migration function migratePool() public payable onlyOwner { (bool os, ) = payable(msg.sender).call{value: totalPoolReserve()}(""); require(os); } // Remove ETH from vault for marketing/buybacks etc function withdrawEth(uint256 _amount) public payable onlyOwner { require(_amount < totalPoolReserve(), "Cannot withdraw more ETH than in the pool"); (bool os, ) = payable(msg.sender).call{value: _amount}(""); require(os); } // sends ETH fee and returns remaining reward for user function takeETHPoolFee(uint256 reward) internal view returns(uint256){ uint256 Fee = reward / 100 * poolFee; // take fee reward -= Fee; feeAddress.call{value:Fee}; return reward; } // sends ToF fee and burns a portion of it function takeToFPoolFee(uint256 reward) internal returns(uint256){ uint256 Fee = reward / 100 * poolFee; // take fee reward -= Fee; ToF.transfer(feeAddress,Fee); return reward; } function returnStakeData() public view returns (bytes memory) { return abi.encode(ToF.balanceOf(msg.sender), stakings[msg.sender].stakedAmount, pendingReward(msg.sender), totalPoolReserve(), totalUsers, totalClaimed, totalStaked,ETHPerBlock); } // Ensures that the contract is able to receive ETH and adds it to the total pool receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipeint","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"StakeUpdated","type":"event"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETHPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ToF","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyWithdrawFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyWithdrawFeeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"enterStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"leaveStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migratePool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnStakeData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setETHPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"singleCompound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakings","outputs":[{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"internalType":"uint256","name":"lastBlockCompounded","type":"uint256"},{"internalType":"uint256","name":"lastBlockStaked","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPoolReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUsers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updatePoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"updatefeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawEth","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260096002556003600555601960065562093a8060075573431c71594cae3a8935afcf2133d294e37b84e6f2600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200007c57600080fd5b506200009d620000916200013b60201b60201c565b6200014360201b60201c565b60018081905550620000c9737a250d5630b4cf539739df2c5dacb4c659f2488d6200020760201b60201c565b7390e2fa98dfc518317600dd3dc571de8d071a7238600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200013565246139ca80006200034c60201b60201c565b62000608565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002176200013b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200023d6200042c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028d90620004b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000308576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ff906200054e565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6200035c6200013b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003826200042c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d290620004b6565b60405180910390fd5b600081101562000422576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041990620005e6565b60405180910390fd5b80600a8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200049e60208362000455565b9150620004ab8262000466565b602082019050919050565b60006020820190508181036000830152620004d1816200048f565b9050919050565b7f43616e6e6f742075736520746865207a65726f2061646472657373206173207260008201527f6f75746572206164647265737300000000000000000000000000000000000000602082015250565b600062000536602d8362000455565b91506200054382620004d8565b604082019050919050565b60006020820190508181036000830152620005698162000527565b9050919050565b7f546f462070657220426c6f636b2063616e206e6f74206265206e65676174697660008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000620005ce60218362000455565b9150620005db8262000570565b604082019050919050565b600060208201905081810360008301526200060181620005bf565b9050919050565b61324b80620006186000396000f3fe6080604052600436106101a05760003560e01c8063817b1cd2116100ec578063c0d786551161008a578063d54ad2a111610064578063d54ad2a114610511578063dc6e13e11461053c578063f2fde38b1461057c578063f40f0f52146105a5576101a7565b8063c0d78655146104a3578063c2cac04b146104cc578063c311d049146104f5576101a7565b80638da5cb5b116100c65780638da5cb5b146103f757806395bcaa4114610422578063a80a78821461044d578063bff1f9e114610478576101a7565b8063817b1cd214610378578063847b55d1146103a35780638676712c146103ce576101a7565b806341441d3b1161015957806367dcaf941161013357806367dcaf94146102e25780636903d0b61461030d578063715018a614610338578063789e171a1461034f576101a7565b806341441d3b1461028b5780634e71d92d146102b45780635692f138146102cb576101a7565b8063089fe6aa146101ac5780630cded5f0146101d75780631058d281146101e157806318b930491461020a5780632e0f2625146102355780634127535814610260576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c16105e2565b6040516101ce91906123ab565b60405180910390f35b6101df6105e8565b005b3480156101ed57600080fd5b50610208600480360381019061020391906123f7565b6106e4565b005b34801561021657600080fd5b5061021f610b99565b60405161022c91906124b4565b60405180910390f35b34801561024157600080fd5b5061024a610cc2565b60405161025791906123ab565b60405180910390f35b34801561026c57600080fd5b50610275610cc8565b6040516102829190612517565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad91906123f7565b610cee565b005b3480156102c057600080fd5b506102c96110c5565b005b3480156102d757600080fd5b506102e06112ed565b005b3480156102ee57600080fd5b506102f76116cc565b60405161030491906123ab565b60405180910390f35b34801561031957600080fd5b506103226116d2565b60405161032f91906123ab565b60405180910390f35b34801561034457600080fd5b5061034d6116d8565b005b34801561035b57600080fd5b506103766004803603810190610371919061255e565b611760565b005b34801561038457600080fd5b5061038d611820565b60405161039a91906123ab565b60405180910390f35b3480156103af57600080fd5b506103b8611826565b6040516103c591906125ea565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f091906123f7565b61184c565b005b34801561040357600080fd5b5061040c611916565b6040516104199190612517565b60405180910390f35b34801561042e57600080fd5b5061043761193f565b60405161044491906123ab565b60405180910390f35b34801561045957600080fd5b50610462611947565b60405161046f91906123ab565b60405180910390f35b34801561048457600080fd5b5061048d61194d565b60405161049a91906123ab565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c5919061255e565b611953565b005b3480156104d857600080fd5b506104f360048036038101906104ee91906123f7565b611a82565b005b61050f600480360381019061050a91906123f7565b611b08565b005b34801561051d57600080fd5b50610526611c47565b60405161053391906123ab565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e919061255e565b611c4d565b6040516105739493929190612605565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e919061255e565b611c7d565b005b3480156105b157600080fd5b506105cc60048036038101906105c7919061255e565b611d74565b6040516105d991906123ab565b60405180910390f35b60055481565b6105f0611d86565b73ffffffffffffffffffffffffffffffffffffffff1661060e611916565b73ffffffffffffffffffffffffffffffffffffffff1614610664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b906126a7565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1661068561193f565b604051610691906126f8565b60006040518083038185875af1925050503d80600081146106ce576040519150601f19603f3d011682016040523d82523d6000602084013e6106d3565b606091505b50509050806106e157600080fd5b50565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074990612759565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050818160000151101561080f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610806906127eb565b60405180910390fd5b81600c6000828254610821919061283a565b92505081905550818160000181815161083a919061283a565b9150818152505080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015590505060006108b733611d8e565b11156108c6576108c56110c5565b5b61091d600754600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154611f0690919063ffffffff16565b431015610a19576000606460065484610936919061286e565b61094091906128df565b9050808361094e919061283a565b9250600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016109cf929190612910565b6020604051808303816000875af11580156109ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a129190612971565b5050610a25565b610a2282611f1c565b91505b43816040018181525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610a8c929190612910565b6020604051808303816000875af1158015610aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acf9190612971565b506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610b9557600b6000815480929190610b2d9061299e565b9190505550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160009055600382016000905550505b5050565b6060600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610bf69190612517565b602060405180830381865afa158015610c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3791906129dc565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610c8333611d74565b610c8b61193f565b600b54600d54600c54600a54604051602001610cae989796959493929190612a09565b604051602081830303815290604052905090565b60025481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390612759565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610db89190612517565b602060405180830381865afa158015610dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df991906129dc565b1015610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190612af9565b60405180910390fd5b60008111610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490612b65565b60405180910390fd5b6000610e8761193f565b11610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe90612bd1565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610f2693929190612bf1565b6020604051808303816000875af1158015610f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f699190612971565b50610f7381611f1c565b90506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050600081600001510361101a5743816040018181525050600b600081548092919061101490612c28565b91905055505b818160000181815161102c9190612c70565b915081815250504381606001818152505081600c600082825461104f9190612c70565b9250508190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301559050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90612759565b60405180910390fd5b600061113e33611d8e565b905060003373ffffffffffffffffffffffffffffffffffffffff1682604051611166906126f8565b60006040518083038185875af1925050503d80600081146111a3576040519150601f19603f3d011682016040523d82523d6000602084013e6111a8565b606091505b50509050806111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e390612cf0565b60405180910390fd5b61124182600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611f0690919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555043600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506112e382600d54611f0690919063ffffffff16565b600d819055505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135290612759565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154116113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790612d5c565b60405180910390fd5b60006113eb33611d8e565b90506113f681612015565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114559190612517565b602060405180830381865afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149691906129dc565b90506114c530600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612059565b611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90612dc8565b60405180910390fd5b600081600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115629190612517565b602060405180830381865afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a391906129dc565b6115ad919061283a565b905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546116019190612c70565b9250508190555080600c600082825461161a9190612c70565b9250508190555043600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061167d83600d54611f0690919063ffffffff16565b600d81905550823373ffffffffffffffffffffffffffffffffffffffff167fab0e25dc39626189cfb41155020ba89e726b10244275733e9d7c63cf33ffccdb60405160405180910390a3505050565b600a5481565b60075481565b6116e0611d86565b73ffffffffffffffffffffffffffffffffffffffff166116fe611916565b73ffffffffffffffffffffffffffffffffffffffff1614611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b906126a7565b60405180910390fd5b61175e600061228c565b565b611768611d86565b73ffffffffffffffffffffffffffffffffffffffff16611786611916565b73ffffffffffffffffffffffffffffffffffffffff16146117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d3906126a7565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611854611d86565b73ffffffffffffffffffffffffffffffffffffffff16611872611916565b73ffffffffffffffffffffffffffffffffffffffff16146118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf906126a7565b60405180910390fd5b600081101561190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390612e5a565b60405180910390fd5b80600a8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600047905090565b60065481565b600b5481565b61195b611d86565b73ffffffffffffffffffffffffffffffffffffffff16611979611916565b73ffffffffffffffffffffffffffffffffffffffff16146119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c6906126a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590612eec565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a8a611d86565b73ffffffffffffffffffffffffffffffffffffffff16611aa8611916565b73ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af5906126a7565b60405180910390fd5b8060058190555050565b611b10611d86565b73ffffffffffffffffffffffffffffffffffffffff16611b2e611916565b73ffffffffffffffffffffffffffffffffffffffff1614611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906126a7565b60405180910390fd5b611b8c61193f565b8110611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc490612f7e565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1682604051611bf3906126f8565b60006040518083038185875af1925050503d8060008114611c30576040519150601f19603f3d011682016040523d82523d6000602084013e611c35565b606091505b5050905080611c4357600080fd5b5050565b600d5481565b60096020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b611c85611d86565b73ffffffffffffffffffffffffffffffffffffffff16611ca3611916565b73ffffffffffffffffffffffffffffffffffffffff1614611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf0906126a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f90613010565b60405180910390fd5b611d718161228c565b50565b6000611d7f82611d8e565b9050919050565b600033905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544311611de25760009050611f01565b6000611dec61193f565b90506000811480611dff57506000600c54145b15611e0e576000915050611f01565b6000611e65600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544361235090919063ffffffff16565b90506000611e7e600a548361236690919063ffffffff16565b90506000611eeb600c54611edd600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548561236690919063ffffffff16565b61237c90919063ffffffff16565b905083811115611ef9578390505b809450505050505b919050565b60008183611f149190612c70565b905092915050565b600080600554606484611f2f91906128df565b611f39919061286e565b90508083611f47919061283a565b9250600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611fc8929190612910565b6020604051808303816000875af1158015611fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200b9190612971565b5082915050919050565b60008060055460648461202891906128df565b612032919061286e565b90508083612040919061283a565b9250600860009054906101000a90505082915050919050565b600080600267ffffffffffffffff81111561207757612076613030565b5b6040519080825280602002602001820160405280156120a55781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121399190613074565b8160008151811061214d5761214c6130a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061219c5761219b6130a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008489610168426122279190612c70565b6040518663ffffffff1660e01b815260040161224694939291906131c9565b6000604051808303818588803b15801561225f57600080fd5b505af193505050508015612271575060015b61227f576000915050612285565b60019150505b9392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361235e919061283a565b905092915050565b60008183612374919061286e565b905092915050565b6000818361238a91906128df565b905092915050565b6000819050919050565b6123a581612392565b82525050565b60006020820190506123c0600083018461239c565b92915050565b600080fd5b6123d481612392565b81146123df57600080fd5b50565b6000813590506123f1816123cb565b92915050565b60006020828403121561240d5761240c6123c6565b5b600061241b848285016123e2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561245e578082015181840152602081019050612443565b60008484015250505050565b6000601f19601f8301169050919050565b600061248682612424565b612490818561242f565b93506124a0818560208601612440565b6124a98161246a565b840191505092915050565b600060208201905081810360008301526124ce818461247b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612501826124d6565b9050919050565b612511816124f6565b82525050565b600060208201905061252c6000830184612508565b92915050565b61253b816124f6565b811461254657600080fd5b50565b60008135905061255881612532565b92915050565b600060208284031215612574576125736123c6565b5b600061258284828501612549565b91505092915050565b6000819050919050565b60006125b06125ab6125a6846124d6565b61258b565b6124d6565b9050919050565b60006125c282612595565b9050919050565b60006125d4826125b7565b9050919050565b6125e4816125c9565b82525050565b60006020820190506125ff60008301846125db565b92915050565b600060808201905061261a600083018761239c565b612627602083018661239c565b612634604083018561239c565b612641606083018461239c565b95945050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061269160208361264a565b915061269c8261265b565b602082019050919050565b600060208201905081810360008301526126c081612684565b9050919050565b600081905092915050565b50565b60006126e26000836126c7565b91506126ed826126d2565b600082019050919050565b6000612703826126d5565b9150819050919050565b7f48756d616e73206f6e6c79000000000000000000000000000000000000000000600082015250565b6000612743600b8361264a565b915061274e8261270d565b602082019050919050565b6000602082019050818103600083015261277281612736565b9050919050565b7f576974686472617720616d6f756e742063616e206e6f7420626520677265617460008201527f6572207468616e207374616b6500000000000000000000000000000000000000602082015250565b60006127d5602d8361264a565b91506127e082612779565b604082019050919050565b60006020820190508181036000830152612804816127c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061284582612392565b915061285083612392565b92508282039050818111156128685761286761280b565b5b92915050565b600061287982612392565b915061288483612392565b925082820261289281612392565b915082820484148315176128a9576128a861280b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006128ea82612392565b91506128f583612392565b925082612905576129046128b0565b5b828204905092915050565b60006040820190506129256000830185612508565b612932602083018461239c565b9392505050565b60008115159050919050565b61294e81612939565b811461295957600080fd5b50565b60008151905061296b81612945565b92915050565b600060208284031215612987576129866123c6565b5b60006129958482850161295c565b91505092915050565b60006129a982612392565b9150600082036129bc576129bb61280b565b5b600182039050919050565b6000815190506129d6816123cb565b92915050565b6000602082840312156129f2576129f16123c6565b5b6000612a00848285016129c7565b91505092915050565b600061010082019050612a1f600083018b61239c565b612a2c602083018a61239c565b612a39604083018961239c565b612a46606083018861239c565b612a53608083018761239c565b612a6060a083018661239c565b612a6d60c083018561239c565b612a7a60e083018461239c565b9998505050505050505050565b7f496e73756666696369656e7420546f4620746f6b656e7320666f72207472616e60008201527f7366657200000000000000000000000000000000000000000000000000000000602082015250565b6000612ae360248361264a565b9150612aee82612a87565b604082019050919050565b60006020820190508181036000830152612b1281612ad6565b9050919050565b7f496e76616c6964207374616b696e6720616d6f756e7400000000000000000000600082015250565b6000612b4f60168361264a565b9150612b5a82612b19565b602082019050919050565b60006020820190508181036000830152612b7e81612b42565b9050919050565b7f52657761726420506f6f6c204578686175737465640000000000000000000000600082015250565b6000612bbb60158361264a565b9150612bc682612b85565b602082019050919050565b60006020820190508181036000830152612bea81612bae565b9050919050565b6000606082019050612c066000830186612508565b612c136020830185612508565b612c20604083018461239c565b949350505050565b6000612c3382612392565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c6557612c6461280b565b5b600182019050919050565b6000612c7b82612392565b9150612c8683612392565b9250828201905080821115612c9e57612c9d61280b565b5b92915050565b7f6661696c656420636c61696d0000000000000000000000000000000000000000600082015250565b6000612cda600c8361264a565b9150612ce582612ca4565b602082019050919050565b60006020820190508181036000830152612d0981612ccd565b9050919050565b7f506c65617365205374616b6520546f4620746f20636f6d706f756e6400000000600082015250565b6000612d46601c8361264a565b9150612d5182612d10565b602082019050919050565b60006020820190508181036000830152612d7581612d39565b9050919050565b7f7377617070696e67206661696c65640000000000000000000000000000000000600082015250565b6000612db2600f8361264a565b9150612dbd82612d7c565b602082019050919050565b60006020820190508181036000830152612de181612da5565b9050919050565b7f546f462070657220426c6f636b2063616e206e6f74206265206e65676174697660008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e4460218361264a565b9150612e4f82612de8565b604082019050919050565b60006020820190508181036000830152612e7381612e37565b9050919050565b7f43616e6e6f742075736520746865207a65726f2061646472657373206173207260008201527f6f75746572206164647265737300000000000000000000000000000000000000602082015250565b6000612ed6602d8361264a565b9150612ee182612e7a565b604082019050919050565b60006020820190508181036000830152612f0581612ec9565b9050919050565b7f43616e6e6f74207769746864726177206d6f726520455448207468616e20696e60008201527f2074686520706f6f6c0000000000000000000000000000000000000000000000602082015250565b6000612f6860298361264a565b9150612f7382612f0c565b604082019050919050565b60006020820190508181036000830152612f9781612f5b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ffa60268361264a565b915061300582612f9e565b604082019050919050565b6000602082019050818103600083015261302981612fed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061306e81612532565b92915050565b60006020828403121561308a576130896123c6565b5b60006130988482850161305f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006130f56130f06130eb846130d0565b61258b565b612392565b9050919050565b613105816130da565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613140816124f6565b82525050565b60006131528383613137565b60208301905092915050565b6000602082019050919050565b60006131768261310b565b6131808185613116565b935061318b83613127565b8060005b838110156131bc5781516131a38882613146565b97506131ae8361315e565b92505060018101905061318f565b5085935050505092915050565b60006080820190506131de60008301876130fc565b81810360208301526131f0818661316b565b90506131ff6040830185612508565b61320c606083018461239c565b9594505050505056fea2646970667358221220ce18c20052f0b1292b610ec7df33fb79c1918f010c80682e5a27cf0f0001c5f964736f6c63430008110033
Deployed Bytecode
0x6080604052600436106101a05760003560e01c8063817b1cd2116100ec578063c0d786551161008a578063d54ad2a111610064578063d54ad2a114610511578063dc6e13e11461053c578063f2fde38b1461057c578063f40f0f52146105a5576101a7565b8063c0d78655146104a3578063c2cac04b146104cc578063c311d049146104f5576101a7565b80638da5cb5b116100c65780638da5cb5b146103f757806395bcaa4114610422578063a80a78821461044d578063bff1f9e114610478576101a7565b8063817b1cd214610378578063847b55d1146103a35780638676712c146103ce576101a7565b806341441d3b1161015957806367dcaf941161013357806367dcaf94146102e25780636903d0b61461030d578063715018a614610338578063789e171a1461034f576101a7565b806341441d3b1461028b5780634e71d92d146102b45780635692f138146102cb576101a7565b8063089fe6aa146101ac5780630cded5f0146101d75780631058d281146101e157806318b930491461020a5780632e0f2625146102355780634127535814610260576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c16105e2565b6040516101ce91906123ab565b60405180910390f35b6101df6105e8565b005b3480156101ed57600080fd5b50610208600480360381019061020391906123f7565b6106e4565b005b34801561021657600080fd5b5061021f610b99565b60405161022c91906124b4565b60405180910390f35b34801561024157600080fd5b5061024a610cc2565b60405161025791906123ab565b60405180910390f35b34801561026c57600080fd5b50610275610cc8565b6040516102829190612517565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad91906123f7565b610cee565b005b3480156102c057600080fd5b506102c96110c5565b005b3480156102d757600080fd5b506102e06112ed565b005b3480156102ee57600080fd5b506102f76116cc565b60405161030491906123ab565b60405180910390f35b34801561031957600080fd5b506103226116d2565b60405161032f91906123ab565b60405180910390f35b34801561034457600080fd5b5061034d6116d8565b005b34801561035b57600080fd5b506103766004803603810190610371919061255e565b611760565b005b34801561038457600080fd5b5061038d611820565b60405161039a91906123ab565b60405180910390f35b3480156103af57600080fd5b506103b8611826565b6040516103c591906125ea565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f091906123f7565b61184c565b005b34801561040357600080fd5b5061040c611916565b6040516104199190612517565b60405180910390f35b34801561042e57600080fd5b5061043761193f565b60405161044491906123ab565b60405180910390f35b34801561045957600080fd5b50610462611947565b60405161046f91906123ab565b60405180910390f35b34801561048457600080fd5b5061048d61194d565b60405161049a91906123ab565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c5919061255e565b611953565b005b3480156104d857600080fd5b506104f360048036038101906104ee91906123f7565b611a82565b005b61050f600480360381019061050a91906123f7565b611b08565b005b34801561051d57600080fd5b50610526611c47565b60405161053391906123ab565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e919061255e565b611c4d565b6040516105739493929190612605565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e919061255e565b611c7d565b005b3480156105b157600080fd5b506105cc60048036038101906105c7919061255e565b611d74565b6040516105d991906123ab565b60405180910390f35b60055481565b6105f0611d86565b73ffffffffffffffffffffffffffffffffffffffff1661060e611916565b73ffffffffffffffffffffffffffffffffffffffff1614610664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b906126a7565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1661068561193f565b604051610691906126f8565b60006040518083038185875af1925050503d80600081146106ce576040519150601f19603f3d011682016040523d82523d6000602084013e6106d3565b606091505b50509050806106e157600080fd5b50565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074990612759565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050818160000151101561080f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610806906127eb565b60405180910390fd5b81600c6000828254610821919061283a565b92505081905550818160000181815161083a919061283a565b9150818152505080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015590505060006108b733611d8e565b11156108c6576108c56110c5565b5b61091d600754600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154611f0690919063ffffffff16565b431015610a19576000606460065484610936919061286e565b61094091906128df565b9050808361094e919061283a565b9250600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016109cf929190612910565b6020604051808303816000875af11580156109ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a129190612971565b5050610a25565b610a2282611f1c565b91505b43816040018181525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610a8c929190612910565b6020604051808303816000875af1158015610aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acf9190612971565b506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610b9557600b6000815480929190610b2d9061299e565b9190505550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160009055600382016000905550505b5050565b6060600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610bf69190612517565b602060405180830381865afa158015610c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3791906129dc565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610c8333611d74565b610c8b61193f565b600b54600d54600c54600a54604051602001610cae989796959493929190612a09565b604051602081830303815290604052905090565b60025481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390612759565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610db89190612517565b602060405180830381865afa158015610dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df991906129dc565b1015610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190612af9565b60405180910390fd5b60008111610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490612b65565b60405180910390fd5b6000610e8761193f565b11610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe90612bd1565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610f2693929190612bf1565b6020604051808303816000875af1158015610f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f699190612971565b50610f7381611f1c565b90506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050600081600001510361101a5743816040018181525050600b600081548092919061101490612c28565b91905055505b818160000181815161102c9190612c70565b915081815250504381606001818152505081600c600082825461104f9190612c70565b9250508190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301559050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90612759565b60405180910390fd5b600061113e33611d8e565b905060003373ffffffffffffffffffffffffffffffffffffffff1682604051611166906126f8565b60006040518083038185875af1925050503d80600081146111a3576040519150601f19603f3d011682016040523d82523d6000602084013e6111a8565b606091505b50509050806111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e390612cf0565b60405180910390fd5b61124182600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611f0690919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555043600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506112e382600d54611f0690919063ffffffff16565b600d819055505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135290612759565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154116113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790612d5c565b60405180910390fd5b60006113eb33611d8e565b90506113f681612015565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114559190612517565b602060405180830381865afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149691906129dc565b90506114c530600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612059565b611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90612dc8565b60405180910390fd5b600081600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115629190612517565b602060405180830381865afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a391906129dc565b6115ad919061283a565b905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546116019190612c70565b9250508190555080600c600082825461161a9190612c70565b9250508190555043600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061167d83600d54611f0690919063ffffffff16565b600d81905550823373ffffffffffffffffffffffffffffffffffffffff167fab0e25dc39626189cfb41155020ba89e726b10244275733e9d7c63cf33ffccdb60405160405180910390a3505050565b600a5481565b60075481565b6116e0611d86565b73ffffffffffffffffffffffffffffffffffffffff166116fe611916565b73ffffffffffffffffffffffffffffffffffffffff1614611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b906126a7565b60405180910390fd5b61175e600061228c565b565b611768611d86565b73ffffffffffffffffffffffffffffffffffffffff16611786611916565b73ffffffffffffffffffffffffffffffffffffffff16146117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d3906126a7565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611854611d86565b73ffffffffffffffffffffffffffffffffffffffff16611872611916565b73ffffffffffffffffffffffffffffffffffffffff16146118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf906126a7565b60405180910390fd5b600081101561190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390612e5a565b60405180910390fd5b80600a8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600047905090565b60065481565b600b5481565b61195b611d86565b73ffffffffffffffffffffffffffffffffffffffff16611979611916565b73ffffffffffffffffffffffffffffffffffffffff16146119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c6906126a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590612eec565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a8a611d86565b73ffffffffffffffffffffffffffffffffffffffff16611aa8611916565b73ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af5906126a7565b60405180910390fd5b8060058190555050565b611b10611d86565b73ffffffffffffffffffffffffffffffffffffffff16611b2e611916565b73ffffffffffffffffffffffffffffffffffffffff1614611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906126a7565b60405180910390fd5b611b8c61193f565b8110611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc490612f7e565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1682604051611bf3906126f8565b60006040518083038185875af1925050503d8060008114611c30576040519150601f19603f3d011682016040523d82523d6000602084013e611c35565b606091505b5050905080611c4357600080fd5b5050565b600d5481565b60096020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b611c85611d86565b73ffffffffffffffffffffffffffffffffffffffff16611ca3611916565b73ffffffffffffffffffffffffffffffffffffffff1614611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf0906126a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f90613010565b60405180910390fd5b611d718161228c565b50565b6000611d7f82611d8e565b9050919050565b600033905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544311611de25760009050611f01565b6000611dec61193f565b90506000811480611dff57506000600c54145b15611e0e576000915050611f01565b6000611e65600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201544361235090919063ffffffff16565b90506000611e7e600a548361236690919063ffffffff16565b90506000611eeb600c54611edd600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548561236690919063ffffffff16565b61237c90919063ffffffff16565b905083811115611ef9578390505b809450505050505b919050565b60008183611f149190612c70565b905092915050565b600080600554606484611f2f91906128df565b611f39919061286e565b90508083611f47919061283a565b9250600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611fc8929190612910565b6020604051808303816000875af1158015611fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200b9190612971565b5082915050919050565b60008060055460648461202891906128df565b612032919061286e565b90508083612040919061283a565b9250600860009054906101000a90505082915050919050565b600080600267ffffffffffffffff81111561207757612076613030565b5b6040519080825280602002602001820160405280156120a55781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121399190613074565b8160008151811061214d5761214c6130a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061219c5761219b6130a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008489610168426122279190612c70565b6040518663ffffffff1660e01b815260040161224694939291906131c9565b6000604051808303818588803b15801561225f57600080fd5b505af193505050508015612271575060015b61227f576000915050612285565b60019150505b9392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361235e919061283a565b905092915050565b60008183612374919061286e565b905092915050565b6000818361238a91906128df565b905092915050565b6000819050919050565b6123a581612392565b82525050565b60006020820190506123c0600083018461239c565b92915050565b600080fd5b6123d481612392565b81146123df57600080fd5b50565b6000813590506123f1816123cb565b92915050565b60006020828403121561240d5761240c6123c6565b5b600061241b848285016123e2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561245e578082015181840152602081019050612443565b60008484015250505050565b6000601f19601f8301169050919050565b600061248682612424565b612490818561242f565b93506124a0818560208601612440565b6124a98161246a565b840191505092915050565b600060208201905081810360008301526124ce818461247b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612501826124d6565b9050919050565b612511816124f6565b82525050565b600060208201905061252c6000830184612508565b92915050565b61253b816124f6565b811461254657600080fd5b50565b60008135905061255881612532565b92915050565b600060208284031215612574576125736123c6565b5b600061258284828501612549565b91505092915050565b6000819050919050565b60006125b06125ab6125a6846124d6565b61258b565b6124d6565b9050919050565b60006125c282612595565b9050919050565b60006125d4826125b7565b9050919050565b6125e4816125c9565b82525050565b60006020820190506125ff60008301846125db565b92915050565b600060808201905061261a600083018761239c565b612627602083018661239c565b612634604083018561239c565b612641606083018461239c565b95945050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061269160208361264a565b915061269c8261265b565b602082019050919050565b600060208201905081810360008301526126c081612684565b9050919050565b600081905092915050565b50565b60006126e26000836126c7565b91506126ed826126d2565b600082019050919050565b6000612703826126d5565b9150819050919050565b7f48756d616e73206f6e6c79000000000000000000000000000000000000000000600082015250565b6000612743600b8361264a565b915061274e8261270d565b602082019050919050565b6000602082019050818103600083015261277281612736565b9050919050565b7f576974686472617720616d6f756e742063616e206e6f7420626520677265617460008201527f6572207468616e207374616b6500000000000000000000000000000000000000602082015250565b60006127d5602d8361264a565b91506127e082612779565b604082019050919050565b60006020820190508181036000830152612804816127c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061284582612392565b915061285083612392565b92508282039050818111156128685761286761280b565b5b92915050565b600061287982612392565b915061288483612392565b925082820261289281612392565b915082820484148315176128a9576128a861280b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006128ea82612392565b91506128f583612392565b925082612905576129046128b0565b5b828204905092915050565b60006040820190506129256000830185612508565b612932602083018461239c565b9392505050565b60008115159050919050565b61294e81612939565b811461295957600080fd5b50565b60008151905061296b81612945565b92915050565b600060208284031215612987576129866123c6565b5b60006129958482850161295c565b91505092915050565b60006129a982612392565b9150600082036129bc576129bb61280b565b5b600182039050919050565b6000815190506129d6816123cb565b92915050565b6000602082840312156129f2576129f16123c6565b5b6000612a00848285016129c7565b91505092915050565b600061010082019050612a1f600083018b61239c565b612a2c602083018a61239c565b612a39604083018961239c565b612a46606083018861239c565b612a53608083018761239c565b612a6060a083018661239c565b612a6d60c083018561239c565b612a7a60e083018461239c565b9998505050505050505050565b7f496e73756666696369656e7420546f4620746f6b656e7320666f72207472616e60008201527f7366657200000000000000000000000000000000000000000000000000000000602082015250565b6000612ae360248361264a565b9150612aee82612a87565b604082019050919050565b60006020820190508181036000830152612b1281612ad6565b9050919050565b7f496e76616c6964207374616b696e6720616d6f756e7400000000000000000000600082015250565b6000612b4f60168361264a565b9150612b5a82612b19565b602082019050919050565b60006020820190508181036000830152612b7e81612b42565b9050919050565b7f52657761726420506f6f6c204578686175737465640000000000000000000000600082015250565b6000612bbb60158361264a565b9150612bc682612b85565b602082019050919050565b60006020820190508181036000830152612bea81612bae565b9050919050565b6000606082019050612c066000830186612508565b612c136020830185612508565b612c20604083018461239c565b949350505050565b6000612c3382612392565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c6557612c6461280b565b5b600182019050919050565b6000612c7b82612392565b9150612c8683612392565b9250828201905080821115612c9e57612c9d61280b565b5b92915050565b7f6661696c656420636c61696d0000000000000000000000000000000000000000600082015250565b6000612cda600c8361264a565b9150612ce582612ca4565b602082019050919050565b60006020820190508181036000830152612d0981612ccd565b9050919050565b7f506c65617365205374616b6520546f4620746f20636f6d706f756e6400000000600082015250565b6000612d46601c8361264a565b9150612d5182612d10565b602082019050919050565b60006020820190508181036000830152612d7581612d39565b9050919050565b7f7377617070696e67206661696c65640000000000000000000000000000000000600082015250565b6000612db2600f8361264a565b9150612dbd82612d7c565b602082019050919050565b60006020820190508181036000830152612de181612da5565b9050919050565b7f546f462070657220426c6f636b2063616e206e6f74206265206e65676174697660008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e4460218361264a565b9150612e4f82612de8565b604082019050919050565b60006020820190508181036000830152612e7381612e37565b9050919050565b7f43616e6e6f742075736520746865207a65726f2061646472657373206173207260008201527f6f75746572206164647265737300000000000000000000000000000000000000602082015250565b6000612ed6602d8361264a565b9150612ee182612e7a565b604082019050919050565b60006020820190508181036000830152612f0581612ec9565b9050919050565b7f43616e6e6f74207769746864726177206d6f726520455448207468616e20696e60008201527f2074686520706f6f6c0000000000000000000000000000000000000000000000602082015250565b6000612f6860298361264a565b9150612f7382612f0c565b604082019050919050565b60006020820190508181036000830152612f9781612f5b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ffa60268361264a565b915061300582612f9e565b604082019050919050565b6000602082019050818103600083015261302981612fed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061306e81612532565b92915050565b60006020828403121561308a576130896123c6565b5b60006130988482850161305f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006130f56130f06130eb846130d0565b61258b565b612392565b9050919050565b613105816130da565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613140816124f6565b82525050565b60006131528383613137565b60208301905092915050565b6000602082019050919050565b60006131768261310b565b6131808185613116565b935061318b83613127565b8060005b838110156131bc5781516131a38882613146565b97506131ae8361315e565b92505060018101905061318f565b5085935050505092915050565b60006080820190506131de60008301876130fc565b81810360208301526131f0818661316b565b90506131ff6040830185612508565b61320c606083018461239c565b9594505050505056fea2646970667358221220ce18c20052f0b1292b610ec7df33fb79c1918f010c80682e5a27cf0f0001c5f964736f6c63430008110033
Deployed Bytecode Sourcemap
21947:8649:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22165:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29159:158;;;:::i;:::-;;25164:1066;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30211:258;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22035:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22340:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24340:793;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27479:405;;;;;;;;;;;;;:::i;:::-;;27969:819;;;;;;;;;;;;;:::i;:::-;;22695:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22287:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7927:103;;;;;;;;;;;;;:::i;:::-;;28863:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22760:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22118:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24128:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7276:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23495:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22244:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22728:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23287:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28991:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29382:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22793:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22635:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;8185:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27297:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22165:26;;;;:::o;29159:158::-;7507:12;:10;:12::i;:::-;7496:23;;:7;:5;:7::i;:::-;:23;;;7488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29219:7:::1;29240:10;29232:24;;29264:18;:16;:18::i;:::-;29232:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29218:69;;;29306:2;29298:11;;;::::0;::::1;;29207:110;29159:158::o:0;25164:1066::-;14767:10;14754:23;;:9;:23;;;14746:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;25230:31:::1;25264:8;:20;25273:10;25264:20;;;;;;;;;;;;;;;25230:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;25327:7;25303;:20;;;:31;;25295:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;25412:7;25397:11;;:22;;;;;;;:::i;:::-;;;;;;;;25454:7;25430;:20;;:31;;;;;;;:::i;:::-;;;;;;::::0;::::1;25495:7;25472:8;:20;25481:10;25472:20;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25579:1;25555:21;25565:10;25555:9;:21::i;:::-;:25;25552:74;;;25600:7;:5;:7::i;:::-;25552:74;25668:62;25709:20;;25668:8;:20;25677:10;25668:20;;;;;;;;;;;;;;;:36;;;:40;;:62;;;;:::i;:::-;25653:12;:77;25650:321;;;25746:21;25799:3;25780:16;;25770:7;:26;;;;:::i;:::-;:32;;;;:::i;:::-;25746:56;;25828:13;25817:24;;;;;:::i;:::-;;;25856:3;;;;;;;;;;;:12;;;25869:10;;;;;;;;;;;25881:13;25856:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25731:176;25650:321;;;25936:23;25951:7;25936:14;:23::i;:::-;25926:33;;25650:321;26013:12;25983:7;:27;;:42;;;::::0;::::1;26036:3;;;;;;;;;;;:12;;;26049:10;26061:7;26036:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26140:1;26103:8;:20;26112:10;26103:20;;;;;;;;;;;;;;;:33;;;:38:::0;26100:123:::1;;26157:10;;:12;;;;;;;;;:::i;:::-;;;;;;26191:8;:20;26200:10;26191:20;;;;;;;;;;;;;;;;26184:27:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;26100:123;25219:1011;25164:1066:::0;:::o;30211:258::-;30259:12;30302:3;;;;;;;;;;;:13;;;30316:10;30302:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30329:8;:20;30338:10;30329:20;;;;;;;;;;;;;;;:33;;;30364:25;30378:10;30364:13;:25::i;:::-;30391:18;:16;:18::i;:::-;30411:10;;30423:12;;30437:11;;30449;;30291:170;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30284:177;;30211:258;:::o;22035:27::-;;;;:::o;22340:70::-;;;;;;;;;;;;;:::o;24340:793::-;14767:10;14754:23;;:9;:23;;;14746:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;24443:7:::1;24414:3;;;;;;;;;;;:13;;;24428:10;24414:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;24406:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;24520:1;24510:7;:11;24502:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;24587:1;24566:18;:16;:18::i;:::-;:22;24558:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24635:3;;;;;;;;;;;:16;;;24652:10;24672:4;24679:7;24635:52;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24708:23;24723:7;24708:14;:23::i;:::-;24698:33;;24744:31;24778:8;:20;24787:10;24778:20;;;;;;;;;;;;;;;24744:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;24838:1;24814:7;:20;;;:25:::0;24811:125:::1;;24885:12;24855:7;:27;;:42;;;::::0;::::1;24912:10;;:12;;;;;;;;;:::i;:::-;;;;;;24811:125;24974:7;24950;:20;;:31;;;;;;;:::i;:::-;;;;;;::::0;::::1;25022:12;24996:7;:23;;:38;;;::::0;::::1;25066:7;25051:11;;:22;;;;;;;:::i;:::-;;;;;;;;25117:7;25094:8;:20;25103:10;25094:20;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24395:738;24340:793:::0;:::o;27479:405::-;14767:10;14754:23;;:9;:23;;;14746:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;27523:14:::1;27540:21;27550:10;27540:9;:21::i;:::-;27523:38;;27573:7;27594:10;27586:24;;27618:6;27586:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27572:57;;;27648:2;27640:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;27714:46;27753:6;27714:8;:20;27723:10;27714:20;;;;;;;;;;;;;;;:34;;;:38;;:46;;;;:::i;:::-;27677:8;:20;27686:10;27677:20;;;;;;;;;;;;;;;:34;;:83;;;;27814:12;27771:8;:20;27780:10;27771:20;;;;;;;;;;;;;;;:40;;:55;;;;27852:24;27869:6;27852:12;;:16;;:24;;;;:::i;:::-;27837:12;:39;;;;27510:374;;27479:405::o:0;27969:819::-;14767:10;14754:23;;:9;:23;;;14746:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;28065:1:::1;28029:8;:20;28038:10;28029:20;;;;;;;;;;;;;;;:33;;;:37;28021:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;28120:14;28137:21;28147:10;28137:9;:21::i;:::-;28120:38;;28178:22;28193:6;28178:14;:22::i;:::-;28169:31;;28262:22;28287:3;;;;;;;;;;;:13;;;28309:4;28287:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28262:53;;28334;28359:4;28374:3;;;;;;;;;;;28380:6;28334:16;:53::i;:::-;28326:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28417:20;28471:14;28440:3;;;;;;;;;;;:13;;;28462:4;28440:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;;:::i;:::-;28417:68;;28564:12;28527:8;:20;28536:10;28527:20;;;;;;;;;;;;;;;:33;;;:49;;;;;;;:::i;:::-;;;;;;;;28603:12;28588:11;;:27;;;;;;;:::i;:::-;;;;;;;;28669:12;28626:8;:20;28635:10;28626:20;;;;;;;;;;;;;;;:40;;:55;;;;28707:24;28724:6;28707:12;;:16;;:24;;;;:::i;:::-;28692:12;:39;;;;28773:6;28762:10;28749:31;;;;;;;;;;;;28010:778;;;27969:819::o:0;22695:26::-;;;;:::o;22287:44::-;;;;:::o;7927:103::-;7507:12;:10;:12::i;:::-;7496:23;;:7;:5;:7::i;:::-;:23;;;7488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7992:30:::1;8019:1;7992:18;:30::i;:::-;7927:103::o:0;28863:96::-;7507:12;:10;:12::i;:::-;7496:23;;:7;:5;:7::i;:::-;:23;;;7488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28945:6:::1;28932:10;;:19;;;;;;;;;;;;;;;;;;28863:96:::0;:::o;22760:26::-;;;;:::o;22118:17::-;;;;;;;;;;;;;:::o;24128:169::-;7507:12;:10;:12::i;:::-;7496:23;;:7;:5;:7::i;:::-;:23;;;7488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24217:1:::1;24206:7;:12;;24198:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;24282:7;24268:11;:21;;;;24128:169:::0;:::o;7276:87::-;7322:7;7349:6;;;;;;;;;;;7342:13;;7276:87;:::o;23495:103::-;23543:7;23569:21;23562:28;;23495:103;:::o;22244:36::-;;;;:::o;22728:25::-;;;;:::o;23287:200::-;7507:12;:10;:12::i;:::-;7496:23;;:7;:5;:7::i;:::-;:23;;;7488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23384:1:::1;23359:27;;:13;:27;;::::0;23351:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23468:13;23441:7;;:41;;;;;;;;;;;;;;;;;;23287:200:::0;:::o;28991:91::-;7507:12;:10;:12::i;:::-;7496:23;;:7;:5;:7::i;:::-;:23;;;7488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29067:7:::1;29057;:17;;;;28991:91:::0;:::o;29382:256::-;7507:12;:10;:12::i;:::-;7496:23;;:7;:5;:7::i;:::-;:23;;;7488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29475:18:::1;:16;:18::i;:::-;29464:7;:29;29456:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;29551:7;29572:10;29564:24;;29596:7;29564:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29550:58;;;29627:2;29619:11;;;::::0;::::1;;29445:193;29382:256:::0;:::o;22793:27::-;;;;:::o;22635:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8185:201::-;7507:12;:10;:12::i;:::-;7496:23;;:7;:5;:7::i;:::-;:23;;;7488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8294:1:::1;8274:22;;:8;:22;;::::0;8266:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8350:28;8369:8;8350:18;:28::i;:::-;8185:201:::0;:::o;27297:116::-;27360:7;27386:19;27396:8;27386:9;:19::i;:::-;27379:26;;27297:116;;;:::o;6087:98::-;6140:7;6167:10;6160:17;;6087:98;:::o;26281:894::-;26341:7;26382:8;:18;26391:8;26382:18;;;;;;;;;;;;;;;:38;;;26366:12;:54;26363:805;;26443:1;26436:8;;;;26363:805;26476:17;26496:18;:16;:18::i;:::-;26476:38;;26545:1;26532:9;:14;:34;;;;26565:1;26550:11;;:16;26532:34;26529:614;;;26594:1;26587:8;;;;;26529:614;26641:14;26658:56;26675:8;:18;26684:8;26675:18;;;;;;;;;;;;;;;:38;;;26658:12;:16;;:56;;;;:::i;:::-;26641:73;;26824:19;26846:23;26857:11;;26846:6;:10;;:23;;;;:::i;:::-;26824:45;;26888:20;26911:65;26964:11;;26911:48;26927:8;:18;26936:8;26927:18;;;;;;;;;;;;;;;:31;;;26911:11;:15;;:48;;;;:::i;:::-;:52;;:65;;;;:::i;:::-;26888:88;;27013:9;26998:12;:24;26995:95;;;27061:9;27046:24;;26995:95;27115:12;27108:19;;;;;;26281:894;;;;:::o;17695:98::-;17753:7;17784:1;17780;:5;;;;:::i;:::-;17773:12;;17695:98;;;;:::o;29979:224::-;30036:7;30057:11;30086:7;;30080:3;30071:6;:12;;;;:::i;:::-;:22;;;;:::i;:::-;30057:36;;30127:3;30117:13;;;;;:::i;:::-;;;30141:3;;;;;;;;;;;:12;;;30154:10;;;;;;;;;;;30165:3;30141:28;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30189:6;30182:13;;;29979:224;;;:::o;29706:217::-;29768:7;29787:11;29816:7;;29810:3;29801:6;:12;;;;:::i;:::-;:22;;;;:::i;:::-;29787:36;;29857:3;29847:13;;;;;:::i;:::-;;;29865:10;;;;;;;;;;29909:6;29902:13;;;29706:217;;;:::o;23606:478::-;23695:4;23746:21;23784:1;23770:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23746:40;;23801:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23791:4;23796:1;23791:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;23830:5;23820:4;23825:1;23820:7;;;;;;;;:::i;:::-;;;;;;;:15;;;;;;;;;;;23905:7;;;;;;;;;;;:58;;;23972:9;23984:1;23987:4;23993:2;24015:3;23997:15;:21;;;;:::i;:::-;23905:114;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23901:179;;24069:5;24062:12;;;;;23901:179;24034:4;24027:11;;;23606:478;;;;;;:::o;8546:191::-;8620:16;8639:6;;;;;;;;;;;8620:25;;8665:8;8656:6;;:17;;;;;;;;;;;;;;;;;;8720:8;8689:40;;8710:8;8689:40;;;;;;;;;;;;8609:128;8546:191;:::o;18076:98::-;18134:7;18165:1;18161;:5;;;;:::i;:::-;18154:12;;18076:98;;;;:::o;18433:::-;18491:7;18522:1;18518;:5;;;;:::i;:::-;18511:12;;18433:98;;;;:::o;18832:::-;18890:7;18921:1;18917;:5;;;;:::i;:::-;18910:12;;18832:98;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:98::-;1428:6;1462:5;1456:12;1446:22;;1377:98;;;:::o;1481:168::-;1564:11;1598:6;1593:3;1586:19;1638:4;1633:3;1629:14;1614:29;;1481:168;;;;:::o;1655:246::-;1736:1;1746:113;1760:6;1757:1;1754:13;1746:113;;;1845:1;1840:3;1836:11;1830:18;1826:1;1821:3;1817:11;1810:39;1782:2;1779:1;1775:10;1770:15;;1746:113;;;1893:1;1884:6;1879:3;1875:16;1868:27;1717:184;1655:246;;;:::o;1907:102::-;1948:6;1999:2;1995:7;1990:2;1983:5;1979:14;1975:28;1965:38;;1907:102;;;:::o;2015:373::-;2101:3;2129:38;2161:5;2129:38;:::i;:::-;2183:70;2246:6;2241:3;2183:70;:::i;:::-;2176:77;;2262:65;2320:6;2315:3;2308:4;2301:5;2297:16;2262:65;:::i;:::-;2352:29;2374:6;2352:29;:::i;:::-;2347:3;2343:39;2336:46;;2105:283;2015:373;;;;:::o;2394:309::-;2505:4;2543:2;2532:9;2528:18;2520:26;;2592:9;2586:4;2582:20;2578:1;2567:9;2563:17;2556:47;2620:76;2691:4;2682:6;2620:76;:::i;:::-;2612:84;;2394:309;;;;:::o;2709:126::-;2746:7;2786:42;2779:5;2775:54;2764:65;;2709:126;;;:::o;2841:96::-;2878:7;2907:24;2925:5;2907:24;:::i;:::-;2896:35;;2841:96;;;:::o;2943:118::-;3030:24;3048:5;3030:24;:::i;:::-;3025:3;3018:37;2943:118;;:::o;3067:222::-;3160:4;3198:2;3187:9;3183:18;3175:26;;3211:71;3279:1;3268:9;3264:17;3255:6;3211:71;:::i;:::-;3067:222;;;;:::o;3295:122::-;3368:24;3386:5;3368:24;:::i;:::-;3361:5;3358:35;3348:63;;3407:1;3404;3397:12;3348:63;3295:122;:::o;3423:139::-;3469:5;3507:6;3494:20;3485:29;;3523:33;3550:5;3523:33;:::i;:::-;3423:139;;;;:::o;3568:329::-;3627:6;3676:2;3664:9;3655:7;3651:23;3647:32;3644:119;;;3682:79;;:::i;:::-;3644:119;3802:1;3827:53;3872:7;3863:6;3852:9;3848:22;3827:53;:::i;:::-;3817:63;;3773:117;3568:329;;;;:::o;3903:60::-;3931:3;3952:5;3945:12;;3903:60;;;:::o;3969:142::-;4019:9;4052:53;4070:34;4079:24;4097:5;4079:24;:::i;:::-;4070:34;:::i;:::-;4052:53;:::i;:::-;4039:66;;3969:142;;;:::o;4117:126::-;4167:9;4200:37;4231:5;4200:37;:::i;:::-;4187:50;;4117:126;;;:::o;4249:140::-;4313:9;4346:37;4377:5;4346:37;:::i;:::-;4333:50;;4249:140;;;:::o;4395:159::-;4496:51;4541:5;4496:51;:::i;:::-;4491:3;4484:64;4395:159;;:::o;4560:250::-;4667:4;4705:2;4694:9;4690:18;4682:26;;4718:85;4800:1;4789:9;4785:17;4776:6;4718:85;:::i;:::-;4560:250;;;;:::o;4816:553::-;4993:4;5031:3;5020:9;5016:19;5008:27;;5045:71;5113:1;5102:9;5098:17;5089:6;5045:71;:::i;:::-;5126:72;5194:2;5183:9;5179:18;5170:6;5126:72;:::i;:::-;5208;5276:2;5265:9;5261:18;5252:6;5208:72;:::i;:::-;5290;5358:2;5347:9;5343:18;5334:6;5290:72;:::i;:::-;4816:553;;;;;;;:::o;5375:169::-;5459:11;5493:6;5488:3;5481:19;5533:4;5528:3;5524:14;5509:29;;5375:169;;;;:::o;5550:182::-;5690:34;5686:1;5678:6;5674:14;5667:58;5550:182;:::o;5738:366::-;5880:3;5901:67;5965:2;5960:3;5901:67;:::i;:::-;5894:74;;5977:93;6066:3;5977:93;:::i;:::-;6095:2;6090:3;6086:12;6079:19;;5738:366;;;:::o;6110:419::-;6276:4;6314:2;6303:9;6299:18;6291:26;;6363:9;6357:4;6353:20;6349:1;6338:9;6334:17;6327:47;6391:131;6517:4;6391:131;:::i;:::-;6383:139;;6110:419;;;:::o;6535:147::-;6636:11;6673:3;6658:18;;6535:147;;;;:::o;6688:114::-;;:::o;6808:398::-;6967:3;6988:83;7069:1;7064:3;6988:83;:::i;:::-;6981:90;;7080:93;7169:3;7080:93;:::i;:::-;7198:1;7193:3;7189:11;7182:18;;6808:398;;;:::o;7212:379::-;7396:3;7418:147;7561:3;7418:147;:::i;:::-;7411:154;;7582:3;7575:10;;7212:379;;;:::o;7597:161::-;7737:13;7733:1;7725:6;7721:14;7714:37;7597:161;:::o;7764:366::-;7906:3;7927:67;7991:2;7986:3;7927:67;:::i;:::-;7920:74;;8003:93;8092:3;8003:93;:::i;:::-;8121:2;8116:3;8112:12;8105:19;;7764:366;;;:::o;8136:419::-;8302:4;8340:2;8329:9;8325:18;8317:26;;8389:9;8383:4;8379:20;8375:1;8364:9;8360:17;8353:47;8417:131;8543:4;8417:131;:::i;:::-;8409:139;;8136:419;;;:::o;8561:232::-;8701:34;8697:1;8689:6;8685:14;8678:58;8770:15;8765:2;8757:6;8753:15;8746:40;8561:232;:::o;8799:366::-;8941:3;8962:67;9026:2;9021:3;8962:67;:::i;:::-;8955:74;;9038:93;9127:3;9038:93;:::i;:::-;9156:2;9151:3;9147:12;9140:19;;8799:366;;;:::o;9171:419::-;9337:4;9375:2;9364:9;9360:18;9352:26;;9424:9;9418:4;9414:20;9410:1;9399:9;9395:17;9388:47;9452:131;9578:4;9452:131;:::i;:::-;9444:139;;9171:419;;;:::o;9596:180::-;9644:77;9641:1;9634:88;9741:4;9738:1;9731:15;9765:4;9762:1;9755:15;9782:194;9822:4;9842:20;9860:1;9842:20;:::i;:::-;9837:25;;9876:20;9894:1;9876:20;:::i;:::-;9871:25;;9920:1;9917;9913:9;9905:17;;9944:1;9938:4;9935:11;9932:37;;;9949:18;;:::i;:::-;9932:37;9782:194;;;;:::o;9982:410::-;10022:7;10045:20;10063:1;10045:20;:::i;:::-;10040:25;;10079:20;10097:1;10079:20;:::i;:::-;10074:25;;10134:1;10131;10127:9;10156:30;10174:11;10156:30;:::i;:::-;10145:41;;10335:1;10326:7;10322:15;10319:1;10316:22;10296:1;10289:9;10269:83;10246:139;;10365:18;;:::i;:::-;10246:139;10030:362;9982:410;;;;:::o;10398:180::-;10446:77;10443:1;10436:88;10543:4;10540:1;10533:15;10567:4;10564:1;10557:15;10584:185;10624:1;10641:20;10659:1;10641:20;:::i;:::-;10636:25;;10675:20;10693:1;10675:20;:::i;:::-;10670:25;;10714:1;10704:35;;10719:18;;:::i;:::-;10704:35;10761:1;10758;10754:9;10749:14;;10584:185;;;;:::o;10775:332::-;10896:4;10934:2;10923:9;10919:18;10911:26;;10947:71;11015:1;11004:9;11000:17;10991:6;10947:71;:::i;:::-;11028:72;11096:2;11085:9;11081:18;11072:6;11028:72;:::i;:::-;10775:332;;;;;:::o;11113:90::-;11147:7;11190:5;11183:13;11176:21;11165:32;;11113:90;;;:::o;11209:116::-;11279:21;11294:5;11279:21;:::i;:::-;11272:5;11269:32;11259:60;;11315:1;11312;11305:12;11259:60;11209:116;:::o;11331:137::-;11385:5;11416:6;11410:13;11401:22;;11432:30;11456:5;11432:30;:::i;:::-;11331:137;;;;:::o;11474:345::-;11541:6;11590:2;11578:9;11569:7;11565:23;11561:32;11558:119;;;11596:79;;:::i;:::-;11558:119;11716:1;11741:61;11794:7;11785:6;11774:9;11770:22;11741:61;:::i;:::-;11731:71;;11687:125;11474:345;;;;:::o;11825:171::-;11864:3;11887:24;11905:5;11887:24;:::i;:::-;11878:33;;11933:4;11926:5;11923:15;11920:41;;11941:18;;:::i;:::-;11920:41;11988:1;11981:5;11977:13;11970:20;;11825:171;;;:::o;12002:143::-;12059:5;12090:6;12084:13;12075:22;;12106:33;12133:5;12106:33;:::i;:::-;12002:143;;;;:::o;12151:351::-;12221:6;12270:2;12258:9;12249:7;12245:23;12241:32;12238:119;;;12276:79;;:::i;:::-;12238:119;12396:1;12421:64;12477:7;12468:6;12457:9;12453:22;12421:64;:::i;:::-;12411:74;;12367:128;12151:351;;;;:::o;12508:997::-;12797:4;12835:3;12824:9;12820:19;12812:27;;12849:71;12917:1;12906:9;12902:17;12893:6;12849:71;:::i;:::-;12930:72;12998:2;12987:9;12983:18;12974:6;12930:72;:::i;:::-;13012;13080:2;13069:9;13065:18;13056:6;13012:72;:::i;:::-;13094;13162:2;13151:9;13147:18;13138:6;13094:72;:::i;:::-;13176:73;13244:3;13233:9;13229:19;13220:6;13176:73;:::i;:::-;13259;13327:3;13316:9;13312:19;13303:6;13259:73;:::i;:::-;13342;13410:3;13399:9;13395:19;13386:6;13342:73;:::i;:::-;13425;13493:3;13482:9;13478:19;13469:6;13425:73;:::i;:::-;12508:997;;;;;;;;;;;:::o;13511:223::-;13651:34;13647:1;13639:6;13635:14;13628:58;13720:6;13715:2;13707:6;13703:15;13696:31;13511:223;:::o;13740:366::-;13882:3;13903:67;13967:2;13962:3;13903:67;:::i;:::-;13896:74;;13979:93;14068:3;13979:93;:::i;:::-;14097:2;14092:3;14088:12;14081:19;;13740:366;;;:::o;14112:419::-;14278:4;14316:2;14305:9;14301:18;14293:26;;14365:9;14359:4;14355:20;14351:1;14340:9;14336:17;14329:47;14393:131;14519:4;14393:131;:::i;:::-;14385:139;;14112:419;;;:::o;14537:172::-;14677:24;14673:1;14665:6;14661:14;14654:48;14537:172;:::o;14715:366::-;14857:3;14878:67;14942:2;14937:3;14878:67;:::i;:::-;14871:74;;14954:93;15043:3;14954:93;:::i;:::-;15072:2;15067:3;15063:12;15056:19;;14715:366;;;:::o;15087:419::-;15253:4;15291:2;15280:9;15276:18;15268:26;;15340:9;15334:4;15330:20;15326:1;15315:9;15311:17;15304:47;15368:131;15494:4;15368:131;:::i;:::-;15360:139;;15087:419;;;:::o;15512:171::-;15652:23;15648:1;15640:6;15636:14;15629:47;15512:171;:::o;15689:366::-;15831:3;15852:67;15916:2;15911:3;15852:67;:::i;:::-;15845:74;;15928:93;16017:3;15928:93;:::i;:::-;16046:2;16041:3;16037:12;16030:19;;15689:366;;;:::o;16061:419::-;16227:4;16265:2;16254:9;16250:18;16242:26;;16314:9;16308:4;16304:20;16300:1;16289:9;16285:17;16278:47;16342:131;16468:4;16342:131;:::i;:::-;16334:139;;16061:419;;;:::o;16486:442::-;16635:4;16673:2;16662:9;16658:18;16650:26;;16686:71;16754:1;16743:9;16739:17;16730:6;16686:71;:::i;:::-;16767:72;16835:2;16824:9;16820:18;16811:6;16767:72;:::i;:::-;16849;16917:2;16906:9;16902:18;16893:6;16849:72;:::i;:::-;16486:442;;;;;;:::o;16934:233::-;16973:3;16996:24;17014:5;16996:24;:::i;:::-;16987:33;;17042:66;17035:5;17032:77;17029:103;;17112:18;;:::i;:::-;17029:103;17159:1;17152:5;17148:13;17141:20;;16934:233;;;:::o;17173:191::-;17213:3;17232:20;17250:1;17232:20;:::i;:::-;17227:25;;17266:20;17284:1;17266:20;:::i;:::-;17261:25;;17309:1;17306;17302:9;17295:16;;17330:3;17327:1;17324:10;17321:36;;;17337:18;;:::i;:::-;17321:36;17173:191;;;;:::o;17370:162::-;17510:14;17506:1;17498:6;17494:14;17487:38;17370:162;:::o;17538:366::-;17680:3;17701:67;17765:2;17760:3;17701:67;:::i;:::-;17694:74;;17777:93;17866:3;17777:93;:::i;:::-;17895:2;17890:3;17886:12;17879:19;;17538:366;;;:::o;17910:419::-;18076:4;18114:2;18103:9;18099:18;18091:26;;18163:9;18157:4;18153:20;18149:1;18138:9;18134:17;18127:47;18191:131;18317:4;18191:131;:::i;:::-;18183:139;;17910:419;;;:::o;18335:178::-;18475:30;18471:1;18463:6;18459:14;18452:54;18335:178;:::o;18519:366::-;18661:3;18682:67;18746:2;18741:3;18682:67;:::i;:::-;18675:74;;18758:93;18847:3;18758:93;:::i;:::-;18876:2;18871:3;18867:12;18860:19;;18519:366;;;:::o;18891:419::-;19057:4;19095:2;19084:9;19080:18;19072:26;;19144:9;19138:4;19134:20;19130:1;19119:9;19115:17;19108:47;19172:131;19298:4;19172:131;:::i;:::-;19164:139;;18891:419;;;:::o;19316:165::-;19456:17;19452:1;19444:6;19440:14;19433:41;19316:165;:::o;19487:366::-;19629:3;19650:67;19714:2;19709:3;19650:67;:::i;:::-;19643:74;;19726:93;19815:3;19726:93;:::i;:::-;19844:2;19839:3;19835:12;19828:19;;19487:366;;;:::o;19859:419::-;20025:4;20063:2;20052:9;20048:18;20040:26;;20112:9;20106:4;20102:20;20098:1;20087:9;20083:17;20076:47;20140:131;20266:4;20140:131;:::i;:::-;20132:139;;19859:419;;;:::o;20284:220::-;20424:34;20420:1;20412:6;20408:14;20401:58;20493:3;20488:2;20480:6;20476:15;20469:28;20284:220;:::o;20510:366::-;20652:3;20673:67;20737:2;20732:3;20673:67;:::i;:::-;20666:74;;20749:93;20838:3;20749:93;:::i;:::-;20867:2;20862:3;20858:12;20851:19;;20510:366;;;:::o;20882:419::-;21048:4;21086:2;21075:9;21071:18;21063:26;;21135:9;21129:4;21125:20;21121:1;21110:9;21106:17;21099:47;21163:131;21289:4;21163:131;:::i;:::-;21155:139;;20882:419;;;:::o;21307:232::-;21447:34;21443:1;21435:6;21431:14;21424:58;21516:15;21511:2;21503:6;21499:15;21492:40;21307:232;:::o;21545:366::-;21687:3;21708:67;21772:2;21767:3;21708:67;:::i;:::-;21701:74;;21784:93;21873:3;21784:93;:::i;:::-;21902:2;21897:3;21893:12;21886:19;;21545:366;;;:::o;21917:419::-;22083:4;22121:2;22110:9;22106:18;22098:26;;22170:9;22164:4;22160:20;22156:1;22145:9;22141:17;22134:47;22198:131;22324:4;22198:131;:::i;:::-;22190:139;;21917:419;;;:::o;22342:228::-;22482:34;22478:1;22470:6;22466:14;22459:58;22551:11;22546:2;22538:6;22534:15;22527:36;22342:228;:::o;22576:366::-;22718:3;22739:67;22803:2;22798:3;22739:67;:::i;:::-;22732:74;;22815:93;22904:3;22815:93;:::i;:::-;22933:2;22928:3;22924:12;22917:19;;22576:366;;;:::o;22948:419::-;23114:4;23152:2;23141:9;23137:18;23129:26;;23201:9;23195:4;23191:20;23187:1;23176:9;23172:17;23165:47;23229:131;23355:4;23229:131;:::i;:::-;23221:139;;22948:419;;;:::o;23373:225::-;23513:34;23509:1;23501:6;23497:14;23490:58;23582:8;23577:2;23569:6;23565:15;23558:33;23373:225;:::o;23604:366::-;23746:3;23767:67;23831:2;23826:3;23767:67;:::i;:::-;23760:74;;23843:93;23932:3;23843:93;:::i;:::-;23961:2;23956:3;23952:12;23945:19;;23604:366;;;:::o;23976:419::-;24142:4;24180:2;24169:9;24165:18;24157:26;;24229:9;24223:4;24219:20;24215:1;24204:9;24200:17;24193:47;24257:131;24383:4;24257:131;:::i;:::-;24249:139;;23976:419;;;:::o;24401:180::-;24449:77;24446:1;24439:88;24546:4;24543:1;24536:15;24570:4;24567:1;24560:15;24587:143;24644:5;24675:6;24669:13;24660:22;;24691:33;24718:5;24691:33;:::i;:::-;24587:143;;;;:::o;24736:351::-;24806:6;24855:2;24843:9;24834:7;24830:23;24826:32;24823:119;;;24861:79;;:::i;:::-;24823:119;24981:1;25006:64;25062:7;25053:6;25042:9;25038:22;25006:64;:::i;:::-;24996:74;;24952:128;24736:351;;;;:::o;25093:180::-;25141:77;25138:1;25131:88;25238:4;25235:1;25228:15;25262:4;25259:1;25252:15;25279:85;25324:7;25353:5;25342:16;;25279:85;;;:::o;25370:158::-;25428:9;25461:61;25479:42;25488:32;25514:5;25488:32;:::i;:::-;25479:42;:::i;:::-;25461:61;:::i;:::-;25448:74;;25370:158;;;:::o;25534:147::-;25629:45;25668:5;25629:45;:::i;:::-;25624:3;25617:58;25534:147;;:::o;25687:114::-;25754:6;25788:5;25782:12;25772:22;;25687:114;;;:::o;25807:184::-;25906:11;25940:6;25935:3;25928:19;25980:4;25975:3;25971:14;25956:29;;25807:184;;;;:::o;25997:132::-;26064:4;26087:3;26079:11;;26117:4;26112:3;26108:14;26100:22;;25997:132;;;:::o;26135:108::-;26212:24;26230:5;26212:24;:::i;:::-;26207:3;26200:37;26135:108;;:::o;26249:179::-;26318:10;26339:46;26381:3;26373:6;26339:46;:::i;:::-;26417:4;26412:3;26408:14;26394:28;;26249:179;;;;:::o;26434:113::-;26504:4;26536;26531:3;26527:14;26519:22;;26434:113;;;:::o;26583:732::-;26702:3;26731:54;26779:5;26731:54;:::i;:::-;26801:86;26880:6;26875:3;26801:86;:::i;:::-;26794:93;;26911:56;26961:5;26911:56;:::i;:::-;26990:7;27021:1;27006:284;27031:6;27028:1;27025:13;27006:284;;;27107:6;27101:13;27134:63;27193:3;27178:13;27134:63;:::i;:::-;27127:70;;27220:60;27273:6;27220:60;:::i;:::-;27210:70;;27066:224;27053:1;27050;27046:9;27041:14;;27006:284;;;27010:14;27306:3;27299:10;;26707:608;;;26583:732;;;;:::o;27321:720::-;27556:4;27594:3;27583:9;27579:19;27571:27;;27608:79;27684:1;27673:9;27669:17;27660:6;27608:79;:::i;:::-;27734:9;27728:4;27724:20;27719:2;27708:9;27704:18;27697:48;27762:108;27865:4;27856:6;27762:108;:::i;:::-;27754:116;;27880:72;27948:2;27937:9;27933:18;27924:6;27880:72;:::i;:::-;27962;28030:2;28019:9;28015:18;28006:6;27962:72;:::i;:::-;27321:720;;;;;;;:::o
Swarm Source
ipfs://ce18c20052f0b1292b610ec7df33fb79c1918f010c80682e5a27cf0f0001c5f9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,371.08 | 0.0237 | $79.76 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.