More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 439 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stake | 20686932 | 2 days ago | IN | 0 ETH | 0.00074227 | ||||
Claim | 20686927 | 2 days ago | IN | 0 ETH | 0.00060873 | ||||
Claim | 20677264 | 3 days ago | IN | 0 ETH | 0.00022951 | ||||
Claim | 20677264 | 3 days ago | IN | 0 ETH | 0.00028766 | ||||
Claim | 20624991 | 10 days ago | IN | 0 ETH | 0.00017034 | ||||
Claim | 20621020 | 11 days ago | IN | 0 ETH | 0.00066235 | ||||
Stake | 20621013 | 11 days ago | IN | 0 ETH | 0.00081209 | ||||
Claim | 20621008 | 11 days ago | IN | 0 ETH | 0.00062656 | ||||
Stake | 20561231 | 19 days ago | IN | 0 ETH | 0.00017624 | ||||
Stake | 20561178 | 19 days ago | IN | 0 ETH | 0.00019545 | ||||
Claim | 20559052 | 19 days ago | IN | 0 ETH | 0.0001785 | ||||
Unstake | 20554149 | 20 days ago | IN | 0 ETH | 0.00017825 | ||||
Stake | 20520874 | 25 days ago | IN | 0 ETH | 0.00123683 | ||||
Claim | 20474847 | 31 days ago | IN | 0 ETH | 0.00021528 | ||||
Unstake | 20474841 | 31 days ago | IN | 0 ETH | 0.00038145 | ||||
Claim | 20402491 | 41 days ago | IN | 0 ETH | 0.00027669 | ||||
Claim | 20380896 | 44 days ago | IN | 0 ETH | 0.00061911 | ||||
Unstake | 20380891 | 44 days ago | IN | 0 ETH | 0.00102581 | ||||
Claim | 20310419 | 54 days ago | IN | 0 ETH | 0.00059219 | ||||
Unstake | 20310413 | 54 days ago | IN | 0 ETH | 0.00184488 | ||||
Claim | 20219066 | 67 days ago | IN | 0 ETH | 0.00087502 | ||||
Claim | 20216059 | 67 days ago | IN | 0 ETH | 0.00033045 | ||||
Unstake | 20216055 | 67 days ago | IN | 0 ETH | 0.00038552 | ||||
Stake | 20205282 | 69 days ago | IN | 0 ETH | 0.0007339 | ||||
Claim | 20205273 | 69 days ago | IN | 0 ETH | 0.00063163 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
RewardTracker
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-04 */ // Sources flattened with hardhat v2.6.1 https://hardhat.org // File contracts/libraries/math/SafeMath.sol // SPDX-License-Identifier: MIT /** Alpha Radar Bot (ARBOT) is an AI-powered Telegram bot that automatically identifies potential alpha from hundreds of new projects every day! Our bot screens and accurately identifies potential projects 24/7, making it the #1 assistant for both experienced crypto investors and newcomers in finding potential investment opportunities! Alpha Radar Bot: t.me/alpha_radar_bot Potential Alpha Scanner: https://t.me/alpha_liquidity_scanner X: https://twitter.com/alpharadarbot TG: https://t.me/alpharadarbot_chat TG mandarin: https://t.me/alpharadarbot_mandarinchat Buy ARBOT: https://app.uniswap.org/#/tokens/ethereum/0x723696965f47b990dff00064fcaca95f0ee01123 **/ pragma solidity 0.8.17; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File contracts/libraries/token/IERC20.sol pragma solidity 0.8.17; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/libraries/utils/Address.sol // pragma solidity ^0.6.2; pragma solidity 0.8.17; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File contracts/libraries/token/SafeERC20.sol pragma solidity 0.8.17; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File contracts/libraries/utils/ReentrancyGuard.sol pragma solidity 0.8.17; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/staking/interfaces/IRewardDistributor.sol pragma solidity 0.8.17; interface IRewardDistributor { function rewardToken() external view returns (address); function tokensPerInterval() external view returns (uint256); function pendingRewards() external view returns (uint256); function distribute() external returns (uint256); } // File contracts/staking/interfaces/IRewardTracker.sol pragma solidity 0.8.17; interface IRewardTracker { function depositBalances(address _account, address _depositToken) external returns (uint256); function stakedAmounts(address _account) external returns (uint256); function updateRewards() external; function stake(address _depositToken, uint256 _amount) external; function stakeForAccount(address _fundingAccount, address _account, address _depositToken, uint256 _amount) external; function unstake(address _depositToken, uint256 _amount) external; function unstakeForAccount(address _account, address _depositToken, uint256 _amount, address _receiver) external; function tokensPerInterval() external view returns (uint256); function claim(address _receiver) external returns (uint256); function claimForAccount(address _account, address _receiver) external returns (uint256); function claimable(address _account) external view returns (uint256); function averageStakedAmounts(address _account) external view returns (uint256); function cumulativeRewards(address _account) external view returns (uint256); } // File contracts/access/Governable.sol pragma solidity 0.8.17; contract Governable { address public gov; constructor() { gov = msg.sender; } modifier onlyGov() { require(msg.sender == gov, "Governable: forbidden"); _; } function setGov(address _gov) external onlyGov { gov = _gov; } } // File contracts/staking/RewardTracker.sol pragma solidity 0.8.17; contract RewardTracker is IERC20, ReentrancyGuard, IRewardTracker, Governable { using SafeMath for uint256; using SafeERC20 for IERC20; uint256 public constant BASIS_POINTS_DIVISOR = 10000; uint256 public constant PRECISION = 1e30; uint8 public constant decimals = 18; bool public isInitialized; string public name; string public symbol; address public distributor; mapping (address => bool) public isDepositToken; mapping (address => mapping (address => uint256)) public override depositBalances; uint256 public override totalSupply; mapping (address => uint256) public balances; mapping (address => mapping (address => uint256)) public allowances; uint256 public cumulativeRewardPerToken; mapping (address => uint256) public override stakedAmounts; mapping (address => uint256) public claimableReward; mapping (address => uint256) public previousCumulatedRewardPerToken; mapping (address => uint256) public override cumulativeRewards; mapping (address => uint256) public override averageStakedAmounts; bool public inPrivateTransferMode; bool public inPrivateStakingMode; bool public inPrivateClaimingMode; mapping (address => bool) public isHandler; event Claim(address receiver, uint256 amount); constructor(string memory _name, string memory _symbol) { name = _name; symbol = _symbol; } function initialize( address[] memory _depositTokens, address _distributor ) external onlyGov { require(!isInitialized, "RewardTracker: already initialized"); isInitialized = true; for (uint256 i = 0; i < _depositTokens.length; i++) { address depositToken = _depositTokens[i]; isDepositToken[depositToken] = true; } distributor = _distributor; } function setDepositToken(address _depositToken, bool _isDepositToken) external onlyGov { isDepositToken[_depositToken] = _isDepositToken; } function setInPrivateTransferMode(bool _inPrivateTransferMode) external onlyGov { inPrivateTransferMode = _inPrivateTransferMode; } function setInPrivateStakingMode(bool _inPrivateStakingMode) external onlyGov { inPrivateStakingMode = _inPrivateStakingMode; } function setInPrivateClaimingMode(bool _inPrivateClaimingMode) external onlyGov { inPrivateClaimingMode = _inPrivateClaimingMode; } function setHandler(address _handler, bool _isActive) external onlyGov { isHandler[_handler] = _isActive; } // to help users who accidentally send their tokens to this contract function withdrawToken(address _token, address _account, uint256 _amount) external onlyGov { require(!isDepositToken[_token], "RewardTracker: _token cannot be a depositToken"); IERC20(_token).safeTransfer(_account, _amount); } function balanceOf(address _account) external view override returns (uint256) { return balances[_account]; } function stake(address _depositToken, uint256 _amount) external override nonReentrant { if (inPrivateStakingMode) { revert("RewardTracker: action not enabled"); } _stake(msg.sender, msg.sender, _depositToken, _amount); } function stakeForAccount(address _fundingAccount, address _account, address _depositToken, uint256 _amount) external override nonReentrant { _validateHandler(); _stake(_fundingAccount, _account, _depositToken, _amount); } function unstake(address _depositToken, uint256 _amount) external override nonReentrant { if (inPrivateStakingMode) { revert("RewardTracker: action not enabled"); } _unstake(msg.sender, _depositToken, _amount, msg.sender); } function unstakeForAccount(address _account, address _depositToken, uint256 _amount, address _receiver) external override nonReentrant { _validateHandler(); _unstake(_account, _depositToken, _amount, _receiver); } function transfer(address _recipient, uint256 _amount) external override returns (bool) { _transfer(msg.sender, _recipient, _amount); return true; } function allowance(address _owner, address _spender) external view override returns (uint256) { return allowances[_owner][_spender]; } function approve(address _spender, uint256 _amount) external override returns (bool) { _approve(msg.sender, _spender, _amount); return true; } function transferFrom(address _sender, address _recipient, uint256 _amount) external override returns (bool) { if (isHandler[msg.sender]) { _transfer(_sender, _recipient, _amount); return true; } uint256 nextAllowance = allowances[_sender][msg.sender].sub(_amount, "RewardTracker: transfer amount exceeds allowance"); _approve(_sender, msg.sender, nextAllowance); _transfer(_sender, _recipient, _amount); return true; } function tokensPerInterval() external override view returns (uint256) { return IRewardDistributor(distributor).tokensPerInterval(); } function updateRewards() external override nonReentrant { _updateRewards(address(0)); } function claim(address _receiver) external override nonReentrant returns (uint256) { if (inPrivateClaimingMode) { revert("RewardTracker: action not enabled"); } return _claim(msg.sender, _receiver); } function claimForAccount(address _account, address _receiver) external override nonReentrant returns (uint256) { _validateHandler(); return _claim(_account, _receiver); } function claimable(address _account) public override view returns (uint256) { uint256 stakedAmount = stakedAmounts[_account]; if (stakedAmount == 0) { return claimableReward[_account]; } uint256 supply = totalSupply; uint256 pendingRewards = IRewardDistributor(distributor).pendingRewards().mul(PRECISION); uint256 nextCumulativeRewardPerToken = cumulativeRewardPerToken.add(pendingRewards.div(supply)); return claimableReward[_account].add( stakedAmount.mul(nextCumulativeRewardPerToken.sub(previousCumulatedRewardPerToken[_account])).div(PRECISION)); } function rewardToken() public view returns (address) { return IRewardDistributor(distributor).rewardToken(); } function _claim(address _account, address _receiver) private returns (uint256) { _updateRewards(_account); uint256 tokenAmount = claimableReward[_account]; claimableReward[_account] = 0; if (tokenAmount > 0) { IERC20(rewardToken()).safeTransfer(_receiver, tokenAmount); emit Claim(_account, tokenAmount); } return tokenAmount; } function _mint(address _account, uint256 _amount) internal { require(_account != address(0), "RewardTracker: mint to the zero address"); totalSupply = totalSupply.add(_amount); balances[_account] = balances[_account].add(_amount); emit Transfer(address(0), _account, _amount); } function _burn(address _account, uint256 _amount) internal { require(_account != address(0), "RewardTracker: burn from the zero address"); balances[_account] = balances[_account].sub(_amount, "RewardTracker: burn amount exceeds balance"); totalSupply = totalSupply.sub(_amount); emit Transfer(_account, address(0), _amount); } function _transfer(address _sender, address _recipient, uint256 _amount) private { require(_sender != address(0), "RewardTracker: transfer from the zero address"); require(_recipient != address(0), "RewardTracker: transfer to the zero address"); if (inPrivateTransferMode) { _validateHandler(); } balances[_sender] = balances[_sender].sub(_amount, "RewardTracker: transfer amount exceeds balance"); balances[_recipient] = balances[_recipient].add(_amount); emit Transfer(_sender, _recipient,_amount); } function _approve(address _owner, address _spender, uint256 _amount) private { require(_owner != address(0), "RewardTracker: approve from the zero address"); require(_spender != address(0), "RewardTracker: approve to the zero address"); allowances[_owner][_spender] = _amount; emit Approval(_owner, _spender, _amount); } function _validateHandler() private view { require(isHandler[msg.sender], "RewardTracker: forbidden"); } function _stake(address _fundingAccount, address _account, address _depositToken, uint256 _amount) private { require(_amount > 0, "RewardTracker: invalid _amount"); require(isDepositToken[_depositToken], "RewardTracker: invalid _depositToken"); IERC20(_depositToken).safeTransferFrom(_fundingAccount, address(this), _amount); _updateRewards(_account); stakedAmounts[_account] = stakedAmounts[_account].add(_amount); depositBalances[_account][_depositToken] = depositBalances[_account][_depositToken].add(_amount); _mint(_account, _amount); } function _unstake(address _account, address _depositToken, uint256 _amount, address _receiver) private { require(_amount > 0, "RewardTracker: invalid _amount"); require(isDepositToken[_depositToken], "RewardTracker: invalid _depositToken"); _updateRewards(_account); uint256 stakedAmount = stakedAmounts[_account]; require(stakedAmounts[_account] >= _amount, "RewardTracker: _amount exceeds stakedAmount"); stakedAmounts[_account] = stakedAmount.sub(_amount); uint256 depositBalance = depositBalances[_account][_depositToken]; require(depositBalance >= _amount, "RewardTracker: _amount exceeds depositBalance"); depositBalances[_account][_depositToken] = depositBalance.sub(_amount); _burn(_account, _amount); IERC20(_depositToken).safeTransfer(_receiver, _amount); } function _updateRewards(address _account) private { uint256 blockReward = IRewardDistributor(distributor).distribute(); uint256 supply = totalSupply; uint256 _cumulativeRewardPerToken = cumulativeRewardPerToken; if (supply > 0 && blockReward > 0) { _cumulativeRewardPerToken = _cumulativeRewardPerToken.add(blockReward.mul(PRECISION).div(supply)); cumulativeRewardPerToken = _cumulativeRewardPerToken; } // cumulativeRewardPerToken can only increase // so if cumulativeRewardPerToken is zero, it means there are no rewards yet if (_cumulativeRewardPerToken == 0) { return; } if (_account != address(0)) { uint256 stakedAmount = stakedAmounts[_account]; uint256 accountReward = stakedAmount.mul(_cumulativeRewardPerToken.sub(previousCumulatedRewardPerToken[_account])).div(PRECISION); uint256 _claimableReward = claimableReward[_account].add(accountReward); claimableReward[_account] = _claimableReward; previousCumulatedRewardPerToken[_account] = _cumulativeRewardPerToken; if (_claimableReward > 0 && stakedAmounts[_account] > 0) { uint256 nextCumulativeReward = cumulativeRewards[_account].add(accountReward); averageStakedAmounts[_account] = averageStakedAmounts[_account].mul(cumulativeRewards[_account]).div(nextCumulativeReward) .add(stakedAmount.mul(accountReward).div(nextCumulativeReward)); cumulativeRewards[_account] = nextCumulativeReward; } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"averageStakedAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"claimForAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimableReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cumulativeRewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"cumulativeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"depositBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inPrivateClaimingMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inPrivateStakingMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inPrivateTransferMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_depositTokens","type":"address[]"},{"internalType":"address","name":"_distributor","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDepositToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHandler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"previousCumulatedRewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_depositToken","type":"address"},{"internalType":"bool","name":"_isDepositToken","type":"bool"}],"name":"setDepositToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_handler","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_inPrivateClaimingMode","type":"bool"}],"name":"setInPrivateClaimingMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_inPrivateStakingMode","type":"bool"}],"name":"setInPrivateStakingMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_inPrivateTransferMode","type":"bool"}],"name":"setInPrivateTransferMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_depositToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fundingAccount","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_depositToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeForAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakedAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensPerInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_depositToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_depositToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"unstakeForAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200298a3803806200298a833981016040819052620000349162000136565b6001600081905580546001600160a01b0319163317905560026200005983826200022f565b5060036200006882826200022f565b505050620002fb565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200009957600080fd5b81516001600160401b0380821115620000b657620000b662000071565b604051601f8301601f19908116603f01168101908282118183101715620000e157620000e162000071565b81604052838152602092508683858801011115620000fe57600080fd5b600091505b8382101562000122578582018301518183018401529082019062000103565b600093810190920192909252949350505050565b600080604083850312156200014a57600080fd5b82516001600160401b03808211156200016257600080fd5b620001708683870162000087565b935060208501519150808211156200018757600080fd5b50620001968582860162000087565b9150509250929050565b600181811c90821680620001b557607f821691505b602082108103620001d657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200022a57600081815260208120601f850160051c81016020861015620002055750805b601f850160051c820191505b81811015620002265782815560010162000211565b5050505b505050565b81516001600160401b038111156200024b576200024b62000071565b62000263816200025c8454620001a0565b84620001dc565b602080601f8311600181146200029b5760008415620002825750858301515b600019600386901b1c1916600185901b17855562000226565b600085815260208120601f198616915b82811015620002cc57888601518255948401946001909101908401620002ab565b5085821015620002eb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61267f806200030b6000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80635a47a1a71161015c578063bfe10928116100ce578063e44b755811610087578063e44b75581461064c578063e95034251461065f578063f5d9d63e1461067f578063f5fc5076146106aa578063f76033d3146106b3578063f7c618c1146106c657600080fd5b8063bfe10928146105bb578063c2a672e0146105ce578063c5fa2730146105e1578063cfad57a2146105f3578063dd62ed3e14610606578063dfbaefb11461063f57600080fd5b8063a318021711610120578063a318021714610536578063a8d9362714610556578063a9059cbb1461055e578063aaf5eb6814610571578063adc9772e14610585578063b89e45b31461059857600080fd5b80635a47a1a7146104cc57806370a08231146104df578063790b5a6c1461050857806395d89b411461051b5780639cb7de4b1461052357600080fd5b806323b872dd116102005780633e158b0c116101b95780633e158b0c14610430578063402914f51461043857806344a084111461044b578063462d0b2e1461046b57806346ea87af1461047e57806355b6ed5c146104a157600080fd5b806323b872dd1461039c57806327e235e3146103af578063313ce567146103cf5780633792def3146103e9578063392e53cd146104095780633cd7f7001461041d57600080fd5b8063126082cf11610252578063126082cf1461032657806312d43a511461032f57806313e82e7a1461035a57806318160ddd1461036d5780631d30d5bc146103765780631e83409a1461038957600080fd5b806301e336671461028f57806306fdde03146102a4578063095ea7b3146102c2578063098bf59d146102e557806310c1c103146102f8575b600080fd5b6102a261029d366004612085565b6106ce565b005b6102ac61079a565b6040516102b991906120ea565b60405180910390f35b6102d56102d036600461211d565b610828565b60405190151581526020016102b9565b6102a26102f3366004612149565b61083f565b61031861030636600461219c565b600b6020526000908152604090205481565b6040519081526020016102b9565b61031861271081565b600154610342906001600160a01b031681565b6040516001600160a01b0390911681526020016102b9565b6103186103683660046121b9565b610885565b61031860075481565b6102a2610384366004612200565b6108cc565b61031861039736600461219c565b610910565b6102d56103aa366004612085565b610977565b6103186103bd36600461219c565b60086020526000908152604090205481565b6103d7601281565b60405160ff90911681526020016102b9565b6103186103f736600461219c565b600e6020526000908152604090205481565b6001546102d590600160a01b900460ff1681565b6102a261042b366004612200565b610a11565b6102a2610a57565b61031861044636600461219c565b610a90565b61031861045936600461219c565b600d6020526000908152604090205481565b6102a2610479366004612233565b610bea565b6102d561048c36600461219c565b60116020526000908152604090205460ff1681565b6103186104af3660046121b9565b600960209081526000928352604080842090915290825290205481565b6102a26104da366004612200565b610d11565b6103186104ed36600461219c565b6001600160a01b031660009081526008602052604090205490565b6102a261051636600461230a565b610d4e565b6102ac610d89565b6102a261053136600461235b565b610d96565b61031861054436600461219c565b600f6020526000908152604090205481565b610318610deb565b6102d561056c36600461211d565b610e69565b6103186c0c9f2c9cd04674edea4000000081565b6102a261059336600461211d565b610e76565b6102d56105a636600461219c565b60056020526000908152604090205460ff1681565b600454610342906001600160a01b031681565b6102a26105dc36600461211d565b610eda565b6010546102d590610100900460ff1681565b6102a261060136600461219c565b610f35565b6103186106143660046121b9565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b6010546102d59060ff1681565b6102a261065a36600461235b565b610f81565b61031861066d36600461219c565b600c6020526000908152604090205481565b61031861068d3660046121b9565b600660209081526000928352604080842090915290825290205481565b610318600a5481565b6010546102d59062010000900460ff1681565b610342610fd6565b6001546001600160a01b031633146107015760405162461bcd60e51b81526004016106f890612389565b60405180910390fd5b6001600160a01b03831660009081526005602052604090205460ff16156107815760405162461bcd60e51b815260206004820152602e60248201527f526577617264547261636b65723a205f746f6b656e2063616e6e6f742062652060448201526d30903232b837b9b4ba2a37b5b2b760911b60648201526084016106f8565b6107956001600160a01b038416838361104f565b505050565b600280546107a7906123b8565b80601f01602080910402602001604051908101604052809291908181526020018280546107d3906123b8565b80156108205780601f106107f557610100808354040283529160200191610820565b820191906000526020600020905b81548152906001019060200180831161080357829003601f168201915b505050505081565b60006108353384846110b2565b5060015b92915050565b6002600054036108615760405162461bcd60e51b81526004016106f8906123f2565b600260005561086e6111e8565b61087a84848484611249565b505060016000555050565b60006002600054036108a95760405162461bcd60e51b81526004016106f8906123f2565b60026000556108b66111e8565b6108c0838361144f565b60016000559392505050565b6001546001600160a01b031633146108f65760405162461bcd60e51b81526004016106f890612389565b601080549115156101000261ff0019909216919091179055565b60006002600054036109345760405162461bcd60e51b81526004016106f8906123f2565b600260005560105462010000900460ff16156109625760405162461bcd60e51b81526004016106f890612429565b61096c338361144f565b600160005592915050565b3360009081526011602052604081205460ff16156109a25761099a8484846114e3565b506001610a0a565b60006109ec836040518060600160405280603081526020016125ec603091396001600160a01b0388166000908152600960209081526040808320338452909152902054919061168c565b90506109f98533836110b2565b610a048585856114e3565b60019150505b9392505050565b6001546001600160a01b03163314610a3b5760405162461bcd60e51b81526004016106f890612389565b60108054911515620100000262ff000019909216919091179055565b600260005403610a795760405162461bcd60e51b81526004016106f8906123f2565b60026000908155610a89906116c6565b6001600055565b6001600160a01b0381166000908152600b6020526040812054808203610acd5750506001600160a01b03166000908152600c602052604090205490565b60075460048054604080516376f69fed60e11b81529051600093610b58936c0c9f2c9cd04674edea40000000936001600160a01b039091169263eded3fda928281019260209291908290030181865afa158015610b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b52919061246a565b90611915565b90506000610b72610b698385611997565b600a54906119d9565b6001600160a01b0387166000908152600d6020526040902054909150610be090610bc1906c0c9f2c9cd04674edea4000000090610bbb90610bb4908690611a38565b8890611915565b90611997565b6001600160a01b0388166000908152600c6020526040902054906119d9565b9695505050505050565b6001546001600160a01b03163314610c145760405162461bcd60e51b81526004016106f890612389565b600154600160a01b900460ff1615610c795760405162461bcd60e51b815260206004820152602260248201527f526577617264547261636b65723a20616c726561647920696e697469616c697a604482015261195960f21b60648201526084016106f8565b6001805460ff60a01b1916600160a01b17905560005b8251811015610ced576000838281518110610cac57610cac612483565b6020908102919091018101516001600160a01b03166000908152600590915260409020805460ff191660011790555080610ce5816124af565b915050610c8f565b50600480546001600160a01b0319166001600160a01b039290921691909117905550565b6001546001600160a01b03163314610d3b5760405162461bcd60e51b81526004016106f890612389565b6010805460ff1916911515919091179055565b600260005403610d705760405162461bcd60e51b81526004016106f8906123f2565b6002600055610d7d6111e8565b61087a84848484611a7a565b600380546107a7906123b8565b6001546001600160a01b03163314610dc05760405162461bcd60e51b81526004016106f890612389565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663a8d936276040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e64919061246a565b905090565b60006108353384846114e3565b600260005403610e985760405162461bcd60e51b81526004016106f8906123f2565b6002600055601054610100900460ff1615610ec55760405162461bcd60e51b81526004016106f890612429565b610ed133338484611a7a565b50506001600055565b600260005403610efc5760405162461bcd60e51b81526004016106f8906123f2565b6002600055601054610100900460ff1615610f295760405162461bcd60e51b81526004016106f890612429565b610ed133838333611249565b6001546001600160a01b03163314610f5f5760405162461bcd60e51b81526004016106f890612389565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610fab5760405162461bcd60e51b81526004016106f890612389565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561102b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6491906124c8565b6040516001600160a01b03831660248201526044810182905261079590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611baf565b6001600160a01b03831661111d5760405162461bcd60e51b815260206004820152602c60248201527f526577617264547261636b65723a20617070726f76652066726f6d207468652060448201526b7a65726f206164647265737360a01b60648201526084016106f8565b6001600160a01b0382166111865760405162461bcd60e51b815260206004820152602a60248201527f526577617264547261636b65723a20617070726f766520746f20746865207a65604482015269726f206164647265737360b01b60648201526084016106f8565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b3360009081526011602052604090205460ff166112475760405162461bcd60e51b815260206004820152601860248201527f526577617264547261636b65723a20666f7262696464656e000000000000000060448201526064016106f8565b565b600082116112995760405162461bcd60e51b815260206004820152601e60248201527f526577617264547261636b65723a20696e76616c6964205f616d6f756e74000060448201526064016106f8565b6001600160a01b03831660009081526005602052604090205460ff166112d15760405162461bcd60e51b81526004016106f8906124e5565b6112da846116c6565b6001600160a01b0384166000908152600b6020526040902054828110156113575760405162461bcd60e51b815260206004820152602b60248201527f526577617264547261636b65723a205f616d6f756e742065786365656473207360448201526a1d185ad959105b5bdd5b9d60aa1b60648201526084016106f8565b6113618184611a38565b6001600160a01b038087166000908152600b6020908152604080832094909455600681528382209288168252919091522054838110156113f95760405162461bcd60e51b815260206004820152602d60248201527f526577617264547261636b65723a205f616d6f756e742065786365656473206460448201526c65706f73697442616c616e636560981b60648201526084016106f8565b6114038185611a38565b6001600160a01b038088166000908152600660209081526040808320938a16835292905220556114338685611c81565b6114476001600160a01b038616848661104f565b505050505050565b600061145a836116c6565b6001600160a01b0383166000908152600c6020526040812080549190558015610a0a5761149a838261148a610fd6565b6001600160a01b0316919061104f565b604080516001600160a01b0386168152602081018390527f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4910160405180910390a19392505050565b6001600160a01b03831661154f5760405162461bcd60e51b815260206004820152602d60248201527f526577617264547261636b65723a207472616e736665722066726f6d2074686560448201526c207a65726f206164647265737360981b60648201526084016106f8565b6001600160a01b0382166115b95760405162461bcd60e51b815260206004820152602b60248201527f526577617264547261636b65723a207472616e7366657220746f20746865207a60448201526a65726f206164647265737360a81b60648201526084016106f8565b60105460ff16156115cc576115cc6111e8565b611609816040518060600160405280602e815260200161261c602e91396001600160a01b038616600090815260086020526040902054919061168c565b6001600160a01b03808516600090815260086020526040808220939093559084168152205461163890826119d9565b6001600160a01b0380841660008181526008602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111db9085815260200190565b600081848411156116b05760405162461bcd60e51b81526004016106f891906120ea565b5060006116bd8486612529565b95945050505050565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561171d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611741919061246a565b600754600a5491925090811580159061175a5750600083115b1561178c5761178461177d83610bbb866c0c9f2c9cd04674edea40000000611915565b82906119d9565b600a81905590505b8060000361179a5750505050565b6001600160a01b0384161561190f576001600160a01b0384166000908152600b6020908152604080832054600d9092528220549091906117f9906c0c9f2c9cd04674edea4000000090610bbb906117f2908790611a38565b8590611915565b6001600160a01b0387166000908152600c60205260408120549192509061182090836119d9565b6001600160a01b0388166000908152600c60209081526040808320849055600d90915290208590559050801580159061187057506001600160a01b0387166000908152600b602052604090205415155b1561190b576001600160a01b0387166000908152600e602052604081205461189890846119d9565b90506118e56118ab82610bbb8787611915565b6001600160a01b038a166000908152600e6020908152604080832054600f909252909120546118df918591610bbb91611915565b906119d9565b6001600160a01b0389166000908152600f6020908152604080832093909355600e905220555b5050505b50505050565b60008260000361192757506000610839565b6000611933838561253c565b9050826119408583612553565b14610a0a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106f8565b6000610a0a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d95565b6000806119e68385612575565b905083811015610a0a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106f8565b6000610a0a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061168c565b60008111611aca5760405162461bcd60e51b815260206004820152601e60248201527f526577617264547261636b65723a20696e76616c6964205f616d6f756e74000060448201526064016106f8565b6001600160a01b03821660009081526005602052604090205460ff16611b025760405162461bcd60e51b81526004016106f8906124e5565b611b176001600160a01b038316853084611dc3565b611b20836116c6565b6001600160a01b0383166000908152600b6020526040902054611b4390826119d9565b6001600160a01b038085166000908152600b6020908152604080832094909455600681528382209286168252919091522054611b7f90826119d9565b6001600160a01b0380851660009081526006602090815260408083209387168352929052205561190f8382611dfb565b6000611c04826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ee59092919063ffffffff16565b8051909150156107955780806020019051810190611c229190612588565b6107955760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106f8565b6001600160a01b038216611ce95760405162461bcd60e51b815260206004820152602960248201527f526577617264547261636b65723a206275726e2066726f6d20746865207a65726044820152686f206164647265737360b81b60648201526084016106f8565b611d26816040518060600160405280602a81526020016125c2602a91396001600160a01b038516600090815260086020526040902054919061168c565b6001600160a01b038316600090815260086020526040902055600754611d4c9082611a38565b6007556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60008183611db65760405162461bcd60e51b81526004016106f891906120ea565b5060006116bd8486612553565b6040516001600160a01b038085166024830152831660448201526064810182905261190f9085906323b872dd60e01b9060840161107b565b6001600160a01b038216611e615760405162461bcd60e51b815260206004820152602760248201527f526577617264547261636b65723a206d696e7420746f20746865207a65726f206044820152666164647265737360c81b60648201526084016106f8565b600754611e6e90826119d9565b6007556001600160a01b038216600090815260086020526040902054611e9490826119d9565b6001600160a01b0383166000818152600860205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d899085815260200190565b6060611ef48484600085611efc565b949350505050565b606082471015611f5d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106f8565b843b611fab5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106f8565b600080866001600160a01b03168587604051611fc791906125a5565b60006040518083038185875af1925050503d8060008114612004576040519150601f19603f3d011682016040523d82523d6000602084013e612009565b606091505b5091509150612019828286612024565b979650505050505050565b60608315612033575081610a0a565b8251156120435782518084602001fd5b8160405162461bcd60e51b81526004016106f891906120ea565b6001600160a01b038116811461207257600080fd5b50565b80356120808161205d565b919050565b60008060006060848603121561209a57600080fd5b83356120a58161205d565b925060208401356120b58161205d565b929592945050506040919091013590565b60005b838110156120e15781810151838201526020016120c9565b50506000910152565b60208152600082518060208401526121098160408501602087016120c6565b601f01601f19169190910160400192915050565b6000806040838503121561213057600080fd5b823561213b8161205d565b946020939093013593505050565b6000806000806080858703121561215f57600080fd5b843561216a8161205d565b9350602085013561217a8161205d565b92506040850135915060608501356121918161205d565b939692955090935050565b6000602082840312156121ae57600080fd5b8135610a0a8161205d565b600080604083850312156121cc57600080fd5b82356121d78161205d565b915060208301356121e78161205d565b809150509250929050565b801515811461207257600080fd5b60006020828403121561221257600080fd5b8135610a0a816121f2565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561224657600080fd5b823567ffffffffffffffff8082111561225e57600080fd5b818501915085601f83011261227257600080fd5b81356020828211156122865761228661221d565b8160051b604051601f19603f830116810181811086821117156122ab576122ab61221d565b6040529283528183019350848101820192898411156122c957600080fd5b948201945b838610156122ee576122df86612075565b855294820194938201936122ce565b96506122fd9050878201612075565b9450505050509250929050565b6000806000806080858703121561232057600080fd5b843561232b8161205d565b9350602085013561233b8161205d565b9250604085013561234b8161205d565b9396929550929360600135925050565b6000806040838503121561236e57600080fd5b82356123798161205d565b915060208301356121e7816121f2565b60208082526015908201527423b7bb32b93730b136329d103337b93134b23232b760591b604082015260600190565b600181811c908216806123cc57607f821691505b6020821081036123ec57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526021908201527f526577617264547261636b65723a20616374696f6e206e6f7420656e61626c656040820152601960fa1b606082015260800190565b60006020828403121561247c57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016124c1576124c1612499565b5060010190565b6000602082840312156124da57600080fd5b8151610a0a8161205d565b60208082526024908201527f526577617264547261636b65723a20696e76616c6964205f6465706f7369745460408201526337b5b2b760e11b606082015260800190565b8181038181111561083957610839612499565b808202811582820484141761083957610839612499565b60008261257057634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561083957610839612499565b60006020828403121561259a57600080fd5b8151610a0a816121f2565b600082516125b78184602087016120c6565b919091019291505056fe526577617264547261636b65723a206275726e20616d6f756e7420657863656564732062616c616e6365526577617264547261636b65723a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526577617264547261636b65723a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a264697066735822122062dfa4d479e7eeb2f18d10fc4582a0f73844bcfd37fcf3895a06ba45d9d63f8f64736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c5374616b6564204152424f5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006734152424f540000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061028a5760003560e01c80635a47a1a71161015c578063bfe10928116100ce578063e44b755811610087578063e44b75581461064c578063e95034251461065f578063f5d9d63e1461067f578063f5fc5076146106aa578063f76033d3146106b3578063f7c618c1146106c657600080fd5b8063bfe10928146105bb578063c2a672e0146105ce578063c5fa2730146105e1578063cfad57a2146105f3578063dd62ed3e14610606578063dfbaefb11461063f57600080fd5b8063a318021711610120578063a318021714610536578063a8d9362714610556578063a9059cbb1461055e578063aaf5eb6814610571578063adc9772e14610585578063b89e45b31461059857600080fd5b80635a47a1a7146104cc57806370a08231146104df578063790b5a6c1461050857806395d89b411461051b5780639cb7de4b1461052357600080fd5b806323b872dd116102005780633e158b0c116101b95780633e158b0c14610430578063402914f51461043857806344a084111461044b578063462d0b2e1461046b57806346ea87af1461047e57806355b6ed5c146104a157600080fd5b806323b872dd1461039c57806327e235e3146103af578063313ce567146103cf5780633792def3146103e9578063392e53cd146104095780633cd7f7001461041d57600080fd5b8063126082cf11610252578063126082cf1461032657806312d43a511461032f57806313e82e7a1461035a57806318160ddd1461036d5780631d30d5bc146103765780631e83409a1461038957600080fd5b806301e336671461028f57806306fdde03146102a4578063095ea7b3146102c2578063098bf59d146102e557806310c1c103146102f8575b600080fd5b6102a261029d366004612085565b6106ce565b005b6102ac61079a565b6040516102b991906120ea565b60405180910390f35b6102d56102d036600461211d565b610828565b60405190151581526020016102b9565b6102a26102f3366004612149565b61083f565b61031861030636600461219c565b600b6020526000908152604090205481565b6040519081526020016102b9565b61031861271081565b600154610342906001600160a01b031681565b6040516001600160a01b0390911681526020016102b9565b6103186103683660046121b9565b610885565b61031860075481565b6102a2610384366004612200565b6108cc565b61031861039736600461219c565b610910565b6102d56103aa366004612085565b610977565b6103186103bd36600461219c565b60086020526000908152604090205481565b6103d7601281565b60405160ff90911681526020016102b9565b6103186103f736600461219c565b600e6020526000908152604090205481565b6001546102d590600160a01b900460ff1681565b6102a261042b366004612200565b610a11565b6102a2610a57565b61031861044636600461219c565b610a90565b61031861045936600461219c565b600d6020526000908152604090205481565b6102a2610479366004612233565b610bea565b6102d561048c36600461219c565b60116020526000908152604090205460ff1681565b6103186104af3660046121b9565b600960209081526000928352604080842090915290825290205481565b6102a26104da366004612200565b610d11565b6103186104ed36600461219c565b6001600160a01b031660009081526008602052604090205490565b6102a261051636600461230a565b610d4e565b6102ac610d89565b6102a261053136600461235b565b610d96565b61031861054436600461219c565b600f6020526000908152604090205481565b610318610deb565b6102d561056c36600461211d565b610e69565b6103186c0c9f2c9cd04674edea4000000081565b6102a261059336600461211d565b610e76565b6102d56105a636600461219c565b60056020526000908152604090205460ff1681565b600454610342906001600160a01b031681565b6102a26105dc36600461211d565b610eda565b6010546102d590610100900460ff1681565b6102a261060136600461219c565b610f35565b6103186106143660046121b9565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b6010546102d59060ff1681565b6102a261065a36600461235b565b610f81565b61031861066d36600461219c565b600c6020526000908152604090205481565b61031861068d3660046121b9565b600660209081526000928352604080842090915290825290205481565b610318600a5481565b6010546102d59062010000900460ff1681565b610342610fd6565b6001546001600160a01b031633146107015760405162461bcd60e51b81526004016106f890612389565b60405180910390fd5b6001600160a01b03831660009081526005602052604090205460ff16156107815760405162461bcd60e51b815260206004820152602e60248201527f526577617264547261636b65723a205f746f6b656e2063616e6e6f742062652060448201526d30903232b837b9b4ba2a37b5b2b760911b60648201526084016106f8565b6107956001600160a01b038416838361104f565b505050565b600280546107a7906123b8565b80601f01602080910402602001604051908101604052809291908181526020018280546107d3906123b8565b80156108205780601f106107f557610100808354040283529160200191610820565b820191906000526020600020905b81548152906001019060200180831161080357829003601f168201915b505050505081565b60006108353384846110b2565b5060015b92915050565b6002600054036108615760405162461bcd60e51b81526004016106f8906123f2565b600260005561086e6111e8565b61087a84848484611249565b505060016000555050565b60006002600054036108a95760405162461bcd60e51b81526004016106f8906123f2565b60026000556108b66111e8565b6108c0838361144f565b60016000559392505050565b6001546001600160a01b031633146108f65760405162461bcd60e51b81526004016106f890612389565b601080549115156101000261ff0019909216919091179055565b60006002600054036109345760405162461bcd60e51b81526004016106f8906123f2565b600260005560105462010000900460ff16156109625760405162461bcd60e51b81526004016106f890612429565b61096c338361144f565b600160005592915050565b3360009081526011602052604081205460ff16156109a25761099a8484846114e3565b506001610a0a565b60006109ec836040518060600160405280603081526020016125ec603091396001600160a01b0388166000908152600960209081526040808320338452909152902054919061168c565b90506109f98533836110b2565b610a048585856114e3565b60019150505b9392505050565b6001546001600160a01b03163314610a3b5760405162461bcd60e51b81526004016106f890612389565b60108054911515620100000262ff000019909216919091179055565b600260005403610a795760405162461bcd60e51b81526004016106f8906123f2565b60026000908155610a89906116c6565b6001600055565b6001600160a01b0381166000908152600b6020526040812054808203610acd5750506001600160a01b03166000908152600c602052604090205490565b60075460048054604080516376f69fed60e11b81529051600093610b58936c0c9f2c9cd04674edea40000000936001600160a01b039091169263eded3fda928281019260209291908290030181865afa158015610b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b52919061246a565b90611915565b90506000610b72610b698385611997565b600a54906119d9565b6001600160a01b0387166000908152600d6020526040902054909150610be090610bc1906c0c9f2c9cd04674edea4000000090610bbb90610bb4908690611a38565b8890611915565b90611997565b6001600160a01b0388166000908152600c6020526040902054906119d9565b9695505050505050565b6001546001600160a01b03163314610c145760405162461bcd60e51b81526004016106f890612389565b600154600160a01b900460ff1615610c795760405162461bcd60e51b815260206004820152602260248201527f526577617264547261636b65723a20616c726561647920696e697469616c697a604482015261195960f21b60648201526084016106f8565b6001805460ff60a01b1916600160a01b17905560005b8251811015610ced576000838281518110610cac57610cac612483565b6020908102919091018101516001600160a01b03166000908152600590915260409020805460ff191660011790555080610ce5816124af565b915050610c8f565b50600480546001600160a01b0319166001600160a01b039290921691909117905550565b6001546001600160a01b03163314610d3b5760405162461bcd60e51b81526004016106f890612389565b6010805460ff1916911515919091179055565b600260005403610d705760405162461bcd60e51b81526004016106f8906123f2565b6002600055610d7d6111e8565b61087a84848484611a7a565b600380546107a7906123b8565b6001546001600160a01b03163314610dc05760405162461bcd60e51b81526004016106f890612389565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663a8d936276040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e64919061246a565b905090565b60006108353384846114e3565b600260005403610e985760405162461bcd60e51b81526004016106f8906123f2565b6002600055601054610100900460ff1615610ec55760405162461bcd60e51b81526004016106f890612429565b610ed133338484611a7a565b50506001600055565b600260005403610efc5760405162461bcd60e51b81526004016106f8906123f2565b6002600055601054610100900460ff1615610f295760405162461bcd60e51b81526004016106f890612429565b610ed133838333611249565b6001546001600160a01b03163314610f5f5760405162461bcd60e51b81526004016106f890612389565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610fab5760405162461bcd60e51b81526004016106f890612389565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561102b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6491906124c8565b6040516001600160a01b03831660248201526044810182905261079590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611baf565b6001600160a01b03831661111d5760405162461bcd60e51b815260206004820152602c60248201527f526577617264547261636b65723a20617070726f76652066726f6d207468652060448201526b7a65726f206164647265737360a01b60648201526084016106f8565b6001600160a01b0382166111865760405162461bcd60e51b815260206004820152602a60248201527f526577617264547261636b65723a20617070726f766520746f20746865207a65604482015269726f206164647265737360b01b60648201526084016106f8565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b3360009081526011602052604090205460ff166112475760405162461bcd60e51b815260206004820152601860248201527f526577617264547261636b65723a20666f7262696464656e000000000000000060448201526064016106f8565b565b600082116112995760405162461bcd60e51b815260206004820152601e60248201527f526577617264547261636b65723a20696e76616c6964205f616d6f756e74000060448201526064016106f8565b6001600160a01b03831660009081526005602052604090205460ff166112d15760405162461bcd60e51b81526004016106f8906124e5565b6112da846116c6565b6001600160a01b0384166000908152600b6020526040902054828110156113575760405162461bcd60e51b815260206004820152602b60248201527f526577617264547261636b65723a205f616d6f756e742065786365656473207360448201526a1d185ad959105b5bdd5b9d60aa1b60648201526084016106f8565b6113618184611a38565b6001600160a01b038087166000908152600b6020908152604080832094909455600681528382209288168252919091522054838110156113f95760405162461bcd60e51b815260206004820152602d60248201527f526577617264547261636b65723a205f616d6f756e742065786365656473206460448201526c65706f73697442616c616e636560981b60648201526084016106f8565b6114038185611a38565b6001600160a01b038088166000908152600660209081526040808320938a16835292905220556114338685611c81565b6114476001600160a01b038616848661104f565b505050505050565b600061145a836116c6565b6001600160a01b0383166000908152600c6020526040812080549190558015610a0a5761149a838261148a610fd6565b6001600160a01b0316919061104f565b604080516001600160a01b0386168152602081018390527f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4910160405180910390a19392505050565b6001600160a01b03831661154f5760405162461bcd60e51b815260206004820152602d60248201527f526577617264547261636b65723a207472616e736665722066726f6d2074686560448201526c207a65726f206164647265737360981b60648201526084016106f8565b6001600160a01b0382166115b95760405162461bcd60e51b815260206004820152602b60248201527f526577617264547261636b65723a207472616e7366657220746f20746865207a60448201526a65726f206164647265737360a81b60648201526084016106f8565b60105460ff16156115cc576115cc6111e8565b611609816040518060600160405280602e815260200161261c602e91396001600160a01b038616600090815260086020526040902054919061168c565b6001600160a01b03808516600090815260086020526040808220939093559084168152205461163890826119d9565b6001600160a01b0380841660008181526008602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111db9085815260200190565b600081848411156116b05760405162461bcd60e51b81526004016106f891906120ea565b5060006116bd8486612529565b95945050505050565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561171d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611741919061246a565b600754600a5491925090811580159061175a5750600083115b1561178c5761178461177d83610bbb866c0c9f2c9cd04674edea40000000611915565b82906119d9565b600a81905590505b8060000361179a5750505050565b6001600160a01b0384161561190f576001600160a01b0384166000908152600b6020908152604080832054600d9092528220549091906117f9906c0c9f2c9cd04674edea4000000090610bbb906117f2908790611a38565b8590611915565b6001600160a01b0387166000908152600c60205260408120549192509061182090836119d9565b6001600160a01b0388166000908152600c60209081526040808320849055600d90915290208590559050801580159061187057506001600160a01b0387166000908152600b602052604090205415155b1561190b576001600160a01b0387166000908152600e602052604081205461189890846119d9565b90506118e56118ab82610bbb8787611915565b6001600160a01b038a166000908152600e6020908152604080832054600f909252909120546118df918591610bbb91611915565b906119d9565b6001600160a01b0389166000908152600f6020908152604080832093909355600e905220555b5050505b50505050565b60008260000361192757506000610839565b6000611933838561253c565b9050826119408583612553565b14610a0a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106f8565b6000610a0a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d95565b6000806119e68385612575565b905083811015610a0a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106f8565b6000610a0a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061168c565b60008111611aca5760405162461bcd60e51b815260206004820152601e60248201527f526577617264547261636b65723a20696e76616c6964205f616d6f756e74000060448201526064016106f8565b6001600160a01b03821660009081526005602052604090205460ff16611b025760405162461bcd60e51b81526004016106f8906124e5565b611b176001600160a01b038316853084611dc3565b611b20836116c6565b6001600160a01b0383166000908152600b6020526040902054611b4390826119d9565b6001600160a01b038085166000908152600b6020908152604080832094909455600681528382209286168252919091522054611b7f90826119d9565b6001600160a01b0380851660009081526006602090815260408083209387168352929052205561190f8382611dfb565b6000611c04826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ee59092919063ffffffff16565b8051909150156107955780806020019051810190611c229190612588565b6107955760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106f8565b6001600160a01b038216611ce95760405162461bcd60e51b815260206004820152602960248201527f526577617264547261636b65723a206275726e2066726f6d20746865207a65726044820152686f206164647265737360b81b60648201526084016106f8565b611d26816040518060600160405280602a81526020016125c2602a91396001600160a01b038516600090815260086020526040902054919061168c565b6001600160a01b038316600090815260086020526040902055600754611d4c9082611a38565b6007556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60008183611db65760405162461bcd60e51b81526004016106f891906120ea565b5060006116bd8486612553565b6040516001600160a01b038085166024830152831660448201526064810182905261190f9085906323b872dd60e01b9060840161107b565b6001600160a01b038216611e615760405162461bcd60e51b815260206004820152602760248201527f526577617264547261636b65723a206d696e7420746f20746865207a65726f206044820152666164647265737360c81b60648201526084016106f8565b600754611e6e90826119d9565b6007556001600160a01b038216600090815260086020526040902054611e9490826119d9565b6001600160a01b0383166000818152600860205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d899085815260200190565b6060611ef48484600085611efc565b949350505050565b606082471015611f5d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106f8565b843b611fab5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106f8565b600080866001600160a01b03168587604051611fc791906125a5565b60006040518083038185875af1925050503d8060008114612004576040519150601f19603f3d011682016040523d82523d6000602084013e612009565b606091505b5091509150612019828286612024565b979650505050505050565b60608315612033575081610a0a565b8251156120435782518084602001fd5b8160405162461bcd60e51b81526004016106f891906120ea565b6001600160a01b038116811461207257600080fd5b50565b80356120808161205d565b919050565b60008060006060848603121561209a57600080fd5b83356120a58161205d565b925060208401356120b58161205d565b929592945050506040919091013590565b60005b838110156120e15781810151838201526020016120c9565b50506000910152565b60208152600082518060208401526121098160408501602087016120c6565b601f01601f19169190910160400192915050565b6000806040838503121561213057600080fd5b823561213b8161205d565b946020939093013593505050565b6000806000806080858703121561215f57600080fd5b843561216a8161205d565b9350602085013561217a8161205d565b92506040850135915060608501356121918161205d565b939692955090935050565b6000602082840312156121ae57600080fd5b8135610a0a8161205d565b600080604083850312156121cc57600080fd5b82356121d78161205d565b915060208301356121e78161205d565b809150509250929050565b801515811461207257600080fd5b60006020828403121561221257600080fd5b8135610a0a816121f2565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561224657600080fd5b823567ffffffffffffffff8082111561225e57600080fd5b818501915085601f83011261227257600080fd5b81356020828211156122865761228661221d565b8160051b604051601f19603f830116810181811086821117156122ab576122ab61221d565b6040529283528183019350848101820192898411156122c957600080fd5b948201945b838610156122ee576122df86612075565b855294820194938201936122ce565b96506122fd9050878201612075565b9450505050509250929050565b6000806000806080858703121561232057600080fd5b843561232b8161205d565b9350602085013561233b8161205d565b9250604085013561234b8161205d565b9396929550929360600135925050565b6000806040838503121561236e57600080fd5b82356123798161205d565b915060208301356121e7816121f2565b60208082526015908201527423b7bb32b93730b136329d103337b93134b23232b760591b604082015260600190565b600181811c908216806123cc57607f821691505b6020821081036123ec57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526021908201527f526577617264547261636b65723a20616374696f6e206e6f7420656e61626c656040820152601960fa1b606082015260800190565b60006020828403121561247c57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016124c1576124c1612499565b5060010190565b6000602082840312156124da57600080fd5b8151610a0a8161205d565b60208082526024908201527f526577617264547261636b65723a20696e76616c6964205f6465706f7369745460408201526337b5b2b760e11b606082015260800190565b8181038181111561083957610839612499565b808202811582820484141761083957610839612499565b60008261257057634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561083957610839612499565b60006020828403121561259a57600080fd5b8151610a0a816121f2565b600082516125b78184602087016120c6565b919091019291505056fe526577617264547261636b65723a206275726e20616d6f756e7420657863656564732062616c616e6365526577617264547261636b65723a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526577617264547261636b65723a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a264697066735822122062dfa4d479e7eeb2f18d10fc4582a0f73844bcfd37fcf3895a06ba45d9d63f8f64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c5374616b6564204152424f5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006734152424f540000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Staked ARBOT
Arg [1] : _symbol (string): sARBOT
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [3] : 5374616b6564204152424f540000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 734152424f540000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
25436:12046:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28182:249;;;;;;:::i;:::-;;:::i;:::-;;25775:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29906:165;;;;;;:::i;:::-;;:::i;:::-;;;1891:14:1;;1884:22;1866:41;;1854:2;1839:18;29906:165:0;1726:187:1;29327:236:0;;;;;;:::i;:::-;;:::i;26221:58::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2919:25:1;;;2907:2;2892:18;26221:58:0;2773:177:1;25589:52:0;;25636:5;25589:52;;25070:18;;;;;-1:-1:-1;;;;;25070:18:0;;;;;;-1:-1:-1;;;;;3119:32:1;;;3101:51;;3089:2;3074:18;25070::0;2955:203:1;31088:193:0;;;;;;:::i;:::-;;:::i;26006:35::-;;;;;;27677:141;;;;;;:::i;:::-;;:::i;30857:223::-;;;;;;:::i;:::-;;:::i;30079:506::-;;;;;;:::i;:::-;;:::i;26048:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;25697:35;;25730:2;25697:35;;;;;4097:4:1;4085:17;;;4067:36;;4055:2;4040:18;25697:35:0;3925:184:1;26418:62:0;;;;;;:::i;:::-;;;;;;;;;;;;;;25741:25;;;;;-1:-1:-1;;;25741:25:0;;;;;;27826:145;;;;;;:::i;:::-;;:::i;30748:101::-;;;:::i;31289:648::-;;;;;;:::i;:::-;;:::i;26344:67::-;;;;;;:::i;:::-;;;;;;;;;;;;;;26907:448;;;;;;:::i;:::-;;:::i;26680:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26099:67;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;27524:145;;;;;;:::i;:::-;;:::i;28439:122::-;;;;;;:::i;:::-;-1:-1:-1;;;;;28535:18:0;28508:7;28535:18;;;:8;:18;;;;;;;28439:122;28820:244;;;;;;:::i;:::-;;:::i;25800:20::-;;;:::i;27979:121::-;;;;;;:::i;:::-;;:::i;26487:65::-;;;;;;:::i;:::-;;;;;;;;;;;;;;30593:147;;;:::i;29571:171::-;;;;;;:::i;:::-;;:::i;25648:40::-;;25684:4;25648:40;;28569:243;;;;;;:::i;:::-;;:::i;25862:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25829:26;;;;;-1:-1:-1;;;;;25829:26:0;;;29072:247;;;;;;:::i;:::-;;:::i;26601:32::-;;;;;;;;;;;;25263:76;;;;;;:::i;:::-;;:::i;29750:148::-;;;;;;:::i;:::-;-1:-1:-1;;;;;29862:18:0;;;29835:7;29862:18;;;:10;:18;;;;;;;;:28;;;;;;;;;;;;;29750:148;26561:33;;;;;;;;;27363:153;;;;;;:::i;:::-;;:::i;26286:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;25916:81;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;26175:39;;;;;;26640:33;;;;;;;;;;;;31945:124;;;:::i;28182:249::-;25206:3;;-1:-1:-1;;;;;25206:3:0;25192:10;:17;25184:51;;;;-1:-1:-1;;;25184:51:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;28293:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;28292:23;28284:82;;;::::0;-1:-1:-1;;;28284:82:0;;6990:2:1;28284:82:0::1;::::0;::::1;6972:21:1::0;7029:2;7009:18;;;7002:30;7068:34;7048:18;;;7041:62;-1:-1:-1;;;7119:18:1;;;7112:44;7173:19;;28284:82:0::1;6788:410:1::0;28284:82:0::1;28377:46;-1:-1:-1::0;;;;;28377:27:0;::::1;28405:8:::0;28415:7;28377:27:::1;:46::i;:::-;28182:249:::0;;;:::o;25775:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29906:165::-;29985:4;30002:39;30011:10;30023:8;30033:7;30002:8;:39::i;:::-;-1:-1:-1;30059:4:0;29906:165;;;;;:::o;29327:236::-;22446:1;23043:7;;:19;23035:63;;;;-1:-1:-1;;;23035:63:0;;;;;;;:::i;:::-;22446:1;23176:7;:18;29473::::1;:16;:18::i;:::-;29502:53;29511:8;29521:13;29536:7;29545:9;29502:8;:53::i;:::-;-1:-1:-1::0;;22402:1:0;23355:7;:22;-1:-1:-1;;29327:236:0:o;31088:193::-;31190:7;22446:1;23043:7;;:19;23035:63;;;;-1:-1:-1;;;23035:63:0;;;;;;;:::i;:::-;22446:1;23176:7;:18;31210::::1;:16;:18::i;:::-;31246:27;31253:8;31263:9;31246:6;:27::i;:::-;22402:1:::0;23355:7;:22;31239:34;31088:193;-1:-1:-1;;;31088:193:0:o;27677:141::-;25206:3;;-1:-1:-1;;;;;25206:3:0;25192:10;:17;25184:51;;;;-1:-1:-1;;;25184:51:0;;;;;;;:::i;:::-;27766:20:::1;:44:::0;;;::::1;;;;-1:-1:-1::0;;27766:44:0;;::::1;::::0;;;::::1;::::0;;27677:141::o;30857:223::-;30931:7;22446:1;23043:7;;:19;23035:63;;;;-1:-1:-1;;;23035:63:0;;;;;;;:::i;:::-;22446:1;23176:7;:18;30955:21:::1;::::0;;;::::1;;;30951:75;;;30980:43;;-1:-1:-1::0;;;30980:43:0::1;;;;;;;:::i;30951:75::-;31043:29;31050:10;31062:9;31043:6;:29::i;:::-;22402:1:::0;23355:7;:22;31036:36;30857:223;-1:-1:-1;;30857:223:0:o;30079:506::-;30213:10;30182:4;30203:21;;;:9;:21;;;;;;;;30199:119;;;30241:39;30251:7;30260:10;30272:7;30241:9;:39::i;:::-;-1:-1:-1;30302:4:0;30295:11;;30199:119;30330:21;30354:96;30390:7;30354:96;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30354:19:0;;;;;;:10;:19;;;;;;;;30374:10;30354:31;;;;;;;;;:96;:35;:96::i;:::-;30330:120;;30461:44;30470:7;30479:10;30491:13;30461:8;:44::i;:::-;30516:39;30526:7;30535:10;30547:7;30516:9;:39::i;:::-;30573:4;30566:11;;;30079:506;;;;;;:::o;27826:145::-;25206:3;;-1:-1:-1;;;;;25206:3:0;25192:10;:17;25184:51;;;;-1:-1:-1;;;25184:51:0;;;;;;;:::i;:::-;27917:21:::1;:46:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;27917:46:0;;::::1;::::0;;;::::1;::::0;;27826:145::o;30748:101::-;22446:1;23043:7;;:19;23035:63;;;;-1:-1:-1;;;23035:63:0;;;;;;;:::i;:::-;22446:1;23176:7;:18;;;30815:26:::1;::::0;:14:::1;:26::i;:::-;22402:1:::0;23355:7;:22;30748:101::o;31289:648::-;-1:-1:-1;;;;;31399:23:0;;31356:7;31399:23;;;:13;:23;;;;;;31437:17;;;31433:82;;-1:-1:-1;;;;;;;31478:25:0;;;;;:15;:25;;;;;;;31289:648::o;31433:82::-;31542:11;;31608;;;31589:48;;;-1:-1:-1;;;31589:48:0;;;;31525:14;;31589:63;;25684:4;;-1:-1:-1;;;;;31608:11:0;;;;31589:46;;:48;;;;;;;;;;;;;31608:11;31589:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;:63::i;:::-;31564:88;-1:-1:-1;31663:36:0;31702:56;31731:26;31564:88;31750:6;31731:18;:26::i;:::-;31702:24;;;:28;:56::i;:::-;-1:-1:-1;;;;;31870:41:0;;;;;;:31;:41;;;;;;31663:95;;-1:-1:-1;31776:153:0;;31820:108;;25684:4;;31820:93;;31837:75;;31663:95;;31837:32;:75::i;:::-;31820:12;;:16;:93::i;:::-;:97;;:108::i;:::-;-1:-1:-1;;;;;31776:25:0;;;;;;:15;:25;;;;;;;:29;:153::i;:::-;31769:160;31289:648;-1:-1:-1;;;;;;31289:648:0:o;26907:448::-;25206:3;;-1:-1:-1;;;;;25206:3:0;25192:10;:17;25184:51;;;;-1:-1:-1;;;25184:51:0;;;;;;;:::i;:::-;27044:13:::1;::::0;-1:-1:-1;;;27044:13:0;::::1;;;27043:14;27035:61;;;::::0;-1:-1:-1;;;27035:61:0;;8741:2:1;27035:61:0::1;::::0;::::1;8723:21:1::0;8780:2;8760:18;;;8753:30;8819:34;8799:18;;;8792:62;-1:-1:-1;;;8870:18:1;;;8863:32;8912:19;;27035:61:0::1;8539:398:1::0;27035:61:0::1;27123:4;27107:20:::0;;-1:-1:-1;;;;27107:20:0::1;-1:-1:-1::0;;;27107:20:0::1;::::0;;;27140:169:::1;27164:14;:21;27160:1;:25;27140:169;;;27207:20;27230:14;27245:1;27230:17;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27262:28:0::1;;::::0;;;:14:::1;:28:::0;;;;;;:35;;-1:-1:-1;;27262:35:0::1;27293:4;27262:35;::::0;;-1:-1:-1;27187:3:0;::::1;::::0;::::1;:::i;:::-;;;;27140:169;;;-1:-1:-1::0;27321:11:0::1;:26:::0;;-1:-1:-1;;;;;;27321:26:0::1;-1:-1:-1::0;;;;;27321:26:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;26907:448:0:o;27524:145::-;25206:3;;-1:-1:-1;;;;;25206:3:0;25192:10;:17;25184:51;;;;-1:-1:-1;;;25184:51:0;;;;;;;:::i;:::-;27615:21:::1;:46:::0;;-1:-1:-1;;27615:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27524:145::o;28820:244::-;22446:1;23043:7;;:19;23035:63;;;;-1:-1:-1;;;23035:63:0;;;;;;;:::i;:::-;22446:1;23176:7;:18;28970::::1;:16;:18::i;:::-;28999:57;29006:15;29023:8;29033:13;29048:7;28999:6;:57::i;25800:20::-:0;;;;;;;:::i;27979:121::-;25206:3;;-1:-1:-1;;;;;25206:3:0;25192:10;:17;25184:51;;;;-1:-1:-1;;;25184:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28061:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:31;;-1:-1:-1;;28061:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27979:121::o;30593:147::-;30654:7;30700:11;;;;;;;;;-1:-1:-1;;;;;30700:11:0;-1:-1:-1;;;;;30681:49:0;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30674:58;;30593:147;:::o;29571:171::-;29653:4;29670:42;29680:10;29692;29704:7;29670:9;:42::i;28569:243::-;22446:1;23043:7;;:19;23035:63;;;;-1:-1:-1;;;23035:63:0;;;;;;;:::i;:::-;22446:1;23176:7;:18;28670:20:::1;::::0;::::1;::::0;::::1;;;28666:74;;;28694:43;;-1:-1:-1::0;;;28694:43:0::1;;;;;;;:::i;28666:74::-;28750:54;28757:10;28769;28781:13;28796:7;28750:6;:54::i;:::-;-1:-1:-1::0;;22402:1:0;23355:7;:22;28569:243::o;29072:247::-;22446:1;23043:7;;:19;23035:63;;;;-1:-1:-1;;;23035:63:0;;;;;;;:::i;:::-;22446:1;23176:7;:18;29175:20:::1;::::0;::::1;::::0;::::1;;;29171:74;;;29199:43;;-1:-1:-1::0;;;29199:43:0::1;;;;;;;:::i;29171:74::-;29255:56;29264:10;29276:13;29291:7;29300:10;29255:8;:56::i;25263:76::-:0;25206:3;;-1:-1:-1;;;;;25206:3:0;25192:10;:17;25184:51;;;;-1:-1:-1;;;25184:51:0;;;;;;;:::i;:::-;25321:3:::1;:10:::0;;-1:-1:-1;;;;;;25321:10:0::1;-1:-1:-1::0;;;;;25321:10:0;;;::::1;::::0;;;::::1;::::0;;25263:76::o;27363:153::-;25206:3;;-1:-1:-1;;;;;25206:3:0;25192:10;:17;25184:51;;;;-1:-1:-1;;;25184:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27461:29:0;;;::::1;;::::0;;;:14:::1;:29;::::0;;;;:47;;-1:-1:-1;;27461:47:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27363:153::o;31945:124::-;31989:7;32035:11;;;;;;;;;-1:-1:-1;;;;;32035:11:0;-1:-1:-1;;;;;32016:43:0;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17641:177::-;17751:58;;-1:-1:-1;;;;;9794:32:1;;17751:58:0;;;9776:51:1;9843:18;;;9836:34;;;17724:86:0;;17744:5;;-1:-1:-1;;;17774:23:0;9749:18:1;;17751:58:0;;;;-1:-1:-1;;17751:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;17751:58:0;-1:-1:-1;;;;;;17751:58:0;;;;;;;;;;17724:19;:86::i;33789:365::-;-1:-1:-1;;;;;33885:20:0;;33877:77;;;;-1:-1:-1;;;33877:77:0;;10083:2:1;33877:77:0;;;10065:21:1;10122:2;10102:18;;;10095:30;10161:34;10141:18;;;10134:62;-1:-1:-1;;;10212:18:1;;;10205:42;10264:19;;33877:77:0;9881:408:1;33877:77:0;-1:-1:-1;;;;;33973:22:0;;33965:77;;;;-1:-1:-1;;;33965:77:0;;10496:2:1;33965:77:0;;;10478:21:1;10535:2;10515:18;;;10508:30;10574:34;10554:18;;;10547:62;-1:-1:-1;;;10625:18:1;;;10618:40;10675:19;;33965:77:0;10294:406:1;33965:77:0;-1:-1:-1;;;;;34055:18:0;;;;;;;:10;:18;;;;;;;;:28;;;;;;;;;;;;;:38;;;34111:35;;2919:25:1;;;34111:35:0;;2892:18:1;34111:35:0;;;;;;;;33789:365;;;:::o;34162:118::-;34232:10;34222:21;;;;:9;:21;;;;;;;;34214:58;;;;-1:-1:-1;;;34214:58:0;;10907:2:1;34214:58:0;;;10889:21:1;10946:2;10926:18;;;10919:30;10985:26;10965:18;;;10958:54;11029:18;;34214:58:0;10705:348:1;34214:58:0;34162:118::o;34913:881::-;35045:1;35035:7;:11;35027:54;;;;-1:-1:-1;;;35027:54:0;;11260:2:1;35027:54:0;;;11242:21:1;11299:2;11279:18;;;11272:30;11338:32;11318:18;;;11311:60;11388:18;;35027:54:0;11058:354:1;35027:54:0;-1:-1:-1;;;;;35100:29:0;;;;;;:14;:29;;;;;;;;35092:78;;;;-1:-1:-1;;;35092:78:0;;;;;;;:::i;:::-;35183:24;35198:8;35183:14;:24::i;:::-;-1:-1:-1;;;;;35243:23:0;;35220:20;35243:23;;;:13;:23;;;;;;35285:34;;;;35277:90;;;;-1:-1:-1;;;35277:90:0;;12024:2:1;35277:90:0;;;12006:21:1;12063:2;12043:18;;;12036:30;12102:34;12082:18;;;12075:62;-1:-1:-1;;;12153:18:1;;;12146:41;12204:19;;35277:90:0;11822:407:1;35277:90:0;35406:25;:12;35423:7;35406:16;:25::i;:::-;-1:-1:-1;;;;;35380:23:0;;;;;;;:13;:23;;;;;;;;:51;;;;35469:15;:25;;;;;:40;;;;;;;;;;;35528:25;;;;35520:83;;;;-1:-1:-1;;;35520:83:0;;12436:2:1;35520:83:0;;;12418:21:1;12475:2;12455:18;;;12448:30;12514:34;12494:18;;;12487:62;-1:-1:-1;;;12565:18:1;;;12558:43;12618:19;;35520:83:0;12234:409:1;35520:83:0;35657:27;:14;35676:7;35657:18;:27::i;:::-;-1:-1:-1;;;;;35614:25:0;;;;;;;:15;:25;;;;;;;;:40;;;;;;;;;:70;35697:24;35630:8;35713:7;35697:5;:24::i;:::-;35732:54;-1:-1:-1;;;;;35732:34:0;;35767:9;35778:7;35732:34;:54::i;:::-;35016:778;;34913:881;;;;:::o;32077:419::-;32147:7;32167:24;32182:8;32167:14;:24::i;:::-;-1:-1:-1;;;;;32226:25:0;;32204:19;32226:25;;;:15;:25;;;;;;;32262:29;;;32308:15;;32304:154;;32340:58;32375:9;32386:11;32347:13;:11;:13::i;:::-;-1:-1:-1;;;;;32340:34:0;;:58;:34;:58::i;:::-;32418:28;;;-1:-1:-1;;;;;9794:32:1;;9776:51;;9858:2;9843:18;;9836:34;;;32418:28:0;;9749:18:1;32418:28:0;;;;;;;32477:11;32077:419;-1:-1:-1;;;32077:419:0:o;33214:567::-;-1:-1:-1;;;;;33314:21:0;;33306:79;;;;-1:-1:-1;;;33306:79:0;;12850:2:1;33306:79:0;;;12832:21:1;12889:2;12869:18;;;12862:30;12928:34;12908:18;;;12901:62;-1:-1:-1;;;12979:18:1;;;12972:43;13032:19;;33306:79:0;12648:409:1;33306:79:0;-1:-1:-1;;;;;33404:24:0;;33396:80;;;;-1:-1:-1;;;33396:80:0;;13264:2:1;33396:80:0;;;13246:21:1;13303:2;13283:18;;;13276:30;13342:34;13322:18;;;13315:62;-1:-1:-1;;;13393:18:1;;;13386:41;13444:19;;33396:80:0;13062:407:1;33396:80:0;33493:21;;;;33489:50;;;33518:18;:16;:18::i;:::-;33571:80;33593:7;33571:80;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33571:17:0;;;;;;:8;:17;;;;;;;:80;:21;:80::i;:::-;-1:-1:-1;;;;;33551:17:0;;;;;;;:8;:17;;;;;;:100;;;;33685:20;;;;;;;:33;;33710:7;33685:24;:33::i;:::-;-1:-1:-1;;;;;33662:20:0;;;;;;;:8;:20;;;;;;;:56;;;;33736:37;;;;;;;;;;33765:7;2919:25:1;;2907:2;2892:18;;2773:177;2595:192:0;2681:7;2717:12;2709:6;;;;2701:29;;;;-1:-1:-1;;;2701:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2741:9:0;2753:5;2757:1;2753;:5;:::i;:::-;2741:17;2595:192;-1:-1:-1;;;;;2595:192:0:o;35802:1677::-;35863:19;35904:11;;;;;;;;;-1:-1:-1;;;;;35904:11:0;-1:-1:-1;;;;;35885:42:0;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35959:11;;36017:24;;35863:66;;-1:-1:-1;35959:11:0;36056:10;;;;;:29;;;36084:1;36070:11;:15;36056:29;36052:226;;;36130:69;36160:38;36191:6;36160:26;:11;25684:4;36160:15;:26::i;:38::-;36130:25;;:29;:69::i;:::-;36214:24;:52;;;36102:97;-1:-1:-1;36052:226:0;36435:25;36464:1;36435:30;36431:69;;36482:7;;;35802:1677;:::o;36431:69::-;-1:-1:-1;;;;;36516:22:0;;;36512:960;;-1:-1:-1;;;;;36578:23:0;;36555:20;36578:23;;;:13;:23;;;;;;;;;36687:31;:41;;;;;;36578:23;;36555:20;36640:105;;25684:4;;36640:90;;36657:72;;:25;;:29;:72::i;:::-;36640:12;;:16;:90::i;:105::-;-1:-1:-1;;;;;36787:25:0;;36760:24;36787:25;;;:15;:25;;;;;;36616:129;;-1:-1:-1;36760:24:0;36787:44;;36616:129;36787:29;:44::i;:::-;-1:-1:-1;;;;;36848:25:0;;;;;;:15;:25;;;;;;;;:44;;;36907:31;:41;;;;;:69;;;36760:71;-1:-1:-1;36997:20:0;;;;;:51;;-1:-1:-1;;;;;;37021:23:0;;37047:1;37021:23;;;:13;:23;;;;;;:27;;36997:51;36993:468;;;-1:-1:-1;;;;;37100:27:0;;37069:28;37100:27;;;:17;:27;;;;;;:46;;37132:13;37100:31;:46::i;:::-;37069:77;-1:-1:-1;37200:174:0;37316:57;37069:77;37316:31;:12;37333:13;37316:16;:31::i;:57::-;-1:-1:-1;;;;;37235:27:0;;;;;;:17;:27;;;;;;;;;37200:20;:30;;;;;;;:89;;37268:20;;37200:63;;:34;:63::i;:89::-;:115;;:174::i;:::-;-1:-1:-1;;;;;37167:30:0;;;;;;:20;:30;;;;;;;;:207;;;;37395:17;:27;;;:50;36993:468;36540:932;;;36512:960;35852:1627;;;35802:1677;:::o;3046:471::-;3104:7;3349:1;3354;3349:6;3345:47;;-1:-1:-1;3379:1:0;3372:8;;3345:47;3404:9;3416:5;3420:1;3416;:5;:::i;:::-;3404:17;-1:-1:-1;3449:1:0;3440:5;3444:1;3404:17;3440:5;:::i;:::-;:10;3432:56;;;;-1:-1:-1;;;3432:56:0;;14204:2:1;3432:56:0;;;14186:21:1;14243:2;14223:18;;;14216:30;14282:34;14262:18;;;14255:62;-1:-1:-1;;;14333:18:1;;;14326:31;14374:19;;3432:56:0;14002:397:1;3993:132:0;4051:7;4078:39;4082:1;4085;4078:39;;;;;;;;;;;;;;;;;:3;:39::i;1692:181::-;1750:7;;1782:5;1786:1;1782;:5;:::i;:::-;1770:17;;1811:1;1806;:6;;1798:46;;;;-1:-1:-1;;;1798:46:0;;14736:2:1;1798:46:0;;;14718:21:1;14775:2;14755:18;;;14748:30;14814:29;14794:18;;;14787:57;14861:18;;1798:46:0;14534:351:1;2156:136:0;2214:7;2241:43;2245:1;2248;2241:43;;;;;;;;;;;;;;;;;:3;:43::i;34288:617::-;34424:1;34414:7;:11;34406:54;;;;-1:-1:-1;;;34406:54:0;;11260:2:1;34406:54:0;;;11242:21:1;11299:2;11279:18;;;11272:30;11338:32;11318:18;;;11311:60;11388:18;;34406:54:0;11058:354:1;34406:54:0;-1:-1:-1;;;;;34479:29:0;;;;;;:14;:29;;;;;;;;34471:78;;;;-1:-1:-1;;;34471:78:0;;;;;;;:::i;:::-;34562:79;-1:-1:-1;;;;;34562:38:0;;34601:15;34626:4;34633:7;34562:38;:79::i;:::-;34654:24;34669:8;34654:14;:24::i;:::-;-1:-1:-1;;;;;34717:23:0;;;;;;:13;:23;;;;;;:36;;34745:7;34717:27;:36::i;:::-;-1:-1:-1;;;;;34691:23:0;;;;;;;:13;:23;;;;;;;;:62;;;;34807:15;:25;;;;;:40;;;;;;;;;;;:53;;34852:7;34807:44;:53::i;:::-;-1:-1:-1;;;;;34764:25:0;;;;;;;:15;:25;;;;;;;;:40;;;;;;;;;:96;34873:24;34780:8;34889:7;34873:5;:24::i;19946:761::-;20370:23;20396:69;20424:4;20396:69;;;;;;;;;;;;;;;;;20404:5;-1:-1:-1;;;;;20396:27:0;;;:69;;;;;:::i;:::-;20480:17;;20370:95;;-1:-1:-1;20480:21:0;20476:224;;20622:10;20611:30;;;;;;;;;;;;:::i;:::-;20603:85;;;;-1:-1:-1;;;20603:85:0;;15342:2:1;20603:85:0;;;15324:21:1;15381:2;15361:18;;;15354:30;15420:34;15400:18;;;15393:62;-1:-1:-1;;;15471:18:1;;;15464:40;15521:19;;20603:85:0;15140:406:1;32835:371:0;-1:-1:-1;;;;;32913:22:0;;32905:76;;;;-1:-1:-1;;;32905:76:0;;15753:2:1;32905:76:0;;;15735:21:1;15792:2;15772:18;;;15765:30;15831:34;15811:18;;;15804:62;-1:-1:-1;;;15882:18:1;;;15875:39;15931:19;;32905:76:0;15551:405:1;32905:76:0;33015:77;33038:7;33015:77;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33015:18:0;;;;;;:8;:18;;;;;;;:77;:22;:77::i;:::-;-1:-1:-1;;;;;32994:18:0;;;;;;:8;:18;;;;;:98;33117:11;;:24;;33133:7;33117:15;:24::i;:::-;33103:11;:38;33159:39;;2919:25:1;;;33186:1:0;;-1:-1:-1;;;;;33159:39:0;;;;;2907:2:1;2892:18;33159:39:0;;;;;;;;32835:371;;:::o;4621:278::-;4707:7;4742:12;4735:5;4727:28;;;;-1:-1:-1;;;4727:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4766:9:0;4778:5;4782:1;4778;:5;:::i;17826:205::-;17954:68;;-1:-1:-1;;;;;16219:15:1;;;17954:68:0;;;16201:34:1;16271:15;;16251:18;;;16244:43;16303:18;;;16296:34;;;17927:96:0;;17947:5;;-1:-1:-1;;;17977:27:0;16136:18:1;;17954:68:0;15961:375:1;32504:323:0;-1:-1:-1;;;;;32582:22:0;;32574:74;;;;-1:-1:-1;;;32574:74:0;;16543:2:1;32574:74:0;;;16525:21:1;16582:2;16562:18;;;16555:30;16621:34;16601:18;;;16594:62;-1:-1:-1;;;16672:18:1;;;16665:37;16719:19;;32574:74:0;16341:403:1;32574:74:0;32675:11;;:24;;32691:7;32675:15;:24::i;:::-;32661:11;:38;-1:-1:-1;;;;;32731:18:0;;;;;;:8;:18;;;;;;:31;;32754:7;32731:22;:31::i;:::-;-1:-1:-1;;;;;32710:18:0;;;;;;:8;:18;;;;;;:52;;;;32780:39;;32710:18;;;32780:39;;;;32811:7;2919:25:1;;2907:2;2892:18;;2773:177;12653:195:0;12756:12;12788:52;12810:6;12818:4;12824:1;12827:12;12788:21;:52::i;:::-;12781:59;12653:195;-1:-1:-1;;;;12653:195:0:o;13705:530::-;13832:12;13890:5;13865:21;:30;;13857:81;;;;-1:-1:-1;;;13857:81:0;;16951:2:1;13857:81:0;;;16933:21:1;16990:2;16970:18;;;16963:30;17029:34;17009:18;;;17002:62;-1:-1:-1;;;17080:18:1;;;17073:36;17126:19;;13857:81:0;16749:402:1;13857:81:0;10102:20;;13949:60;;;;-1:-1:-1;;;13949:60:0;;17358:2:1;13949:60:0;;;17340:21:1;17397:2;17377:18;;;17370:30;17436:31;17416:18;;;17409:59;17485:18;;13949:60:0;17156:353:1;13949:60:0;14083:12;14097:23;14124:6;-1:-1:-1;;;;;14124:11:0;14144:5;14152:4;14124:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14082:75;;;;14175:52;14193:7;14202:10;14214:12;14175:17;:52::i;:::-;14168:59;13705:530;-1:-1:-1;;;;;;;13705:530:0:o;16245:742::-;16360:12;16389:7;16385:595;;;-1:-1:-1;16420:10:0;16413:17;;16385:595;16534:17;;:21;16530:439;;16797:10;16791:17;16858:15;16845:10;16841:2;16837:19;16830:44;16530:439;16940:12;16933:20;;-1:-1:-1;;;16933:20:0;;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:134::-;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:456::-;366:6;374;382;435:2;423:9;414:7;410:23;406:32;403:52;;;451:1;448;441:12;403:52;490:9;477:23;509:31;534:5;509:31;:::i;:::-;559:5;-1:-1:-1;616:2:1;601:18;;588:32;629:33;588:32;629:33;:::i;:::-;289:456;;681:7;;-1:-1:-1;;;735:2:1;720:18;;;;707:32;;289:456::o;750:250::-;835:1;845:113;859:6;856:1;853:13;845:113;;;935:11;;;929:18;916:11;;;909:39;881:2;874:10;845:113;;;-1:-1:-1;;992:1:1;974:16;;967:27;750:250::o;1005:396::-;1154:2;1143:9;1136:21;1117:4;1186:6;1180:13;1229:6;1224:2;1213:9;1209:18;1202:34;1245:79;1317:6;1312:2;1301:9;1297:18;1292:2;1284:6;1280:15;1245:79;:::i;:::-;1385:2;1364:15;-1:-1:-1;;1360:29:1;1345:45;;;;1392:2;1341:54;;1005:396;-1:-1:-1;;1005:396:1:o;1406:315::-;1474:6;1482;1535:2;1523:9;1514:7;1510:23;1506:32;1503:52;;;1551:1;1548;1541:12;1503:52;1590:9;1577:23;1609:31;1634:5;1609:31;:::i;:::-;1659:5;1711:2;1696:18;;;;1683:32;;-1:-1:-1;;;1406:315:1:o;1918:598::-;2004:6;2012;2020;2028;2081:3;2069:9;2060:7;2056:23;2052:33;2049:53;;;2098:1;2095;2088:12;2049:53;2137:9;2124:23;2156:31;2181:5;2156:31;:::i;:::-;2206:5;-1:-1:-1;2263:2:1;2248:18;;2235:32;2276:33;2235:32;2276:33;:::i;:::-;2328:7;-1:-1:-1;2382:2:1;2367:18;;2354:32;;-1:-1:-1;2438:2:1;2423:18;;2410:32;2451:33;2410:32;2451:33;:::i;:::-;1918:598;;;;-1:-1:-1;1918:598:1;;-1:-1:-1;;1918:598:1:o;2521:247::-;2580:6;2633:2;2621:9;2612:7;2608:23;2604:32;2601:52;;;2649:1;2646;2639:12;2601:52;2688:9;2675:23;2707:31;2732:5;2707:31;:::i;3163:388::-;3231:6;3239;3292:2;3280:9;3271:7;3267:23;3263:32;3260:52;;;3308:1;3305;3298:12;3260:52;3347:9;3334:23;3366:31;3391:5;3366:31;:::i;:::-;3416:5;-1:-1:-1;3473:2:1;3458:18;;3445:32;3486:33;3445:32;3486:33;:::i;:::-;3538:7;3528:17;;;3163:388;;;;;:::o;3556:118::-;3642:5;3635:13;3628:21;3621:5;3618:32;3608:60;;3664:1;3661;3654:12;3679:241;3735:6;3788:2;3776:9;3767:7;3763:23;3759:32;3756:52;;;3804:1;3801;3794:12;3756:52;3843:9;3830:23;3862:28;3884:5;3862:28;:::i;4114:127::-;4175:10;4170:3;4166:20;4163:1;4156:31;4206:4;4203:1;4196:15;4230:4;4227:1;4220:15;4246:1197;4339:6;4347;4400:2;4388:9;4379:7;4375:23;4371:32;4368:52;;;4416:1;4413;4406:12;4368:52;4456:9;4443:23;4485:18;4526:2;4518:6;4515:14;4512:34;;;4542:1;4539;4532:12;4512:34;4580:6;4569:9;4565:22;4555:32;;4625:7;4618:4;4614:2;4610:13;4606:27;4596:55;;4647:1;4644;4637:12;4596:55;4683:2;4670:16;4705:4;4728:2;4724;4721:10;4718:36;;;4734:18;;:::i;:::-;4780:2;4777:1;4773:10;4812:2;4806:9;4875:2;4871:7;4866:2;4862;4858:11;4854:25;4846:6;4842:38;4930:6;4918:10;4915:22;4910:2;4898:10;4895:18;4892:46;4889:72;;;4941:18;;:::i;:::-;4977:2;4970:22;5027:18;;;5061:15;;;;-1:-1:-1;5103:11:1;;;5099:20;;;5131:19;;;5128:39;;;5163:1;5160;5153:12;5128:39;5187:11;;;;5207:148;5223:6;5218:3;5215:15;5207:148;;;5289:23;5308:3;5289:23;:::i;:::-;5277:36;;5240:12;;;;5333;;;;5207:148;;;5374:6;-1:-1:-1;5399:38:1;;-1:-1:-1;5418:18:1;;;5399:38;:::i;:::-;5389:48;;;;;;4246:1197;;;;;:::o;5448:598::-;5534:6;5542;5550;5558;5611:3;5599:9;5590:7;5586:23;5582:33;5579:53;;;5628:1;5625;5618:12;5579:53;5667:9;5654:23;5686:31;5711:5;5686:31;:::i;:::-;5736:5;-1:-1:-1;5793:2:1;5778:18;;5765:32;5806:33;5765:32;5806:33;:::i;:::-;5858:7;-1:-1:-1;5917:2:1;5902:18;;5889:32;5930:33;5889:32;5930:33;:::i;:::-;5448:598;;;;-1:-1:-1;5982:7:1;;6036:2;6021:18;6008:32;;-1:-1:-1;;5448:598:1:o;6051:382::-;6116:6;6124;6177:2;6165:9;6156:7;6152:23;6148:32;6145:52;;;6193:1;6190;6183:12;6145:52;6232:9;6219:23;6251:31;6276:5;6251:31;:::i;:::-;6301:5;-1:-1:-1;6358:2:1;6343:18;;6330:32;6371:30;6330:32;6371:30;:::i;6438:345::-;6640:2;6622:21;;;6679:2;6659:18;;;6652:30;-1:-1:-1;;;6713:2:1;6698:18;;6691:51;6774:2;6759:18;;6438:345::o;7203:380::-;7282:1;7278:12;;;;7325;;;7346:61;;7400:4;7392:6;7388:17;7378:27;;7346:61;7453:2;7445:6;7442:14;7422:18;7419:38;7416:161;;7499:10;7494:3;7490:20;7487:1;7480:31;7534:4;7531:1;7524:15;7562:4;7559:1;7552:15;7416:161;;7203:380;;;:::o;7588:355::-;7790:2;7772:21;;;7829:2;7809:18;;;7802:30;7868:33;7863:2;7848:18;;7841:61;7934:2;7919:18;;7588:355::o;7948:397::-;8150:2;8132:21;;;8189:2;8169:18;;;8162:30;8228:34;8223:2;8208:18;;8201:62;-1:-1:-1;;;8294:2:1;8279:18;;8272:31;8335:3;8320:19;;7948:397::o;8350:184::-;8420:6;8473:2;8461:9;8452:7;8448:23;8444:32;8441:52;;;8489:1;8486;8479:12;8441:52;-1:-1:-1;8512:16:1;;8350:184;-1:-1:-1;8350:184:1:o;8942:127::-;9003:10;8998:3;8994:20;8991:1;8984:31;9034:4;9031:1;9024:15;9058:4;9055:1;9048:15;9074:127;9135:10;9130:3;9126:20;9123:1;9116:31;9166:4;9163:1;9156:15;9190:4;9187:1;9180:15;9206:135;9245:3;9266:17;;;9263:43;;9286:18;;:::i;:::-;-1:-1:-1;9333:1:1;9322:13;;9206:135::o;9346:251::-;9416:6;9469:2;9457:9;9448:7;9444:23;9440:32;9437:52;;;9485:1;9482;9475:12;9437:52;9517:9;9511:16;9536:31;9561:5;9536:31;:::i;11417:400::-;11619:2;11601:21;;;11658:2;11638:18;;;11631:30;11697:34;11692:2;11677:18;;11670:62;-1:-1:-1;;;11763:2:1;11748:18;;11741:34;11807:3;11792:19;;11417:400::o;13474:128::-;13541:9;;;13562:11;;;13559:37;;;13576:18;;:::i;13607:168::-;13680:9;;;13711;;13728:15;;;13722:22;;13708:37;13698:71;;13749:18;;:::i;13780:217::-;13820:1;13846;13836:132;;13890:10;13885:3;13881:20;13878:1;13871:31;13925:4;13922:1;13915:15;13953:4;13950:1;13943:15;13836:132;-1:-1:-1;13982:9:1;;13780:217::o;14404:125::-;14469:9;;;14490:10;;;14487:36;;;14503:18;;:::i;14890:245::-;14957:6;15010:2;14998:9;14989:7;14985:23;14981:32;14978:52;;;15026:1;15023;15016:12;14978:52;15058:9;15052:16;15077:28;15099:5;15077:28;:::i;17514:287::-;17643:3;17681:6;17675:13;17697:66;17756:6;17751:3;17744:4;17736:6;17732:17;17697:66;:::i;:::-;17779:16;;;;;17514:287;-1:-1:-1;;17514:287:1:o
Swarm Source
ipfs://62dfa4d479e7eeb2f18d10fc4582a0f73844bcfd37fcf3895a06ba45d9d63f8f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.002754 | 44,791,662.058 | $123,351.31 |
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.