Source Code
Latest 25 from a total of 74 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw Contrac... | 11761940 | 1868 days ago | IN | 0 ETH | 0.00386928 | ||||
| Emergency Withdr... | 11761914 | 1868 days ago | IN | 0 ETH | 0.01650048 | ||||
| Withdraw | 11653152 | 1885 days ago | IN | 0 ETH | 0.00917061 | ||||
| Withdraw | 11526170 | 1904 days ago | IN | 0 ETH | 0.01553765 | ||||
| Withdraw | 11502436 | 1908 days ago | IN | 0 ETH | 0.0168719 | ||||
| Withdraw | 11438520 | 1917 days ago | IN | 0 ETH | 0.0035267 | ||||
| Withdraw | 11429981 | 1919 days ago | IN | 0 ETH | 0.00691703 | ||||
| Withdraw | 11417152 | 1921 days ago | IN | 0 ETH | 0.0054183 | ||||
| Withdraw | 11417148 | 1921 days ago | IN | 0 ETH | 0.00603898 | ||||
| Withdraw | 11417093 | 1921 days ago | IN | 0 ETH | 0.00551132 | ||||
| Withdraw | 11416166 | 1921 days ago | IN | 0 ETH | 0.00837721 | ||||
| Withdraw | 11410492 | 1922 days ago | IN | 0 ETH | 0.00330679 | ||||
| Withdraw | 11404922 | 1923 days ago | IN | 0 ETH | 0.00661359 | ||||
| Withdraw | 11377070 | 1927 days ago | IN | 0 ETH | 0.00524132 | ||||
| Withdraw | 11358163 | 1930 days ago | IN | 0 ETH | 0.00564349 | ||||
| Withdraw | 11357992 | 1930 days ago | IN | 0 ETH | 0.00808271 | ||||
| Claim Referal Re... | 11338733 | 1933 days ago | IN | 0 ETH | 0.00088214 | ||||
| Withdraw | 11338408 | 1933 days ago | IN | 0 ETH | 0.00427042 | ||||
| Withdraw | 11338395 | 1933 days ago | IN | 0 ETH | 0.00440906 | ||||
| Withdraw | 11336447 | 1933 days ago | IN | 0 ETH | 0.00588632 | ||||
| Withdraw | 11328705 | 1934 days ago | IN | 0 ETH | 0.00485671 | ||||
| Withdraw | 11326127 | 1935 days ago | IN | 0 ETH | 0.00738171 | ||||
| Claim Referal Re... | 11241480 | 1948 days ago | IN | 0 ETH | 0.00586623 | ||||
| Deposit | 11181878 | 1957 days ago | IN | 0 ETH | 0.00335513 | ||||
| Deposit | 11143110 | 1963 days ago | IN | 0 ETH | 0.00149932 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Staker
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-08-31
*/
pragma solidity ^0.5.4;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see {ERC20Detailed}.
*/
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 Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Converts an `address` into `address payable`. Note that this is
* simply a type cast: the actual underlying value is not changed.
*
* _Available since v2.4.0._
*/
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*
* _Available since v2.4.0._
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-call-value
(bool success, ) = recipient.call.value(amount)("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
/**
* @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].
*/
contract ReentrancyGuard {
bool internal notEntered;
constructor () internal {
// Storing an initial 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 percetange 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.
notEntered = true;
}
/**
* @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(notEntered, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
notEntered = false;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
notEntered = true;
}
}
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
contract DSAuthority {
function canCall(
address src, address dst, bytes4 sig
) public view returns (bool);
}
contract DSAuthEvents {
event LogSetAuthority (address indexed authority);
event LogSetOwner (address indexed owner);
event OwnerUpdate (address indexed owner, address indexed newOwner);
}
contract DSAuth is DSAuthEvents {
DSAuthority public authority;
address public owner;
address public newOwner;
constructor() public {
owner = msg.sender;
emit LogSetOwner(msg.sender);
}
// Warning: you should absolutely sure you want to give up authority!!!
function disableOwnership() public onlyOwner {
owner = address(0);
emit OwnerUpdate(msg.sender, owner);
}
function transferOwnership(address newOwner_) public onlyOwner {
require(newOwner_ != owner, "TransferOwnership: the same owner.");
newOwner = newOwner_;
}
function acceptOwnership() public {
require(msg.sender == newOwner, "AcceptOwnership: only new owner do this.");
emit OwnerUpdate(owner, newOwner);
owner = newOwner;
newOwner = address(0x0);
}
///[snow] guard is Authority who inherit DSAuth.
function setAuthority(DSAuthority authority_)
public
onlyOwner
{
authority = authority_;
emit LogSetAuthority(address(authority));
}
modifier onlyOwner {
require(isOwner(msg.sender), "ds-auth-non-owner");
_;
}
function isOwner(address src) internal view returns (bool) {
return bool(src == owner);
}
modifier auth {
require(isAuthorized(msg.sender, msg.sig), "ds-auth-unauthorized");
_;
}
function isAuthorized(address src, bytes4 sig) internal view returns (bool) {
if (src == address(this)) {
return true;
} else if (src == owner) {
return true;
} else if (authority == DSAuthority(0)) {
return false;
} else {
return authority.canCall(src, address(this), sig);
}
}
}
/// math.sol -- mixin for inline numerical wizardry
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
pragma solidity ^0.5.4;
library DSMath {
function add(uint x, uint y) internal pure returns (uint z) {
require((z = x + y) >= x, "ds-math-add-overflow");
}
function sub(uint x, uint y) internal pure returns (uint z) {
require((z = x - y) <= x, "ds-math-sub-underflow");
}
function mul(uint x, uint y) internal pure returns (uint z) {
require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow");
}
function div(uint x, uint y) internal pure returns (uint z) {
require(y > 0, "ds-math-div-overflow");
z = x / y;
}
function min(uint x, uint y) internal pure returns (uint z) {
return x <= y ? x : y;
}
function max(uint x, uint y) internal pure returns (uint z) {
return x >= y ? x : y;
}
uint constant WAD = 10 ** 18;
function wdiv(uint x, uint y) internal pure returns (uint z) {
z = add(mul(x, WAD), y / 2) / y;
}
/**
* @dev x to the power of y power(base, exponent)
*/
function pow(uint256 base, uint256 exponent) public pure returns (uint256) {
if (exponent == 0) {
return 1;
}
else if (exponent == 1) {
return base;
}
else if (base == 0 && exponent != 0) {
return 0;
}
else {
uint256 z = base;
for (uint256 i = 1; i < exponent; i++)
z = mul(z, base);
return z;
}
}
}
interface CErc20 {
function balanceOf(address _owner) external view returns (uint);
//function balanceOfUnderlying(address owner) external returns (uint);
function balanceOfUnderlying(address owner) external view returns (uint);
function mint(uint mintAmount) external returns (uint);
function redeemUnderlying(uint redeemAmount) external returns (uint);
function redeem(uint redeemAmount) external returns (uint);
function exchangeRateStored() external view returns (uint);
}
contract Staker is DSAuth, ReentrancyGuard {
using DSMath for uint256;
using SafeERC20 for IERC20;
uint256 constant TOUCHDECIMAL = 8;
uint256 constant STABLEDECIMAL = 6;
uint256 constant MAXIMUMDEPOSIT = 100000 * (10 ** STABLEDECIMAL);
uint256 public minimalDeposit = 500 * (10 ** STABLEDECIMAL);
address public touchToken;
address public stableCoin;
address public compound;
uint256 public touchPrice; // offset 10 ** 6
uint256 public principle;
struct DepositInfo {
uint256 amount;
uint256 startTime;
uint256 period;
}
struct Account {
uint256 referredCount;
uint256 referredAmount;
uint256 referredMilestoneAchived;
uint256 rewards;
}
mapping (address => mapping (uint256 => DepositInfo)) public deposits;
mapping (address => uint256) public userDepositsCounts;
mapping (address => uint256) public userTotalDeposited;
mapping (address => Account) public accounts;
event UserDeposit(address indexed sender, uint256 value, uint256 timestamp, uint256 matureDate, uint256 touchAmount, uint256 depositId);
event UserWithdraw(address indexed sender, uint256 depositAmount, uint256 value, uint256 withdrawId, uint256 timestamp);
event ClaimReferral(address indexed sender, uint256 touchAmount, uint256 timestamp);
constructor(address _touch, address _stable, address _compound) public {
touchToken = _touch;
stableCoin = _stable;
compound = _compound;
IERC20(_stable).safeApprove(_compound, uint256(-1));
touchPrice = 10 ** STABLEDECIMAL;
}
function deposit(uint256 _amount, uint256 _period, address _referrer) external nonReentrant auth {
require(_amount >= minimalDeposit, "the supplied amount should more than minimal deposit.");
require(_period > 0 && _period < 4, "the period should between 1 to 3 months. ");
require(getUserCurrentDepositAmount(msg.sender).add(_amount) <= MAXIMUMDEPOSIT, "deposit too more per user.");
getFromUser(_amount);
userDepositsCounts[msg.sender] += 1;
userTotalDeposited[msg.sender] = userTotalDeposited[msg.sender].add(_amount);
deposits[msg.sender][userDepositsCounts[msg.sender]] = DepositInfo(_amount, getTime(), _period);
principle = principle.add(_amount);
uint256 referredBonus = 0;
// update referral info
if (userDepositsCounts[_referrer] != 0 && _referrer != msg.sender) {
Account memory _referrerAccount = accounts[_referrer];
(_referrerAccount, referredBonus) = _updateCountReward(_referrerAccount);
_referrerAccount = _updateMilestoneReward(_referrerAccount, _amount);
accounts[_referrer] = _referrerAccount;
}
// check interest in stable coin
uint256 _equaledUSD = calInterest(_amount, _period);
uint256 _touchToUser = _equaledUSD.mul(10 ** TOUCHDECIMAL).div(touchPrice);
IERC20(touchToken).safeTransfer(msg.sender, _touchToUser.add(referredBonus));
emit UserDeposit(
msg.sender,
_amount,
getTime(),
getTime() + _period * 30 days,
_touchToUser.add(referredBonus),
userDepositsCounts[msg.sender]);
}
function withdraw(address _user, uint256 _withdrawId) external nonReentrant {
DepositInfo memory depositInfo = deposits[_user][_withdrawId];
require(depositInfo.amount > 0, "the deposit has already withdrawed or not exist");
require(getTime() >= depositInfo.startTime.add(1 days), "must deposit more than 1 days");
require(
getTime() >= depositInfo.startTime.add(depositInfo.period.mul(30 days)) ||
_user == msg.sender, "the stake is not ended, must withdraw by owner");
uint256 depositAmount = depositInfo.amount;
principle = principle.sub(depositInfo.amount);
uint256 shouldPayToUser = calRealInterest(_user, _withdrawId);
depositInfo.amount = 0;
deposits[_user][_withdrawId] = depositInfo;
sendToUser(_user, shouldPayToUser);
emit UserWithdraw(_user, depositAmount, shouldPayToUser, _withdrawId, getTime());
}
function claimReferalReward(address _user) external nonReentrant {
Account memory _account = accounts[_user];
require(_account.rewards != 0, "user has no rewards");
uint256 _amount = _account.rewards;
_account.rewards = 0;
accounts[_user] = _account;
IERC20(touchToken).safeTransfer(_user, _amount);
emit ClaimReferral(_user, _amount, getTime());
}
// getter function
function tokenBalance() public view returns (uint256) {
uint256 balanceInDefi = CErc20(compound).balanceOfUnderlying(address(this));
uint256 contractBalance = IERC20(stableCoin).balanceOf(address(this));
return balanceInDefi.add(contractBalance);
}
function getProfit() public view returns (uint256) {
uint256 _tokenBalance = tokenBalance();
return _tokenBalance.sub(principle);
}
function getTime() public view returns (uint256) {
return block.timestamp;
}
function getTouchPrice() public view returns (uint256) {
return touchPrice;
}
function getWithdrawAmountEstimate(address _user, uint256 _withdrawId) public view returns (uint256) {
return calRealInterest(_user, _withdrawId);
}
function getInterestEstimate(uint256 _amount, uint256 _period) public pure returns (uint256) {
return calInterest(_amount, _period);
}
function getUserCurrentDepositAmount(address _user) public view returns (uint256) {
uint256 depositsCounts = userDepositsCounts[_user];
if(depositsCounts == 0) {
return 0;
}
uint256 sum = 0;
for(uint256 i = 1; i <= depositsCounts; i++) {
sum = sum.add(deposits[_user][i].amount);
}
return sum;
}
// admin
function setTouchPrice(uint256 _price) external auth {
touchPrice = _price;
}
function setMinimalDeposit(uint256 _minimalDeposit) external auth {
minimalDeposit = _minimalDeposit;
}
// owner
function withdrawProfit() external onlyOwner {
uint256 _profit = getProfit();
require(CErc20(compound).redeemUnderlying(_profit) == 0, "compound error");
IERC20(stableCoin).safeTransfer(msg.sender, _profit);
}
function emergencyWithdraw() external onlyOwner {
uint256 amount = IERC20(compound).balanceOf(address(this));
require(CErc20(compound).redeem(amount) == 0, "compound error");
IERC20(stableCoin).safeTransfer(msg.sender, IERC20(stableCoin).balanceOf(address(this)));
}
function withdrawContractToken(address _token) external onlyOwner {
// allow owner to withdraw token in contract,
// can not withdraw cUSDT
require(_token != address(compound), "owner can not transfer the cToken");
uint256 balance = IERC20(_token).balanceOf(address(this));
IERC20(_token).safeTransfer(msg.sender, balance);
}
// internal
function calInterest(uint256 _amount, uint256 _period) internal pure returns (uint256) {
if(_period == 3) { // 3 months, APR = 10%
//return _amount * 10 / 100 / 4;
return _amount.mul(10).div(400);
} else if (_period == 2) { // 2 month, APR = 8 %
//return _amount * 8 / 100 / 6;
return _amount.mul(8).div(600);
} else if (_period == 1) { // 1 month, APR = 6 %
//return _amount * 6 / 100 / 12;
return _amount.mul(6).div(1200);
}
return 0;
}
function calRealInterest(address _user, uint256 _withdrawId) internal view returns (uint256) {
DepositInfo memory depositInfo = deposits[_user][_withdrawId];
if (depositInfo.amount == 0) {
return 0;
}
if (getTime() >= depositInfo.startTime.add(depositInfo.period.mul(30 days))) {
return depositInfo.amount;
} else {
//require(_user == msg.sender, "the stake is not ended, must withdraw by owner");
uint256 shouldCalculatedDays = getTime().sub(depositInfo.startTime).div(1 days);
// APR 2.9% --> daily 0.00794521%
uint256 _instrest = depositInfo.amount.mul(794521).mul(shouldCalculatedDays).div(10 ** 10);
uint256 shouldRepayToUser = depositInfo.amount.add(_instrest).sub(calInterest(depositInfo.amount, depositInfo.period));
return shouldRepayToUser;
}
}
function _updateCountReward(Account memory _account) internal view returns (Account memory, uint256) {
Account memory __account = _account;
uint256 referredBonus = 0;
if (userDepositsCounts[msg.sender] == 1) {
__account.referredCount += 1;
referredBonus = referredBonus.add(50 * (10 ** TOUCHDECIMAL));
__account.rewards = __account.rewards.add((_account.referredCount / 10 * 10 + 50).mul(10 ** TOUCHDECIMAL));
}
return (__account, referredBonus);
}
function _updateMilestoneReward(Account memory _account, uint256 _amount) internal pure returns (Account memory) {
_account.referredAmount += _amount;
while(_account.referredAmount >= _account.referredMilestoneAchived.add(10000 * (10 ** STABLEDECIMAL))) {
_account.referredMilestoneAchived += 10000 * (10 ** STABLEDECIMAL);
_account.rewards += ((_account.referredMilestoneAchived.div((10000 * (10 ** STABLEDECIMAL)))).mul(200).add(800)).mul(10 ** TOUCHDECIMAL);
}
return _account;
}
function sendToUser(address _user, uint256 _amount) internal {
require(CErc20(compound).redeemUnderlying(_amount) == 0, "compound error");
IERC20(stableCoin).safeTransfer(_user, _amount);
}
function getFromUser(uint256 _amount) internal {
IERC20(stableCoin).safeTransferFrom(msg.sender, address(this), _amount);
require(CErc20(compound).mint(_amount) == 0, "compound error");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_touch","type":"address"},{"internalType":"address","name":"_stable","type":"address"},{"internalType":"address","name":"_compound","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"touchAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ClaimReferral","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authority","type":"address"}],"name":"LogSetAuthority","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"LogSetOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"matureDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"touchAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositId","type":"uint256"}],"name":"UserDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UserWithdraw","type":"event"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accounts","outputs":[{"internalType":"uint256","name":"referredCount","type":"uint256"},{"internalType":"uint256","name":"referredAmount","type":"uint256"},{"internalType":"uint256","name":"referredMilestoneAchived","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"internalType":"contract DSAuthority","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"claimReferalReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"deposits","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"period","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"emergencyWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"getInterestEstimate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getProfit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTouchPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserCurrentDepositAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_withdrawId","type":"uint256"}],"name":"getWithdrawAmountEstimate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minimalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"principle","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract DSAuthority","name":"authority_","type":"address"}],"name":"setAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_minimalDeposit","type":"uint256"}],"name":"setMinimalDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setTouchPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stableCoin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"touchPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"touchToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDepositsCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userTotalDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_withdrawId","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdrawContractToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526006600a0a6101f4026003553480156200001d57600080fd5b506040516200473038038062004730833981810160405260608110156200004357600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a26001600260146101000a81548160ff02191690831515021790555082600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200021c817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff166200023060201b62003bd9179092919060201c565b6006600a0a6007819055505050506200070c565b60008114806200032e575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015620002ef57600080fd5b505afa15801562000304573d6000803e3d6000fd5b505050506040513d60208110156200031b57600080fd5b8101908080519060200190929190505050145b62000385576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180620046fa6036913960400191505060405180910390fd5b62000459838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200045e60201b60201c565b505050565b6200048a8273ffffffffffffffffffffffffffffffffffffffff16620006c060201b62003b451760201c565b620004fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106200054e578051825260208201915060208101905060208303925062000529565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620005b2576040519150601f19603f3d011682016040523d82523d6000602084013e620005b7565b606091505b50915091508162000630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115620006ba578080602001905160208110156200065157600080fd5b8101908080519060200190929190505050620006b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180620046d0602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156200070357506000801b8214155b92505050919050565b613fb4806200071c6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063aa80e8a21161010f578063ea291bbe116100a2578063f3fef3a311610071578063f3fef3a314610832578063f4c60d0314610880578063f69e2046146108ae578063f826b924146108f8576101f0565b8063ea291bbe146106f6578063eaaef00614610758578063f2573512146107a4578063f2fde38b146107ee576101f0565b8063d6d68177116100de578063d6d6817714610606578063d8d55fb414610676578063db2e21bc14610694578063dddf31c41461069e576101f0565b8063aa80e8a2146104ec578063acbbbfea14610544578063bf7e214f14610572578063d4ee1d90146105bc576101f0565b80637ddfe7cd11610187578063959499b611610156578063959499b614610436578063992642e5146104405780639e1a4d191461048a578063a111b203146104a8576101f0565b80637ddfe7cd146103465780638da5cb5b1461038a5780638dbdbe6d146103d457806393c0b0961461042c576101f0565b8063679dffb4116101c3578063679dffb4146102bc5780636fe4d97a146102da57806379ba5097146102f85780637a9e5e4b14610302576101f0565b8063016a4284146101f55780630d0283fb14610213578063557ed1ba146102315780635e5c06e21461024f575b600080fd5b6101fd610950565b6040518082815260200191505060405180910390f35b61021b610956565b6040518082815260200191505060405180910390f35b61023961095c565b6040518082815260200191505060405180910390f35b6102916004803603602081101561026557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610964565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b6102c4610994565b6040518082815260200191505060405180910390f35b6102e26109bc565b6040518082815260200191505060405180910390f35b6103006109c2565b005b6103446004803603602081101561031857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bad565b005b6103886004803603602081101561035c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ccf565b005b610392610fab565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61042a600480360360608110156103ea57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fd1565b005b61043461175f565b005b61043e61189a565b005b610448611a96565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610492611abc565b6040518082815260200191505060405180910390f35b6104ea600480360360208110156104be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c93565b005b61052e6004803603602081101561050257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ea0565b6040518082815260200191505060405180910390f35b6105706004803603602081101561055a57600080fd5b8101908080359060200190929190505050611eb8565b005b61057a611f62565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c4611f87565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106526004803603604081101561061c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fad565b60405180848152602001838152602001828152602001935050505060405180910390f35b61067e611fe4565b6040518082815260200191505060405180910390f35b61069c611fee565b005b6106e0600480360360208110156106b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612395565b6040518082815260200191505060405180910390f35b6107426004803603604081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123ad565b6040518082815260200191505060405180910390f35b61078e6004803603604081101561076e57600080fd5b8101908080359060200190929190803590602001909291905050506123c1565b6040518082815260200191505060405180910390f35b6107ac6123d5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108306004803603602081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123fb565b005b61087e6004803603604081101561084857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612561565b005b6108ac6004803603602081101561089657600080fd5b8101908080359060200190929190505050612985565b005b6108b6612a2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61093a6004803603602081101561090e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a55565b6040518082815260200191505060405180910390f35b60085481565b60075481565b600042905090565b600c6020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b60008061099f611abc565b90506109b660085482612b4190919063ffffffff16565b91505090565b60035481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e236028913960400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610bb633612bc4565b610c28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600260149054906101000a900460ff16610d51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6000600260146101000a81548160ff021916908315150217905550610d74613b90565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050600081606001511415610e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7573657220686173206e6f20726577617264730000000000000000000000000081525060200191505060405180910390fd5b600081606001519050600082606001818152505081600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155905050610f2f8382600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167e89bde2eedae724485c2bbb44e6d60269c17d12b29b65daab8a213600f9795e82610f6f61095c565b604051808381526020018281526020019250505060405180910390a250506001600260146101000a81548160ff02191690831515021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff16611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6000600260146101000a81548160ff02191690831515021790555061109c336000357fffffffff0000000000000000000000000000000000000000000000000000000016612cef565b61110e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600354831015611169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613ec96035913960400191505060405180910390fd5b6000821180156111795750600482105b6111ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613dfa6029913960400191505060405180910390fd5b6006600a0a620186a0026111f3846111e533612a55565b612f4890919063ffffffff16565b1115611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6465706f73697420746f6f206d6f72652070657220757365722e00000000000081525060200191505060405180910390fd5b61127083612fcb565b6001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061131083600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4890919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604051806060016040528084815260200161136c61095c565b815260200183815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815260200190815260200160002060008201518160000155602082015181600101556040820151816002015590505061143a83600854612f4890919063ffffffff16565b60088190555060008090506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156114c157503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156115cc576114ce613b90565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050905061154b81613142565b809350819250505061155d8186613228565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155905050505b60006115d885856132fb565b905060006116076007546115f96008600a0a856133b090919063ffffffff16565b61344590919063ffffffff16565b9050611668336116208584612f4890919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f052f2d2728deb549ed333ba89f62db104eb8cc0763229a8213d483c34b08866e876116a961095c565b62278d0089026116b761095c565b016116cb8887612f4890919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a25050506001600260146101000a81548160ff021916908315150217905550505050565b61176833612bc4565b6117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b6000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3565b6118a333612bc4565b611915576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b600061191f610994565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663852a12e3836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561199857600080fd5b505af11580156119ac573d6000803e3d6000fd5b505050506040513d60208110156119c257600080fd5b810190808051906020019092919050505014611a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f636f6d706f756e64206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b611a933382600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af9e669306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b5e57600080fd5b505afa158015611b72573d6000803e3d6000fd5b505050506040513d6020811015611b8857600080fd5b810190808051906020019092919050505090506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c3c57600080fd5b505afa158015611c50573d6000803e3d6000fd5b505050506040513d6020811015611c6657600080fd5b81019080805190602001909291905050509050611c8c8183612f4890919063ffffffff16565b9250505090565b611c9c33612bc4565b611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ea86021913960400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e3457600080fd5b505afa158015611e48573d6000803e3d6000fd5b505050506040513d6020811015611e5e57600080fd5b81019080805190602001909291905050509050611e9c33828473ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b5050565b600b6020528060005260406000206000915090505481565b611ee6336000357fffffffff0000000000000000000000000000000000000000000000000000000016612cef565b611f58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8060038190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6009602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b6000600754905090565b611ff733612bc4565b612069576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561210a57600080fd5b505afa15801561211e573d6000803e3d6000fd5b505050506040513d602081101561213457600080fd5b810190808051906020019092919050505090506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156121be57600080fd5b505af11580156121d2573d6000803e3d6000fd5b505050506040513d60208110156121e857600080fd5b81019080805190602001909291905050501461226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f636f6d706f756e64206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b61239233600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561230f57600080fd5b505afa158015612323573d6000803e3d6000fd5b505050506040513d602081101561233957600080fd5b8101908080519060200190929190505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b50565b600a6020528060005260406000206000915090505481565b60006123b983836134ce565b905092915050565b60006123cd83836132fb565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61240433612bc4565b612476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561251d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613f5e6022913960400191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260149054906101000a900460ff166125e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6000600260146101000a81548160ff021916908315150217905550612606613bb8565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905060008160000151116126de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613e79602f913960400191505060405180910390fd5b6126f8620151808260200151612f4890919063ffffffff16565b61270061095c565b1015612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6d757374206465706f736974206d6f7265207468616e2031206461797300000081525060200191505060405180910390fd5b6127a461279162278d0083604001516133b090919063ffffffff16565b8260200151612f4890919063ffffffff16565b6127ac61095c565b1015806127e457503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613e4b602e913960400191505060405180910390fd5b60008160000151905061285b8260000151600854612b4190919063ffffffff16565b600881905550600061286d85856134ce565b9050600083600001818152505082600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050506128f6858261367e565b8473ffffffffffffffffffffffffffffffffffffffff167fe54411c7e10e1e5bae07baa2a7240a0a52ec6bc26abffbdc1a588e854b05bee983838761293961095c565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a25050506001600260146101000a81548160ff0219169083151502179055505050565b6129b3336000357fffffffff0000000000000000000000000000000000000000000000000000000016612cef565b612a25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415612aad576000915050612b3c565b60008090506000600190505b828111612b3557612b26600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000015483612f4890919063ffffffff16565b91508080600101915050612ab9565b5080925050505b919050565b6000828284039150811115612bbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b612cea838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506137f4565b505050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d2e5760019050612f42565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8d5760019050612f42565b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612dec5760009050612f42565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015612f0457600080fd5b505afa158015612f18573d6000803e3d6000fd5b505050506040513d6020811015612f2e57600080fd5b810190808051906020019092919050505090505b92915050565b6000828284019150811015612fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b61301a333083600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a3f909392919063ffffffff16565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561309157600080fd5b505af11580156130a5573d6000803e3d6000fd5b505050506040513d60208110156130bb57600080fd5b81019080805190602001909291905050501461313f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f636f6d706f756e64206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b50565b61314a613b90565b6000613154613b90565b83905060008090506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561321b5760018260000181815101915081815250506131cf6008600a0a60320282612f4890919063ffffffff16565b90506132116131fe6008600a0a6032600a808a60000151816131ed57fe5b0402016133b090919063ffffffff16565b8360600151612f4890919063ffffffff16565b8260600181815250505b8181935093505050915091565b613230613b90565b818360200181815101915081815250505b6132606006600a0a612710028460400151612f4890919063ffffffff16565b8360200151106132f2576006600a0a612710028360400181815101915081815250506132de6008600a0a6132d06103206132c260c86132b46006600a0a612710028a6040015161344590919063ffffffff16565b6133b090919063ffffffff16565b612f4890919063ffffffff16565b6133b090919063ffffffff16565b836060018181510191508181525050613241565b82905092915050565b600060038214156133355761332e610190613320600a866133b090919063ffffffff16565b61344590919063ffffffff16565b90506133aa565b600282141561336d576133666102586133586008866133b090919063ffffffff16565b61344590919063ffffffff16565b90506133aa565b60018214156133a55761339e6104b06133906006866133b090919063ffffffff16565b61344590919063ffffffff16565b90506133aa565b600090505b92915050565b6000808214806133cd57508282838502925082816133ca57fe5b04145b61343f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b60008082116134bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6469762d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b8183816134c557fe5b04905092915050565b60006134d8613bb8565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905060008160000151141561356a576000915050613678565b61359a61358762278d0083604001516133b090919063ffffffff16565b8260200151612f4890919063ffffffff16565b6135a261095c565b106135b4578060000151915050613678565b60006135e9620151806135db84602001516135cd61095c565b612b4190919063ffffffff16565b61344590919063ffffffff16565b905060006136306402540be40061362284613614620c1f9988600001516133b090919063ffffffff16565b6133b090919063ffffffff16565b61344590919063ffffffff16565b9050600061366e613649856000015186604001516132fb565b613660848760000151612f4890919063ffffffff16565b612b4190919063ffffffff16565b9050809450505050505b92915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663852a12e3836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156136f557600080fd5b505af1158015613709573d6000803e3d6000fd5b505050506040513d602081101561371f57600080fd5b8101908080519060200190929190505050146137a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f636f6d706f756e64206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6137f08282600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b5050565b6138138273ffffffffffffffffffffffffffffffffffffffff16613b45565b613885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106138d457805182526020820191506020810190506020830392506138b1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613936576040519150601f19603f3d011682016040523d82523d6000602084013e61393b565b606091505b5091509150816139b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115613a39578080602001905160208110156139d257600080fd5b8101908080519060200190929190505050613a38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613efe602a913960400191505060405180910390fd5b5b50505050565b613b3f848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506137f4565b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015613b8757506000801b8214155b92505050919050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b6000811480613cd3575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015613c9657600080fd5b505afa158015613caa573d6000803e3d6000fd5b505050506040513d6020811015613cc057600080fd5b8101908080519060200190929190505050145b613d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613f286036913960400191505060405180910390fd5b613df4838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506137f4565b50505056fe74686520706572696f642073686f756c64206265747765656e203120746f2033206d6f6e7468732e204163636570744f776e6572736869703a206f6e6c79206e6577206f776e657220646f20746869732e746865207374616b65206973206e6f7420656e6465642c206d757374207769746864726177206279206f776e6572746865206465706f7369742068617320616c72656164792077697468647261776564206f72206e6f742065786973746f776e65722063616e206e6f74207472616e73666572207468652063546f6b656e74686520737570706c69656420616d6f756e742073686f756c64206d6f7265207468616e206d696e696d616c206465706f7369742e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e63655472616e736665724f776e6572736869703a207468652073616d65206f776e65722ea265627a7a72315820e67d4f71442c5980e07f195d711cfe9155629af32a7df4ea66ae8152bf872ae964736f6c634300051100325361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000000000b0ab2381b967018cd0edfdf77216b06af0538d48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c8063aa80e8a21161010f578063ea291bbe116100a2578063f3fef3a311610071578063f3fef3a314610832578063f4c60d0314610880578063f69e2046146108ae578063f826b924146108f8576101f0565b8063ea291bbe146106f6578063eaaef00614610758578063f2573512146107a4578063f2fde38b146107ee576101f0565b8063d6d68177116100de578063d6d6817714610606578063d8d55fb414610676578063db2e21bc14610694578063dddf31c41461069e576101f0565b8063aa80e8a2146104ec578063acbbbfea14610544578063bf7e214f14610572578063d4ee1d90146105bc576101f0565b80637ddfe7cd11610187578063959499b611610156578063959499b614610436578063992642e5146104405780639e1a4d191461048a578063a111b203146104a8576101f0565b80637ddfe7cd146103465780638da5cb5b1461038a5780638dbdbe6d146103d457806393c0b0961461042c576101f0565b8063679dffb4116101c3578063679dffb4146102bc5780636fe4d97a146102da57806379ba5097146102f85780637a9e5e4b14610302576101f0565b8063016a4284146101f55780630d0283fb14610213578063557ed1ba146102315780635e5c06e21461024f575b600080fd5b6101fd610950565b6040518082815260200191505060405180910390f35b61021b610956565b6040518082815260200191505060405180910390f35b61023961095c565b6040518082815260200191505060405180910390f35b6102916004803603602081101561026557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610964565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b6102c4610994565b6040518082815260200191505060405180910390f35b6102e26109bc565b6040518082815260200191505060405180910390f35b6103006109c2565b005b6103446004803603602081101561031857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bad565b005b6103886004803603602081101561035c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ccf565b005b610392610fab565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61042a600480360360608110156103ea57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fd1565b005b61043461175f565b005b61043e61189a565b005b610448611a96565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610492611abc565b6040518082815260200191505060405180910390f35b6104ea600480360360208110156104be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c93565b005b61052e6004803603602081101561050257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ea0565b6040518082815260200191505060405180910390f35b6105706004803603602081101561055a57600080fd5b8101908080359060200190929190505050611eb8565b005b61057a611f62565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c4611f87565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106526004803603604081101561061c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fad565b60405180848152602001838152602001828152602001935050505060405180910390f35b61067e611fe4565b6040518082815260200191505060405180910390f35b61069c611fee565b005b6106e0600480360360208110156106b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612395565b6040518082815260200191505060405180910390f35b6107426004803603604081101561070c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123ad565b6040518082815260200191505060405180910390f35b61078e6004803603604081101561076e57600080fd5b8101908080359060200190929190803590602001909291905050506123c1565b6040518082815260200191505060405180910390f35b6107ac6123d5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108306004803603602081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123fb565b005b61087e6004803603604081101561084857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612561565b005b6108ac6004803603602081101561089657600080fd5b8101908080359060200190929190505050612985565b005b6108b6612a2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61093a6004803603602081101561090e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a55565b6040518082815260200191505060405180910390f35b60085481565b60075481565b600042905090565b600c6020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b60008061099f611abc565b90506109b660085482612b4190919063ffffffff16565b91505090565b60035481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e236028913960400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610bb633612bc4565b610c28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600260149054906101000a900460ff16610d51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6000600260146101000a81548160ff021916908315150217905550610d74613b90565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050600081606001511415610e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7573657220686173206e6f20726577617264730000000000000000000000000081525060200191505060405180910390fd5b600081606001519050600082606001818152505081600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155905050610f2f8382600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167e89bde2eedae724485c2bbb44e6d60269c17d12b29b65daab8a213600f9795e82610f6f61095c565b604051808381526020018281526020019250505060405180910390a250506001600260146101000a81548160ff02191690831515021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff16611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6000600260146101000a81548160ff02191690831515021790555061109c336000357fffffffff0000000000000000000000000000000000000000000000000000000016612cef565b61110e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b600354831015611169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613ec96035913960400191505060405180910390fd5b6000821180156111795750600482105b6111ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613dfa6029913960400191505060405180910390fd5b6006600a0a620186a0026111f3846111e533612a55565b612f4890919063ffffffff16565b1115611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6465706f73697420746f6f206d6f72652070657220757365722e00000000000081525060200191505060405180910390fd5b61127083612fcb565b6001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061131083600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4890919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604051806060016040528084815260200161136c61095c565b815260200183815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815260200190815260200160002060008201518160000155602082015181600101556040820151816002015590505061143a83600854612f4890919063ffffffff16565b60088190555060008090506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156114c157503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156115cc576114ce613b90565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050905061154b81613142565b809350819250505061155d8186613228565b905080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155905050505b60006115d885856132fb565b905060006116076007546115f96008600a0a856133b090919063ffffffff16565b61344590919063ffffffff16565b9050611668336116208584612f4890919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f052f2d2728deb549ed333ba89f62db104eb8cc0763229a8213d483c34b08866e876116a961095c565b62278d0089026116b761095c565b016116cb8887612f4890919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a25050506001600260146101000a81548160ff021916908315150217905550505050565b61176833612bc4565b6117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b6000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a60405160405180910390a3565b6118a333612bc4565b611915576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b600061191f610994565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663852a12e3836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561199857600080fd5b505af11580156119ac573d6000803e3d6000fd5b505050506040513d60208110156119c257600080fd5b810190808051906020019092919050505014611a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f636f6d706f756e64206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b611a933382600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af9e669306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b5e57600080fd5b505afa158015611b72573d6000803e3d6000fd5b505050506040513d6020811015611b8857600080fd5b810190808051906020019092919050505090506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c3c57600080fd5b505afa158015611c50573d6000803e3d6000fd5b505050506040513d6020811015611c6657600080fd5b81019080805190602001909291905050509050611c8c8183612f4890919063ffffffff16565b9250505090565b611c9c33612bc4565b611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ea86021913960400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e3457600080fd5b505afa158015611e48573d6000803e3d6000fd5b505050506040513d6020811015611e5e57600080fd5b81019080805190602001909291905050509050611e9c33828473ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b5050565b600b6020528060005260406000206000915090505481565b611ee6336000357fffffffff0000000000000000000000000000000000000000000000000000000016612cef565b611f58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8060038190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6009602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b6000600754905090565b611ff733612bc4565b612069576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561210a57600080fd5b505afa15801561211e573d6000803e3d6000fd5b505050506040513d602081101561213457600080fd5b810190808051906020019092919050505090506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156121be57600080fd5b505af11580156121d2573d6000803e3d6000fd5b505050506040513d60208110156121e857600080fd5b81019080805190602001909291905050501461226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f636f6d706f756e64206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b61239233600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561230f57600080fd5b505afa158015612323573d6000803e3d6000fd5b505050506040513d602081101561233957600080fd5b8101908080519060200190929190505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b50565b600a6020528060005260406000206000915090505481565b60006123b983836134ce565b905092915050565b60006123cd83836132fb565b905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61240433612bc4565b612476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f64732d617574682d6e6f6e2d6f776e657200000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561251d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613f5e6022913960400191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260149054906101000a900460ff166125e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6000600260146101000a81548160ff021916908315150217905550612606613bb8565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905060008160000151116126de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613e79602f913960400191505060405180910390fd5b6126f8620151808260200151612f4890919063ffffffff16565b61270061095c565b1015612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6d757374206465706f736974206d6f7265207468616e2031206461797300000081525060200191505060405180910390fd5b6127a461279162278d0083604001516133b090919063ffffffff16565b8260200151612f4890919063ffffffff16565b6127ac61095c565b1015806127e457503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613e4b602e913960400191505060405180910390fd5b60008160000151905061285b8260000151600854612b4190919063ffffffff16565b600881905550600061286d85856134ce565b9050600083600001818152505082600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050506128f6858261367e565b8473ffffffffffffffffffffffffffffffffffffffff167fe54411c7e10e1e5bae07baa2a7240a0a52ec6bc26abffbdc1a588e854b05bee983838761293961095c565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a25050506001600260146101000a81548160ff0219169083151502179055505050565b6129b3336000357fffffffff0000000000000000000000000000000000000000000000000000000016612cef565b612a25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d617574682d756e617574686f72697a656400000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415612aad576000915050612b3c565b60008090506000600190505b828111612b3557612b26600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000015483612f4890919063ffffffff16565b91508080600101915050612ab9565b5080925050505b919050565b6000828284039150811115612bbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b612cea838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506137f4565b505050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d2e5760019050612f42565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8d5760019050612f42565b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612dec5760009050612f42565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001935050505060206040518083038186803b158015612f0457600080fd5b505afa158015612f18573d6000803e3d6000fd5b505050506040513d6020811015612f2e57600080fd5b810190808051906020019092919050505090505b92915050565b6000828284019150811015612fc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b61301a333083600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613a3f909392919063ffffffff16565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561309157600080fd5b505af11580156130a5573d6000803e3d6000fd5b505050506040513d60208110156130bb57600080fd5b81019080805190602001909291905050501461313f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f636f6d706f756e64206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b50565b61314a613b90565b6000613154613b90565b83905060008090506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561321b5760018260000181815101915081815250506131cf6008600a0a60320282612f4890919063ffffffff16565b90506132116131fe6008600a0a6032600a808a60000151816131ed57fe5b0402016133b090919063ffffffff16565b8360600151612f4890919063ffffffff16565b8260600181815250505b8181935093505050915091565b613230613b90565b818360200181815101915081815250505b6132606006600a0a612710028460400151612f4890919063ffffffff16565b8360200151106132f2576006600a0a612710028360400181815101915081815250506132de6008600a0a6132d06103206132c260c86132b46006600a0a612710028a6040015161344590919063ffffffff16565b6133b090919063ffffffff16565b612f4890919063ffffffff16565b6133b090919063ffffffff16565b836060018181510191508181525050613241565b82905092915050565b600060038214156133355761332e610190613320600a866133b090919063ffffffff16565b61344590919063ffffffff16565b90506133aa565b600282141561336d576133666102586133586008866133b090919063ffffffff16565b61344590919063ffffffff16565b90506133aa565b60018214156133a55761339e6104b06133906006866133b090919063ffffffff16565b61344590919063ffffffff16565b90506133aa565b600090505b92915050565b6000808214806133cd57508282838502925082816133ca57fe5b04145b61343f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b60008082116134bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6469762d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b8183816134c557fe5b04905092915050565b60006134d8613bb8565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905060008160000151141561356a576000915050613678565b61359a61358762278d0083604001516133b090919063ffffffff16565b8260200151612f4890919063ffffffff16565b6135a261095c565b106135b4578060000151915050613678565b60006135e9620151806135db84602001516135cd61095c565b612b4190919063ffffffff16565b61344590919063ffffffff16565b905060006136306402540be40061362284613614620c1f9988600001516133b090919063ffffffff16565b6133b090919063ffffffff16565b61344590919063ffffffff16565b9050600061366e613649856000015186604001516132fb565b613660848760000151612f4890919063ffffffff16565b612b4190919063ffffffff16565b9050809450505050505b92915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663852a12e3836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156136f557600080fd5b505af1158015613709573d6000803e3d6000fd5b505050506040513d602081101561371f57600080fd5b8101908080519060200190929190505050146137a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f636f6d706f756e64206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6137f08282600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1e9092919063ffffffff16565b5050565b6138138273ffffffffffffffffffffffffffffffffffffffff16613b45565b613885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106138d457805182526020820191506020810190506020830392506138b1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613936576040519150601f19603f3d011682016040523d82523d6000602084013e61393b565b606091505b5091509150816139b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115613a39578080602001905160208110156139d257600080fd5b8101908080519060200190929190505050613a38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613efe602a913960400191505060405180910390fd5b5b50505050565b613b3f848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506137f4565b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015613b8757506000801b8214155b92505050919050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b6000811480613cd3575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015613c9657600080fd5b505afa158015613caa573d6000803e3d6000fd5b505050506040513d6020811015613cc057600080fd5b8101908080519060200190929190505050145b613d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613f286036913960400191505060405180910390fd5b613df4838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506137f4565b50505056fe74686520706572696f642073686f756c64206265747765656e203120746f2033206d6f6e7468732e204163636570744f776e6572736869703a206f6e6c79206e6577206f776e657220646f20746869732e746865207374616b65206973206e6f7420656e6465642c206d757374207769746864726177206279206f776e6572746865206465706f7369742068617320616c72656164792077697468647261776564206f72206e6f742065786973746f776e65722063616e206e6f74207472616e73666572207468652063546f6b656e74686520737570706c69656420616d6f756e742073686f756c64206d6f7265207468616e206d696e696d616c206465706f7369742e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e63655472616e736665724f776e6572736869703a207468652073616d65206f776e65722ea265627a7a72315820e67d4f71442c5980e07f195d711cfe9155629af32a7df4ea66ae8152bf872ae964736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b0ab2381b967018cd0edfdf77216b06af0538d48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9
-----Decoded View---------------
Arg [0] : _touch (address): 0xB0Ab2381B967018cD0Edfdf77216b06aF0538d48
Arg [1] : _stable (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [2] : _compound (address): 0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b0ab2381b967018cd0edfdf77216b06af0538d48
Arg [1] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [2] : 000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9
Deployed Bytecode Sourcemap
22735:10408:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22735:10408:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23215:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23165:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27979:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23724:44;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23724:44:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27817:154;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23003:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18771:233;;;:::i;:::-;;19066:178;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19066:178:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;27081:416;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27081:416:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;18196:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24421:1702;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24421:1702:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18449:128;;;:::i;:::-;;29151:241;;;:::i;:::-;;23103:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27529:280;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29706:375;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29706:375:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;23663:54;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23663:54:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29012:117;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29012:117:0;;;;;;;;;;;;;;;;;:::i;:::-;;18159:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18229:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23526:69;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23526:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28077:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29400:298;;;:::i;:::-;;23602:54;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23602:54:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28176:162;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28176:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28346:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28346:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23071:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18585:178;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18585:178:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;26131:942;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26131:942:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28913:91;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28913:91:0;;;;;;;;;;;;;;;;;:::i;:::-;;23135:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28502:389;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28502:389:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23215:24;;;;:::o;23165:25::-;;;;:::o;27979:90::-;28019:7;28046:15;28039:22;;27979:90;:::o;23724:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27817:154::-;27859:7;27879:21;27903:14;:12;:14::i;:::-;27879:38;;27935:28;27953:9;;27935:13;:17;;:28;;;;:::i;:::-;27928:35;;;27817:154;:::o;23003:59::-;;;;:::o;18771:233::-;18838:8;;;;;;;;;;;18824:22;;:10;:22;;;18816:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18926:8;;;;;;;;;;;18907:28;;18919:5;;;;;;;;;;;18907:28;;;;;;;;;;;;18954:8;;;;;;;;;;;18946:5;;:16;;;;;;;;;;;;;;;;;;18992:3;18973:8;;:23;;;;;;;;;;;;;;;;;;18771:233::o;19066:178::-;19290:19;19298:10;19290:7;:19::i;:::-;19282:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19175:10;19163:9;;:22;;;;;;;;;;;;;;;;;;19225:9;;;;;;;;;;;19201:35;;;;;;;;;;;;19066:178;:::o;27081:416::-;16780:10;;;;;;;;;;;16772:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16917:5;16904:10;;:18;;;;;;;;;;;;;;;;;;27157:23;;:::i;:::-;27183:8;:15;27192:5;27183:15;;;;;;;;;;;;;;;27157:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27237:1;27217:8;:16;;;:21;;27209:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27273:15;27291:8;:16;;;27273:34;;27337:1;27318:8;:16;;:20;;;;;27367:8;27349;:15;27358:5;27349:15;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27386:47;27418:5;27425:7;27393:10;;;;;;;;;;;27386:31;;;;:47;;;;;:::i;:::-;27463:5;27449:40;;;27470:7;27479:9;:7;:9::i;:::-;27449:40;;;;;;;;;;;;;;;;;;;;;;;;16935:1;;17096:4;17083:10;;:17;;;;;;;;;;;;;;;;;;27081:416;:::o;18196:26::-;;;;;;;;;;;;;:::o;24421:1702::-;16780:10;;;;;;;;;;;16772:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16917:5;16904:10;;:18;;;;;;;;;;;;;;;;;;19503:33;19516:10;19528:7;;;;19503:12;:33::i;:::-;19495:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24548:14;;24537:7;:25;;24529:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24649:1;24639:7;:11;:26;;;;;24664:1;24654:7;:11;24639:26;24631:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22924:1;22976:2;:19;22966:6;:30;24730:52;24774:7;24730:39;24758:10;24730:27;:39::i;:::-;:43;;:52;;;;:::i;:::-;:70;;24722:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24844:20;24856:7;24844:11;:20::i;:::-;24909:1;24875:18;:30;24894:10;24875:30;;;;;;;;;;;;;;;;:35;;;;;;;;;;;24954:43;24989:7;24954:18;:30;24973:10;24954:30;;;;;;;;;;;;;;;;:34;;:43;;;;:::i;:::-;24921:18;:30;24940:10;24921:30;;;;;;;;;;;;;;;:76;;;;25063:40;;;;;;;;25075:7;25063:40;;;;25084:9;:7;:9::i;:::-;25063:40;;;;25095:7;25063:40;;;25008:8;:20;25017:10;25008:20;;;;;;;;;;;;;;;:52;25029:18;:30;25048:10;25029:30;;;;;;;;;;;;;;;;25008:52;;;;;;;;;;;:95;;;;;;;;;;;;;;;;;;;;;;;;;;;25126:22;25140:7;25126:9;;:13;;:22;;;;:::i;:::-;25114:9;:34;;;;25161:21;25185:1;25161:25;;25269:1;25236:18;:29;25255:9;25236:29;;;;;;;;;;;;;;;;:34;;:61;;;;;25287:10;25274:23;;:9;:23;;;;25236:61;25232:370;;;25314:31;;:::i;:::-;25348:8;:19;25357:9;25348:19;;;;;;;;;;;;;;;25314:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25418:36;25437:16;25418:18;:36::i;:::-;25382:72;;;;;;;;25488:49;25511:16;25529:7;25488:22;:49::i;:::-;25469:68;;25574:16;25552:8;:19;25561:9;25552:19;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25232:370;;25656:19;25678:29;25690:7;25699;25678:11;:29::i;:::-;25656:51;;25718:20;25741:51;25781:10;;25741:35;22883:1;25757:2;:18;25741:11;:15;;:35;;;;:::i;:::-;:39;;:51;;;;:::i;:::-;25718:74;;25803:76;25835:10;25847:31;25864:13;25847:12;:16;;:31;;;;:::i;:::-;25810:10;;;;;;;;;;;25803:31;;;;:76;;;;;:::i;:::-;25923:10;25897:218;;;25948:7;25970:9;:7;:9::i;:::-;26016:7;26006;:17;25994:9;:7;:9::i;:::-;:29;26038:31;26055:13;26038:12;:16;;:31;;;;:::i;:::-;26084:18;:30;26103:10;26084:30;;;;;;;;;;;;;;;;25897:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19572:1;;;17096:4;17083:10;;:17;;;;;;;;;;;;;;;;;;24421:1702;;;:::o;18449:128::-;19290:19;19298:10;19290:7;:19::i;:::-;19282:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18521:1;18505:5;;:18;;;;;;;;;;;;;;;;;;18563:5;;;;;;;;;;;18539:30;;18551:10;18539:30;;;;;;;;;;;;18449:128::o;29151:241::-;19290:19;19298:10;19290:7;:19::i;:::-;19282:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29207:15;29225:11;:9;:11::i;:::-;29207:29;;29301:1;29262:8;;;;;;;;;;;29255:33;;;29289:7;29255:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29255:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29255:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29255:42:0;;;;;;;;;;;;;;;;:47;29247:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29332:52;29364:10;29376:7;29339:10;;;;;;;;;;;29332:31;;;;:52;;;;;:::i;:::-;19342:1;29151:241::o;23103:25::-;;;;;;;;;;;;;:::o;27529:280::-;27574:7;27594:21;27625:8;;;;;;;;;;;27618:36;;;27663:4;27618:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27618:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27618:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27618:51:0;;;;;;;;;;;;;;;;27594:75;;27680:23;27713:10;;;;;;;;;;;27706:28;;;27743:4;27706:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27706:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27706:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27706:43:0;;;;;;;;;;;;;;;;27680:69;;27767:34;27785:15;27767:13;:17;;:34;;;;:::i;:::-;27760:41;;;;27529:280;:::o;29706:375::-;19290:19;19298:10;19290:7;:19::i;:::-;19282:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29899:8;;;;;;;;;;;29881:27;;:6;:27;;;;29873:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29957:15;29982:6;29975:24;;;30008:4;29975:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29975:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29975:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29975:39:0;;;;;;;;;;;;;;;;29957:57;;30025:48;30053:10;30065:7;30032:6;30025:27;;;;:48;;;;;:::i;:::-;19342:1;29706:375;:::o;23663:54::-;;;;;;;;;;;;;;;;;:::o;29012:117::-;19503:33;19516:10;19528:7;;;;19503:12;:33::i;:::-;19495:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29106:15;29089:14;:32;;;;29012:117;:::o;18159:30::-;;;;;;;;;;;;;:::o;18229:29::-;;;;;;;;;;;;;:::o;23526:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28077:91::-;28123:7;28150:10;;28143:17;;28077:91;:::o;29400:298::-;19290:19;19298:10;19290:7;:19::i;:::-;19282:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29459:14;29483:8;;;;;;;;;;;29476:26;;;29511:4;29476:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29476:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29476:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29476:41:0;;;;;;;;;;;;;;;;29459:58;;29571:1;29543:8;;;;;;;;;;;29536:23;;;29560:6;29536:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29536:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29536:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29536:31:0;;;;;;;;;;;;;;;;:36;29528:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29602:88;29634:10;29653;;;;;;;;;;;29646:28;;;29683:4;29646:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29646:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29646:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29646:43:0;;;;;;;;;;;;;;;;29609:10;;;;;;;;;;;29602:31;;;;:88;;;;;:::i;:::-;19342:1;29400:298::o;23602:54::-;;;;;;;;;;;;;;;;;:::o;28176:162::-;28268:7;28295:35;28311:5;28318:11;28295:15;:35::i;:::-;28288:42;;28176:162;;;;:::o;28346:148::-;28430:7;28457:29;28469:7;28478;28457:11;:29::i;:::-;28450:36;;28346:148;;;;:::o;23071:25::-;;;;;;;;;;;;;:::o;18585:178::-;19290:19;19298:10;19290:7;:19::i;:::-;19282:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18680:5;;;;;;;;;;;18667:18;;:9;:18;;;;18659:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18746:9;18735:8;;:20;;;;;;;;;;;;;;;;;;18585:178;:::o;26131:942::-;16780:10;;;;;;;;;;;16772:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16917:5;16904:10;;:18;;;;;;;;;;;;;;;;;;26218:30;;:::i;:::-;26251:8;:15;26260:5;26251:15;;;;;;;;;;;;;;;:28;26267:11;26251:28;;;;;;;;;;;26218:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26319:1;26298:11;:18;;;:22;26290:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26404:33;26430:6;26404:11;:21;;;:25;;:33;;;;:::i;:::-;26391:9;:7;:9::i;:::-;:46;;26383:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26517:58;26543:31;26566:7;26543:11;:18;;;:22;;:31;;;;:::i;:::-;26517:11;:21;;;:25;;:58;;;;:::i;:::-;26504:9;:7;:9::i;:::-;:71;;:107;;;;26601:10;26592:19;;:5;:19;;;26504:107;26482:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26673:21;26697:11;:18;;;26673:42;;26738:33;26752:11;:18;;;26738:9;;:13;;:33;;;;:::i;:::-;26726:9;:45;;;;26782:23;26808:35;26824:5;26831:11;26808:15;:35::i;:::-;26782:61;;26875:1;26854:11;:18;;:22;;;;;26918:11;26887:8;:15;26896:5;26887:15;;;;;;;;;;;;;;;:28;26903:11;26887:28;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;26940:34;26951:5;26958:15;26940:10;:34::i;:::-;27003:5;26990:75;;;27010:13;27025:15;27042:11;27055:9;:7;:9::i;:::-;26990:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16935:1;;;17096:4;17083:10;;:17;;;;;;;;;;;;;;;;;;26131:942;;:::o;28913:91::-;19503:33;19516:10;19528:7;;;;19503:12;:33::i;:::-;19495:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28990:6;28977:10;:19;;;;28913:91;:::o;23135:23::-;;;;;;;;;;;;;:::o;28502:389::-;28575:7;28595:22;28620:18;:25;28639:5;28620:25;;;;;;;;;;;;;;;;28595:50;;28677:1;28659:14;:19;28656:59;;;28702:1;28695:8;;;;;28656:59;28725:11;28739:1;28725:15;;28755:9;28767:1;28755:13;;28751:112;28775:14;28770:1;:19;28751:112;;28817:34;28825:8;:15;28834:5;28825:15;;;;;;;;;;;;;;;:18;28841:1;28825:18;;;;;;;;;;;:25;;;28817:3;:7;;:34;;;;:::i;:::-;28811:40;;28791:3;;;;;;;28751:112;;;;28880:3;28873:10;;;;28502:389;;;;:::o;20870:129::-;20922:6;20964:1;20958;20954;:5;20950:9;;;20949:16;;20941:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20870:129;;;;:::o;19359:103::-;19412:4;19448:5;;;;;;;;;;;19441:12;;:3;:12;;;19429:25;;19359:103;;;:::o;11810:176::-;11893:85;11912:5;11942;:14;;;:23;;;;11967:2;11971:5;11919:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11919:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;11919:58:0;11893:18;:85::i;:::-;11810:176;;;:::o;19589:380::-;19659:4;19695;19680:20;;:3;:20;;;19676:286;;;19724:4;19717:11;;;;19676:286;19757:5;;;;;;;;;;;19750:12;;:3;:12;;;19746:216;;;19786:4;19779:11;;;;19746:216;19837:1;19812:27;;:9;;;;;;;;;;;:27;;;19808:154;;;19863:5;19856:12;;;;19808:154;19908:9;;;;;;;;;;;:17;;;19926:3;19939:4;19946:3;19908:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19908:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19908:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19908:42:0;;;;;;;;;;;;;;;;19901:49;;19589:380;;;;;:::o;20736:128::-;20788:6;20830:1;20824;20820;:5;20816:9;;;20815:16;;20807:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20736:128;;;;:::o;32927:213::-;32988:71;33024:10;33044:4;33051:7;32995:10;;;;;;;;;;;32988:35;;;;:71;;;;;;:::i;:::-;33112:1;33085:8;;;;;;;;;;;33078:21;;;33100:7;33078:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33078:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33078:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33078:30:0;;;;;;;;;;;;;;;;:35;33070:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32927:213;:::o;31605:537::-;31681:14;;:::i;:::-;31697:7;31717:24;;:::i;:::-;31744:8;31717:35;;31763:21;31787:1;31763:25;;31837:1;31803:18;:30;31822:10;31803:30;;;;;;;;;;;;;;;;:35;31799:292;;;31882:1;31855:9;:23;;:28;;;;;;;;;;;31914:44;22883:1;31938:2;:18;31932:2;:25;31914:13;:17;;:44;;;;:::i;:::-;31898:60;;31993:86;32015:63;22883:1;32059:2;:18;32051:2;32046;32041;32016:8;:22;;;:27;;;;;;:32;:37;32015:43;;:63;;;;:::i;:::-;31993:9;:17;;;:21;;:86;;;;:::i;:::-;31973:9;:17;;:106;;;;;31799:292;32109:9;32120:13;32101:33;;;;;;31605:537;;;:::o;32150:549::-;32247:14;;:::i;:::-;32301:7;32274:8;:23;;:34;;;;;;;;;;;32319:347;32352:68;22924:1;32399:2;:19;32390:5;:29;32352:8;:33;;;:37;;:68;;;;:::i;:::-;32325:8;:23;;;:95;32319:347;;22924:1;32483:2;:19;32474:5;:29;32437:8;:33;;:66;;;;;;;;;;;32538:116;22883:1;32635:2;:18;32539:90;32625:3;32539:81;32616:3;32540:70;22924:1;32588:2;:19;32579:5;:29;32540:8;:33;;;:37;;:70;;;;:::i;:::-;32539:76;;:81;;;;:::i;:::-;:85;;:90;;;;:::i;:::-;32538:96;;:116;;;;:::i;:::-;32518:8;:16;;:136;;;;;;;;;;;32319:347;;;32683:8;32676:15;;32150:549;;;;:::o;30106:566::-;30184:7;30218:1;30207:7;:12;30204:442;;;30312:24;30332:3;30312:15;30324:2;30312:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;30305:31;;;;30204:442;30369:1;30358:7;:12;30354:292;;;30461:23;30480:3;30461:14;30473:1;30461:7;:11;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;30454:30;;;;30354:292;30517:1;30506:7;:12;30502:144;;;30610:24;30629:4;30610:14;30622:1;30610:7;:11;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;30603:31;;;;30502:144;30663:1;30656:8;;30106:566;;;;;:::o;21005:142::-;21057:6;21089:1;21084;:6;:30;;;;21113:1;21108;21103;21099;:5;21095:9;;;21094:15;;;;;;:20;21084:30;21076:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21005:142;;;;:::o;21155:137::-;21207:6;21238:1;21234;:5;21226:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21283:1;21279;:5;;;;;;21275:9;;21155:137;;;;:::o;30680:917::-;30764:7;30784:30;;:::i;:::-;30817:8;:15;30826:5;30817:15;;;;;;;;;;;;;;;:28;30833:11;30817:28;;;;;;;;;;;30784:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30882:1;30860:11;:18;;;:23;30856:64;;;30907:1;30900:8;;;;;30856:64;30947:58;30973:31;30996:7;30973:11;:18;;;:22;;:31;;;;:::i;:::-;30947:11;:21;;;:25;;:58;;;;:::i;:::-;30934:9;:7;:9::i;:::-;:71;30930:660;;31029:11;:18;;;31022:25;;;;;30930:660;31175:28;31206:48;31247:6;31206:36;31220:11;:21;;;31206:9;:7;:9::i;:::-;:13;;:36;;;;:::i;:::-;:40;;:48;;;;:::i;:::-;31175:79;;31316:17;31336:70;31397:8;31336:56;31371:20;31336:30;31359:6;31336:11;:18;;;:22;;:30;;;;:::i;:::-;:34;;:56;;;;:::i;:::-;:60;;:70;;;;:::i;:::-;31316:90;;31421:25;31449:90;31487:51;31499:11;:18;;;31519:11;:18;;;31487:11;:51::i;:::-;31449:33;31472:9;31449:11;:18;;;:22;;:33;;;;:::i;:::-;:37;;:90;;;;:::i;:::-;31421:118;;31561:17;31554:24;;;;;;30680:917;;;;;:::o;32707:212::-;32833:1;32794:8;;;;;;;;;;;32787:33;;;32821:7;32787:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32787:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32787:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32787:42:0;;;;;;;;;;;;;;;;:47;32779:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32864:47;32896:5;32903:7;32871:10;;;;;;;;;;;32864:31;;;;:47;;;;;:::i;:::-;32707:212;;:::o;13849:1114::-;14453:27;14461:5;14453:25;;;:27::i;:::-;14445:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14590:12;14604:23;14639:5;14631:19;;14651:4;14631:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14631:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;14589:67:0;;;;14675:7;14667:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14756:1;14736:10;:17;:21;14732:224;;;14878:10;14867:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14867:30:0;;;;;;;;;;;;;;;;14859:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14732:224;13849:1114;;;;:::o;11994:204::-;12095:95;12114:5;12144;:18;;;:27;;;;12173:4;12179:2;12183:5;12121:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12121:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;12121:68:0;12095:18;:95::i;:::-;11994:204;;;;:::o;8932:619::-;8992:4;9254:16;9281:19;9303:66;9281:88;;;;9472:7;9460:20;9448:32;;9512:11;9500:8;:23;;:42;;;;;9539:3;9527:15;;:8;:15;;9500:42;9492:51;;;;8932:619;;;:::o;22735:10408::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;12206:621::-;12585:1;12576:5;:10;12575:62;;;;12635:1;12592:5;:15;;;12616:4;12623:7;12592:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12592:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12592:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12592:39:0;;;;;;;;;;;;;;;;:44;12575:62;12567:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12730:89;12749:5;12779;:13;;;:22;;;;12803:7;12812:5;12756:62;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12756:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;12756:62:0;12730:18;:89::i;:::-;12206:621;;;:::o
Swarm Source
bzzr://e67d4f71442c5980e07f195d711cfe9155629af32a7df4ea66ae8152bf872ae9
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.