More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,012 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 20269298 | 204 days ago | IN | 0 ETH | 0.00039654 | ||||
Withdraw | 19749125 | 276 days ago | IN | 0 ETH | 0.00040699 | ||||
Unstake | 19627842 | 293 days ago | IN | 0 ETH | 0.00296588 | ||||
Claim | 19100706 | 367 days ago | IN | 0 ETH | 0.00093546 | ||||
Claim | 19076730 | 371 days ago | IN | 0 ETH | 0.00126194 | ||||
Claim | 19029842 | 377 days ago | IN | 0 ETH | 0.00326444 | ||||
Claim | 19029827 | 377 days ago | IN | 0 ETH | 0.00321168 | ||||
Claim | 18008230 | 520 days ago | IN | 0 ETH | 0.00115786 | ||||
Claim | 17588316 | 579 days ago | IN | 0 ETH | 0.00192381 | ||||
Withdraw | 17558687 | 583 days ago | IN | 0 ETH | 0.00092514 | ||||
Claim | 17402406 | 605 days ago | IN | 0 ETH | 0.00206672 | ||||
Claim | 16811714 | 689 days ago | IN | 0 ETH | 0.00160151 | ||||
Unstake | 16755503 | 697 days ago | IN | 0 ETH | 0.00712076 | ||||
Withdraw | 16548233 | 726 days ago | IN | 0 ETH | 0.00165047 | ||||
Deposit | 16333864 | 756 days ago | IN | 0 ETH | 0.00207142 | ||||
Claim | 16272005 | 764 days ago | IN | 0 ETH | 0.00116202 | ||||
Withdraw | 16237110 | 769 days ago | IN | 0 ETH | 0.00103168 | ||||
Withdraw | 16182758 | 777 days ago | IN | 0 ETH | 0.00106148 | ||||
Unstake | 16132256 | 784 days ago | IN | 0 ETH | 0.00266962 | ||||
Unstake | 16080976 | 791 days ago | IN | 0 ETH | 0.00192081 | ||||
Withdraw | 15942530 | 810 days ago | IN | 0 ETH | 0.00172618 | ||||
Withdraw | 15933116 | 812 days ago | IN | 0 ETH | 0.00272336 | ||||
Withdraw | 15932982 | 812 days ago | IN | 0 ETH | 0.00210747 | ||||
Deposit | 15932596 | 812 days ago | IN | 0 ETH | 0.00374572 | ||||
Withdraw | 15932443 | 812 days ago | IN | 0 ETH | 0.00166976 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CapitalStake
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-30 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // X-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol // X-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol // X-License-Identifier: MIT pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/GSN/Context.sol // X-License-Identifier: MIT pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // X-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File: @openzeppelin/contracts/access/Ownable.sol // X-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/utils/Pausable.sol // X-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol // X-License-Identifier: MIT pragma solidity ^0.6.0; /** * @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 () internal { _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: @openzeppelin/contracts/token/ERC20/SafeERC20.sol // X-License-Identifier: MIT pragma solidity ^0.6.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/interfaces/INsure.sol pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; interface INsure { function burn(uint256 amount) external ; function transfer(address recipient, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function mint(address _to, uint256 _amount) external returns (bool); function balanceOf(address account) external view returns (uint256); } // File: contracts/CapitalStake.sol /** * @dev Capital mining contract. Need stake here to earn rewards after converting to nTokens. */ pragma solidity ^0.6.0; contract CapitalStake is Ownable, Pausable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; address public signer; string public constant name = "CapitalStake"; string public constant version = "1"; // Info of each user. struct UserInfo { uint256 amount; // How many tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. uint256 reward; uint256 pendingWithdrawal; // payments available for withdrawal by an investor uint256 pendingAt; } // Info of each pool. struct PoolInfo { uint256 amount; //Total Deposit of token IERC20 lpToken; // Address of token contract. uint256 allocPoint; uint256 lastRewardBlock; uint256 accNsurePerShare; uint256 pending; } INsure public nsure; uint256 public nsurePerBlock = 18 * 1e17; uint256 public pendingDuration = 14 days; mapping(uint256 => uint256) public capacityMax; bool public canDeposit = true; address public operator; // the max capacity for one user's deposit. mapping(uint256 => uint256) public userCapacityMax; // Info of each pool. PoolInfo[] public poolInfo; /// @notice A record of states for signing / validating signatures mapping(address => uint256) public nonces; // Info of each user that stakes LP tokens. mapping (uint256 => mapping (address => UserInfo)) public userInfo; // Total allocation poitns. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; uint256 public startBlock; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ); /// @notice The EIP-712 typehash for the permit struct used by the contract bytes32 public constant Capital_Unstake_TYPEHASH = keccak256( "CapitalUnstake(uint256 pid,address account,uint256 amount,uint256 nonce,uint256 deadline)" ); bytes32 public constant Capital_Deposit_TYPEHASH = keccak256( "Deposit(uint256 pid,address account,uint256 amount,uint256 nonce,uint256 deadline)" ); constructor(address _signer, address _nsure, uint256 _startBlock) public { nsure = INsure(_nsure); startBlock = _startBlock; userCapacityMax[0] = 10000e18; signer = _signer; } function setOperator(address _operator) external onlyOwner { require(_operator != address(0),"_operator is zero"); operator = _operator; emit eSetOperator(_operator); } function setSigner(address _signer) external onlyOwner { require(_signer != address(0), "_signer is zero"); signer = _signer; emit eSetSigner(_signer); } modifier onlyOperator() { require(msg.sender == operator,"not operator"); _; } function switchDeposit() external onlyOwner { canDeposit = !canDeposit; emit SwitchDeposit(canDeposit); } function setUserCapacityMax(uint256 _pid,uint256 _max) external onlyOwner { userCapacityMax[_pid] = _max; emit SetUserCapacityMax(_pid,_max); } function setCapacityMax(uint256 _pid,uint256 _max) external onlyOwner { capacityMax[_pid] = _max; emit SetCapacityMax(_pid,_max); } function updateBlockReward(uint256 _newReward) external onlyOwner { nsurePerBlock = _newReward; emit UpdateBlockReward(_newReward); } function updateWithdrawPending(uint256 _seconds) external onlyOwner { pendingDuration = _seconds; emit UpdateWithdrawPending(_seconds); } function poolLength() public view returns (uint256) { return poolInfo.length; } // Add a new lp to the pool. Can only be called by the owner. function add(uint256 _allocPoint, IERC20 _lpToken, bool _withUpdate,uint256 maxCapacity) onlyOwner external { require(address(_lpToken) != address(0),"_lpToken is zero"); for(uint256 i=0; i<poolLength(); i++) { require(address(_lpToken) != address(poolInfo[i].lpToken), "Duplicate Token!"); } if (_withUpdate) { massUpdatePools(); } capacityMax[poolInfo.length] = maxCapacity; uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push(PoolInfo({ amount:0, lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: lastRewardBlock, accNsurePerShare: 0, pending: 0 })); emit Add(_allocPoint,_lpToken,_withUpdate); } function set(uint256 _pid, uint256 _allocPoint, bool _withUpdate) onlyOwner external { require(_pid < poolInfo.length , "invalid _pid"); if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; emit Set(_pid,_allocPoint,_withUpdate); } function getMultiplier(uint256 _from, uint256 _to) public pure returns (uint256) { return _to.sub(_from); } function pendingNsure(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accNsurePerShare = pool.accNsurePerShare; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 nsureReward = multiplier.mul(nsurePerBlock).mul(pool.allocPoint).div(totalAllocPoint); accNsurePerShare = accNsurePerShare.add(nsureReward.mul(1e12).div(lpSupply)); } return user.amount.mul(accNsurePerShare).div(1e12).sub(user.rewardDebt); } function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } function updatePool(uint256 _pid) public { require(_pid < poolInfo.length, "invalid _pid"); PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock) { return; } uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (lpSupply == 0) { pool.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 nsureReward = multiplier.mul(nsurePerBlock).mul(pool.allocPoint).div(totalAllocPoint); bool mintRet = nsure.mint(address(this), nsureReward); if(mintRet) { pool.accNsurePerShare = pool.accNsurePerShare.add(nsureReward.mul(1e12).div(lpSupply)); pool.lastRewardBlock = block.number; } } function deposit(uint256 _pid, uint256 _amount) external whenNotPaused { require(canDeposit, "can not"); require(_pid < poolInfo.length, "invalid _pid"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount.add(_amount) <= userCapacityMax[_pid],"exceed user limit"); require(pool.amount.add(_amount) <= capacityMax[_pid],"exceed the total limit"); updatePool(_pid); pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); uint256 pending = user.amount.mul(pool.accNsurePerShare).div(1e12).sub(user.rewardDebt); user.amount = user.amount.add(_amount); user.rewardDebt = user.amount.mul(pool.accNsurePerShare).div(1e12); pool.amount = pool.amount.add(_amount); if(pending > 0){ safeNsureTransfer(msg.sender,pending); } emit Deposit(msg.sender, _pid, _amount); } // unstake, need pending sometime function unstake( uint256 _pid, uint256 _amount, uint8 v, bytes32 r, bytes32 s, uint256 deadline) external nonReentrant whenNotPaused { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(version)), getChainId(), address(this) ) ); bytes32 structHash = keccak256( abi.encode( Capital_Unstake_TYPEHASH, _pid, address(msg.sender), _amount, nonces[msg.sender]++, deadline ) ); bytes32 digest = keccak256( abi.encodePacked("\x19\x01", domainSeparator, structHash) ); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "invalid signature"); require(signatory == signer, "unauthorized"); require(_pid < poolInfo.length , "invalid _pid"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount >= _amount, "unstake: insufficient assets"); updatePool(_pid); uint256 pending = user.amount.mul(pool.accNsurePerShare).div(1e12).sub(user.rewardDebt); user.amount = user.amount.sub(_amount); user.rewardDebt = user.amount.mul(pool.accNsurePerShare).div(1e12); user.pendingAt = block.timestamp; user.pendingWithdrawal = user.pendingWithdrawal.add(_amount); pool.pending = pool.pending.add(_amount); safeNsureTransfer(msg.sender, pending); emit Unstake(msg.sender,_pid,_amount,nonces[msg.sender]-1); } // unstake, need pending sometime // won't use this function, for we don't use it now. function deposit( uint256 _pid, uint256 _amount, uint8 v, bytes32 r, bytes32 s, uint256 deadline) external nonReentrant whenNotPaused { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(version)), getChainId(), address(this) ) ); bytes32 structHash = keccak256( abi.encode( Capital_Deposit_TYPEHASH, _pid, address(msg.sender), _amount, nonces[msg.sender]++, deadline ) ); bytes32 digest = keccak256( abi.encodePacked("\x19\x01", domainSeparator, structHash) ); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "invalid signature"); require(signatory == signer, "unauthorized"); require(_pid < poolInfo.length , "invalid _pid"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount.add(_amount) <= userCapacityMax[_pid],"exceed user's limit"); require(pool.amount.add(_amount) <= capacityMax[_pid],"exceed the total limit"); updatePool(_pid); pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); uint256 pending = user.amount.mul(pool.accNsurePerShare).div(1e12).sub(user.rewardDebt); user.amount = user.amount.add(_amount); user.rewardDebt = user.amount.mul(pool.accNsurePerShare).div(1e12); pool.amount = pool.amount.add(_amount); if(pending > 0){ safeNsureTransfer(msg.sender,pending); } emit DepositSign(msg.sender, _pid, _amount,nonces[msg.sender] - 1); } function isPending(uint256 _pid) external view returns (bool,uint256) { UserInfo storage user = userInfo[_pid][msg.sender]; if(block.timestamp >= user.pendingAt.add(pendingDuration)) { return (false,0); } return (true,user.pendingAt.add(pendingDuration).sub(block.timestamp)); } // when it's pending while a claim occurs, the value of the withdrawal will decrease as usual // so we keep the claim function by this tool. function withdraw(uint256 _pid) external nonReentrant whenNotPaused { require(_pid < poolInfo.length , "invalid _pid"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(block.timestamp >= user.pendingAt.add(pendingDuration), "still pending"); uint256 amount = user.pendingWithdrawal; pool.amount = pool.amount.sub(amount); pool.pending = pool.pending.sub(amount); user.pendingWithdrawal = 0; pool.lpToken.safeTransfer(address(msg.sender), amount); emit Withdraw(msg.sender, _pid, amount); } //claim reward function claim(uint256 _pid) external nonReentrant whenNotPaused { require(_pid < poolInfo.length , "invalid _pid"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); uint256 pending = user.amount.mul(pool.accNsurePerShare).div(1e12).sub(user.rewardDebt); safeNsureTransfer(msg.sender, pending); user.rewardDebt = user.amount.mul(pool.accNsurePerShare).div(1e12); emit Claim(msg.sender, _pid, pending); } // we don't support this function due to the claim process.. // or guys will step over the claim events via this function. // function emergencyWithdraw(uint256 _pid) public { // PoolInfo storage pool = poolInfo[_pid]; // UserInfo storage user = userInfo[_pid][msg.sender]; // pool.lpToken.safeTransfer(address(msg.sender), user.amount); // emit EmergencyWithdraw(msg.sender, _pid, user.amount); // user.amount = 0; // user.rewardDebt = 0; // } function safeNsureTransfer(address _to, uint256 _amount) internal { require(_to != address(0),"_to is zero"); uint256 nsureBal = nsure.balanceOf(address(this)); if (_amount > nsureBal) { // nsure.transfer(_to, nsureBal); nsure.transfer(_to,nsureBal); } else { // nsure.transfer(_to, _amount); nsure.transfer(_to,_amount); } } function getChainId() internal pure returns (uint256) { uint256 chainId; assembly { chainId := chainid() } return chainId; } //////////// event definitions //////////// event Claim(address indexed user,uint256 pid,uint256 amount); event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event DepositSign(address indexed user, uint256 indexed pid, uint256 amount, uint256 nonce); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event Unstake(address indexed user,uint256 pid, uint256 amount,uint256 nonce); event UpdateBlockReward(uint256 reward); event UpdateWithdrawPending(uint256 duration); event Add(uint256 point, IERC20 token, bool update); event Set(uint256 pid, uint256 point, bool update); event SwitchDeposit(bool swi); event SetUserCapacityMax(uint256 pid,uint256 max); event SetCapacityMax(uint256 pid, uint256 max); event eSetOperator(address indexed operator); event eSetSigner(address indexed signer); // event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"address","name":"_nsure","type":"address"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"point","type":"uint256"},{"indexed":false,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"bool","name":"update","type":"bool"}],"name":"Add","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DepositSign","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"point","type":"uint256"},{"indexed":false,"internalType":"bool","name":"update","type":"bool"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"max","type":"uint256"}],"name":"SetCapacityMax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"max","type":"uint256"}],"name":"SetUserCapacityMax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"swi","type":"bool"}],"name":"SwitchDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"UpdateBlockReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"UpdateWithdrawPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"}],"name":"eSetOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"eSetSigner","type":"event"},{"inputs":[],"name":"Capital_Deposit_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Capital_Unstake_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint256","name":"maxCapacity","type":"uint256"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"canDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"capacityMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"isPending","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nsure","outputs":[{"internalType":"contract INsure","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nsurePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingNsure","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accNsurePerShare","type":"uint256"},{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setCapacityMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setUserCapacityMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switchDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReward","type":"uint256"}],"name":"updateBlockReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"updateWithdrawPending","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"userCapacityMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"pendingWithdrawal","type":"uint256"},{"internalType":"uint256","name":"pendingAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526718fae27693b40000600455621275006005556007805460ff191660011790556000600c553480156200003657600080fd5b5060405162002fa738038062002fa7833981016040819052620000599162000151565b6000620000656200012f565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b1916815560018055600380546001600160a01b039485166001600160a01b031991821617909155600d929092558052600860205269021e19e0c9bab24000007f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7556002805493909216921691909117905562000193565b3390565b80516001600160a01b03811681146200014b57600080fd5b92915050565b60008060006060848603121562000166578283fd5b62000172858562000133565b925062000183856020860162000133565b9150604084015190509250925092565b612e0480620001a36000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c8063715018a61161014657806398016b51116100c3578063cd8584b011610087578063cd8584b0146104b9578063e1acedfb146104cc578063e2bbb158146104df578063e78a5875146104f2578063f2fde38b146104fa578063f580ffcb1461050d5761025e565b806398016b5114610462578063a047e3591461046a578063b3ab15fb14610472578063bead4b2214610485578063ca8836d2146104985761025e565b80637ecebe001161010a5780637ecebe00146103fd5780638da5cb5b146104105780638dbb1e3a1461041857806393f1a40b1461042b57806396805e541461044f5761025e565b8063715018a6146103b457806374318660146103bc57806375963b04146103cf5780637881065d146103e257806379ef934f146103ea5761025e565b806340a11610116101df57806356b6861c116101a357806356b6861c14610361578063570ca735146103695780635c975abb14610371578063630b5ba11461038657806364482f791461038e5780636c19e783146103a15761025e565b806340a116101461032357806348cd4cb114610336578063492976111461033e57806351eb05a61461034657806354fd4d50146103595761025e565b806320606b701161022657806320606b70146102cb578063238ac933146102d3578063271aaddd146102e85780632e1a7d4d146102fd578063379607f5146103105761025e565b806306fdde0314610263578063081e3eda146102815780631526fe271461029657806317caf6f1146102bb5780631ede6611146102c3575b600080fd5b61026b610520565b604051610278919061287b565b60405180910390f35b610289610548565b60405161027891906127f7565b6102a96102a43660046125fe565b61054e565b60405161027896959493929190612cef565b61028961059b565b6102896105a1565b6102896105c5565b6102db6105e9565b604051610278919061278b565b6102fb6102f63660046125fe565b6105f8565b005b6102fb61030b3660046125fe565b610676565b6102fb61031e3660046125fe565b6107e5565b6102896103313660046125fe565b610944565b610289610956565b61028961095c565b6102fb6103543660046125fe565b610980565b61026b610b6d565b610289610b8a565b6102db610b90565b610379610ba4565b60405161027891906127dc565b6102fb610bb4565b6102fb61039c3660046126c5565b610bd7565b6102fb6103af3660046125c6565b610ce1565b6102fb610d86565b6102896103ca3660046125fe565b610e05565b6102fb6103dd3660046126a4565b610e17565b6102db610e9b565b6102896103f836600461262e565b610eaa565b61028961040b3660046125c6565b611018565b6102db61102a565b6102896104263660046126a4565b611039565b61043e61043936600461262e565b61104c565b604051610278959493929190612d5c565b6102fb61045d36600461265d565b611086565b610289611315565b6102fb61131b565b6102fb6104803660046125c6565b61139e565b6102fb6104933660046126fd565b61144b565b6104ab6104a63660046125fe565b6118c5565b6040516102789291906127e7565b6102fb6104c73660046126fd565b611930565b6102fb6104da3660046126a4565b611d28565b6102fb6104ed3660046126a4565b611da0565b610379611f9e565b6102fb6105083660046125c6565b611fa7565b6102fb61051b3660046125fe565b61205d565b6040518060400160405280600c81526020016b4361706974616c5374616b6560a01b81525081565b60095490565b6009818154811061055b57fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501549395506001600160a01b0390921693909286565b600c5481565b7f5ef1b8a083a5fdba28cf859ea03d2cdaa437f9218d2a6480c078e12f93914ef981565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6002546001600160a01b031681565b6106006120c7565b6000546001600160a01b039081169116146106365760405162461bcd60e51b815260040161062d90612b64565b60405180910390fd5b60058190556040517ff61a2d72238f24d1410897046e9eb5b29bfecc0638ea47f782753a4607b413b69061066b9083906127f7565b60405180910390a150565b600260015414156106995760405162461bcd60e51b815260040161062d90612c97565b6002600155600054600160a01b900460ff16156106c85760405162461bcd60e51b815260040161062d90612a05565b60095481106106e95760405162461bcd60e51b815260040161062d90612bfa565b6000600982815481106106f857fe5b60009182526020808320858452600b8252604080852033865290925292206005546004820154600690930290930193509161073391906120cb565b4210156107525760405162461bcd60e51b815260040161062d90612ad6565b6003810154825461076390826120f0565b8355600583015461077490826120f0565b6005840155600060038301556001830154610799906001600160a01b03163383612132565b83336001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568836040516107d391906127f7565b60405180910390a35050600180555050565b600260015414156108085760405162461bcd60e51b815260040161062d90612c97565b6002600155600054600160a01b900460ff16156108375760405162461bcd60e51b815260040161062d90612a05565b60095481106108585760405162461bcd60e51b815260040161062d90612bfa565b60006009828154811061086757fe5b60009182526020808320858452600b8252604080852033865290925292206006909102909101915061089883610980565b60006108d282600101546108cc64e8d4a510006108c68760040154876000015461218d90919063ffffffff16565b906121c7565b906120f0565b90506108de3382612209565b600483015482546108f99164e8d4a51000916108c69161218d565b600183015560405133907f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf7906109329087908590612d20565b60405180910390a25050600180555050565b60086020526000908152604090205481565b600d5481565b7fa89f60c6d9b3abc12fdd72f11837f61da1f807e66a42a54f1b917628be071bc481565b60095481106109a15760405162461bcd60e51b815260040161062d90612bfa565b6000600982815481106109b057fe5b90600052602060002090600602019050806003015443116109d15750610b6a565b60018101546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610a0490309060040161278b565b60206040518083038186803b158015610a1c57600080fd5b505afa158015610a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a549190612616565b905080610a68575043600390910155610b6a565b6000610a78836003015443611039565b90506000610aa5600c546108c68660020154610a9f6004548761218d90919063ffffffff16565b9061218d565b6003546040516340c10f1960e01b81529192506000916001600160a01b03909116906340c10f1990610add90309086906004016127c3565b602060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f91906125e2565b90508015610b6457610b58610b4d856108c68564e8d4a5100061218d565b6004870154906120cb565b60048601554360038601555b50505050505b50565b604051806040016040528060018152602001603160f81b81525081565b60055481565b60075461010090046001600160a01b031681565b600054600160a01b900460ff1690565b60095460005b81811015610bd357610bcb81610980565b600101610bba565b5050565b610bdf6120c7565b6000546001600160a01b03908116911614610c0c5760405162461bcd60e51b815260040161062d90612b64565b6009548310610c2d5760405162461bcd60e51b815260040161062d90612bfa565b8015610c3b57610c3b610bb4565b610c7882610c7260098681548110610c4f57fe5b906000526020600020906006020160020154600c546120f090919063ffffffff16565b906120cb565b600c819055508160098481548110610c8c57fe5b9060005260206000209060060201600201819055507fc66cec52f6fc7c7c09b5f02578bd330a548d6b039f8ba5b5703204565bdb335b838383604051610cd493929190612d2e565b60405180910390a1505050565b610ce96120c7565b6000546001600160a01b03908116911614610d165760405162461bcd60e51b815260040161062d90612b64565b6001600160a01b038116610d3c5760405162461bcd60e51b815260040161062d906129dc565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f7ae0e696d1c4e6e4424d4ab2990584b7656db5ed51296fe72a7c9f202c36d48390600090a250565b610d8e6120c7565b6000546001600160a01b03908116911614610dbb5760405162461bcd60e51b815260040161062d90612b64565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60066020526000908152604090205481565b610e1f6120c7565b6000546001600160a01b03908116911614610e4c5760405162461bcd60e51b815260040161062d90612b64565b60008281526006602052604090819020829055517f906499b641f0353865a8a18eede0b0fadee4aabdf10408432c03a4989893eeab90610e8f9084908490612d20565b60405180910390a15050565b6003546001600160a01b031681565b60008060098481548110610eba57fe5b60009182526020808320878452600b825260408085206001600160a01b0389811687529352808520600694909402909101600481810154600183015493516370a0823160e01b815292975094959392909216916370a0823191610f1f9130910161278b565b60206040518083038186803b158015610f3757600080fd5b505afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190612616565b9050836003015443118015610f8357508015155b15610fe3576000610f98856003015443611039565b90506000610fbf600c546108c68860020154610a9f6004548761218d90919063ffffffff16565b9050610fde610fd7846108c68464e8d4a5100061218d565b85906120cb565b935050505b61100b83600101546108cc64e8d4a510006108c686886000015461218d90919063ffffffff16565b9450505050505b92915050565b600a6020526000908152604090205481565b6000546001600160a01b031690565b600061104582846120f0565b9392505050565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b61108e6120c7565b6000546001600160a01b039081169116146110bb5760405162461bcd60e51b815260040161062d90612b64565b6001600160a01b0383166110e15760405162461bcd60e51b815260040161062d90612b99565b60005b6110ec610548565b811015611147576009818154811061110057fe5b60009182526020909120600160069092020101546001600160a01b038581169116141561113f5760405162461bcd60e51b815260040161062d9061297b565b6001016110e4565b50811561115657611156610bb4565b6009546000908152600660205260408120829055600d54431161117b57600d5461117d565b435b600c5490915061118d90866120cb565b600c556040805160c08101825260008082526001600160a01b03878116602084019081528385018a8152606085018781526080860185815260a0870186815260098054600181018255975296517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af60069097029687015592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b0860180546001600160a01b0319169190951617909355517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b184015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b2830155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b382015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b490910155517f4677f0774f427b7084c61193b0b175490b6404bc62b3964f746c951253a7c4489061130690879087908790612cce565b60405180910390a15050505050565b60045481565b6113236120c7565b6000546001600160a01b039081169116146113505760405162461bcd60e51b815260040161062d90612b64565b6007805460ff19811660ff9182161517918290556040517f762580ab593aba76df06bfae6704011fb143362b709324bc332babc3a7ae6a84926113949216906127dc565b60405180910390a1565b6113a66120c7565b6000546001600160a01b039081169116146113d35760405162461bcd60e51b815260040161062d90612b64565b6001600160a01b0381166113f95760405162461bcd60e51b815260040161062d90612a5f565b60078054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f22b76827cedebd97fbe4b16a026ed043bde58720fc1f4f0802457397016ceb1c90600090a250565b6002600154141561146e5760405162461bcd60e51b815260040161062d90612c97565b6002600155600054600160a01b900460ff161561149d5760405162461bcd60e51b815260040161062d90612a05565b604080518082018252600c81526b4361706974616c5374616b6560a01b602091820152815180830190925260018252603160f81b91015260007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7ffa8eb371087d34b1e4f35efd9c9ee630e653b268bb3b32e9e037d0b86fb2d2ab7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66115416123ce565b30604051602001611556959493929190612800565b60408051601f198184030181528282528051602091820120336000818152600a845293842080546001810190915591955092936115be937f5ef1b8a083a5fdba28cf859ea03d2cdaa437f9218d2a6480c078e12f93914ef9938d9391928d92918a910161282c565b604051602081830303815290604052805190602001209050600082826040516020016115eb929190612770565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051611628949392919061285d565b6020604051602081039080840390855afa15801561164a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661167d5760405162461bcd60e51b815260040161062d906128ae565b6002546001600160a01b038281169116146116aa5760405162461bcd60e51b815260040161062d90612b3e565b6009548a106116cb5760405162461bcd60e51b815260040161062d90612bfa565b600060098b815481106116da57fe5b906000526020600020906006020190506000600b60008d81526020019081526020016000206000336001600160a01b03166001600160a01b031681526020019081526020016000209050600860008d81526020019081526020016000205461174f8c83600001546120cb90919063ffffffff16565b111561176d5760405162461bcd60e51b815260040161062d90612c20565b60008c8152600660205260409020548254611788908d6120cb565b11156117a65760405162461bcd60e51b815260040161062d90612a2f565b6117af8c610980565b60018201546117c9906001600160a01b031633308e6123d2565b60006117f782600101546108cc64e8d4a510006108c68760040154876000015461218d90919063ffffffff16565b8254909150611806908d6120cb565b80835560048401546118239164e8d4a51000916108c6919061218d565b60018301558254611834908d6120cb565b83558015611846576118463382612209565b8c336001600160a01b03167fc0e8465f442d438494620490c62295f648137eebcf261db1fce454ac12d7290e8e6001600a6000336001600160a01b03166001600160a01b0316815260200190815260200160002054036040516118aa929190612d20565b60405180910390a35050600180555050505050505050505050565b6000818152600b60209081526040808320338452909152812060055460048201548392916118f391906120cb565b421061190657600080925092505061192b565b6001611925426108cc60055485600401546120cb90919063ffffffff16565b92509250505b915091565b600260015414156119535760405162461bcd60e51b815260040161062d90612c97565b6002600155600054600160a01b900460ff16156119825760405162461bcd60e51b815260040161062d90612a05565b604080518082018252600c81526b4361706974616c5374616b6560a01b602091820152815180830190925260018252603160f81b91015260007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7ffa8eb371087d34b1e4f35efd9c9ee630e653b268bb3b32e9e037d0b86fb2d2ab7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611a266123ce565b30604051602001611a3b959493929190612800565b60408051601f198184030181528282528051602091820120336000818152600a84529384208054600181019091559195509293611aa3937fa89f60c6d9b3abc12fdd72f11837f61da1f807e66a42a54f1b917628be071bc4938d9391928d92918a910161282c565b60405160208183030381529060405280519060200120905060008282604051602001611ad0929190612770565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051611b0d949392919061285d565b6020604051602081039080840390855afa158015611b2f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611b625760405162461bcd60e51b815260040161062d906128ae565b6002546001600160a01b03828116911614611b8f5760405162461bcd60e51b815260040161062d90612b3e565b6009548a10611bb05760405162461bcd60e51b815260040161062d90612bfa565b600060098b81548110611bbf57fe5b600091825260208083208e8452600b8252604080852033865290925292208054600690920290920192508b1115611c085760405162461bcd60e51b815260040161062d906128d9565b611c118c610980565b6000611c3f82600101546108cc64e8d4a510006108c68760040154876000015461218d90919063ffffffff16565b8254909150611c4e908d6120f0565b8083556004840154611c6b9164e8d4a51000916108c6919061218d565b60018301554260048301556003820154611c85908d6120cb565b60038301556005830154611c99908d6120cb565b6005840155611ca83382612209565b336001600160a01b03167ffbd65cfd6de1493db337385c0712095397ecbd0504df64b861cdfceb80c7b4228e8e6001600a6000336001600160a01b03166001600160a01b031681526020019081526020016000205403604051611d0d93929190612d46565b60405180910390a25050600180555050505050505050505050565b611d306120c7565b6000546001600160a01b03908116911614611d5d5760405162461bcd60e51b815260040161062d90612b64565b60008281526008602052604090819020829055517f867ada731e405f308b7b2caa8f05212d3e96cc68985b58119f95095a658258c790610e8f9084908490612d20565b600054600160a01b900460ff1615611dca5760405162461bcd60e51b815260040161062d90612a05565b60075460ff16611dec5760405162461bcd60e51b815260040161062d90612ab5565b6009548210611e0d5760405162461bcd60e51b815260040161062d90612bfa565b600060098381548110611e1c57fe5b60009182526020808320868452600b8252604080852033865283528085208886526008909352909320548154600690930290930193509190611e5e90856120cb565b1115611e7c5760405162461bcd60e51b815260040161062d90612a8a565b6000848152600660205260409020548254611e9790856120cb565b1115611eb55760405162461bcd60e51b815260040161062d90612a2f565b611ebe84610980565b6001820154611ed8906001600160a01b03163330866123d2565b6000611f0682600101546108cc64e8d4a510006108c68760040154876000015461218d90919063ffffffff16565b8254909150611f1590856120cb565b8083556004840154611f329164e8d4a51000916108c6919061218d565b60018301558254611f4390856120cb565b83558015611f5557611f553382612209565b84336001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1586604051611f8f91906127f7565b60405180910390a35050505050565b60075460ff1681565b611faf6120c7565b6000546001600160a01b03908116911614611fdc5760405162461bcd60e51b815260040161062d90612b64565b6001600160a01b0381166120025760405162461bcd60e51b815260040161062d90612935565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6120656120c7565b6000546001600160a01b039081169116146120925760405162461bcd60e51b815260040161062d90612b64565b60048190556040517f543f86787e6d3c156a65872c718d4d286227ce0eb2d59eac9e1ba1d3302837959061066b9083906127f7565b3390565b6000828201838110156110455760405162461bcd60e51b815260040161062d906129a5565b600061104583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123f3565b6121888363a9059cbb60e01b84846040516024016121519291906127c3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261241f565b505050565b60008261219c57506000611012565b828202828482816121a957fe5b04146110455760405162461bcd60e51b815260040161062d90612afd565b600061104583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124ae565b6001600160a01b03821661222f5760405162461bcd60e51b815260040161062d90612910565b6003546040516370a0823160e01b81526000916001600160a01b0316906370a082319061226090309060040161278b565b60206040518083038186803b15801561227857600080fd5b505afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612616565b9050808211156123445760035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906122ec90869085906004016127c3565b602060405180830381600087803b15801561230657600080fd5b505af115801561231a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233e91906125e2565b50612188565b60035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061237690869086906004016127c3565b602060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c891906125e2565b50505050565b4690565b6123c8846323b872dd60e01b8585856040516024016121519392919061279f565b600081848411156124175760405162461bcd60e51b815260040161062d919061287b565b505050900390565b6060612474826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124e59092919063ffffffff16565b805190915015612188578080602001905181019061249291906125e2565b6121885760405162461bcd60e51b815260040161062d90612c4d565b600081836124cf5760405162461bcd60e51b815260040161062d919061287b565b5060008385816124db57fe5b0495945050505050565b60606124f484846000856124fc565b949350505050565b6060612507856125c0565b6125235760405162461bcd60e51b815260040161062d90612bc3565b60006060866001600160a01b031685876040516125409190612754565b60006040518083038185875af1925050503d806000811461257d576040519150601f19603f3d011682016040523d82523d6000602084013e612582565b606091505b509150915081156125965791506124f49050565b8051156125a65780518082602001fd5b8360405162461bcd60e51b815260040161062d919061287b565b3b151590565b6000602082840312156125d7578081fd5b813561104581612dab565b6000602082840312156125f3578081fd5b815161104581612dc0565b60006020828403121561260f578081fd5b5035919050565b600060208284031215612627578081fd5b5051919050565b60008060408385031215612640578081fd5b82359150602083013561265281612dab565b809150509250929050565b60008060008060808587031215612672578182fd5b84359350602085013561268481612dab565b9250604085013561269481612dc0565b9396929550929360600135925050565b600080604083850312156126b6578182fd5b50508035926020909101359150565b6000806000606084860312156126d9578283fd5b833592506020840135915060408401356126f281612dc0565b809150509250925092565b60008060008060008060c08789031215612715578182fd5b8635955060208701359450604087013560ff81168114612733578283fd5b959894975094956060810135955060808101359460a0909101359350915050565b60008251612766818460208701612d7f565b9190910192915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b95865260208601949094526001600160a01b039290921660408501526060840152608083015260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252825180602084015261289a816040850160208701612d7f565b601f01601f19169190910160400192915050565b602080825260119082015270696e76616c6964207369676e617475726560781b604082015260600190565b6020808252601c908201527f756e7374616b653a20696e73756666696369656e742061737365747300000000604082015260600190565b6020808252600b908201526a5f746f206973207a65726f60a81b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526010908201526f4475706c696361746520546f6b656e2160801b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600f908201526e5f7369676e6572206973207a65726f60881b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b602080825260169082015275195e18d95959081d1a19481d1bdd185b081b1a5b5a5d60521b604082015260600190565b6020808252601190820152705f6f70657261746f72206973207a65726f60781b604082015260600190565b602080825260119082015270195e18d95959081d5cd95c881b1a5b5a5d607a1b604082015260600190565b60208082526007908201526618d85b881b9bdd60ca1b604082015260600190565b6020808252600d908201526c7374696c6c2070656e64696e6760981b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252600c908201526b1d5b985d5d1a1bdc9a5e995960a21b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f5f6c70546f6b656e206973207a65726f60801b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600c908201526b1a5b9d985b1a590817dc1a5960a21b604082015260600190565b602080825260139082015272195e18d95959081d5cd95c89dcc81b1a5b5a5d606a1b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b9283526001600160a01b039190911660208301521515604082015260600190565b9586526001600160a01b0394909416602086015260408501929092526060840152608083015260a082015260c00190565b918252602082015260400190565b92835260208301919091521515604082015260600190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b60005b83811015612d9a578181015183820152602001612d82565b838111156123c85750506000910152565b6001600160a01b0381168114610b6a57600080fd5b8015158114610b6a57600080fdfea2646970667358221220c9ce2f6ab91a63d12be4d1554b63f2976628d6513aa6af4fa0d62543bcc81d8164736f6c634300060c0033000000000000000000000000bb826fb86fae53be90f0b711c6a506860b7bdbe300000000000000000000000020945ca1df56d237fd40036d47e866c7dccd21140000000000000000000000000000000000000000000000000000000000b95550
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061025e5760003560e01c8063715018a61161014657806398016b51116100c3578063cd8584b011610087578063cd8584b0146104b9578063e1acedfb146104cc578063e2bbb158146104df578063e78a5875146104f2578063f2fde38b146104fa578063f580ffcb1461050d5761025e565b806398016b5114610462578063a047e3591461046a578063b3ab15fb14610472578063bead4b2214610485578063ca8836d2146104985761025e565b80637ecebe001161010a5780637ecebe00146103fd5780638da5cb5b146104105780638dbb1e3a1461041857806393f1a40b1461042b57806396805e541461044f5761025e565b8063715018a6146103b457806374318660146103bc57806375963b04146103cf5780637881065d146103e257806379ef934f146103ea5761025e565b806340a11610116101df57806356b6861c116101a357806356b6861c14610361578063570ca735146103695780635c975abb14610371578063630b5ba11461038657806364482f791461038e5780636c19e783146103a15761025e565b806340a116101461032357806348cd4cb114610336578063492976111461033e57806351eb05a61461034657806354fd4d50146103595761025e565b806320606b701161022657806320606b70146102cb578063238ac933146102d3578063271aaddd146102e85780632e1a7d4d146102fd578063379607f5146103105761025e565b806306fdde0314610263578063081e3eda146102815780631526fe271461029657806317caf6f1146102bb5780631ede6611146102c3575b600080fd5b61026b610520565b604051610278919061287b565b60405180910390f35b610289610548565b60405161027891906127f7565b6102a96102a43660046125fe565b61054e565b60405161027896959493929190612cef565b61028961059b565b6102896105a1565b6102896105c5565b6102db6105e9565b604051610278919061278b565b6102fb6102f63660046125fe565b6105f8565b005b6102fb61030b3660046125fe565b610676565b6102fb61031e3660046125fe565b6107e5565b6102896103313660046125fe565b610944565b610289610956565b61028961095c565b6102fb6103543660046125fe565b610980565b61026b610b6d565b610289610b8a565b6102db610b90565b610379610ba4565b60405161027891906127dc565b6102fb610bb4565b6102fb61039c3660046126c5565b610bd7565b6102fb6103af3660046125c6565b610ce1565b6102fb610d86565b6102896103ca3660046125fe565b610e05565b6102fb6103dd3660046126a4565b610e17565b6102db610e9b565b6102896103f836600461262e565b610eaa565b61028961040b3660046125c6565b611018565b6102db61102a565b6102896104263660046126a4565b611039565b61043e61043936600461262e565b61104c565b604051610278959493929190612d5c565b6102fb61045d36600461265d565b611086565b610289611315565b6102fb61131b565b6102fb6104803660046125c6565b61139e565b6102fb6104933660046126fd565b61144b565b6104ab6104a63660046125fe565b6118c5565b6040516102789291906127e7565b6102fb6104c73660046126fd565b611930565b6102fb6104da3660046126a4565b611d28565b6102fb6104ed3660046126a4565b611da0565b610379611f9e565b6102fb6105083660046125c6565b611fa7565b6102fb61051b3660046125fe565b61205d565b6040518060400160405280600c81526020016b4361706974616c5374616b6560a01b81525081565b60095490565b6009818154811061055b57fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501549395506001600160a01b0390921693909286565b600c5481565b7f5ef1b8a083a5fdba28cf859ea03d2cdaa437f9218d2a6480c078e12f93914ef981565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6002546001600160a01b031681565b6106006120c7565b6000546001600160a01b039081169116146106365760405162461bcd60e51b815260040161062d90612b64565b60405180910390fd5b60058190556040517ff61a2d72238f24d1410897046e9eb5b29bfecc0638ea47f782753a4607b413b69061066b9083906127f7565b60405180910390a150565b600260015414156106995760405162461bcd60e51b815260040161062d90612c97565b6002600155600054600160a01b900460ff16156106c85760405162461bcd60e51b815260040161062d90612a05565b60095481106106e95760405162461bcd60e51b815260040161062d90612bfa565b6000600982815481106106f857fe5b60009182526020808320858452600b8252604080852033865290925292206005546004820154600690930290930193509161073391906120cb565b4210156107525760405162461bcd60e51b815260040161062d90612ad6565b6003810154825461076390826120f0565b8355600583015461077490826120f0565b6005840155600060038301556001830154610799906001600160a01b03163383612132565b83336001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568836040516107d391906127f7565b60405180910390a35050600180555050565b600260015414156108085760405162461bcd60e51b815260040161062d90612c97565b6002600155600054600160a01b900460ff16156108375760405162461bcd60e51b815260040161062d90612a05565b60095481106108585760405162461bcd60e51b815260040161062d90612bfa565b60006009828154811061086757fe5b60009182526020808320858452600b8252604080852033865290925292206006909102909101915061089883610980565b60006108d282600101546108cc64e8d4a510006108c68760040154876000015461218d90919063ffffffff16565b906121c7565b906120f0565b90506108de3382612209565b600483015482546108f99164e8d4a51000916108c69161218d565b600183015560405133907f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf7906109329087908590612d20565b60405180910390a25050600180555050565b60086020526000908152604090205481565b600d5481565b7fa89f60c6d9b3abc12fdd72f11837f61da1f807e66a42a54f1b917628be071bc481565b60095481106109a15760405162461bcd60e51b815260040161062d90612bfa565b6000600982815481106109b057fe5b90600052602060002090600602019050806003015443116109d15750610b6a565b60018101546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610a0490309060040161278b565b60206040518083038186803b158015610a1c57600080fd5b505afa158015610a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a549190612616565b905080610a68575043600390910155610b6a565b6000610a78836003015443611039565b90506000610aa5600c546108c68660020154610a9f6004548761218d90919063ffffffff16565b9061218d565b6003546040516340c10f1960e01b81529192506000916001600160a01b03909116906340c10f1990610add90309086906004016127c3565b602060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f91906125e2565b90508015610b6457610b58610b4d856108c68564e8d4a5100061218d565b6004870154906120cb565b60048601554360038601555b50505050505b50565b604051806040016040528060018152602001603160f81b81525081565b60055481565b60075461010090046001600160a01b031681565b600054600160a01b900460ff1690565b60095460005b81811015610bd357610bcb81610980565b600101610bba565b5050565b610bdf6120c7565b6000546001600160a01b03908116911614610c0c5760405162461bcd60e51b815260040161062d90612b64565b6009548310610c2d5760405162461bcd60e51b815260040161062d90612bfa565b8015610c3b57610c3b610bb4565b610c7882610c7260098681548110610c4f57fe5b906000526020600020906006020160020154600c546120f090919063ffffffff16565b906120cb565b600c819055508160098481548110610c8c57fe5b9060005260206000209060060201600201819055507fc66cec52f6fc7c7c09b5f02578bd330a548d6b039f8ba5b5703204565bdb335b838383604051610cd493929190612d2e565b60405180910390a1505050565b610ce96120c7565b6000546001600160a01b03908116911614610d165760405162461bcd60e51b815260040161062d90612b64565b6001600160a01b038116610d3c5760405162461bcd60e51b815260040161062d906129dc565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f7ae0e696d1c4e6e4424d4ab2990584b7656db5ed51296fe72a7c9f202c36d48390600090a250565b610d8e6120c7565b6000546001600160a01b03908116911614610dbb5760405162461bcd60e51b815260040161062d90612b64565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60066020526000908152604090205481565b610e1f6120c7565b6000546001600160a01b03908116911614610e4c5760405162461bcd60e51b815260040161062d90612b64565b60008281526006602052604090819020829055517f906499b641f0353865a8a18eede0b0fadee4aabdf10408432c03a4989893eeab90610e8f9084908490612d20565b60405180910390a15050565b6003546001600160a01b031681565b60008060098481548110610eba57fe5b60009182526020808320878452600b825260408085206001600160a01b0389811687529352808520600694909402909101600481810154600183015493516370a0823160e01b815292975094959392909216916370a0823191610f1f9130910161278b565b60206040518083038186803b158015610f3757600080fd5b505afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190612616565b9050836003015443118015610f8357508015155b15610fe3576000610f98856003015443611039565b90506000610fbf600c546108c68860020154610a9f6004548761218d90919063ffffffff16565b9050610fde610fd7846108c68464e8d4a5100061218d565b85906120cb565b935050505b61100b83600101546108cc64e8d4a510006108c686886000015461218d90919063ffffffff16565b9450505050505b92915050565b600a6020526000908152604090205481565b6000546001600160a01b031690565b600061104582846120f0565b9392505050565b600b602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b61108e6120c7565b6000546001600160a01b039081169116146110bb5760405162461bcd60e51b815260040161062d90612b64565b6001600160a01b0383166110e15760405162461bcd60e51b815260040161062d90612b99565b60005b6110ec610548565b811015611147576009818154811061110057fe5b60009182526020909120600160069092020101546001600160a01b038581169116141561113f5760405162461bcd60e51b815260040161062d9061297b565b6001016110e4565b50811561115657611156610bb4565b6009546000908152600660205260408120829055600d54431161117b57600d5461117d565b435b600c5490915061118d90866120cb565b600c556040805160c08101825260008082526001600160a01b03878116602084019081528385018a8152606085018781526080860185815260a0870186815260098054600181018255975296517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af60069097029687015592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b0860180546001600160a01b0319169190951617909355517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b184015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b2830155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b382015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b490910155517f4677f0774f427b7084c61193b0b175490b6404bc62b3964f746c951253a7c4489061130690879087908790612cce565b60405180910390a15050505050565b60045481565b6113236120c7565b6000546001600160a01b039081169116146113505760405162461bcd60e51b815260040161062d90612b64565b6007805460ff19811660ff9182161517918290556040517f762580ab593aba76df06bfae6704011fb143362b709324bc332babc3a7ae6a84926113949216906127dc565b60405180910390a1565b6113a66120c7565b6000546001600160a01b039081169116146113d35760405162461bcd60e51b815260040161062d90612b64565b6001600160a01b0381166113f95760405162461bcd60e51b815260040161062d90612a5f565b60078054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f22b76827cedebd97fbe4b16a026ed043bde58720fc1f4f0802457397016ceb1c90600090a250565b6002600154141561146e5760405162461bcd60e51b815260040161062d90612c97565b6002600155600054600160a01b900460ff161561149d5760405162461bcd60e51b815260040161062d90612a05565b604080518082018252600c81526b4361706974616c5374616b6560a01b602091820152815180830190925260018252603160f81b91015260007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7ffa8eb371087d34b1e4f35efd9c9ee630e653b268bb3b32e9e037d0b86fb2d2ab7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66115416123ce565b30604051602001611556959493929190612800565b60408051601f198184030181528282528051602091820120336000818152600a845293842080546001810190915591955092936115be937f5ef1b8a083a5fdba28cf859ea03d2cdaa437f9218d2a6480c078e12f93914ef9938d9391928d92918a910161282c565b604051602081830303815290604052805190602001209050600082826040516020016115eb929190612770565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051611628949392919061285d565b6020604051602081039080840390855afa15801561164a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661167d5760405162461bcd60e51b815260040161062d906128ae565b6002546001600160a01b038281169116146116aa5760405162461bcd60e51b815260040161062d90612b3e565b6009548a106116cb5760405162461bcd60e51b815260040161062d90612bfa565b600060098b815481106116da57fe5b906000526020600020906006020190506000600b60008d81526020019081526020016000206000336001600160a01b03166001600160a01b031681526020019081526020016000209050600860008d81526020019081526020016000205461174f8c83600001546120cb90919063ffffffff16565b111561176d5760405162461bcd60e51b815260040161062d90612c20565b60008c8152600660205260409020548254611788908d6120cb565b11156117a65760405162461bcd60e51b815260040161062d90612a2f565b6117af8c610980565b60018201546117c9906001600160a01b031633308e6123d2565b60006117f782600101546108cc64e8d4a510006108c68760040154876000015461218d90919063ffffffff16565b8254909150611806908d6120cb565b80835560048401546118239164e8d4a51000916108c6919061218d565b60018301558254611834908d6120cb565b83558015611846576118463382612209565b8c336001600160a01b03167fc0e8465f442d438494620490c62295f648137eebcf261db1fce454ac12d7290e8e6001600a6000336001600160a01b03166001600160a01b0316815260200190815260200160002054036040516118aa929190612d20565b60405180910390a35050600180555050505050505050505050565b6000818152600b60209081526040808320338452909152812060055460048201548392916118f391906120cb565b421061190657600080925092505061192b565b6001611925426108cc60055485600401546120cb90919063ffffffff16565b92509250505b915091565b600260015414156119535760405162461bcd60e51b815260040161062d90612c97565b6002600155600054600160a01b900460ff16156119825760405162461bcd60e51b815260040161062d90612a05565b604080518082018252600c81526b4361706974616c5374616b6560a01b602091820152815180830190925260018252603160f81b91015260007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7ffa8eb371087d34b1e4f35efd9c9ee630e653b268bb3b32e9e037d0b86fb2d2ab7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611a266123ce565b30604051602001611a3b959493929190612800565b60408051601f198184030181528282528051602091820120336000818152600a84529384208054600181019091559195509293611aa3937fa89f60c6d9b3abc12fdd72f11837f61da1f807e66a42a54f1b917628be071bc4938d9391928d92918a910161282c565b60405160208183030381529060405280519060200120905060008282604051602001611ad0929190612770565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051611b0d949392919061285d565b6020604051602081039080840390855afa158015611b2f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611b625760405162461bcd60e51b815260040161062d906128ae565b6002546001600160a01b03828116911614611b8f5760405162461bcd60e51b815260040161062d90612b3e565b6009548a10611bb05760405162461bcd60e51b815260040161062d90612bfa565b600060098b81548110611bbf57fe5b600091825260208083208e8452600b8252604080852033865290925292208054600690920290920192508b1115611c085760405162461bcd60e51b815260040161062d906128d9565b611c118c610980565b6000611c3f82600101546108cc64e8d4a510006108c68760040154876000015461218d90919063ffffffff16565b8254909150611c4e908d6120f0565b8083556004840154611c6b9164e8d4a51000916108c6919061218d565b60018301554260048301556003820154611c85908d6120cb565b60038301556005830154611c99908d6120cb565b6005840155611ca83382612209565b336001600160a01b03167ffbd65cfd6de1493db337385c0712095397ecbd0504df64b861cdfceb80c7b4228e8e6001600a6000336001600160a01b03166001600160a01b031681526020019081526020016000205403604051611d0d93929190612d46565b60405180910390a25050600180555050505050505050505050565b611d306120c7565b6000546001600160a01b03908116911614611d5d5760405162461bcd60e51b815260040161062d90612b64565b60008281526008602052604090819020829055517f867ada731e405f308b7b2caa8f05212d3e96cc68985b58119f95095a658258c790610e8f9084908490612d20565b600054600160a01b900460ff1615611dca5760405162461bcd60e51b815260040161062d90612a05565b60075460ff16611dec5760405162461bcd60e51b815260040161062d90612ab5565b6009548210611e0d5760405162461bcd60e51b815260040161062d90612bfa565b600060098381548110611e1c57fe5b60009182526020808320868452600b8252604080852033865283528085208886526008909352909320548154600690930290930193509190611e5e90856120cb565b1115611e7c5760405162461bcd60e51b815260040161062d90612a8a565b6000848152600660205260409020548254611e9790856120cb565b1115611eb55760405162461bcd60e51b815260040161062d90612a2f565b611ebe84610980565b6001820154611ed8906001600160a01b03163330866123d2565b6000611f0682600101546108cc64e8d4a510006108c68760040154876000015461218d90919063ffffffff16565b8254909150611f1590856120cb565b8083556004840154611f329164e8d4a51000916108c6919061218d565b60018301558254611f4390856120cb565b83558015611f5557611f553382612209565b84336001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1586604051611f8f91906127f7565b60405180910390a35050505050565b60075460ff1681565b611faf6120c7565b6000546001600160a01b03908116911614611fdc5760405162461bcd60e51b815260040161062d90612b64565b6001600160a01b0381166120025760405162461bcd60e51b815260040161062d90612935565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6120656120c7565b6000546001600160a01b039081169116146120925760405162461bcd60e51b815260040161062d90612b64565b60048190556040517f543f86787e6d3c156a65872c718d4d286227ce0eb2d59eac9e1ba1d3302837959061066b9083906127f7565b3390565b6000828201838110156110455760405162461bcd60e51b815260040161062d906129a5565b600061104583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123f3565b6121888363a9059cbb60e01b84846040516024016121519291906127c3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261241f565b505050565b60008261219c57506000611012565b828202828482816121a957fe5b04146110455760405162461bcd60e51b815260040161062d90612afd565b600061104583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124ae565b6001600160a01b03821661222f5760405162461bcd60e51b815260040161062d90612910565b6003546040516370a0823160e01b81526000916001600160a01b0316906370a082319061226090309060040161278b565b60206040518083038186803b15801561227857600080fd5b505afa15801561228c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b09190612616565b9050808211156123445760035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906122ec90869085906004016127c3565b602060405180830381600087803b15801561230657600080fd5b505af115801561231a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233e91906125e2565b50612188565b60035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061237690869086906004016127c3565b602060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c891906125e2565b50505050565b4690565b6123c8846323b872dd60e01b8585856040516024016121519392919061279f565b600081848411156124175760405162461bcd60e51b815260040161062d919061287b565b505050900390565b6060612474826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124e59092919063ffffffff16565b805190915015612188578080602001905181019061249291906125e2565b6121885760405162461bcd60e51b815260040161062d90612c4d565b600081836124cf5760405162461bcd60e51b815260040161062d919061287b565b5060008385816124db57fe5b0495945050505050565b60606124f484846000856124fc565b949350505050565b6060612507856125c0565b6125235760405162461bcd60e51b815260040161062d90612bc3565b60006060866001600160a01b031685876040516125409190612754565b60006040518083038185875af1925050503d806000811461257d576040519150601f19603f3d011682016040523d82523d6000602084013e612582565b606091505b509150915081156125965791506124f49050565b8051156125a65780518082602001fd5b8360405162461bcd60e51b815260040161062d919061287b565b3b151590565b6000602082840312156125d7578081fd5b813561104581612dab565b6000602082840312156125f3578081fd5b815161104581612dc0565b60006020828403121561260f578081fd5b5035919050565b600060208284031215612627578081fd5b5051919050565b60008060408385031215612640578081fd5b82359150602083013561265281612dab565b809150509250929050565b60008060008060808587031215612672578182fd5b84359350602085013561268481612dab565b9250604085013561269481612dc0565b9396929550929360600135925050565b600080604083850312156126b6578182fd5b50508035926020909101359150565b6000806000606084860312156126d9578283fd5b833592506020840135915060408401356126f281612dc0565b809150509250925092565b60008060008060008060c08789031215612715578182fd5b8635955060208701359450604087013560ff81168114612733578283fd5b959894975094956060810135955060808101359460a0909101359350915050565b60008251612766818460208701612d7f565b9190910192915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b95865260208601949094526001600160a01b039290921660408501526060840152608083015260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252825180602084015261289a816040850160208701612d7f565b601f01601f19169190910160400192915050565b602080825260119082015270696e76616c6964207369676e617475726560781b604082015260600190565b6020808252601c908201527f756e7374616b653a20696e73756666696369656e742061737365747300000000604082015260600190565b6020808252600b908201526a5f746f206973207a65726f60a81b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526010908201526f4475706c696361746520546f6b656e2160801b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600f908201526e5f7369676e6572206973207a65726f60881b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b602080825260169082015275195e18d95959081d1a19481d1bdd185b081b1a5b5a5d60521b604082015260600190565b6020808252601190820152705f6f70657261746f72206973207a65726f60781b604082015260600190565b602080825260119082015270195e18d95959081d5cd95c881b1a5b5a5d607a1b604082015260600190565b60208082526007908201526618d85b881b9bdd60ca1b604082015260600190565b6020808252600d908201526c7374696c6c2070656e64696e6760981b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252600c908201526b1d5b985d5d1a1bdc9a5e995960a21b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f5f6c70546f6b656e206973207a65726f60801b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600c908201526b1a5b9d985b1a590817dc1a5960a21b604082015260600190565b602080825260139082015272195e18d95959081d5cd95c89dcc81b1a5b5a5d606a1b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b9283526001600160a01b039190911660208301521515604082015260600190565b9586526001600160a01b0394909416602086015260408501929092526060840152608083015260a082015260c00190565b918252602082015260400190565b92835260208301919091521515604082015260600190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b60005b83811015612d9a578181015183820152602001612d82565b838111156123c85750506000910152565b6001600160a01b0381168114610b6a57600080fd5b8015158114610b6a57600080fdfea2646970667358221220c9ce2f6ab91a63d12be4d1554b63f2976628d6513aa6af4fa0d62543bcc81d8164736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bb826fb86fae53be90f0b711c6a506860b7bdbe300000000000000000000000020945ca1df56d237fd40036d47e866c7dccd21140000000000000000000000000000000000000000000000000000000000b95550
-----Decoded View---------------
Arg [0] : _signer (address): 0xbB826fB86FaE53be90f0b711C6a506860b7bDbE3
Arg [1] : _nsure (address): 0x20945cA1df56D237fD40036d47E866C7DcCD2114
Arg [2] : _startBlock (uint256): 12146000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000bb826fb86fae53be90f0b711c6a506860b7bdbe3
Arg [1] : 00000000000000000000000020945ca1df56d237fd40036d47e866c7dccd2114
Arg [2] : 0000000000000000000000000000000000000000000000000000000000b95550
Deployed Bytecode Sourcemap
38149:16862:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38312:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42163:93;;;:::i;:::-;;;;;;;:::i;39448:26::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;39815:34::-;;;:::i;40406:175::-;;;:::i;39959:166::-;;;:::i;38284:21::-;;;:::i;:::-;;;;;;;:::i;41995:160::-;;;;;;:::i;:::-;;:::i;:::-;;51568:696;;;;;;:::i;:::-;;:::i;52292:549::-;;;;;;:::i;:::-;;:::i;39362:50::-;;;;;;:::i;:::-;;:::i;39858:25::-;;;:::i;40215:182::-;;;:::i;44792:858::-;;;;;;:::i;:::-;;:::i;38363:36::-;;;:::i;39140:41::-;;;:::i;39281:23::-;;;:::i;29781:78::-;;;:::i;:::-;;;;;;;:::i;44604:180::-;;;:::i;43268:417::-;;;;;;:::i;:::-;;:::i;41042:185::-;;;;;;:::i;:::-;;:::i;28127:148::-;;;:::i;39190:46::-;;;;;;:::i;:::-;;:::i;41654:154::-;;;;;;:::i;:::-;;:::i;39062:19::-;;;:::i;43822:772::-;;;;;;:::i;:::-;;:::i;39555:41::-;;;;;;:::i;:::-;;:::i;27485:79::-;;;:::i;43693:121::-;;;;;;:::i;:::-;;:::i;39652:66::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;42331:929::-;;;;;;:::i;:::-;;:::i;39088:43::-;;;:::i;41344:128::-;;;:::i;40831:203::-;;;;;;:::i;:::-;;:::i;48889:2168::-;;;;;;:::i;:::-;;:::i;51071:334::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;46744:2034::-;;;;;;:::i;:::-;;:::i;41480:166::-;;;;;;:::i;:::-;;:::i;45660:1027::-;;;;;;:::i;:::-;;:::i;39245:29::-;;;:::i;28430:244::-;;;;;;:::i;:::-;;:::i;41829:158::-;;;;;;:::i;:::-;;:::i;38312:44::-;;;;;;;;;;;;;;-1:-1:-1;;;38312:44:0;;;;:::o;42163:93::-;42233:8;:15;42163:93;:::o;39448:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39448:26:0;;;;;;;:::o;39815:34::-;;;;:::o;40406:175::-;40466:115;40406:175;:::o;39959:166::-;40010:115;39959:166;:::o;38284:21::-;;;-1:-1:-1;;;;;38284:21:0;;:::o;41995:160::-;27707:12;:10;:12::i;:::-;27697:6;;-1:-1:-1;;;;;27697:6:0;;;:22;;;27689:67;;;;-1:-1:-1;;;27689:67:0;;;;;;;:::i;:::-;;;;;;;;;42074:15:::1;:26:::0;;;42116:31:::1;::::0;::::1;::::0;::::1;::::0;42092:8;;42116:31:::1;:::i;:::-;;;;;;;;41995:160:::0;:::o;51568:696::-;32720:1;33326:7;;:19;;33318:63;;;;-1:-1:-1;;;33318:63:0;;;;;;;:::i;:::-;32720:1;33459:7;:18;30099:7:::1;::::0;-1:-1:-1;;;30099:7:0;::::1;;;30098:8;30090:37;;;;-1:-1:-1::0;;;30090:37:0::1;;;;;;;:::i;:::-;51662:8:::2;:15:::0;51655:22;::::2;51647:48;;;;-1:-1:-1::0;;;51647:48:0::2;;;;;;;:::i;:::-;51706:21;51730:8;51739:4;51730:14;;;;;;;;;::::0;;;::::2;::::0;;;51779;;;:8:::2;:14:::0;;;;;;51794:10:::2;51779:26:::0;;;;;;;51864:15:::2;::::0;51845:14:::2;::::0;::::2;::::0;51730::::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;51779:26:0;51845:35:::2;::::0;:14;:18:::2;:35::i;:::-;51826:15;:54;;51818:80;;;;-1:-1:-1::0;;;51818:80:0::2;;;;;;;:::i;:::-;51937:22;::::0;::::2;::::0;51996:11;;:23:::2;::::0;51937:22;51996:15:::2;:23::i;:::-;51970:49:::0;;52056:12:::2;::::0;::::2;::::0;:24:::2;::::0;52073:6;52056:16:::2;:24::i;:::-;52030:12;::::0;::::2;:50:::0;52119:1:::2;52093:22;::::0;::::2;:27:::0;52133:12:::2;::::0;::::2;::::0;:54:::2;::::0;-1:-1:-1;;;;;52133:12:0::2;52167:10;52180:6:::0;52133:25:::2;:54::i;:::-;52243:4;52231:10;-1:-1:-1::0;;;;;52222:34:0::2;;52249:6;52222:34;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;32676:1:0;33638:22;;-1:-1:-1;;51568:696:0:o;52292:549::-;32720:1;33326:7;;:19;;33318:63;;;;-1:-1:-1;;;33318:63:0;;;;;;;:::i;:::-;32720:1;33459:7;:18;30099:7:::1;::::0;-1:-1:-1;;;30099:7:0;::::1;;;30098:8;30090:37;;;;-1:-1:-1::0;;;30090:37:0::1;;;;;;;:::i;:::-;52383:8:::2;:15:::0;52376:22;::::2;52368:48;;;;-1:-1:-1::0;;;52368:48:0::2;;;;;;;:::i;:::-;52427:21;52451:8;52460:4;52451:14;;;;;;;;;::::0;;;::::2;::::0;;;52500;;;:8:::2;:14:::0;;;;;;52515:10:::2;52500:26:::0;;;;;;;52451:14:::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;52539:16:0::2;52509:4:::0;52539:10:::2;:16::i;:::-;52568:15;52586:69;52639:4;:15;;;52586:48;52629:4;52586:38;52602:4;:21;;;52586:4;:11;;;:15;;:38;;;;:::i;:::-;:42:::0;::::2;:48::i;:::-;:52:::0;::::2;:69::i;:::-;52568:87;;52666:38;52684:10;52696:7;52666:17;:38::i;:::-;52751:21;::::0;::::2;::::0;52735:11;;:48:::2;::::0;52778:4:::2;::::0;52735:38:::2;::::0;:15:::2;:38::i;:48::-;52717:15;::::0;::::2;:66:::0;52801:32:::2;::::0;52807:10:::2;::::0;52801:32:::2;::::0;::::2;::::0;52819:4;;52825:7;;52801:32:::2;:::i;:::-;;;;;;;;-1:-1:-1::0;;32676:1:0;33638:22;;-1:-1:-1;;52292:549:0:o;39362:50::-;;;;;;;;;;;;;:::o;39858:25::-;;;;:::o;40215:182::-;40275:122;40215:182;:::o;44792:858::-;44859:8;:15;44852:22;;44844:47;;;;-1:-1:-1;;;44844:47:0;;;;;;;:::i;:::-;44902:21;44926:8;44935:4;44926:14;;;;;;;;;;;;;;;;;;44902:38;;44971:4;:20;;;44955:12;:36;44951:75;;45008:7;;;44951:75;45055:12;;;;:37;;-1:-1:-1;;;45055:37:0;;45036:16;;-1:-1:-1;;;;;45055:12:0;;:22;;:37;;45086:4;;45055:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45036:56;-1:-1:-1;45107:13:0;45103:102;;-1:-1:-1;45160:12:0;45137:20;;;;:35;45187:7;;45103:102;45217:18;45238:49;45252:4;:20;;;45274:12;45238:13;:49::i;:::-;45217:70;;45298:19;45320:71;45375:15;;45320:50;45354:4;:15;;;45320:29;45335:13;;45320:10;:14;;:29;;;;:::i;:::-;:33;;:50::i;:71::-;45419:5;;:38;;-1:-1:-1;;;45419:38:0;;45298:93;;-1:-1:-1;45404:12:0;;-1:-1:-1;;;;;45419:5:0;;;;:10;;:38;;45438:4;;45298:93;;45419:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45404:53;;45471:7;45468:175;;;45519:62;45545:35;45571:8;45545:21;:11;45561:4;45545:15;:21::i;:35::-;45519:21;;;;;:25;:62::i;:::-;45495:21;;;:86;45619:12;45596:20;;;:35;45468:175;44792:858;;;;;;;:::o;38363:36::-;;;;;;;;;;;;;;-1:-1:-1;;;38363:36:0;;;;:::o;39140:41::-;;;;:::o;39281:23::-;;;;;;-1:-1:-1;;;;;39281:23:0;;:::o;29781:78::-;29820:4;29844:7;-1:-1:-1;;;29844:7:0;;;;;29781:78::o;44604:180::-;44666:8;:15;44649:14;44692:85;44720:6;44714:3;:12;44692:85;;;44750:15;44761:3;44750:10;:15::i;:::-;44728:5;;44692:85;;;;44604:180;:::o;43268:417::-;27707:12;:10;:12::i;:::-;27697:6;;-1:-1:-1;;;;;27697:6:0;;;:22;;;27689:67;;;;-1:-1:-1;;;27689:67:0;;;;;;;:::i;:::-;43380:8:::1;:15:::0;43373:22;::::1;43365:48;;;;-1:-1:-1::0;;;43365:48:0::1;;;;;;;:::i;:::-;43428:11;43424:61;;;43456:17;:15;:17::i;:::-;43515:63;43566:11;43515:46;43535:8;43544:4;43535:14;;;;;;;;;;;;;;;;;;:25;;;43515:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;43497:15;:81;;;;43617:11;43589:8;43598:4;43589:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;43644:33;43648:4;43653:11;43665;43644:33;;;;;;;;:::i;:::-;;;;;;;;43268:417:::0;;;:::o;41042:185::-;27707:12;:10;:12::i;:::-;27697:6;;-1:-1:-1;;;;;27697:6:0;;;:22;;;27689:67;;;;-1:-1:-1;;;27689:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41116:21:0;::::1;41108:49;;;;-1:-1:-1::0;;;41108:49:0::1;;;;;;;:::i;:::-;41168:6;:16:::0;;-1:-1:-1;;;;;;41168:16:0::1;-1:-1:-1::0;;;;;41168:16:0;::::1;::::0;;::::1;::::0;;;41200:19:::1;::::0;::::1;::::0;-1:-1:-1;;41200:19:0::1;41042:185:::0;:::o;28127:148::-;27707:12;:10;:12::i;:::-;27697:6;;-1:-1:-1;;;;;27697:6:0;;;:22;;;27689:67;;;;-1:-1:-1;;;27689:67:0;;;;;;;:::i;:::-;28234:1:::1;28218:6:::0;;28197:40:::1;::::0;-1:-1:-1;;;;;28218:6:0;;::::1;::::0;28197:40:::1;::::0;28234:1;;28197:40:::1;28265:1;28248:19:::0;;-1:-1:-1;;;;;;28248:19:0::1;::::0;;28127:148::o;39190:46::-;;;;;;;;;;;;;:::o;41654:154::-;27707:12;:10;:12::i;:::-;27697:6;;-1:-1:-1;;;;;27697:6:0;;;:22;;;27689:67;;;;-1:-1:-1;;;27689:67:0;;;;;;;:::i;:::-;41735:17:::1;::::0;;;:11:::1;:17;::::0;;;;;;:24;;;41775:25;::::1;::::0;::::1;::::0;41747:4;;41755;;41775:25:::1;:::i;:::-;;;;;;;;41654:154:::0;;:::o;39062:19::-;;;-1:-1:-1;;;;;39062:19:0;;:::o;43822:772::-;43896:7;43916:21;43940:8;43949:4;43940:14;;;;;;;;;;;;;;;;43989;;;:8;:14;;;;;;-1:-1:-1;;;;;43989:21:0;;;;;;;;;;43940:14;;;;;;;;44050:21;;;;;44101:12;;;;:37;;-1:-1:-1;;;44101:37:0;;43940:14;;-1:-1:-1;43989:21:0;;43940:14;44101:12;;;;;:22;;:37;;44132:4;;44101:37;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44082:56;;44168:4;:20;;;44153:12;:35;:52;;;;-1:-1:-1;44192:13:0;;;44153:52;44149:354;;;44222:18;44243:49;44257:4;:20;;;44279:12;44243:13;:49::i;:::-;44222:70;;44307:19;44329:71;44384:15;;44329:50;44363:4;:15;;;44329:29;44344:13;;44329:10;:14;;:29;;;;:::i;:71::-;44307:93;-1:-1:-1;44434:57:0;44455:35;44481:8;44455:21;44307:93;44471:4;44455:15;:21::i;:35::-;44434:16;;:20;:57::i;:::-;44415:76;;44149:354;;;44522:64;44570:4;:15;;;44522:43;44560:4;44522:33;44538:16;44522:4;:11;;;:15;;:33;;;;:::i;:64::-;44515:71;;;;;;43822:772;;;;;:::o;39555:41::-;;;;;;;;;;;;;:::o;27485:79::-;27523:7;27550:6;-1:-1:-1;;;;;27550:6:0;27485:79;:::o;43693:121::-;43765:7;43792:14;:3;43800:5;43792:7;:14::i;:::-;43785:21;43693:121;-1:-1:-1;;;43693:121:0:o;39652:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42331:929::-;27707:12;:10;:12::i;:::-;27697:6;;-1:-1:-1;;;;;27697:6:0;;;:22;;;27689:67;;;;-1:-1:-1;;;27689:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42458:31:0;::::1;42450:59;;;;-1:-1:-1::0;;;42450:59:0::1;;;;;;;:::i;:::-;42524:9;42520:143;42539:12;:10;:12::i;:::-;42537:1;:14;42520:143;;;42610:8;42619:1;42610:11;;;;;;;;;::::0;;;::::1;::::0;;;:19:::1;:11;::::0;;::::1;;:19;::::0;-1:-1:-1;;;;;42581:49:0;;::::1;42610:19:::0;::::1;42581:49;;42573:78;;;;-1:-1:-1::0;;;42573:78:0::1;;;;;;;:::i;:::-;42553:3;;42520:143;;;;42679:11;42675:61;;;42707:17;:15;:17::i;:::-;42760:8;:15:::0;42748:28:::1;::::0;;;:11:::1;:28;::::0;;;;:42;;;42842:10:::1;::::0;42827:12:::1;:25;:53;;42870:10;;42827:53;;;42855:12;42827:53;42909:15;::::0;42801:79;;-1:-1:-1;42909:32:0::1;::::0;42929:11;42909:19:::1;:32::i;:::-;42891:15;:50:::0;42966:220:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;42966:220:0;;;-1:-1:-1;;;;;42966:220:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;42952:8:::1;:235:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;;42952:235:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;43215:37;::::1;::::0;::::1;::::0;42966:220;;;;43240:11;;43215:37:::1;:::i;:::-;;;;;;;;27767:1;42331:929:::0;;;;:::o;39088:43::-;;;;:::o;41344:128::-;27707:12;:10;:12::i;:::-;27697:6;;-1:-1:-1;;;;;27697:6:0;;;:22;;;27689:67;;;;-1:-1:-1;;;27689:67:0;;;;;;;:::i;:::-;41413:10:::1;::::0;;-1:-1:-1;;41399:24:0;::::1;41413:10;::::0;;::::1;41412:11;41399:24;::::0;;;;41439:25:::1;::::0;::::1;::::0;::::1;::::0;41453:10:::1;::::0;41439:25:::1;:::i;:::-;;;;;;;;41344:128::o:0;40831:203::-;27707:12;:10;:12::i;:::-;27697:6;;-1:-1:-1;;;;;27697:6:0;;;:22;;;27689:67;;;;-1:-1:-1;;;27689:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40912:23:0;::::1;40904:52;;;;-1:-1:-1::0;;;40904:52:0::1;;;;;;;:::i;:::-;40967:8;:20:::0;;-1:-1:-1;;;;;;40967:20:0::1;;-1:-1:-1::0;;;;;40967:20:0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;41003:23:::1;::::0;::::1;::::0;-1:-1:-1;;41003:23:0::1;40831:203:::0;:::o;48889:2168::-;32720:1;33326:7;;:19;;33318:63;;;;-1:-1:-1;;;33318:63:0;;;;;;;:::i;:::-;32720:1;33459:7;:18;30099:7:::1;::::0;-1:-1:-1;;;30099:7:0;::::1;;;30098:8;30090:37;;;;-1:-1:-1::0;;;30090:37:0::1;;;;;;;:::i;:::-;49273:4:::2;::::0;;;;::::2;::::0;;::::2;::::0;;-1:-1:-1;;;49273:4:0::2;::::0;;::::2;::::0;49318:7;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;49318:7:0;::::2;::::0;49119:23:::2;40010:115;49257:22:::0;49302:25;49350:12:::2;:10;:12::i;:::-;49393:4;49186:231;;;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;49186:231:0;;::::2;::::0;;;;;;49158:274;;49186:231:::2;49158:274:::0;;::::2;::::0;49620:10:::2;49443:18;49684::::0;;;:6:::2;:18:::0;;;;;:20;;::::2;::::0;::::2;::::0;;;49158:274;;-1:-1:-1;49443:18:0;;49505:249:::2;::::0;40466:115:::2;::::0;49585:4;;49620:10;;49654:7;;49684:20;49727:8;;49505:249:::2;;:::i;:::-;;;;;;;;;;;;;49477:292;;;;;;49443:326;;49780:14;49867:15;49884:10;49838:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49810:100;;;;;;49780:130;;49935:17;49955:26;49965:6;49973:1;49976;49979;49955:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;49955:26:0::2;::::0;-1:-1:-1;;49955:26:0;;;-1:-1:-1;;;;;;;50000:23:0;::::2;49992:53;;;;-1:-1:-1::0;;;49992:53:0::2;;;;;;;:::i;:::-;50077:6;::::0;-1:-1:-1;;;;;50064:19:0;;::::2;50077:6:::0;::::2;50064:19;50056:44;;;;-1:-1:-1::0;;;50056:44:0::2;;;;;;;:::i;:::-;50138:8;:15:::0;50131:22;::::2;50123:48;;;;-1:-1:-1::0;;;50123:48:0::2;;;;;;;:::i;:::-;50182:21;50206:8;50215:4;50206:14;;;;;;;;;;;;;;;;;;50182:38;;50231:21;50255:8;:14;50264:4;50255:14;;;;;;;;;;;:26;50270:10;-1:-1:-1::0;;;;;50255:26:0::2;-1:-1:-1::0;;;;;50255:26:0::2;;;;;;;;;;;;50231:50;;50328:15;:21;50344:4;50328:21;;;;;;;;;;;;50300:24;50316:7;50300:4;:11;;;:15;;:24;;;;:::i;:::-;:49;;50292:80;;;;-1:-1:-1::0;;;50292:80:0::2;;;;;;;:::i;:::-;50419:17;::::0;;;:11:::2;:17;::::0;;;;;50391:11;;:24:::2;::::0;50407:7;50391:15:::2;:24::i;:::-;:45;;50383:79;;;;-1:-1:-1::0;;;50383:79:0::2;;;;;;;:::i;:::-;50473:16;50484:4;50473:10;:16::i;:::-;50510:12;::::0;::::2;::::0;:74:::2;::::0;-1:-1:-1;;;;;50510:12:0::2;50548:10;50569:4;50576:7:::0;50510:29:::2;:74::i;:::-;50597:15;50615:69;50668:4;:15;;;50615:48;50658:4;50615:38;50631:4;:21;;;50615:4;:11;;;:15;;:38;;;;:::i;:69::-;50719:11:::0;;50597:87;;-1:-1:-1;50719:24:0::2;::::0;50735:7;50719:15:::2;:24::i;:::-;50705:38:::0;;;50788:21:::2;::::0;::::2;::::0;50772:48:::2;::::0;50815:4:::2;::::0;50772:38:::2;::::0;50705;50772:15:::2;:38::i;:48::-;50754:15;::::0;::::2;:66:::0;50855:11;;:24:::2;::::0;50871:7;50855:15:::2;:24::i;:::-;50841:38:::0;;50895:11;;50892:79:::2;;50922:37;50940:10;50951:7;50922:17;:37::i;:::-;51012:4;51000:10;-1:-1:-1::0;;;;;50988:61:0::2;;51018:7;51047:1;51026:6;:18;51033:10;-1:-1:-1::0;;;;;51026:18:0::2;-1:-1:-1::0;;;;;51026:18:0::2;;;;;;;;;;;;;:22;50988:61;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;32676:1:0;33638:22;;-1:-1:-1;;;;;;;;;;;48889:2168:0:o;51071:334::-;51127:4;51176:14;;;:8;:14;;;;;;;;51191:10;51176:26;;;;;;;51254:15;;51235:14;;;;51127:4;;51176:26;51235:35;;:14;:18;:35::i;:::-;51216:15;:54;51213:102;;51295:5;51301:1;51287:16;;;;;;;51213:102;51335:4;51340:56;51380:15;51340:35;51359:15;;51340:4;:14;;;:18;;:35;;;;:::i;:56::-;51327:70;;;;;51071:334;;;;:::o;46744:2034::-;32720:1;33326:7;;:19;;33318:63;;;;-1:-1:-1;;;33318:63:0;;;;;;;:::i;:::-;32720:1;33459:7;:18;30099:7:::1;::::0;-1:-1:-1;;;30099:7:0;::::1;;;30098:8;30090:37;;;;-1:-1:-1::0;;;30090:37:0::1;;;;;;;:::i;:::-;47128:4:::2;::::0;;;;::::2;::::0;;::::2;::::0;;-1:-1:-1;;;47128:4:0::2;::::0;;::::2;::::0;47173:7;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;47173:7:0;::::2;::::0;46974:23:::2;40010:115;47112:22:::0;47157:25;47205:12:::2;:10;:12::i;:::-;47248:4;47041:231;;;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;47041:231:0;;::::2;::::0;;;;;;47013:274;;47041:231:::2;47013:274:::0;;::::2;::::0;47475:10:::2;47298:18;47539::::0;;;:6:::2;:18:::0;;;;;:20;;::::2;::::0;::::2;::::0;;;47013:274;;-1:-1:-1;47298:18:0;;47360:249:::2;::::0;40275:122:::2;::::0;47440:4;;47475:10;;47509:7;;47539:20;47582:8;;47360:249:::2;;:::i;:::-;;;;;;;;;;;;;47332:292;;;;;;47298:326;;47635:14;47722:15;47739:10;47693:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47665:100;;;;;;47635:130;;47790:17;47810:26;47820:6;47828:1;47831;47834;47810:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;47810:26:0::2;::::0;-1:-1:-1;;47810:26:0;;;-1:-1:-1;;;;;;;47855:23:0;::::2;47847:53;;;;-1:-1:-1::0;;;47847:53:0::2;;;;;;;:::i;:::-;47932:6;::::0;-1:-1:-1;;;;;47919:19:0;;::::2;47932:6:::0;::::2;47919:19;47911:44;;;;-1:-1:-1::0;;;47911:44:0::2;;;;;;;:::i;:::-;47993:8;:15:::0;47986:22;::::2;47978:48;;;;-1:-1:-1::0;;;47978:48:0::2;;;;;;;:::i;:::-;48037:21;48061:8;48070:4;48061:14;;;;;;;;;::::0;;;::::2;::::0;;;48110;;;:8:::2;:14:::0;;;;;;48125:10:::2;48110:26:::0;;;;;;;48157:11;;48061:14:::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;48157:22:0;-1:-1:-1;48157:22:0::2;48149:63;;;;-1:-1:-1::0;;;48149:63:0::2;;;;;;;:::i;:::-;48225:16;48236:4;48225:10;:16::i;:::-;48252:15;48270:69;48323:4;:15;;;48270:48;48313:4;48270:38;48286:4;:21;;;48270:4;:11;;;:15;;:38;;;;:::i;:69::-;48377:11:::0;;48252:87;;-1:-1:-1;48377:24:0::2;::::0;48393:7;48377:15:::2;:24::i;:::-;48359:42:::0;;;48446:21:::2;::::0;::::2;::::0;48430:48:::2;::::0;48473:4:::2;::::0;48430:38:::2;::::0;48359:42;48430:15:::2;:38::i;:48::-;48412:15;::::0;::::2;:66:::0;48509:15:::2;48491:14;::::0;::::2;:33:::0;48560:22:::2;::::0;::::2;::::0;:35:::2;::::0;48587:7;48560:26:::2;:35::i;:::-;48535:22;::::0;::::2;:60:::0;48623:12:::2;::::0;::::2;::::0;:25:::2;::::0;48640:7;48623:16:::2;:25::i;:::-;48608:12;::::0;::::2;:40:::0;48661:38:::2;48679:10;48691:7:::0;48661:17:::2;:38::i;:::-;48725:10;-1:-1:-1::0;;;;;48717:53:0::2;;48736:4;48741:7;48768:1;48749:6;:18;48756:10;-1:-1:-1::0;;;;;48749:18:0::2;-1:-1:-1::0;;;;;48749:18:0::2;;;;;;;;;;;;;:20;48717:53;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;32676:1:0;33638:22;;-1:-1:-1;;;;;;;;;;;46744:2034:0:o;41480:166::-;27707:12;:10;:12::i;:::-;27697:6;;-1:-1:-1;;;;;27697:6:0;;;:22;;;27689:67;;;;-1:-1:-1;;;27689:67:0;;;;;;;:::i;:::-;41565:21:::1;::::0;;;:15:::1;:21;::::0;;;;;;:28;;;41609:29;::::1;::::0;::::1;::::0;41581:4;;41589;;41609:29:::1;:::i;45660:1027::-:0;30099:7;;-1:-1:-1;;;30099:7:0;;;;30098:8;30090:37;;;;-1:-1:-1;;;30090:37:0;;;;;;;:::i;:::-;45750:10:::1;::::0;::::1;;45742:30;;;;-1:-1:-1::0;;;45742:30:0::1;;;;;;;:::i;:::-;45798:8;:15:::0;45791:22;::::1;45783:47;;;;-1:-1:-1::0;;;45783:47:0::1;;;;;;;:::i;:::-;45841:21;45865:8;45874:4;45865:14;;;;;;;;;::::0;;;::::1;::::0;;;45914;;;:8:::1;:14:::0;;;;;;45929:10:::1;45914:26:::0;;;;;;;45987:21;;;:15:::1;:21:::0;;;;;;;45959:11;;45865:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;45914:26:0;45987:21;45959:24:::1;::::0;45975:7;45959:15:::1;:24::i;:::-;:49;;45951:78;;;;-1:-1:-1::0;;;45951:78:0::1;;;;;;;:::i;:::-;46076:17;::::0;;;:11:::1;:17;::::0;;;;;46048:11;;:24:::1;::::0;46064:7;46048:15:::1;:24::i;:::-;:45;;46040:79;;;;-1:-1:-1::0;;;46040:79:0::1;;;;;;;:::i;:::-;46130:16;46141:4;46130:10;:16::i;:::-;46167:12;::::0;::::1;::::0;:74:::1;::::0;-1:-1:-1;;;;;46167:12:0::1;46205:10;46226:4;46233:7:::0;46167:29:::1;:74::i;:::-;46254:15;46272:69;46325:4;:15;;;46272:48;46315:4;46272:38;46288:4;:21;;;46272:4;:11;;;:15;;:38;;;;:::i;:69::-;46376:11:::0;;46254:87;;-1:-1:-1;46376:24:0::1;::::0;46392:7;46376:15:::1;:24::i;:::-;46362:38:::0;;;46445:21:::1;::::0;::::1;::::0;46429:48:::1;::::0;46472:4:::1;::::0;46429:38:::1;::::0;46362;46429:15:::1;:38::i;:48::-;46411:15;::::0;::::1;:66:::0;46512:11;;:24:::1;::::0;46528:7;46512:15:::1;:24::i;:::-;46498:38:::0;;46552:11;;46549:79:::1;;46579:37;46597:10;46608:7;46579:17;:37::i;:::-;46665:4;46653:10;-1:-1:-1::0;;;;;46645:34:0::1;;46671:7;46645:34;;;;;;:::i;:::-;;;;;;;;30138:1;;;45660:1027:::0;;:::o;39245:29::-;;;;;;:::o;28430:244::-;27707:12;:10;:12::i;:::-;27697:6;;-1:-1:-1;;;;;27697:6:0;;;:22;;;27689:67;;;;-1:-1:-1;;;27689:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28519:22:0;::::1;28511:73;;;;-1:-1:-1::0;;;28511:73:0::1;;;;;;;:::i;:::-;28621:6;::::0;;28600:38:::1;::::0;-1:-1:-1;;;;;28600:38:0;;::::1;::::0;28621:6;::::1;::::0;28600:38:::1;::::0;::::1;28649:6;:17:::0;;-1:-1:-1;;;;;;28649:17:0::1;-1:-1:-1::0;;;;;28649:17:0;;;::::1;::::0;;;::::1;::::0;;28430:244::o;41829:158::-;27707:12;:10;:12::i;:::-;27697:6;;-1:-1:-1;;;;;27697:6:0;;;:22;;;27689:67;;;;-1:-1:-1;;;27689:67:0;;;;;;;:::i;:::-;41906:13:::1;:28:::0;;;41950:29:::1;::::0;::::1;::::0;::::1;::::0;41924:10;;41950:29:::1;:::i;14973:106::-:0;15061:10;14973:106;:::o;3784:181::-;3842:7;3874:5;;;3898:6;;;;3890:46;;;;-1:-1:-1;;;3890:46:0;;;;;;;:::i;4248:136::-;4306:7;4333:43;4337:1;4340;4333:43;;;;;;;;;;;;;;;;;:3;:43::i;34361:177::-;34444:86;34464:5;34494:23;;;34519:2;34523:5;34471:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;34471:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;34471:58:0;-1:-1:-1;;;;;;34471:58:0;;;;;;;;;;34444:19;:86::i;:::-;34361:177;;;:::o;5138:471::-;5196:7;5441:6;5437:47;;-1:-1:-1;5471:1:0;5464:8;;5437:47;5508:5;;;5512:1;5508;:5;:1;5532:5;;;;;:10;5524:56;;;;-1:-1:-1;;;5524:56:0;;;;;;;:::i;6085:132::-;6143:7;6170:39;6174:1;6177;6170:39;;;;;;;;;;;;;;;;;:3;:39::i;53375:427::-;-1:-1:-1;;;;;53460:17:0;;53452:40;;;;-1:-1:-1;;;53452:40:0;;;;;;;:::i;:::-;53522:5;;:30;;-1:-1:-1;;;53522:30:0;;53503:16;;-1:-1:-1;;;;;53522:5:0;;:15;;:30;;53546:4;;53522:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53503:49;;53577:8;53567:7;:18;53563:232;;;53649:5;;:28;;-1:-1:-1;;;53649:28:0;;-1:-1:-1;;;;;53649:5:0;;;;:14;;:28;;53664:3;;53668:8;;53649:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53563:232;;;53756:5;;:27;;-1:-1:-1;;;53756:27:0;;-1:-1:-1;;;;;53756:5:0;;;;:14;;:27;;53771:3;;53775:7;;53756:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53375:427;;;:::o;53815:178::-;53941:9;53815:178;:::o;34546:205::-;34647:96;34667:5;34697:27;;;34726:4;34732:2;34736:5;34674:68;;;;;;;;;;:::i;4687:192::-;4773:7;4809:12;4801:6;;;;4793:29;;;;-1:-1:-1;;;4793:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;4845:5:0;;;4687:192::o;36666:761::-;37090:23;37116:69;37144:4;37116:69;;;;;;;;;;;;;;;;;37124:5;-1:-1:-1;;;;;37116:27:0;;;:69;;;;;:::i;:::-;37200:17;;37090:95;;-1:-1:-1;37200:21:0;37196:224;;37342:10;37331:30;;;;;;;;;;;;:::i;:::-;37323:85;;;;-1:-1:-1;;;37323:85:0;;;;;;;:::i;6713:278::-;6799:7;6834:12;6827:5;6819:28;;;;-1:-1:-1;;;6819:28:0;;;;;;;;:::i;:::-;;6858:9;6874:1;6870;:5;;;;;;;6713:278;-1:-1:-1;;;;;6713:278:0:o;11956:196::-;12059:12;12091:53;12114:6;12122:4;12128:1;12131:12;12091:22;:53::i;:::-;12084:60;11956:196;-1:-1:-1;;;;11956:196:0:o;13333:979::-;13463:12;13496:18;13507:6;13496:10;:18::i;:::-;13488:60;;;;-1:-1:-1;;;13488:60:0;;;;;;;:::i;:::-;13622:12;13636:23;13663:6;-1:-1:-1;;;;;13663:11:0;13683:8;13694:4;13663:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13621:78;;;;13714:7;13710:595;;;13745:10;-1:-1:-1;13738:17:0;;-1:-1:-1;13738:17:0;13710:595;13859:17;;:21;13855:439;;14122:10;14116:17;14183:15;14170:10;14166:2;14162:19;14155:44;14070:148;14265:12;14258:20;;-1:-1:-1;;;14258:20:0;;;;;;;;:::i;9038:422::-;9405:20;9444:8;;;9038:422::o;1119:241:-1:-;;1223:2;1211:9;1202:7;1198:23;1194:32;1191:2;;;-1:-1;;1229:12;1191:2;85:6;72:20;97:33;124:5;97:33;:::i;1367:257::-;;1479:2;1467:9;1458:7;1454:23;1450:32;1447:2;;;-1:-1;;1485:12;1447:2;354:6;348:13;366:30;390:5;366:30;:::i;1631:241::-;;1735:2;1723:9;1714:7;1710:23;1706:32;1703:2;;;-1:-1;;1741:12;1703:2;-1:-1;775:20;;1697:175;-1:-1;1697:175::o;1879:263::-;;1994:2;1982:9;1973:7;1969:23;1965:32;1962:2;;;-1:-1;;2000:12;1962:2;-1:-1;923:13;;1956:186;-1:-1;1956:186::o;2149:366::-;;;2270:2;2258:9;2249:7;2245:23;2241:32;2238:2;;;-1:-1;;2276:12;2238:2;788:6;775:20;2328:63;;2428:2;2471:9;2467:22;72:20;97:33;124:5;97:33;:::i;:::-;2436:63;;;;2232:283;;;;;:::o;2522:637::-;;;;;2687:3;2675:9;2666:7;2662:23;2658:33;2655:2;;;-1:-1;;2694:12;2655:2;788:6;775:20;2746:63;;2846:2;2902:9;2898:22;625:20;650:46;690:5;650:46;:::i;:::-;2854:76;-1:-1;2967:2;3003:22;;206:20;231:30;206:20;231:30;:::i;:::-;2649:510;;;;-1:-1;2975:60;;3072:2;3111:22;775:20;;-1:-1;;2649:510::o;3166:366::-;;;3287:2;3275:9;3266:7;3262:23;3258:32;3255:2;;;-1:-1;;3293:12;3255:2;-1:-1;;775:20;;;3445:2;3484:22;;;775:20;;-1:-1;3249:283::o;3539:485::-;;;;3674:2;3662:9;3653:7;3649:23;3645:32;3642:2;;;-1:-1;;3680:12;3642:2;788:6;775:20;3732:63;;3832:2;3875:9;3871:22;775:20;3840:63;;3940:2;3980:9;3976:22;206:20;231:30;255:5;231:30;:::i;:::-;3948:60;;;;3636:388;;;;;:::o;4031:865::-;;;;;;;4218:3;4206:9;4197:7;4193:23;4189:33;4186:2;;;-1:-1;;4225:12;4186:2;788:6;775:20;4277:63;;4377:2;4420:9;4416:22;775:20;4385:63;;4485:2;4526:9;4522:22;1051:20;33914:4;35687:5;33903:16;35664:5;35661:33;35651:2;;-1:-1;;35698:12;35651:2;4180:716;;;;-1:-1;4493:61;;4591:2;4630:22;;475:20;;-1:-1;4699:3;4739:22;;475:20;;4808:3;4848:22;;;775:20;;-1:-1;4180:716;-1:-1;;4180:716::o;14471:271::-;;5573:5;32607:12;5684:52;5729:6;5724:3;5717:4;5710:5;5706:16;5684:52;:::i;:::-;5748:16;;;;;14605:137;-1:-1;;14605:137::o;14749:659::-;-1:-1;;;8420:87;;8405:1;8526:11;;5205:37;;;;15260:12;;;5205:37;15371:12;;;14994:414::o;15415:222::-;-1:-1;;;;;33698:54;;;;4974:37;;15542:2;15527:18;;15513:124::o;15644:444::-;-1:-1;;;;;33698:54;;;4974:37;;33698:54;;;;15991:2;15976:18;;4974:37;16074:2;16059:18;;5205:37;;;;15827:2;15812:18;;15798:290::o;16095:333::-;-1:-1;;;;;33698:54;;;;4974:37;;16414:2;16399:18;;5205:37;16250:2;16235:18;;16221:207::o;16435:210::-;33420:13;;33413:21;5088:34;;16556:2;16541:18;;16527:118::o;16652:321::-;33420:13;;33413:21;5088:34;;16959:2;16944:18;;5205:37;16801:2;16786:18;;16772:201::o;16980:222::-;5205:37;;;17107:2;17092:18;;17078:124::o;17209:668::-;5205:37;;;17613:2;17598:18;;5205:37;;;;17696:2;17681:18;;5205:37;;;;17779:2;17764:18;;5205:37;-1:-1;;;;;33698:54;17862:3;17847:19;;4974:37;17448:3;17433:19;;17419:458::o;17884:780::-;5205:37;;;18316:2;18301:18;;5205:37;;;;-1:-1;;;;;33698:54;;;;18399:2;18384:18;;4974:37;18482:2;18467:18;;5205:37;18565:3;18550:19;;5205:37;33709:42;18634:19;;5205:37;18151:3;18136:19;;18122:542::o;18671:548::-;5205:37;;;33914:4;33903:16;;;;19039:2;19024:18;;14424:35;19122:2;19107:18;;5205:37;19205:2;19190:18;;5205:37;18878:3;18863:19;;18849:370::o;19485:310::-;;19632:2;19653:17;19646:47;6243:5;32607:12;33046:6;19632:2;19621:9;19617:18;33034:19;6337:52;6382:6;33074:14;19621:9;33074:14;19632:2;6363:5;6359:16;6337:52;:::i;:::-;34943:7;34927:14;-1:-1;;34923:28;6401:39;;;;33074:14;6401:39;;19603:192;-1:-1;;19603:192::o;19802:416::-;20002:2;20016:47;;;6677:2;19987:18;;;33034:19;-1:-1;;;33074:14;;;6693:40;6752:12;;;19973:245::o;20225:416::-;20425:2;20439:47;;;7003:2;20410:18;;;33034:19;7039:30;33074:14;;;7019:51;7089:12;;;20396:245::o;20648:416::-;20848:2;20862:47;;;7340:2;20833:18;;;33034:19;-1:-1;;;33074:14;;;7356:34;7409:12;;;20819:245::o;21071:416::-;21271:2;21285:47;;;7660:2;21256:18;;;33034:19;7696:34;33074:14;;;7676:55;-1:-1;;;7751:12;;;7744:30;7793:12;;;21242:245::o;21494:416::-;21694:2;21708:47;;;8044:2;21679:18;;;33034:19;-1:-1;;;33074:14;;;8060:39;8118:12;;;21665:245::o;21917:416::-;22117:2;22131:47;;;8776:2;22102:18;;;33034:19;8812:29;33074:14;;;8792:50;8861:12;;;22088:245::o;22340:416::-;22540:2;22554:47;;;9112:2;22525:18;;;33034:19;-1:-1;;;33074:14;;;9128:38;9185:12;;;22511:245::o;22763:416::-;22963:2;22977:47;;;9436:2;22948:18;;;33034:19;-1:-1;;;33074:14;;;9452:39;9510:12;;;22934:245::o;23186:416::-;23386:2;23400:47;;;9761:2;23371:18;;;33034:19;-1:-1;;;33074:14;;;9777:45;9841:12;;;23357:245::o;23609:416::-;23809:2;23823:47;;;10092:2;23794:18;;;33034:19;-1:-1;;;33074:14;;;10108:40;10167:12;;;23780:245::o;24032:416::-;24232:2;24246:47;;;10418:2;24217:18;;;33034:19;-1:-1;;;33074:14;;;10434:40;10493:12;;;24203:245::o;24455:416::-;24655:2;24669:47;;;10744:1;24640:18;;;33034:19;-1:-1;;;33074:14;;;10759:30;10808:12;;;24626:245::o;24878:416::-;25078:2;25092:47;;;11059:2;25063:18;;;33034:19;-1:-1;;;33074:14;;;11075:36;11130:12;;;25049:245::o;25301:416::-;25501:2;25515:47;;;11381:2;25486:18;;;33034:19;11417:34;33074:14;;;11397:55;-1:-1;;;11472:12;;;11465:25;11509:12;;;25472:245::o;25724:416::-;25924:2;25938:47;;;11760:2;25909:18;;;33034:19;-1:-1;;;33074:14;;;11776:35;11830:12;;;25895:245::o;26147:416::-;26347:2;26361:47;;;26332:18;;;33034:19;12117:34;33074:14;;;12097:55;12171:12;;;26318:245::o;26570:416::-;26770:2;26784:47;;;12422:2;26755:18;;;33034:19;-1:-1;;;33074:14;;;12438:39;12496:12;;;26741:245::o;26993:416::-;27193:2;27207:47;;;12747:2;27178:18;;;33034:19;12783:31;33074:14;;;12763:52;12834:12;;;27164:245::o;27416:416::-;27616:2;27630:47;;;13085:2;27601:18;;;33034:19;-1:-1;;;33074:14;;;13101:35;13155:12;;;27587:245::o;27839:416::-;28039:2;28053:47;;;13406:2;28024:18;;;33034:19;-1:-1;;;33074:14;;;13422:42;13483:12;;;28010:245::o;28262:416::-;28462:2;28476:47;;;13734:2;28447:18;;;33034:19;13770:34;33074:14;;;13750:55;-1:-1;;;13825:12;;;13818:34;13871:12;;;28433:245::o;28685:416::-;28885:2;28899:47;;;14122:2;28870:18;;;33034:19;14158:33;33074:14;;;14138:54;14211:12;;;28856:245::o;29337:458::-;5205:37;;;-1:-1;;;;;33698:54;;;;29704:2;29689:18;;5860:63;33420:13;33413:21;29781:2;29766:18;;5088:34;29527:2;29512:18;;29498:297::o;29802:806::-;5205:37;;;-1:-1;;;;;33698:54;;;;30260:2;30245:18;;5860:63;30343:2;30328:18;;5205:37;;;;30426:2;30411:18;;5205:37;30509:3;30494:19;;5205:37;33709:42;30578:19;;5205:37;30082:3;30067:19;;30053:555::o;30615:333::-;5205:37;;;30934:2;30919:18;;5205:37;30770:2;30755:18;;30741:207::o;30955:432::-;5205:37;;;31296:2;31281:18;;5205:37;;;;33420:13;33413:21;31373:2;31358:18;;5088:34;31132:2;31117:18;;31103:284::o;31394:444::-;5205:37;;;31741:2;31726:18;;5205:37;;;;31824:2;31809:18;;5205:37;31577:2;31562:18;;31548:290::o;31845:668::-;5205:37;;;32249:2;32234:18;;5205:37;;;;32332:2;32317:18;;5205:37;;;;32415:2;32400:18;;5205:37;32498:3;32483:19;;5205:37;32084:3;32069:19;;32055:458::o;34502:268::-;34567:1;34574:101;34588:6;34585:1;34582:13;34574:101;;;34655:11;;;34649:18;34636:11;;;34629:39;34610:2;34603:10;34574:101;;;34690:6;34687:1;34684:13;34681:2;;;-1:-1;;34567:1;34737:16;;34730:27;34551:219::o;34964:117::-;-1:-1;;;;;33698:54;;35023:35;;35013:2;;35072:1;;35062:12;35088:111;35169:5;33420:13;33413:21;35147:5;35144:32;35134:2;;35190:1;;35180:12
Swarm Source
ipfs://c9ce2f6ab91a63d12be4d1554b63f2976628d6513aa6af4fa0d62543bcc81d81
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.002127 | 10,219,777.3067 | $21,741.76 |
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.