More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 823 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20075861 | 23 days ago | IN | 0 ETH | 0.0121889 | ||||
Claim | 19891790 | 49 days ago | IN | 0 ETH | 0.00056851 | ||||
Claim | 19891781 | 49 days ago | IN | 0 ETH | 0.00079808 | ||||
Withdraw | 19888032 | 49 days ago | IN | 0 ETH | 0.00091578 | ||||
Withdraw | 19887947 | 49 days ago | IN | 0 ETH | 0.00082977 | ||||
Claim | 19887940 | 49 days ago | IN | 0 ETH | 0.00054921 | ||||
Claim | 19887930 | 49 days ago | IN | 0 ETH | 0.00085673 | ||||
Deposit | 19793117 | 63 days ago | IN | 0 ETH | 0.00164238 | ||||
Deposit | 19793042 | 63 days ago | IN | 0 ETH | 0.00137454 | ||||
Withdraw | 19658259 | 82 days ago | IN | 0 ETH | 0.00239067 | ||||
Claim | 19610088 | 88 days ago | IN | 0 ETH | 0.00397272 | ||||
Claim | 19588861 | 91 days ago | IN | 0 ETH | 0.00344241 | ||||
Deposit | 19565352 | 95 days ago | IN | 0 ETH | 0.00533128 | ||||
Claim | 19565129 | 95 days ago | IN | 0 ETH | 0.00322483 | ||||
Claim | 19565012 | 95 days ago | IN | 0 ETH | 0.00363326 | ||||
Claim | 19304715 | 131 days ago | IN | 0 ETH | 0.00385341 | ||||
Deposit | 19304271 | 131 days ago | IN | 0 ETH | 0.00575802 | ||||
Deposit | 19304171 | 131 days ago | IN | 0 ETH | 0.00630603 | ||||
Claim | 19139110 | 154 days ago | IN | 0 ETH | 0.00472019 | ||||
Claim | 18919958 | 185 days ago | IN | 0 ETH | 0.00450826 | ||||
Claim | 18916040 | 186 days ago | IN | 0 ETH | 0.00228528 | ||||
Deposit | 18905015 | 187 days ago | IN | 0 ETH | 0.00314213 | ||||
Claim | 18904464 | 187 days ago | IN | 0 ETH | 0.00333221 | ||||
Withdraw | 18583251 | 232 days ago | IN | 0 ETH | 0.01096922 | ||||
Withdraw | 18531700 | 240 days ago | IN | 0 ETH | 0.0096089 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
StakingPoolsV4
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-10 */ // Sources flattened with hardhat v2.1.1 https://hardhat.org // File @openzeppelin/contracts/token/ERC20/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.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 contracts/interfaces/IDetailedERC20.sol pragma solidity ^0.6.12; interface IDetailedERC20 is IERC20 { function name() external returns (string memory); function symbol() external returns (string memory); function decimals() external returns (uint8); } // File contracts/interfaces/IMintableERC20.sol pragma solidity ^0.6.12; interface IMintableERC20 is IDetailedERC20{ function mint(address _recipient, uint256 _amount) external; function burnFrom(address account, uint256 amount) external; function lowerHasMinted(uint256 amount)external; } // File @openzeppelin/contracts/utils/[email protected] pragma solidity >=0.6.0 <0.8.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]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () 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/math/[email protected] pragma solidity >=0.6.0 <0.8.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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { 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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File @openzeppelin/contracts/math/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <0.8.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/IRewardVesting.sol pragma solidity ^0.6.12; interface IRewardVesting { function addEarning(address user, uint256 amount) external; function userBalances(address user) external view returns (uint256 bal); } // File contracts/interfaces/IVotingEscrow.sol pragma solidity ^0.6.12; interface IVotingEscrow { function balanceOf(address account) external view returns (uint256); function totalSupply() external view returns (uint256); } // File hardhat/[email protected] pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } } // File contracts/StakingPoolsV4.sol contract StakingPoolsV4 is ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 workingAmount; // actual amount * ve boost * lockup bonus uint256 rewardDebt; // Reward debt. uint256 power; } // Info of each pool. struct PoolInfo { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. uint256 lastRewardBlock; // Last block number that Wasabi distribution occurs. uint256 accRewardPerShare; // Accumulated Wasabi per share, times 1e18. See below. uint256 workingSupply; // Total supply of working amount uint256 totalDeposited; bool needVesting; uint256 earlyWithdrawFee; // divided by 10000 uint256 withdrawLock; // in second bool veBoostEnabled; mapping (address => UserInfo) userInfo; } /// @dev A mapping of all of the user deposit time mapped first by pool and then by address. mapping(address => mapping(uint256 => uint256)) private _depositedAt; /// @dev A mapping of userIsKnown mapped first by pool and then by address. mapping(address => mapping(uint256 => bool)) public userIsKnown; /// @dev A mapping of userAddress mapped first by pool and then by nextUser. mapping(uint256 => mapping(uint256 => address)) public userList; /// @dev index record next user index mapped by pool mapping(uint256 => uint256) public nextUser; // The Wasabi TOKEN! IMintableERC20 public reward; /// @dev The address of reward vesting. IRewardVesting public rewardVesting; IVotingEscrow public veWasabi; uint256 public rewardRate; // Info of each pool. PoolInfo[] public poolInfo; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; bool public mintWasabi; uint256[] public feeLevel; // fixed length = 9 (unit without 10^18); [50,200,500,1000,2000,3500,6000,9000,11000] uint256[] public discountTable; // fixed length = 9; [9,19,28,40,50,60,70,80,90] uint256 public withdrawFee; uint256 private constant hundred = 100; /// @dev The address of the account which currently has administrative capabilities over this contract. address public governance; address public pendingGovernance; /// @dev The address of the account which can perform emergency activities address public sentinel; address public withdrawFeeCollector; bool public pause; event PoolCreated( uint256 indexed poolId, IERC20 indexed token ); event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event Claim(address indexed user, uint256 indexed pid, uint256 amount); event WorkingAmountUpdate( address indexed user, uint256 indexed pid, uint256 newWorkingAmount, uint256 newWorkingSupply ); event PendingGovernanceUpdated( address pendingGovernance ); event GovernanceUpdated( address governance ); event WithdrawFeeCollectorUpdated( address withdrawFeeCollector ); event RewardVestingUpdated( IRewardVesting rewardVesting ); event PauseUpdated( bool status ); event SentinelUpdated( address sentinel ); event RewardRateUpdated( uint256 rewardRate ); // solium-disable-next-line constructor(address _governance, address _sentinel,address _withdrawFeeCollector) public { require(_governance != address(0), "StakingPoolsV4: governance address cannot be 0x0"); require(_sentinel != address(0), "StakingPoolsV4: sentinel address cannot be 0x0"); require(_withdrawFeeCollector != address(0), "StakingPoolsV4: withdrawFee collector address cannot be 0x0"); governance = _governance; sentinel = _sentinel; withdrawFeeCollector = _withdrawFeeCollector; feeLevel = [50,200,500,1000,2000,3500,6000,9000,11000]; discountTable = [10,20,30,40,50,60,72,81,91]; withdrawFee = 20; } modifier onlyGovernance() { require(msg.sender == governance, "StakingPoolsV4: only governance"); _; } ///@dev modifier add users to userlist. Users are indexed in order to keep track of modifier checkIfNewUser(uint256 pid) { if (!userIsKnown[msg.sender][pid]) { userList[nextUser[pid]][pid] = msg.sender; userIsKnown[msg.sender][pid] = true; nextUser[pid]++; } _; } function initialize( IMintableERC20 _rewardToken, IVotingEscrow _veWasabi, IRewardVesting _rewardVesting, bool _mintWasabi ) external onlyGovernance { reward = _rewardToken; veWasabi = _veWasabi; rewardVesting = _rewardVesting; mintWasabi = _mintWasabi; } function setPendingGovernance(address _pendingGovernance) external onlyGovernance { require(_pendingGovernance != address(0), "StakingPoolsV4: pending governance address cannot be 0x0"); pendingGovernance = _pendingGovernance; emit PendingGovernanceUpdated(_pendingGovernance); } function acceptGovernance() external { require(msg.sender == pendingGovernance, "StakingPoolsV4: only pending governance"); address _pendingGovernance = pendingGovernance; governance = _pendingGovernance; emit GovernanceUpdated(_pendingGovernance); } function poolLength() external view returns (uint256) { return poolInfo.length; } // Add a new lp to the pool. Can only be called by the owner. // XXX DO NOT add the same LP token more than once. Rewards will be messed up if you do. function add( uint256 _allocPoint, IERC20 _lpToken, bool _needVesting, uint256 _earlyWithdrawFee, uint256 _withdrawLock, bool _veBoostEnabled, bool _withUpdate ) public onlyGovernance { if (_withUpdate) { massUpdatePools(); } uint256 poolId = poolInfo.length; uint256 lastRewardBlock = block.number; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push(PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: lastRewardBlock, accRewardPerShare: 0, workingSupply: 0, totalDeposited: 0, needVesting:_needVesting, earlyWithdrawFee:_earlyWithdrawFee, withdrawLock:_withdrawLock, veBoostEnabled:_veBoostEnabled })); emit PoolCreated(poolId, _lpToken); } // Update the given pool's SMTY allocation point. Can only be called by the owner. function set( uint256 _pid, uint256 _allocPoint, bool _withUpdate ) public onlyGovernance { if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; } function setRewardRate(uint256 _rewardRate) external onlyGovernance { massUpdatePools(); rewardRate = _rewardRate; emit RewardRateUpdated(_rewardRate); } // Return block rewards over the given _from (inclusive) to _to (inclusive) block. function getBlockReward(uint256 _from, uint256 _to) public view returns (uint256) { uint256 to = _to; uint256 from = _from; if (from > to) { return 0; } uint256 rewardPerBlock = rewardRate; uint256 totalRewards = (to.sub(from)).mul(rewardPerBlock); return totalRewards; } // View function to see pending SMTYs on frontend. function pendingReward(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = pool.userInfo[_user]; uint256 accRewardPerShare = pool.accRewardPerShare; uint256 workingSupply = pool.workingSupply; if (block.number > pool.lastRewardBlock && workingSupply != 0) { uint256 wasabiReward = getBlockReward(pool.lastRewardBlock, block.number).mul( pool.allocPoint).div(totalAllocPoint); accRewardPerShare = accRewardPerShare.add(wasabiReward.mul(1e18).div(workingSupply)); } return user.workingAmount.mul(accRewardPerShare).div(1e18).sub(user.rewardDebt); } // View Accumulated Power function accumulatedPower(address _user, uint256 _pid) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = pool.userInfo[_user]; uint256 accRewardPerShare = pool.accRewardPerShare; uint256 workingSupply = pool.workingSupply; if (block.number > pool.lastRewardBlock && workingSupply != 0) { uint256 wasabiReward = getBlockReward(pool.lastRewardBlock, block.number).mul( pool.allocPoint).div(totalAllocPoint); accRewardPerShare = accRewardPerShare.add(wasabiReward.mul(1e18).div(workingSupply)); } return user.power.add(user.workingAmount.mul(accRewardPerShare).div(1e18).sub(user.rewardDebt)); } function getPoolUser(uint256 _poolId, uint256 _userIndex) external view returns (address) { return userList[_userIndex][_poolId]; } // Update reward variables for all pools. Be careful of gas spending! function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) public { _updatePool(_pid); } function _updatePool(uint256 _pid) internal { PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock) { return; } uint256 workingSupply = pool.workingSupply; if (workingSupply == 0) { pool.lastRewardBlock = block.number; return; } uint256 wasabiReward = getBlockReward(pool.lastRewardBlock, block.number).mul( pool.allocPoint).div(totalAllocPoint); if (mintWasabi) { reward.mint(address(this), wasabiReward); } pool.accRewardPerShare = pool.accRewardPerShare.add(wasabiReward.mul(1e18).div(workingSupply)); pool.lastRewardBlock = block.number; } modifier claimReward(uint256 _pid, address _account) { require(!pause, "StakingPoolsV4: emergency pause enabled"); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = pool.userInfo[_account]; _updatePool(_pid); if (user.workingAmount > 0) { uint256 rewardPending = user.workingAmount.mul(pool.accRewardPerShare).div(1e18).sub(user.rewardDebt); if(pool.needVesting){ reward.approve(address(rewardVesting),uint(-1)); rewardVesting.addEarning(_account,rewardPending); } else { safeWasabiTransfer(_account, rewardPending); } user.power = user.power.add(rewardPending); } _; // amount/boost may be changed _updateWorkingAmount(_pid, _account); user.rewardDebt = user.workingAmount.mul(pool.accRewardPerShare).div(1e18); } function _updateWorkingAmount( uint256 _pid, address _account ) internal { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = pool.userInfo[_account]; uint256 lim = user.amount.mul(4).div(10); uint256 votingBalance = veWasabi.balanceOf(_account); uint256 totalBalance = veWasabi.totalSupply(); if (totalBalance != 0 && pool.veBoostEnabled) { uint256 lsupply = pool.totalDeposited; lim = lim.add(lsupply.mul(votingBalance).div(totalBalance).mul(6).div(10)); } uint256 veAmount = Math.min(user.amount, lim); pool.workingSupply = pool.workingSupply.sub(user.workingAmount).add(veAmount); user.workingAmount = veAmount; emit WorkingAmountUpdate(_account, _pid, user.workingAmount, pool.workingSupply); } /* * Deposit without lock. */ function deposit(uint256 _pid, uint256 _amount) external nonReentrant claimReward(_pid, msg.sender) checkIfNewUser(_pid) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = pool.userInfo[msg.sender]; if (_amount > 0) { _depositedAt[msg.sender][_pid] = block.timestamp; pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); user.amount = user.amount.add(_amount); pool.totalDeposited = pool.totalDeposited.add(_amount); } emit Deposit(msg.sender, _pid, _amount); } function setFeeLevel(uint256[] calldata _feeLevel) external onlyGovernance { require(_feeLevel.length == 9, "StakingPoolsV4: feeLevel length mismatch"); feeLevel = _feeLevel; } function setDiscountTable(uint256[] calldata _discountTable) external onlyGovernance { require(_discountTable.length == 9, "StakingPoolsV4: discountTable length mismatch"); discountTable = _discountTable; } function setWithdrawFee(uint256 _withdrawFee) external onlyGovernance { withdrawFee = _withdrawFee; } function withdraw(uint256 _pid, uint256 amount) external nonReentrant { _withdraw(_pid, amount); } function _withdraw(uint256 _pid, uint256 amount) internal claimReward(_pid, msg.sender) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = pool.userInfo[msg.sender]; require(amount <= user.amount, "StakingPoolsV4: withdraw too much"); pool.totalDeposited = pool.totalDeposited.sub(amount); user.amount = user.amount - amount; uint256 withdrawPenalty = 0; uint256 finalizedAmount = amount; uint256 depositTimestamp = _depositedAt[msg.sender][_pid]; if (depositTimestamp.add(pool.withdrawLock) > block.timestamp) { withdrawPenalty = amount.mul(pool.earlyWithdrawFee).div(10000); pool.lpToken.safeTransfer(withdrawFeeCollector, withdrawPenalty); finalizedAmount = finalizedAmount.sub(withdrawPenalty); } else { uint256 votingBalance = veWasabi.balanceOf(msg.sender); withdrawPenalty = amount.mul(withdrawFee).div(10000); for (uint256 i = 0; i < 9; ++i) { if(votingBalance >= (feeLevel[i]).mul(1 ether)){ withdrawPenalty = amount.mul(withdrawFee).div(10000); withdrawPenalty = withdrawPenalty.mul(hundred.sub(discountTable[i])).div(hundred); } } pool.lpToken.safeTransfer(withdrawFeeCollector, withdrawPenalty); finalizedAmount = finalizedAmount.sub(withdrawPenalty); } pool.lpToken.safeTransfer(msg.sender, finalizedAmount); emit Withdraw(msg.sender, _pid, amount); } // solium-disable-next-line function claim(uint256 _pid) external nonReentrant claimReward(_pid, msg.sender) { } // Safe smty transfer function, just in case if rounding error causes pool to not have enough SMTYs. function safeWasabiTransfer(address _to, uint256 _amount) internal { if (_amount > 0) { uint256 wasabiBal = reward.balanceOf(address(this)); if (_amount > wasabiBal) { reward.transfer(_to, wasabiBal); } else { reward.transfer(_to, _amount); } } } function getUserInfo(address _account, uint256 _poolId) public view returns(uint, uint, uint) { PoolInfo storage pool = poolInfo[_poolId]; UserInfo storage user = pool.userInfo[_account]; return (user.amount, user.workingAmount, user.rewardDebt); } function getDepositedAt(address _account, uint256 _poolId) external view returns (uint256) { return _depositedAt[_account][_poolId]; } /// @dev Updates the reward vesting contract /// /// @param _rewardVesting the new reward vesting contract function setRewardVesting(IRewardVesting _rewardVesting) external { require(pause && (msg.sender == governance || msg.sender == sentinel), "StakingPoolsV4: not paused, or not governance or sentinel"); rewardVesting = _rewardVesting; emit RewardVestingUpdated(_rewardVesting); } /// @dev Sets the address of the sentinel /// /// @param _sentinel address of the new sentinel function setSentinel(address _sentinel) external onlyGovernance { require(_sentinel != address(0), "StakingPoolsV4: sentinel address cannot be 0x0."); sentinel = _sentinel; emit SentinelUpdated(_sentinel); } /// @dev Sets if the contract should enter emergency pause mode. /// /// There are 2 main reasons to pause: /// 1. Need to shut down claims in case of any issues in the reward vesting contract /// 2. Need to migrate to a new reward vesting contract /// /// While this contract is paused, claim is disabled /// /// @param _pause if the contract should enter emergency pause mode. function setPause(bool _pause) external { require(msg.sender == governance || msg.sender == sentinel, "StakingPoolsV4: !(gov || sentinel)"); pause = _pause; emit PauseUpdated(_pause); } function setWithdrawFeeCollector(address _newWithdrawFeeCollector) external onlyGovernance { require(_newWithdrawFeeCollector != address(0), "StakingPoolsV4: withdrawFeeCollector address cannot be 0x0."); withdrawFeeCollector = _newWithdrawFeeCollector; emit WithdrawFeeCollectorUpdated(_newWithdrawFeeCollector); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_sentinel","type":"address"},{"internalType":"address","name":"_withdrawFeeCollector","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"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":false,"internalType":"address","name":"governance","type":"address"}],"name":"GovernanceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"PauseUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pendingGovernance","type":"address"}],"name":"PendingGovernanceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"}],"name":"PoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardRate","type":"uint256"}],"name":"RewardRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IRewardVesting","name":"rewardVesting","type":"address"}],"name":"RewardVestingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sentinel","type":"address"}],"name":"SentinelUpdated","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":false,"internalType":"address","name":"withdrawFeeCollector","type":"address"}],"name":"WithdrawFeeCollectorUpdated","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":"newWorkingAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newWorkingSupply","type":"uint256"}],"name":"WorkingAmountUpdate","type":"event"},{"inputs":[],"name":"acceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"accumulatedPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"bool","name":"_needVesting","type":"bool"},{"internalType":"uint256","name":"_earlyWithdrawFee","type":"uint256"},{"internalType":"uint256","name":"_withdrawLock","type":"uint256"},{"internalType":"bool","name":"_veBoostEnabled","type":"bool"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","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"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"discountTable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getBlockReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"getDepositedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_userIndex","type":"uint256"}],"name":"getPoolUser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IMintableERC20","name":"_rewardToken","type":"address"},{"internalType":"contract IVotingEscrow","name":"_veWasabi","type":"address"},{"internalType":"contract IRewardVesting","name":"_rewardVesting","type":"address"},{"internalType":"bool","name":"_mintWasabi","type":"bool"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintWasabi","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nextUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGovernance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accRewardPerShare","type":"uint256"},{"internalType":"uint256","name":"workingSupply","type":"uint256"},{"internalType":"uint256","name":"totalDeposited","type":"uint256"},{"internalType":"bool","name":"needVesting","type":"bool"},{"internalType":"uint256","name":"earlyWithdrawFee","type":"uint256"},{"internalType":"uint256","name":"withdrawLock","type":"uint256"},{"internalType":"bool","name":"veBoostEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"contract IMintableERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardVesting","outputs":[{"internalType":"contract IRewardVesting","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sentinel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"_discountTable","type":"uint256[]"}],"name":"setDiscountTable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_feeLevel","type":"uint256[]"}],"name":"setFeeLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pendingGovernance","type":"address"}],"name":"setPendingGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardRate","type":"uint256"}],"name":"setRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IRewardVesting","name":"_rewardVesting","type":"address"}],"name":"setRewardVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sentinel","type":"address"}],"name":"setSentinel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawFee","type":"uint256"}],"name":"setWithdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWithdrawFeeCollector","type":"address"}],"name":"setWithdrawFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userIsKnown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"veWasabi","outputs":[{"internalType":"contract IVotingEscrow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600a553480156200001657600080fd5b50604051620032f8380380620032f8833981810160405260608110156200003c57600080fd5b508051602082015160409092015160016000559091906001600160a01b038316620000995760405162461bcd60e51b81526004018080602001828103825260308152602001806200329a6030913960400191505060405180910390fd5b6001600160a01b038216620000e05760405162461bcd60e51b815260040180806020018281038252602e815260200180620032ca602e913960400191505060405180910390fd5b6001600160a01b038116620001275760405162461bcd60e51b815260040180806020018281038252603b8152602001806200325f603b913960400191505060405180910390fd5b600f80546001600160a01b038086166001600160a01b03199283161790925560118054858416908316179055601280549284169290911691909117905560408051610120810182526032815260c860208201526101f4918101919091526103e860608201526107d06080820152610dac60a082015261177060c082015261232860e0820152612af8610100820152620001c590600c90600962000230565b506040805161012081018252600a815260146020820152601e918101919091526028606082015260326080820152603c60a0820152604860c0820152605160e0820152605b6101008201526200022090600d90600962000286565b50506014600e5550620002e09050565b82805482825590600052602060002090810192821562000274579160200282015b8281111562000274578251829061ffff1690559160200191906001019062000251565b5062000282929150620002c9565b5090565b82805482825590600052602060002090810192821562000274579160200282015b8281111562000274578251829060ff16905591602001919060010190620002a7565b5b80821115620002825760008155600101620002ca565b612f6f80620002f06000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80638439c2bc11610151578063b65d9370116100c3578063e2bbb15811610087578063e2bbb158146107e8578063e941fa781461080b578063ee0f0e0514610813578063f39c38a01461081b578063f58c251c14610823578063fecf97341461082b57610269565b8063b65d937014610764578063b6ac642a14610787578063bedb86fb146107a4578063d7021c74146107c3578063e07fc745146107cb57610269565b80639e447fc6116101155780639e447fc614610663578063a2315e9414610680578063a4198642146106f0578063adc1f0d714610713578063ae2349de14610739578063b50224b51461075c57610269565b80638439c2bc1461058d5780638456cb59146105dd5780638a63855f146105e55780638e73c93a1461061157806398969e821461063757610269565b8063441a3e70116101ea578063630b5ba1116101ae578063630b5ba1146104d457806364482f79146104dc5780636650aa9b146105075780636a6366ff1461053357806376e8424f1461053b5780637b0a47ee1461058557610269565b8063441a3e70146103ff57806348f7d8e0146104225780634bb493d61461043f57806351eb05a6146104af5780635aa6e675146104cc57610269565b806317caf6f11161023157806317caf6f1146103915780631f2d659914610399578063228cb733146103b6578063238efcbc146103da578063379607f5146103e257610269565b8063081e3eda1461026e57806309dac061146102885780630abb6035146102b05780630b1e57d2146102d65780631526fe2714610316575b600080fd5b610276610869565b60408051918252519081900360200190f35b6102ae6004803603602081101561029e57600080fd5b50356001600160a01b031661086f565b005b6102ae600480360360208110156102c657600080fd5b50356001600160a01b0316610955565b610302600480360360408110156102ec57600080fd5b506001600160a01b038135169060200135610a3b565b604080519115158252519081900360200190f35b6103336004803603602081101561032c57600080fd5b5035610a5b565b604080516001600160a01b03909b168b5260208b0199909952898901979097526060890195909552608088019390935260a0870191909152151560c086015260e0850152610100840152151561012083015251908190036101400190f35b610276610acb565b610276600480360360208110156103af57600080fd5b5035610ad1565b6103be610ae3565b604080516001600160a01b039092168252519081900360200190f35b6102ae610af2565b6102ae600480360360208110156103f857600080fd5b5035610b92565b6102ae6004803603604081101561041557600080fd5b5080359060200135610e30565b6102766004803603602081101561043857600080fd5b5035610ea0565b6102ae6004803603602081101561045557600080fd5b81019060208101813564010000000081111561047057600080fd5b82018360208201111561048257600080fd5b803590602001918460208302840111640100000000831117156104a457600080fd5b509092509050610ebe565b6102ae600480360360208110156104c557600080fd5b5035610f5b565b6103be610f67565b6102ae610f76565b6102ae600480360360608110156104f257600080fd5b50803590602081013590604001351515610f99565b6102766004803603604081101561051d57600080fd5b506001600160a01b03813516906020013561105f565b610302611150565b6105676004803603604081101561055157600080fd5b506001600160a01b038135169060200135611159565b60408051938452602084019290925282820152519081900360600190f35b6102766111b1565b6102ae600480360360e08110156105a357600080fd5b508035906001600160a01b0360208201351690604081013515159060608101359060808101359060a081013515159060c0013515156111b7565b6103026113a4565b610276600480360360408110156105fb57600080fd5b506001600160a01b0381351690602001356113b4565b6102ae6004803603602081101561062757600080fd5b50356001600160a01b03166113dc565b6102766004803603604081101561064d57600080fd5b50803590602001356001600160a01b03166114a2565b6102ae6004803603602081101561067957600080fd5b503561156b565b6102ae6004803603602081101561069657600080fd5b8101906020810181356401000000008111156106b157600080fd5b8201836020820111156106c357600080fd5b803590602001918460208302840111640100000000831117156106e557600080fd5b5090925090506115fb565b6103be6004803603604081101561070657600080fd5b5080359060200135611693565b6102ae6004803603602081101561072957600080fd5b50356001600160a01b03166116b8565b6103be6004803603604081101561074f57600080fd5b508035906020013561179e565b6103be6117c4565b6102766004803603604081101561077a57600080fd5b50803590602001356117d3565b6102ae6004803603602081101561079d57600080fd5b50356117fd565b6102ae600480360360208110156107ba57600080fd5b5035151561184f565b6103be611900565b610276600480360360208110156107e157600080fd5b503561190f565b6102ae600480360360408110156107fe57600080fd5b508035906020013561191c565b610276611cfb565b6103be611d01565b6103be611d10565b6103be611d1f565b6102ae6004803603608081101561084157600080fd5b506001600160a01b038135811691602081013582169160408201351690606001351515611d2e565b60095490565b600f546001600160a01b031633146108bc576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b6001600160a01b0381166109015760405162461bcd60e51b815260040180806020018281038252602f815260200180612ebf602f913960400191505060405180910390fd5b601180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdc117600f93282860144d2cd2745f8e2e15c3ca2a32b4290c30f7cd1ae7ffcb99181900360200190a150565b600f546001600160a01b031633146109a2576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b6001600160a01b0381166109e75760405162461bcd60e51b8152600401808060200182810382526038815260200180612d216038913960400191505060405180910390fd5b601080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fc9e2377236eab4280090ce8f2317332649736d92f00dcf20a8dd6684ec5e78399181900360200190a150565b600260209081526000928352604080842090915290825290205460ff1681565b60098181548110610a6857fe5b60009182526020909120600b909102018054600182015460028301546003840154600485015460058601546006870154600788015460088901546009909901546001600160a01b0390981699509597949693959294919360ff918216939291168a565b600a5481565b60046020526000908152604090205481565b6005546001600160a01b031681565b6010546001600160a01b03163314610b3b5760405162461bcd60e51b8152600401808060200182810382526027815260200180612e566027913960400191505060405180910390fd5b601054600f80546001600160a01b0319166001600160a01b0390921691821790556040805182815290517f9d3e522e1e47a2f6009739342b9cc7b252a1888154e843ab55ee1c81745795ab9181900360200190a150565b60026000541415610bea576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260005560125481903390600160a01b900460ff1615610c3c5760405162461bcd60e51b8152600401808060200182810382526027815260200180612e096027913960400191505060405180910390fd5b600060098381548110610c4b57fe5b600091825260208083206001600160a01b0386168452600a600b9093020191820190526040909120909150610c7f84611dcb565b600181015415610dee576000610cc68260020154610cc0670de0b6b3a7640000610cba87600301548760010154611ed490919063ffffffff16565b90611f34565b90611f9b565b600684015490915060ff1615610dce576005546006546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b505050506040513d6020811015610d5a57600080fd5b50506006546040805163733cb55560e11b81526001600160a01b038781166004830152602482018590529151919092169163e6796aaa91604480830192600092919082900301818387803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050610dd8565b610dd88482611ff8565b6003820154610de7908261218e565b6003830155505b610df884846121e8565b610e1f670de0b6b3a7640000610cba84600301548460010154611ed490919063ffffffff16565b600290910155505060016000555050565b60026000541415610e88576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055610e9782826123ff565b50506001600055565b600d8181548110610ead57fe5b600091825260209091200154905081565b600f546001600160a01b03163314610f0b576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b60098114610f4a5760405162461bcd60e51b8152600401808060200182810382526028815260200180612dc16028913960400191505060405180910390fd5b610f56600c8383612c87565b505050565b610f6481611dcb565b50565b600f546001600160a01b031681565b60095460005b81811015610f9557610f8d81610f5b565b600101610f7c565b5050565b600f546001600160a01b03163314610fe6576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b8015610ff457610ff4610f76565b6110318261102b6009868154811061100857fe5b90600052602060002090600b020160010154600a54611f9b90919063ffffffff16565b9061218e565b600a81905550816009848154811061104557fe5b90600052602060002090600b020160010181905550505050565b6000806009838154811061106f57fe5b600091825260208083206001600160a01b0388168452600a600b90930201918201905260409091206003820154600483015460028401549394509192909190431180156110bb57508015155b1561110a5760006110e4600a54610cba87600101546110de8960020154436117d3565b90611ed4565b90506111066110ff83610cba84670de0b6b3a7640000611ed4565b849061218e565b9250505b6111436111388460020154610cc0670de0b6b3a7640000610cba878960010154611ed490919063ffffffff16565b60038501549061218e565b9450505050505b92915050565b600b5460ff1681565b6000806000806009858154811061116c57fe5b600091825260208083206001600160a01b038a168452600a600b9093020191909101905260409020805460018201546002909201549095509093509150509250925092565b60085481565b600f546001600160a01b03163314611204576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b801561121257611212610f76565b600954600a544390611224908a61218e565b600a8190555060096040518061014001604052808a6001600160a01b031681526020018b8152602001838152602001600081526020016000815260200160008152602001891515815260200188815260200187815260200186151581525090806001815401808255809150506001900390600052602060002090600b020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e0820151816007015561010082015181600801556101208201518160090160006101000a81548160ff0219169083151502179055505050876001600160a01b0316827f65fc0eb45954044fb55e1b01344d5d72fbfdf88e732d955f73bb7fb2bcc131e960405160405180910390a3505050505050505050565b601254600160a01b900460ff1681565b6001600160a01b03919091166000908152600160209081526040808320938352929052205490565b601254600160a01b900460ff1680156114135750600f546001600160a01b031633148061141357506011546001600160a01b031633145b61144e5760405162461bcd60e51b8152600401808060200182810382526039815260200180612ce86039913960400191505060405180910390fd5b600680546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fcd409fc2a693558f338316d2cd6cb79806b6ca7b834d35e3c44eb9f5a5f6bafb9181900360200190a150565b600080600984815481106114b257fe5b600091825260208083206001600160a01b0387168452600a600b90930201918201905260409091206003820154600483015460028401549394509192909190431180156114fe57508015155b15611540576000611521600a54610cba87600101546110de8960020154436117d3565b905061153c6110ff83610cba84670de0b6b3a7640000611ed4565b9250505b6111438360020154610cc0670de0b6b3a7640000610cba868860010154611ed490919063ffffffff16565b600f546001600160a01b031633146115b8576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b6115c0610f76565b60088190556040805182815290517f41d466ebd06fb97e7786086ac8b69b7eb7da798592036251291d34e9791cde019181900360200190a150565b600f546001600160a01b03163314611648576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b600981146116875760405162461bcd60e51b815260040180806020018281038252602d815260200180612d94602d913960400191505060405180910390fd5b610f56600d8383612c87565b600090815260036020908152604080832093835292905220546001600160a01b031690565b600f546001600160a01b03163314611705576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b6001600160a01b03811661174a5760405162461bcd60e51b815260040180806020018281038252603b815260200180612d59603b913960400191505060405180910390fd5b601280546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f188d2dfa1337286c88f2d9c0340823249d35eee039dfb4b15fec52a4bf69214d9181900360200190a150565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b6006546001600160a01b031681565b60008183818111156117ea5760009250505061114a565b6008546000611143826110de8686611f9b565b600f546001600160a01b0316331461184a576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b600e55565b600f546001600160a01b031633148061187257506011546001600160a01b031633145b6118ad5760405162461bcd60e51b8152600401808060200182810382526022815260200180612f186022913960400191505060405180910390fd5b60128054821515600160a01b810260ff60a01b199092169190911790915560408051918252517f77860e247ab9186dbe64e5bd0e0b93273cc4273e01818420e788f500078886f59181900360200190a150565b6007546001600160a01b031681565b600c8181548110610ead57fe5b60026000541415611974576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260005560125482903390600160a01b900460ff16156119c65760405162461bcd60e51b8152600401808060200182810382526027815260200180612e096027913960400191505060405180910390fd5b6000600983815481106119d557fe5b600091825260208083206001600160a01b0386168452600a600b9093020191820190526040909120909150611a0984611dcb565b600181015415611b6c576000611a448260020154610cc0670de0b6b3a7640000610cba87600301548760010154611ed490919063ffffffff16565b600684015490915060ff1615611b4c576005546006546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b158015611aae57600080fd5b505af1158015611ac2573d6000803e3d6000fd5b505050506040513d6020811015611ad857600080fd5b50506006546040805163733cb55560e11b81526001600160a01b038781166004830152602482018590529151919092169163e6796aaa91604480830192600092919082900301818387803b158015611b2f57600080fd5b505af1158015611b43573d6000803e3d6000fd5b50505050611b56565b611b568482611ff8565b6003820154611b65908261218e565b6003830155505b336000908152600260209081526040808320898452909152902054869060ff16611bee5760008181526004602081815260408084208054855260038352818520868652835281852080546001600160a01b0319163390811790915585526002835281852086865283529320805460ff1916600190811790915591905281540190555b600060098881548110611bfd57fe5b60009182526020808320338452600a600b90930201918201905260409091209091508715611c7e573360008181526001602090815260408083208d845290915290204290558254611c5b916001600160a01b0390911690308b6128f5565b8054611c67908961218e565b81556005820154611c78908961218e565b60058301555b6040805189815290518a9133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a3505050611cc284846121e8565b611ce9670de0b6b3a7640000610cba84600301548460010154611ed490919063ffffffff16565b60029091015550506001600055505050565b600e5481565b6012546001600160a01b031681565b6010546001600160a01b031681565b6011546001600160a01b031681565b600f546001600160a01b03163314611d7b576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b600580546001600160a01b03199081166001600160a01b0396871617909155600780548216948616949094179093556006805490931691909316179055600b805460ff1916911515919091179055565b600060098281548110611dda57fe5b90600052602060002090600b0201905080600201544311611dfb5750610f64565b600481015480611e12575043600290910155610f64565b6000611e30600a54610cba85600101546110de8760020154436117d3565b600b5490915060ff1615611eaa57600554604080516340c10f1960e01b81523060048201526024810184905290516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b158015611e9157600080fd5b505af1158015611ea5573d6000803e3d6000fd5b505050505b611ec361113883610cba84670de0b6b3a7640000611ed4565b600384015550504360029091015550565b600082611ee35750600061114a565b82820282848281611ef057fe5b0414611f2d5760405162461bcd60e51b8152600401808060200182810382526021815260200180612e9e6021913960400191505060405180910390fd5b9392505050565b6000808211611f8a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611f9357fe5b049392505050565b600082821115611ff2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b8015610f9557600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561204957600080fd5b505afa15801561205d573d6000803e3d6000fd5b505050506040513d602081101561207357600080fd5b5051905080821115612107576005546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156120d557600080fd5b505af11580156120e9573d6000803e3d6000fd5b505050506040513d60208110156120ff57600080fd5b50610f569050565b6005546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561215d57600080fd5b505af1158015612171573d6000803e3d6000fd5b505050506040513d602081101561218757600080fd5b5050505050565b600082820183811015611f2d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000600983815481106121f757fe5b600091825260208083206001600160a01b0386168452600a600b90930201828101909152604083208054919450929161223591610cba906004611ed4565b600754604080516370a0823160e01b81526001600160a01b038881166004830152915193945060009391909216916370a08231916024808301926020929190829003018186803b15801561228857600080fd5b505afa15801561229c573d6000803e3d6000fd5b505050506040513d60208110156122b257600080fd5b5051600754604080516318160ddd60e01b815290519293506000926001600160a01b03909216916318160ddd91600480820192602092909190829003018186803b1580156122ff57600080fd5b505afa158015612313573d6000803e3d6000fd5b505050506040513d602081101561232957600080fd5b5051905080158015906123405750600985015460ff165b1561236e57600585015461236a612363600a610cba60066110de8783888b611ed4565b859061218e565b9350505b600061237e856000015485612955565b905061239f8161102b87600101548960040154611f9b90919063ffffffff16565b60048701908155600186018290555460408051838152602081019290925280518a926001600160a01b038b16927fd8332ec1be38daba39ef83322321506f4575912461d58a94061b6d98666a4fbb92918290030190a35050505050505050565b60125482903390600160a01b900460ff161561244c5760405162461bcd60e51b8152600401808060200182810382526027815260200180612e096027913960400191505060405180910390fd5b60006009838154811061245b57fe5b600091825260208083206001600160a01b0386168452600a600b909302019182019052604090912090915061248f84611dcb565b6001810154156125f25760006124ca8260020154610cc0670de0b6b3a7640000610cba87600301548760010154611ed490919063ffffffff16565b600684015490915060ff16156125d2576005546006546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b505050506040513d602081101561255e57600080fd5b50506006546040805163733cb55560e11b81526001600160a01b038781166004830152602482018590529151919092169163e6796aaa91604480830192600092919082900301818387803b1580156125b557600080fd5b505af11580156125c9573d6000803e3d6000fd5b505050506125dc565b6125dc8482611ff8565b60038201546125eb908261218e565b6003830155505b60006009878154811061260157fe5b60009182526020808320338452600a600b90930201918201905260409091208054919250908711156126645760405162461bcd60e51b8152600401808060200182810382526021815260200180612e7d6021913960400191505060405180910390fd5b60058201546126739088611f9b565b6005830155805487900381553360009081526001602090815260408083208b8452909152812054600884015489919042906126af90839061218e565b1115612702576126d2612710610cba87600701548d611ed490919063ffffffff16565b60125486549194506126f1916001600160a01b0390811691168561296b565b6126fb8284611f9b565b9150612865565b600754604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561274d57600080fd5b505afa158015612761573d6000803e3d6000fd5b505050506040513d602081101561277757600080fd5b5051600e549091506127929061271090610cba908e90611ed4565b935060005b600981101561283a576127d2670de0b6b3a7640000600c83815481106127b957fe5b9060005260206000200154611ed490919063ffffffff16565b8210612832576127f3612710610cba600e548f611ed490919063ffffffff16565b945061282f6064610cba612828600d858154811061280d57fe5b90600052602060002001546064611f9b90919063ffffffff16565b8890611ed4565b94505b600101612797565b506012548654612857916001600160a01b0391821691168661296b565b6128618385611f9b565b9250505b845461287b906001600160a01b0316338461296b565b604080518b815290518c9133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a350505050506128c184846121e8565b6128e8670de0b6b3a7640000610cba84600301548460010154611ed490919063ffffffff16565b6002909101555050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261294f9085906129b9565b50505050565b60008183106129645781611f2d565b5090919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f569084905b6060612a0e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a6a9092919063ffffffff16565b805190915015610f5657808060200190516020811015612a2d57600080fd5b5051610f565760405162461bcd60e51b815260040180806020018281038252602a815260200180612eee602a913960400191505060405180910390fd5b6060612a798484600085612a81565b949350505050565b606082471015612ac25760405162461bcd60e51b8152600401808060200182810382526026815260200180612e306026913960400191505060405180910390fd5b612acb85612bdd565b612b1c576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612b5b5780518252601f199092019160209182019101612b3c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612bbd576040519150601f19603f3d011682016040523d82523d6000602084013e612bc2565b606091505b5091509150612bd2828286612be3565b979650505050505050565b3b151590565b60608315612bf2575081611f2d565b825115612c025782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c4c578181015183820152602001612c34565b50505050905090810190601f168015612c795780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b828054828255906000526020600020908101928215612cc2579160200282015b82811115612cc2578235825591602001919060010190612ca7565b50612cce929150612cd2565b5090565b5b80821115612cce5760008155600101612cd356fe5374616b696e67506f6f6c7356343a206e6f74207061757365642c206f72206e6f7420676f7665726e616e6365206f722073656e74696e656c5374616b696e67506f6f6c7356343a2070656e64696e6720676f7665726e616e636520616464726573732063616e6e6f74206265203078305374616b696e67506f6f6c7356343a207769746864726177466565436f6c6c6563746f7220616464726573732063616e6e6f74206265203078302e5374616b696e67506f6f6c7356343a20646973636f756e745461626c65206c656e677468206d69736d617463685374616b696e67506f6f6c7356343a206665654c6576656c206c656e677468206d69736d617463685374616b696e67506f6f6c7356343a206f6e6c7920676f7665726e616e6365005374616b696e67506f6f6c7356343a20656d657267656e637920706175736520656e61626c6564416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5374616b696e67506f6f6c7356343a206f6e6c792070656e64696e6720676f7665726e616e63655374616b696e67506f6f6c7356343a20776974686472617720746f6f206d756368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775374616b696e67506f6f6c7356343a2073656e74696e656c20616464726573732063616e6e6f74206265203078302e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645374616b696e67506f6f6c7356343a202128676f76207c7c2073656e74696e656c29a26469706673582212201ec58a3ee694777eb031d1371dbb73cc8943f23864ad35619ba3185d1b6f0f6c64736f6c634300060c00335374616b696e67506f6f6c7356343a20776974686472617746656520636f6c6c6563746f7220616464726573732063616e6e6f74206265203078305374616b696e67506f6f6c7356343a20676f7665726e616e636520616464726573732063616e6e6f74206265203078305374616b696e67506f6f6c7356343a2073656e74696e656c20616464726573732063616e6e6f742062652030783000000000000000000000000068284083acbabcb6da84f62ea341dd8c30500eee0000000000000000000000009e145af5b3b142a50d871cb4821992dd493d379800000000000000000000000076e2fd0cc4daa40c76f90f3ddfa2e3abf7a75810
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102695760003560e01c80638439c2bc11610151578063b65d9370116100c3578063e2bbb15811610087578063e2bbb158146107e8578063e941fa781461080b578063ee0f0e0514610813578063f39c38a01461081b578063f58c251c14610823578063fecf97341461082b57610269565b8063b65d937014610764578063b6ac642a14610787578063bedb86fb146107a4578063d7021c74146107c3578063e07fc745146107cb57610269565b80639e447fc6116101155780639e447fc614610663578063a2315e9414610680578063a4198642146106f0578063adc1f0d714610713578063ae2349de14610739578063b50224b51461075c57610269565b80638439c2bc1461058d5780638456cb59146105dd5780638a63855f146105e55780638e73c93a1461061157806398969e821461063757610269565b8063441a3e70116101ea578063630b5ba1116101ae578063630b5ba1146104d457806364482f79146104dc5780636650aa9b146105075780636a6366ff1461053357806376e8424f1461053b5780637b0a47ee1461058557610269565b8063441a3e70146103ff57806348f7d8e0146104225780634bb493d61461043f57806351eb05a6146104af5780635aa6e675146104cc57610269565b806317caf6f11161023157806317caf6f1146103915780631f2d659914610399578063228cb733146103b6578063238efcbc146103da578063379607f5146103e257610269565b8063081e3eda1461026e57806309dac061146102885780630abb6035146102b05780630b1e57d2146102d65780631526fe2714610316575b600080fd5b610276610869565b60408051918252519081900360200190f35b6102ae6004803603602081101561029e57600080fd5b50356001600160a01b031661086f565b005b6102ae600480360360208110156102c657600080fd5b50356001600160a01b0316610955565b610302600480360360408110156102ec57600080fd5b506001600160a01b038135169060200135610a3b565b604080519115158252519081900360200190f35b6103336004803603602081101561032c57600080fd5b5035610a5b565b604080516001600160a01b03909b168b5260208b0199909952898901979097526060890195909552608088019390935260a0870191909152151560c086015260e0850152610100840152151561012083015251908190036101400190f35b610276610acb565b610276600480360360208110156103af57600080fd5b5035610ad1565b6103be610ae3565b604080516001600160a01b039092168252519081900360200190f35b6102ae610af2565b6102ae600480360360208110156103f857600080fd5b5035610b92565b6102ae6004803603604081101561041557600080fd5b5080359060200135610e30565b6102766004803603602081101561043857600080fd5b5035610ea0565b6102ae6004803603602081101561045557600080fd5b81019060208101813564010000000081111561047057600080fd5b82018360208201111561048257600080fd5b803590602001918460208302840111640100000000831117156104a457600080fd5b509092509050610ebe565b6102ae600480360360208110156104c557600080fd5b5035610f5b565b6103be610f67565b6102ae610f76565b6102ae600480360360608110156104f257600080fd5b50803590602081013590604001351515610f99565b6102766004803603604081101561051d57600080fd5b506001600160a01b03813516906020013561105f565b610302611150565b6105676004803603604081101561055157600080fd5b506001600160a01b038135169060200135611159565b60408051938452602084019290925282820152519081900360600190f35b6102766111b1565b6102ae600480360360e08110156105a357600080fd5b508035906001600160a01b0360208201351690604081013515159060608101359060808101359060a081013515159060c0013515156111b7565b6103026113a4565b610276600480360360408110156105fb57600080fd5b506001600160a01b0381351690602001356113b4565b6102ae6004803603602081101561062757600080fd5b50356001600160a01b03166113dc565b6102766004803603604081101561064d57600080fd5b50803590602001356001600160a01b03166114a2565b6102ae6004803603602081101561067957600080fd5b503561156b565b6102ae6004803603602081101561069657600080fd5b8101906020810181356401000000008111156106b157600080fd5b8201836020820111156106c357600080fd5b803590602001918460208302840111640100000000831117156106e557600080fd5b5090925090506115fb565b6103be6004803603604081101561070657600080fd5b5080359060200135611693565b6102ae6004803603602081101561072957600080fd5b50356001600160a01b03166116b8565b6103be6004803603604081101561074f57600080fd5b508035906020013561179e565b6103be6117c4565b6102766004803603604081101561077a57600080fd5b50803590602001356117d3565b6102ae6004803603602081101561079d57600080fd5b50356117fd565b6102ae600480360360208110156107ba57600080fd5b5035151561184f565b6103be611900565b610276600480360360208110156107e157600080fd5b503561190f565b6102ae600480360360408110156107fe57600080fd5b508035906020013561191c565b610276611cfb565b6103be611d01565b6103be611d10565b6103be611d1f565b6102ae6004803603608081101561084157600080fd5b506001600160a01b038135811691602081013582169160408201351690606001351515611d2e565b60095490565b600f546001600160a01b031633146108bc576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b6001600160a01b0381166109015760405162461bcd60e51b815260040180806020018281038252602f815260200180612ebf602f913960400191505060405180910390fd5b601180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdc117600f93282860144d2cd2745f8e2e15c3ca2a32b4290c30f7cd1ae7ffcb99181900360200190a150565b600f546001600160a01b031633146109a2576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b6001600160a01b0381166109e75760405162461bcd60e51b8152600401808060200182810382526038815260200180612d216038913960400191505060405180910390fd5b601080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fc9e2377236eab4280090ce8f2317332649736d92f00dcf20a8dd6684ec5e78399181900360200190a150565b600260209081526000928352604080842090915290825290205460ff1681565b60098181548110610a6857fe5b60009182526020909120600b909102018054600182015460028301546003840154600485015460058601546006870154600788015460088901546009909901546001600160a01b0390981699509597949693959294919360ff918216939291168a565b600a5481565b60046020526000908152604090205481565b6005546001600160a01b031681565b6010546001600160a01b03163314610b3b5760405162461bcd60e51b8152600401808060200182810382526027815260200180612e566027913960400191505060405180910390fd5b601054600f80546001600160a01b0319166001600160a01b0390921691821790556040805182815290517f9d3e522e1e47a2f6009739342b9cc7b252a1888154e843ab55ee1c81745795ab9181900360200190a150565b60026000541415610bea576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260005560125481903390600160a01b900460ff1615610c3c5760405162461bcd60e51b8152600401808060200182810382526027815260200180612e096027913960400191505060405180910390fd5b600060098381548110610c4b57fe5b600091825260208083206001600160a01b0386168452600a600b9093020191820190526040909120909150610c7f84611dcb565b600181015415610dee576000610cc68260020154610cc0670de0b6b3a7640000610cba87600301548760010154611ed490919063ffffffff16565b90611f34565b90611f9b565b600684015490915060ff1615610dce576005546006546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b505050506040513d6020811015610d5a57600080fd5b50506006546040805163733cb55560e11b81526001600160a01b038781166004830152602482018590529151919092169163e6796aaa91604480830192600092919082900301818387803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050610dd8565b610dd88482611ff8565b6003820154610de7908261218e565b6003830155505b610df884846121e8565b610e1f670de0b6b3a7640000610cba84600301548460010154611ed490919063ffffffff16565b600290910155505060016000555050565b60026000541415610e88576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055610e9782826123ff565b50506001600055565b600d8181548110610ead57fe5b600091825260209091200154905081565b600f546001600160a01b03163314610f0b576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b60098114610f4a5760405162461bcd60e51b8152600401808060200182810382526028815260200180612dc16028913960400191505060405180910390fd5b610f56600c8383612c87565b505050565b610f6481611dcb565b50565b600f546001600160a01b031681565b60095460005b81811015610f9557610f8d81610f5b565b600101610f7c565b5050565b600f546001600160a01b03163314610fe6576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b8015610ff457610ff4610f76565b6110318261102b6009868154811061100857fe5b90600052602060002090600b020160010154600a54611f9b90919063ffffffff16565b9061218e565b600a81905550816009848154811061104557fe5b90600052602060002090600b020160010181905550505050565b6000806009838154811061106f57fe5b600091825260208083206001600160a01b0388168452600a600b90930201918201905260409091206003820154600483015460028401549394509192909190431180156110bb57508015155b1561110a5760006110e4600a54610cba87600101546110de8960020154436117d3565b90611ed4565b90506111066110ff83610cba84670de0b6b3a7640000611ed4565b849061218e565b9250505b6111436111388460020154610cc0670de0b6b3a7640000610cba878960010154611ed490919063ffffffff16565b60038501549061218e565b9450505050505b92915050565b600b5460ff1681565b6000806000806009858154811061116c57fe5b600091825260208083206001600160a01b038a168452600a600b9093020191909101905260409020805460018201546002909201549095509093509150509250925092565b60085481565b600f546001600160a01b03163314611204576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b801561121257611212610f76565b600954600a544390611224908a61218e565b600a8190555060096040518061014001604052808a6001600160a01b031681526020018b8152602001838152602001600081526020016000815260200160008152602001891515815260200188815260200187815260200186151581525090806001815401808255809150506001900390600052602060002090600b020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e0820151816007015561010082015181600801556101208201518160090160006101000a81548160ff0219169083151502179055505050876001600160a01b0316827f65fc0eb45954044fb55e1b01344d5d72fbfdf88e732d955f73bb7fb2bcc131e960405160405180910390a3505050505050505050565b601254600160a01b900460ff1681565b6001600160a01b03919091166000908152600160209081526040808320938352929052205490565b601254600160a01b900460ff1680156114135750600f546001600160a01b031633148061141357506011546001600160a01b031633145b61144e5760405162461bcd60e51b8152600401808060200182810382526039815260200180612ce86039913960400191505060405180910390fd5b600680546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fcd409fc2a693558f338316d2cd6cb79806b6ca7b834d35e3c44eb9f5a5f6bafb9181900360200190a150565b600080600984815481106114b257fe5b600091825260208083206001600160a01b0387168452600a600b90930201918201905260409091206003820154600483015460028401549394509192909190431180156114fe57508015155b15611540576000611521600a54610cba87600101546110de8960020154436117d3565b905061153c6110ff83610cba84670de0b6b3a7640000611ed4565b9250505b6111438360020154610cc0670de0b6b3a7640000610cba868860010154611ed490919063ffffffff16565b600f546001600160a01b031633146115b8576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b6115c0610f76565b60088190556040805182815290517f41d466ebd06fb97e7786086ac8b69b7eb7da798592036251291d34e9791cde019181900360200190a150565b600f546001600160a01b03163314611648576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b600981146116875760405162461bcd60e51b815260040180806020018281038252602d815260200180612d94602d913960400191505060405180910390fd5b610f56600d8383612c87565b600090815260036020908152604080832093835292905220546001600160a01b031690565b600f546001600160a01b03163314611705576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b6001600160a01b03811661174a5760405162461bcd60e51b815260040180806020018281038252603b815260200180612d59603b913960400191505060405180910390fd5b601280546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f188d2dfa1337286c88f2d9c0340823249d35eee039dfb4b15fec52a4bf69214d9181900360200190a150565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b6006546001600160a01b031681565b60008183818111156117ea5760009250505061114a565b6008546000611143826110de8686611f9b565b600f546001600160a01b0316331461184a576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b600e55565b600f546001600160a01b031633148061187257506011546001600160a01b031633145b6118ad5760405162461bcd60e51b8152600401808060200182810382526022815260200180612f186022913960400191505060405180910390fd5b60128054821515600160a01b810260ff60a01b199092169190911790915560408051918252517f77860e247ab9186dbe64e5bd0e0b93273cc4273e01818420e788f500078886f59181900360200190a150565b6007546001600160a01b031681565b600c8181548110610ead57fe5b60026000541415611974576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260005560125482903390600160a01b900460ff16156119c65760405162461bcd60e51b8152600401808060200182810382526027815260200180612e096027913960400191505060405180910390fd5b6000600983815481106119d557fe5b600091825260208083206001600160a01b0386168452600a600b9093020191820190526040909120909150611a0984611dcb565b600181015415611b6c576000611a448260020154610cc0670de0b6b3a7640000610cba87600301548760010154611ed490919063ffffffff16565b600684015490915060ff1615611b4c576005546006546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b158015611aae57600080fd5b505af1158015611ac2573d6000803e3d6000fd5b505050506040513d6020811015611ad857600080fd5b50506006546040805163733cb55560e11b81526001600160a01b038781166004830152602482018590529151919092169163e6796aaa91604480830192600092919082900301818387803b158015611b2f57600080fd5b505af1158015611b43573d6000803e3d6000fd5b50505050611b56565b611b568482611ff8565b6003820154611b65908261218e565b6003830155505b336000908152600260209081526040808320898452909152902054869060ff16611bee5760008181526004602081815260408084208054855260038352818520868652835281852080546001600160a01b0319163390811790915585526002835281852086865283529320805460ff1916600190811790915591905281540190555b600060098881548110611bfd57fe5b60009182526020808320338452600a600b90930201918201905260409091209091508715611c7e573360008181526001602090815260408083208d845290915290204290558254611c5b916001600160a01b0390911690308b6128f5565b8054611c67908961218e565b81556005820154611c78908961218e565b60058301555b6040805189815290518a9133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a3505050611cc284846121e8565b611ce9670de0b6b3a7640000610cba84600301548460010154611ed490919063ffffffff16565b60029091015550506001600055505050565b600e5481565b6012546001600160a01b031681565b6010546001600160a01b031681565b6011546001600160a01b031681565b600f546001600160a01b03163314611d7b576040805162461bcd60e51b815260206004820152601f6024820152600080516020612de9833981519152604482015290519081900360640190fd5b600580546001600160a01b03199081166001600160a01b0396871617909155600780548216948616949094179093556006805490931691909316179055600b805460ff1916911515919091179055565b600060098281548110611dda57fe5b90600052602060002090600b0201905080600201544311611dfb5750610f64565b600481015480611e12575043600290910155610f64565b6000611e30600a54610cba85600101546110de8760020154436117d3565b600b5490915060ff1615611eaa57600554604080516340c10f1960e01b81523060048201526024810184905290516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b158015611e9157600080fd5b505af1158015611ea5573d6000803e3d6000fd5b505050505b611ec361113883610cba84670de0b6b3a7640000611ed4565b600384015550504360029091015550565b600082611ee35750600061114a565b82820282848281611ef057fe5b0414611f2d5760405162461bcd60e51b8152600401808060200182810382526021815260200180612e9e6021913960400191505060405180910390fd5b9392505050565b6000808211611f8a576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611f9357fe5b049392505050565b600082821115611ff2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b8015610f9557600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561204957600080fd5b505afa15801561205d573d6000803e3d6000fd5b505050506040513d602081101561207357600080fd5b5051905080821115612107576005546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156120d557600080fd5b505af11580156120e9573d6000803e3d6000fd5b505050506040513d60208110156120ff57600080fd5b50610f569050565b6005546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561215d57600080fd5b505af1158015612171573d6000803e3d6000fd5b505050506040513d602081101561218757600080fd5b5050505050565b600082820183811015611f2d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000600983815481106121f757fe5b600091825260208083206001600160a01b0386168452600a600b90930201828101909152604083208054919450929161223591610cba906004611ed4565b600754604080516370a0823160e01b81526001600160a01b038881166004830152915193945060009391909216916370a08231916024808301926020929190829003018186803b15801561228857600080fd5b505afa15801561229c573d6000803e3d6000fd5b505050506040513d60208110156122b257600080fd5b5051600754604080516318160ddd60e01b815290519293506000926001600160a01b03909216916318160ddd91600480820192602092909190829003018186803b1580156122ff57600080fd5b505afa158015612313573d6000803e3d6000fd5b505050506040513d602081101561232957600080fd5b5051905080158015906123405750600985015460ff165b1561236e57600585015461236a612363600a610cba60066110de8783888b611ed4565b859061218e565b9350505b600061237e856000015485612955565b905061239f8161102b87600101548960040154611f9b90919063ffffffff16565b60048701908155600186018290555460408051838152602081019290925280518a926001600160a01b038b16927fd8332ec1be38daba39ef83322321506f4575912461d58a94061b6d98666a4fbb92918290030190a35050505050505050565b60125482903390600160a01b900460ff161561244c5760405162461bcd60e51b8152600401808060200182810382526027815260200180612e096027913960400191505060405180910390fd5b60006009838154811061245b57fe5b600091825260208083206001600160a01b0386168452600a600b909302019182019052604090912090915061248f84611dcb565b6001810154156125f25760006124ca8260020154610cc0670de0b6b3a7640000610cba87600301548760010154611ed490919063ffffffff16565b600684015490915060ff16156125d2576005546006546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b505050506040513d602081101561255e57600080fd5b50506006546040805163733cb55560e11b81526001600160a01b038781166004830152602482018590529151919092169163e6796aaa91604480830192600092919082900301818387803b1580156125b557600080fd5b505af11580156125c9573d6000803e3d6000fd5b505050506125dc565b6125dc8482611ff8565b60038201546125eb908261218e565b6003830155505b60006009878154811061260157fe5b60009182526020808320338452600a600b90930201918201905260409091208054919250908711156126645760405162461bcd60e51b8152600401808060200182810382526021815260200180612e7d6021913960400191505060405180910390fd5b60058201546126739088611f9b565b6005830155805487900381553360009081526001602090815260408083208b8452909152812054600884015489919042906126af90839061218e565b1115612702576126d2612710610cba87600701548d611ed490919063ffffffff16565b60125486549194506126f1916001600160a01b0390811691168561296b565b6126fb8284611f9b565b9150612865565b600754604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561274d57600080fd5b505afa158015612761573d6000803e3d6000fd5b505050506040513d602081101561277757600080fd5b5051600e549091506127929061271090610cba908e90611ed4565b935060005b600981101561283a576127d2670de0b6b3a7640000600c83815481106127b957fe5b9060005260206000200154611ed490919063ffffffff16565b8210612832576127f3612710610cba600e548f611ed490919063ffffffff16565b945061282f6064610cba612828600d858154811061280d57fe5b90600052602060002001546064611f9b90919063ffffffff16565b8890611ed4565b94505b600101612797565b506012548654612857916001600160a01b0391821691168661296b565b6128618385611f9b565b9250505b845461287b906001600160a01b0316338461296b565b604080518b815290518c9133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a350505050506128c184846121e8565b6128e8670de0b6b3a7640000610cba84600301548460010154611ed490919063ffffffff16565b6002909101555050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261294f9085906129b9565b50505050565b60008183106129645781611f2d565b5090919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f569084905b6060612a0e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a6a9092919063ffffffff16565b805190915015610f5657808060200190516020811015612a2d57600080fd5b5051610f565760405162461bcd60e51b815260040180806020018281038252602a815260200180612eee602a913960400191505060405180910390fd5b6060612a798484600085612a81565b949350505050565b606082471015612ac25760405162461bcd60e51b8152600401808060200182810382526026815260200180612e306026913960400191505060405180910390fd5b612acb85612bdd565b612b1c576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612b5b5780518252601f199092019160209182019101612b3c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612bbd576040519150601f19603f3d011682016040523d82523d6000602084013e612bc2565b606091505b5091509150612bd2828286612be3565b979650505050505050565b3b151590565b60608315612bf2575081611f2d565b825115612c025782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c4c578181015183820152602001612c34565b50505050905090810190601f168015612c795780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b828054828255906000526020600020908101928215612cc2579160200282015b82811115612cc2578235825591602001919060010190612ca7565b50612cce929150612cd2565b5090565b5b80821115612cce5760008155600101612cd356fe5374616b696e67506f6f6c7356343a206e6f74207061757365642c206f72206e6f7420676f7665726e616e6365206f722073656e74696e656c5374616b696e67506f6f6c7356343a2070656e64696e6720676f7665726e616e636520616464726573732063616e6e6f74206265203078305374616b696e67506f6f6c7356343a207769746864726177466565436f6c6c6563746f7220616464726573732063616e6e6f74206265203078302e5374616b696e67506f6f6c7356343a20646973636f756e745461626c65206c656e677468206d69736d617463685374616b696e67506f6f6c7356343a206665654c6576656c206c656e677468206d69736d617463685374616b696e67506f6f6c7356343a206f6e6c7920676f7665726e616e6365005374616b696e67506f6f6c7356343a20656d657267656e637920706175736520656e61626c6564416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5374616b696e67506f6f6c7356343a206f6e6c792070656e64696e6720676f7665726e616e63655374616b696e67506f6f6c7356343a20776974686472617720746f6f206d756368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775374616b696e67506f6f6c7356343a2073656e74696e656c20616464726573732063616e6e6f74206265203078302e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645374616b696e67506f6f6c7356343a202128676f76207c7c2073656e74696e656c29a26469706673582212201ec58a3ee694777eb031d1371dbb73cc8943f23864ad35619ba3185d1b6f0f6c64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000068284083acbabcb6da84f62ea341dd8c30500eee0000000000000000000000009e145af5b3b142a50d871cb4821992dd493d379800000000000000000000000076e2fd0cc4daa40c76f90f3ddfa2e3abf7a75810
-----Decoded View---------------
Arg [0] : _governance (address): 0x68284083acbabCb6da84f62ea341dd8c30500EEE
Arg [1] : _sentinel (address): 0x9e145AF5b3B142a50d871cb4821992dd493d3798
Arg [2] : _withdrawFeeCollector (address): 0x76E2FD0CC4DAa40C76f90f3DdfA2E3ABF7A75810
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000068284083acbabcb6da84f62ea341dd8c30500eee
Arg [1] : 0000000000000000000000009e145af5b3b142a50d871cb4821992dd493d3798
Arg [2] : 00000000000000000000000076e2fd0cc4daa40c76f90f3ddfa2e3abf7a75810
Deployed Bytecode Sourcemap
90459:18795:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96403:95;;;:::i;:::-;;;;;;;;;;;;;;;;108000:239;;;;;;;;;;;;;;;;-1:-1:-1;108000:239:0;-1:-1:-1;;;;;108000:239:0;;:::i;:::-;;95793:307;;;;;;;;;;;;;;;;-1:-1:-1;95793:307:0;-1:-1:-1;;;;;95793:307:0;;:::i;91817:63::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;91817:63:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;92404:26;;;;;;;;;;;;;;;;-1:-1:-1;92404:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;92404:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;92525:34;;;:::i;92101:43::-;;;;;;;;;;;;;;;;-1:-1:-1;92101:43:0;;:::i;92179:28::-;;;:::i;:::-;;;;-1:-1:-1;;;;;92179:28:0;;;;;;;;;;;;;;96108:287;;;:::i;106447:89::-;;;;;;;;;;;;;;;;-1:-1:-1;106447:89:0;;:::i;104714:110::-;;;;;;;;;;;;;;;;-1:-1:-1;104714:110:0;;;;;;;:::i;92717:30::-;;;;;;;;;;;;;;;;-1:-1:-1;92717:30:0;;:::i;104157:195::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;104157:195:0;;-1:-1:-1;104157:195:0;-1:-1:-1;104157:195:0;:::i;100846:77::-;;;;;;;;;;;;;;;;-1:-1:-1;100846:77:0;;:::i;92996:25::-;;;:::i;100590:180::-;;;:::i;97757:366::-;;;;;;;;;;;;;;;;-1:-1:-1;97757:366:0;;;;;;;;;;;;;;:::i;99605:751::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;99605:751:0;;;;;;;;:::i;92568:22::-;;;:::i;107013:282::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;107013:282:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;92343:25;;;:::i;96667:994::-;;;;;;;;;;;;;;;;-1:-1:-1;96667:994:0;;;-1:-1:-1;;;;;96667:994:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;93227:17::-;;;:::i;107303:146::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;107303:146:0;;;;;;;;:::i;107579:303::-;;;;;;;;;;;;;;;;-1:-1:-1;107579:303:0;-1:-1:-1;;;;;107579:303:0;;:::i;98834:732::-;;;;;;;;;;;;;;;;-1:-1:-1;98834:732:0;;;;;;-1:-1:-1;;;;;98834:732:0;;:::i;98131:183::-;;;;;;;;;;;;;;;;-1:-1:-1;98131:183:0;;:::i;104360:225::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;104360:225:0;;-1:-1:-1;104360:225:0;-1:-1:-1;104360:225:0;:::i;100364:143::-;;;;;;;;;;;;;;;;-1:-1:-1;100364:143:0;;;;;;;:::i;108904:347::-;;;;;;;;;;;;;;;;-1:-1:-1;108904:347:0;-1:-1:-1;;;;;108904:347:0;;:::i;91971:63::-;;;;;;;;;;;;;;;;-1:-1:-1;91971:63:0;;;;;;;:::i;92261:35::-;;;:::i;98410:360::-;;;;;;;;;;;;;;;;-1:-1:-1;98410:360:0;;;;;;;:::i;104593:113::-;;;;;;;;;;;;;;;;-1:-1:-1;104593:113:0;;:::i;108679:217::-;;;;;;;;;;;;;;;;-1:-1:-1;108679:217:0;;;;:::i;92305:29::-;;;:::i;92599:25::-;;;;;;;;;;;;;;;;-1:-1:-1;92599:25:0;;:::i;103542:605::-;;;;;;;;;;;;;;;;-1:-1:-1;103542:605:0;;;;;;;:::i;92803:26::-;;;:::i;93183:35::-;;;:::i;93030:32::-;;;:::i;93151:23::-;;;:::i;95423:362::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;95423:362:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;96403:95::-;96475:8;:15;96403:95;:::o;108000:239::-;95004:10;;-1:-1:-1;;;;;95004:10:0;94990;:24;94982:68;;;;;-1:-1:-1;;;94982:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;94982:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;108083:23:0;::::1;108075:83;;;;-1:-1:-1::0;;;108075:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;108169:8;:20:::0;;-1:-1:-1;;;;;108169:20:0;::::1;-1:-1:-1::0;;;;;;108169:20:0;;::::1;::::0;::::1;::::0;;;108205:26:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;108000:239:::0;:::o;95793:307::-;95004:10;;-1:-1:-1;;;;;95004:10:0;94990;:24;94982:68;;;;;-1:-1:-1;;;94982:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;94982:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;95892:32:0;::::1;95884:101;;;;-1:-1:-1::0;;;95884:101:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;95994:17;:38:::0;;-1:-1:-1;;;;;95994:38:0;::::1;-1:-1:-1::0;;;;;;95994:38:0;;::::1;::::0;::::1;::::0;;;96048:44:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;95793:307:::0;:::o;91817:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;92404:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;92404:26:0;;;;-1:-1:-1;92404:26:0;;;;;;;;;;;;;;;;;;;:::o;92525:34::-;;;;:::o;92101:43::-;;;;;;;;;;;;;:::o;92179:28::-;;;-1:-1:-1;;;;;92179:28:0;;:::o;96108:287::-;96176:17;;-1:-1:-1;;;;;96176:17:0;96162:10;:31;96154:83;;;;-1:-1:-1;;;96154:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96277:17;;96303:10;:31;;-1:-1:-1;;;;;;96303:31:0;-1:-1:-1;;;;;96277:17:0;;;96303:31;;;;;96350:37;;;;;;;;;;;;;;;;;96108:287;:::o;106447:89::-;5258:1;5864:7;;:19;;5856:63;;;;;-1:-1:-1;;;5856:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5258:1;5997:7;:18;101754:5:::1;::::0;106510:4;;106516:10:::1;::::0;-1:-1:-1;;;101754:5:0;::::1;;;101753:6;101745:58;;;;-1:-1:-1::0;;;101745:58:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;101816:21;101840:8;101849:4;101840:14;;;;;;;;;::::0;;;::::1;::::0;;;-1:-1:-1;;;;;101889:23:0;::::1;::::0;;:13:::1;101840:14;::::0;;::::1;;101889:13:::0;;::::1;:23:::0;;;;;;101840:14;;-1:-1:-1;101923:17:0::1;101935:4:::0;101923:11:::1;:17::i;:::-;101957:18;::::0;::::1;::::0;:22;101953:458:::1;;101994:21;102018:77;102079:4;:15;;;102018:56;102069:4;102018:46;102041:4;:22;;;102018:4;:18;;;:22;;:46;;;;:::i;:::-;:50:::0;::::1;:56::i;:::-;:60:::0;::::1;:77::i;:::-;102111:16;::::0;::::1;::::0;101994:101;;-1:-1:-1;102111:16:0::1;;102108:237;;;102143:6;::::0;102166:13:::1;::::0;102143:47:::1;::::0;;-1:-1:-1;;;102143:47:0;;-1:-1:-1;;;;;102166:13:0;;::::1;102143:47;::::0;::::1;::::0;-1:-1:-1;;102143:47:0;;;;;;:6;;;::::1;::::0;:14:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:6:::1;::::0;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;102205:13:0::1;::::0;:48:::1;::::0;;-1:-1:-1;;;102205:48:0;;-1:-1:-1;;;;;102205:48:0;;::::1;;::::0;::::1;::::0;;;;;;;;;:13;;;::::1;::::0;:24:::1;::::0;:48;;;;;:13:::1;::::0;:48;;;;;;;:13;;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;102108:237;;;102288:43;102307:8;102317:13;102288:18;:43::i;:::-;102370:10;::::0;::::1;::::0;:29:::1;::::0;102385:13;102370:14:::1;:29::i;:::-;102357:10;::::0;::::1;:42:::0;-1:-1:-1;101953:458:0::1;102468:36;102489:4;102495:8;102468:20;:36::i;:::-;102533:56;102584:4;102533:46;102556:4;:22;;;102533:4;:18;;;:22;;:46;;;;:::i;:56::-;102515:15;::::0;;::::1;:74:::0;-1:-1:-1;;5214:1:0;6176:7;:22;-1:-1:-1;;106447:89:0:o;104714:110::-;5258:1;5864:7;;:19;;5856:63;;;;;-1:-1:-1;;;5856:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5258:1;5997:7;:18;104793:23:::1;104803:4:::0;104809:6;104793:9:::1;:23::i;:::-;-1:-1:-1::0;;5214:1:0;6176:7;:22;104714:110::o;92717:30::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;92717:30:0;:::o;104157:195::-;95004:10;;-1:-1:-1;;;;;95004:10:0;94990;:24;94982:68;;;;;-1:-1:-1;;;94982:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;94982:68:0;;;;;;;;;;;;;;;104269:1:::1;104249:21:::0;::::1;104241:74;;;;-1:-1:-1::0;;;104241:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;104324:20;:8;104335:9:::0;;104324:20:::1;:::i;:::-;;104157:195:::0;;:::o;100846:77::-;100898:17;100910:4;100898:11;:17::i;:::-;100846:77;:::o;92996:25::-;;;-1:-1:-1;;;;;92996:25:0;;:::o;100590:180::-;100652:8;:15;100635:14;100678:85;100706:6;100700:3;:12;100678:85;;;100736:15;100747:3;100736:10;:15::i;:::-;100714:5;;100678:85;;;;100590:180;:::o;97757:366::-;95004:10;;-1:-1:-1;;;;;95004:10:0;94990;:24;94982:68;;;;;-1:-1:-1;;;94982:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;94982:68:0;;;;;;;;;;;;;;;97917:11:::1;97913:61;;;97945:17;:15;:17::i;:::-;98002:63;98053:11;98002:46;98022:8;98031:4;98022:14;;;;;;;;;;;;;;;;;;:25;;;98002:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;97984:15;:81;;;;98104:11;98076:8;98085:4;98076:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;97757:366:::0;;;:::o;99605:751::-;99683:7;99703:21;99727:8;99736:4;99727:14;;;;;;;;;;;;;;;;-1:-1:-1;;;;;99776:20:0;;;;:13;99727:14;;;;;99776:13;;;:20;;;;;;99835:22;;;;99892:18;;;;99940:20;;;;99727:14;;-1:-1:-1;99776:20:0;;99835:22;;99892:18;99925:12;:35;:57;;;;-1:-1:-1;99964:18:0;;;99925:57;99921:322;;;99999:20;100022:110;100116:15;;100022:89;100095:4;:15;;;100022:50;100037:4;:20;;;100059:12;100022:14;:50::i;:::-;:54;;:89::i;:110::-;99999:133;-1:-1:-1;100167:64:0;100189:41;100216:13;100189:22;99999:133;100206:4;100189:16;:22::i;:41::-;100167:17;;:21;:64::i;:::-;100147:84;;99921:322;;100260:88;100275:72;100331:4;:15;;;100275:51;100321:4;100275:41;100298:17;100275:4;:18;;;:22;;:41;;;;:::i;:72::-;100260:10;;;;;:14;:88::i;:::-;100253:95;;;;;;99605:751;;;;;:::o;92568:22::-;;;;;;:::o;107013:282::-;107089:4;107095;107101;107118:21;107142:8;107151:7;107142:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;107194:23:0;;;;:13;107142:17;;;;;107194:13;;;;:23;;;;;107238:11;;107251:18;;;;107271:15;;;;;107238:11;;-1:-1:-1;107251:18:0;;-1:-1:-1;107271:15:0;-1:-1:-1;;107013:282:0;;;;;:::o;92343:25::-;;;;:::o;96667:994::-;95004:10;;-1:-1:-1;;;;;95004:10:0;94990;:24;94982:68;;;;;-1:-1:-1;;;94982:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;94982:68:0;;;;;;;;;;;;;;;96957:11:::1;96953:61;;;96985:17;:15;:17::i;:::-;97043:8;:15:::0;97136::::1;::::0;97095:12:::1;::::0;97136:32:::1;::::0;97156:11;97136:19:::1;:32::i;:::-;97118:15;:50;;;;97179:8;97193:410;;;;;;;;97226:8;-1:-1:-1::0;;;;;97193:410:0::1;;;;;97261:11;97193:410;;;;97304:15;97193:410;;;;97353:1;97193:410;;;;97384:1;97193:410;;;;97416:1;97193:410;;;;97444:12;97193:410;;;;;;97488:17;97193:410;;;;97533:13;97193:410;;;;97576:15;97193:410;;;;::::0;97179:425:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;97179:425:0::1;;;;;-1:-1:-1::0;;;;;97179:425:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;97644:8;-1:-1:-1::0;;;;;97624:29:0::1;97636:6;97624:29;;;;;;;;;;95059:1;;96667:994:::0;;;;;;;:::o;93227:17::-;;;-1:-1:-1;;;93227:17:0;;;;;:::o;107303:146::-;-1:-1:-1;;;;;107410:22:0;;;;107385:7;107410:22;;;:12;:22;;;;;;;;:31;;;;;;;;;107303:146::o;107579:303::-;107662:5;;-1:-1:-1;;;107662:5:0;;;;:61;;;;-1:-1:-1;107686:10:0;;-1:-1:-1;;;;;107686:10:0;107672;:24;;:50;;-1:-1:-1;107714:8:0;;-1:-1:-1;;;;;107714:8:0;107700:10;:22;107672:50;107654:131;;;;-1:-1:-1;;;107654:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;107794:13;:30;;-1:-1:-1;;;;;107794:30:0;;-1:-1:-1;;;;;;107794:30:0;;;;;;;;107838:36;;;;;;;;;;;;;;;;107579:303;:::o;98834:732::-;98909:7;98929:21;98953:8;98962:4;98953:14;;;;;;;;;;;;;;;;-1:-1:-1;;;;;99002:20:0;;;;:13;98953:14;;;;;99002:13;;;:20;;;;;;99061:22;;;;99118:18;;;;99166:20;;;;98953:14;;-1:-1:-1;99002:20:0;;99061:22;;99118:18;99151:12;:35;:57;;;;-1:-1:-1;99190:18:0;;;99151:57;99147:322;;;99225:20;99248:110;99342:15;;99248:89;99321:4;:15;;;99248:50;99263:4;:20;;;99285:12;99248:14;:50::i;:110::-;99225:133;-1:-1:-1;99393:64:0;99415:41;99442:13;99415:22;99225:133;99432:4;99415:16;:22::i;99393:64::-;99373:84;;99147:322;;99486:72;99542:4;:15;;;99486:51;99532:4;99486:41;99509:17;99486:4;:18;;;:22;;:41;;;;:::i;98131:183::-;95004:10;;-1:-1:-1;;;;;95004:10:0;94990;:24;94982:68;;;;;-1:-1:-1;;;94982:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;94982:68:0;;;;;;;;;;;;;;;98208:17:::1;:15;:17::i;:::-;98236:10;:24:::0;;;98276:30:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;98131:183:::0;:::o;104360:225::-;95004:10;;-1:-1:-1;;;;;95004:10:0;94990;:24;94982:68;;;;;-1:-1:-1;;;94982:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;94982:68:0;;;;;;;;;;;;;;;104487:1:::1;104462:26:::0;::::1;104454:84;;;;-1:-1:-1::0;;;104454:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;104547:30;:13;104563:14:::0;;104547:30:::1;:::i;100364:143::-:0;100445:7;100470:20;;;:8;:20;;;;;;;;:29;;;;;;;;-1:-1:-1;;;;;100470:29:0;;100364:143::o;108904:347::-;95004:10;;-1:-1:-1;;;;;95004:10:0;94990;:24;94982:68;;;;;-1:-1:-1;;;94982:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;94982:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;109014:38:0;::::1;109006:110;;;;-1:-1:-1::0;;;109006:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;109127:20;:47:::0;;-1:-1:-1;;;;;109127:47:0;::::1;-1:-1:-1::0;;;;;;109127:47:0;;::::1;::::0;::::1;::::0;;;109190:53:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;108904:347:::0;:::o;91971:63::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;91971:63:0;;:::o;92261:35::-;;;-1:-1:-1;;;;;92261:35:0;;:::o;98410:360::-;98483:7;98516:3;98545:5;98567:9;;;98563:50;;;98600:1;98593:8;;;;;;98563:50;98652:10;;98627:22;98696:34;98652:10;98697:12;:2;98704:4;98697:6;:12::i;104593:113::-;95004:10;;-1:-1:-1;;;;;95004:10:0;94990;:24;94982:68;;;;;-1:-1:-1;;;94982:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;94982:68:0;;;;;;;;;;;;;;;104672:11:::1;:26:::0;104593:113::o;108679:217::-;108752:10;;-1:-1:-1;;;;;108752:10:0;108738;:24;;:50;;-1:-1:-1;108780:8:0;;-1:-1:-1;;;;;108780:8:0;108766:10;:22;108738:50;108730:97;;;;-1:-1:-1;;;108730:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;108838:5;:14;;;;;-1:-1:-1;;;108838:14:0;;-1:-1:-1;;;;108838:14:0;;;;;;;;;;108868:20;;;;;;;;;;;;;;;;108679:217;:::o;92305:29::-;;;-1:-1:-1;;;;;92305:29:0;;:::o;92599:25::-;;;;;;;;;;103542:605;5258:1;5864:7;;:19;;5856:63;;;;;-1:-1:-1;;;5856:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5258:1;5997:7;:18;101754:5:::1;::::0;103624:4;;103630:10:::1;::::0;-1:-1:-1;;;101754:5:0;::::1;;;101753:6;101745:58;;;;-1:-1:-1::0;;;101745:58:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;101816:21;101840:8;101849:4;101840:14;;;;;;;;;::::0;;;::::1;::::0;;;-1:-1:-1;;;;;101889:23:0;::::1;::::0;;:13:::1;101840:14;::::0;;::::1;;101889:13:::0;;::::1;:23:::0;;;;;;101840:14;;-1:-1:-1;101923:17:0::1;101935:4:::0;101923:11:::1;:17::i;:::-;101957:18;::::0;::::1;::::0;:22;101953:458:::1;;101994:21;102018:77;102079:4;:15;;;102018:56;102069:4;102018:46;102041:4;:22;;;102018:4;:18;;;:22;;:46;;;;:::i;:77::-;102111:16;::::0;::::1;::::0;101994:101;;-1:-1:-1;102111:16:0::1;;102108:237;;;102143:6;::::0;102166:13:::1;::::0;102143:47:::1;::::0;;-1:-1:-1;;;102143:47:0;;-1:-1:-1;;;;;102166:13:0;;::::1;102143:47;::::0;::::1;::::0;-1:-1:-1;;102143:47:0;;;;;;:6;;;::::1;::::0;:14:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:6:::1;::::0;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;102205:13:0::1;::::0;:48:::1;::::0;;-1:-1:-1;;;102205:48:0;;-1:-1:-1;;;;;102205:48:0;;::::1;;::::0;::::1;::::0;;;;;;;;;:13;;;::::1;::::0;:24:::1;::::0;:48;;;;;:13:::1;::::0;:48;;;;;;;:13;;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;102108:237;;;102288:43;102307:8;102317:13;102288:18;:43::i;:::-;102370:10;::::0;::::1;::::0;:29:::1;::::0;102385:13;102370:14:::1;:29::i;:::-;102357:10;::::0;::::1;:42:::0;-1:-1:-1;101953:458:0::1;95230:10:::2;95218:23;::::0;;;:11:::2;:23;::::0;;;;;;;:28;;;;;;;;;103657:4;;95218:28:::2;;95213:183;;95263:23;95272:13:::0;;;:8:::2;:13;::::0;;;;;;;;;95263:23;;:8:::2;:23:::0;;;;;:28;;;;;;;;:41;;-1:-1:-1;;;;;;95263:41:0::2;95294:10;95263:41:::0;;::::2;::::0;;;95319:23;;:11:::2;:23:::0;;;;;:28;;;;;;;:35;;-1:-1:-1;;95319:35:0::2;95263:41:::0;95319:35;;::::2;::::0;;;95369:13;;;:15;;::::2;::::0;;95213:183:::2;103674:21:::3;103698:8;103707:4;103698:14;;;;;;;;;::::0;;;::::3;::::0;;;103761:10:::3;103747:25:::0;;:13:::3;103698:14;::::0;;::::3;;103747:13:::0;;::::3;:25:::0;;;;;;103698:14;;-1:-1:-1;103789:11:0;;103785:303:::3;;103830:10;103817:24;::::0;;;:12:::3;:24;::::0;;;;;;;:30;;;;;;;;103850:15:::3;103817:48:::0;;103880:12;;:74:::3;::::0;-1:-1:-1;;;;;103880:12:0;;::::3;::::0;103939:4:::3;103946:7:::0;103880:29:::3;:74::i;:::-;103983:11:::0;;:24:::3;::::0;103999:7;103983:15:::3;:24::i;:::-;103969:38:::0;;104044:19:::3;::::0;::::3;::::0;:32:::3;::::0;104068:7;104044:23:::3;:32::i;:::-;104022:19;::::0;::::3;:54:::0;103785:303:::3;104105:34;::::0;;;;;;;104125:4;;104113:10:::3;::::0;104105:34:::3;::::0;;;;::::3;::::0;;::::3;95406:1;;102423::::2;102468:36:::1;102489:4;102495:8;102468:20;:36::i;:::-;102533:56;102584:4;102533:46;102556:4;:22;;;102533:4;:18;;;:22;;:46;;;;:::i;:56::-;102515:15;::::0;;::::1;:74:::0;-1:-1:-1;;5214:1:0;6176:7;:22;-1:-1:-1;;;103542:605:0:o;92803:26::-;;;;:::o;93183:35::-;;;-1:-1:-1;;;;;93183:35:0;;:::o;93030:32::-;;;-1:-1:-1;;;;;93030:32:0;;:::o;93151:23::-;;;-1:-1:-1;;;;;93151:23:0;;:::o;95423:362::-;95004:10;;-1:-1:-1;;;;;95004:10:0;94990;:24;94982:68;;;;;-1:-1:-1;;;94982:68:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;94982:68:0;;;;;;;;;;;;;;;95647:6:::1;:21:::0;;-1:-1:-1;;;;;;95647:21:0;;::::1;-1:-1:-1::0;;;;;95647:21:0;;::::1;;::::0;;;95679:8:::1;:20:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;95710:13:::1;:30:::0;;;;::::1;::::0;;;::::1;;::::0;;95751:10:::1;:24:::0;;-1:-1:-1;;95751:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;95423:362::o;100931:742::-;100986:21;101010:8;101019:4;101010:14;;;;;;;;;;;;;;;;;;100986:38;;101055:4;:20;;;101039:12;:36;101035:75;;101092:7;;;101035:75;101144:18;;;;101177;101173:107;;-1:-1:-1;101235:12:0;101212:20;;;;:35;101262:7;;101173:107;101290:20;101313:106;101403:15;;101313:85;101382:4;:15;;;101313:50;101328:4;:20;;;101350:12;101313:14;:50::i;:106::-;101434:10;;101290:129;;-1:-1:-1;101434:10:0;;101430:83;;;101461:6;;:40;;;-1:-1:-1;;;101461:40:0;;101481:4;101461:40;;;;;;;;;;;;-1:-1:-1;;;;;101461:6:0;;;;:11;;:40;;;;;:6;;:40;;;;;;;;:6;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;101430:83;101548:69;101575:41;101602:13;101575:22;:12;101592:4;101575:16;:22::i;101548:69::-;101523:22;;;:94;-1:-1:-1;;101653:12:0;101630:20;;;;:35;100931:742;:::o;9893:220::-;9951:7;9975:6;9971:20;;-1:-1:-1;9990:1:0;9983:8;;9971:20;10014:5;;;10018:1;10014;:5;:1;10038:5;;;;;:10;10030:56;;;;-1:-1:-1;;;10030:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10104:1;9893:220;-1:-1:-1;;;9893:220:0:o;10591:153::-;10649:7;10681:1;10677;:5;10669:44;;;;;-1:-1:-1;;;10669:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10735:1;10731;:5;;;;;;;10591:153;-1:-1:-1;;;10591:153:0:o;9476:158::-;9534:7;9567:1;9562;:6;;9554:49;;;;;-1:-1:-1;;;9554:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9621:5:0;;;9476:158::o;106650:355::-;106732:11;;106728:270;;106780:6;;:31;;;-1:-1:-1;;;106780:31:0;;106805:4;106780:31;;;;;;106760:17;;-1:-1:-1;;;;;106780:6:0;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;106780:31:0;;-1:-1:-1;106830:19:0;;;106826:161;;;106870:6;;:31;;;-1:-1:-1;;;106870:31:0;;-1:-1:-1;;;;;106870:31:0;;;;;;;;;;;;;;;:6;;;;;:15;;:31;;;;;;;;;;;;;;:6;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;106826:161:0;;-1:-1:-1;106826:161:0;;106942:6;;:29;;;-1:-1:-1;;;106942:29:0;;-1:-1:-1;;;;;106942:29:0;;;;;;;;;;;;;;;:6;;;;;:15;;:29;;;;;;;;;;;;;;:6;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;106728:270:0;106650:355;;:::o;9014:179::-;9072:7;9104:5;;;9128:6;;;;9120:46;;;;;-1:-1:-1;;;9120:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;102605:882;102717:21;102741:8;102750:4;102741:14;;;;;;;;;;;;;;;;-1:-1:-1;;;;;102790:23:0;;;;:13;102741:14;;;;;102790:13;;;:23;;;;;;102840:11;;102741:14;;-1:-1:-1;102790:23:0;102741:14;102840:26;;:18;;102856:1;102840:15;:18::i;:26::-;102903:8;;:28;;;-1:-1:-1;;;102903:28:0;;-1:-1:-1;;;;;102903:28:0;;;;;;;;;102826:40;;-1:-1:-1;102879:21:0;;102903:8;;;;;:18;;:28;;;;;;;;;;;;;;:8;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;102903:28:0;102965:8;;:22;;;-1:-1:-1;;;102965:22:0;;;;102903:28;;-1:-1:-1;102942:20:0;;-1:-1:-1;;;;;102965:8:0;;;;:20;;:22;;;;;102903:28;;102965:22;;;;;;;;:8;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;102965:22:0;;-1:-1:-1;103004:17:0;;;;;:40;;-1:-1:-1;103025:19:0;;;;;;103004:40;103000:199;;;103079:19;;;;103119:68;103127:59;103183:2;103127:51;103176:1;103127:44;103158:12;103127:51;103079:19;103139:13;103127:11;:26::i;:59::-;103119:3;;:7;:68::i;:::-;103113:74;;103000:199;;103211:16;103230:26;103239:4;:11;;;103252:3;103230:8;:26::i;:::-;103211:45;;103290:56;103337:8;103290:42;103313:4;:18;;;103290:4;:18;;;:22;;:42;;;;:::i;:56::-;103269:18;;;:77;;;103357:18;;;:29;;;103460:18;103404:75;;;;;;;;;;;;;;;103434:4;;-1:-1:-1;;;;;103404:75:0;;;;;;;;;;;;102605:882;;;;;;;;:::o;104832:1574::-;101754:5;;104902:4;;104908:10;;-1:-1:-1;;;101754:5:0;;;;101753:6;101745:58;;;;-1:-1:-1;;;101745:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;101816:21;101840:8;101849:4;101840:14;;;;;;;;;;;;;;;;-1:-1:-1;;;;;101889:23:0;;;;:13;101840:14;;;;;101889:13;;;:23;;;;;;101840:14;;-1:-1:-1;101923:17:0;101935:4;101923:11;:17::i;:::-;101957:18;;;;:22;101953:458;;101994:21;102018:77;102079:4;:15;;;102018:56;102069:4;102018:46;102041:4;:22;;;102018:4;:18;;;:22;;:46;;;;:::i;:77::-;102111:16;;;;101994:101;;-1:-1:-1;102111:16:0;;102108:237;;;102143:6;;102166:13;;102143:47;;;-1:-1:-1;;;102143:47:0;;-1:-1:-1;;;;;102166:13:0;;;102143:47;;;;-1:-1:-1;;102143:47:0;;;;;;:6;;;;;:14;;:47;;;;;;;;;;;;;;:6;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;102205:13:0;;:48;;;-1:-1:-1;;;102205:48:0;;-1:-1:-1;;;;;102205:48:0;;;;;;;;;;;;;;;:13;;;;;:24;;:48;;;;;:13;;:48;;;;;;;:13;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102108:237;;;102288:43;102307:8;102317:13;102288:18;:43::i;:::-;102370:10;;;;:29;;102385:13;102370:14;:29::i;:::-;102357:10;;;:42;-1:-1:-1;101953:458:0;104931:21:::1;104955:8;104964:4;104955:14;;;;;;;;;::::0;;;::::1;::::0;;;105018:10:::1;105004:25:::0;;:13:::1;104955:14;::::0;;::::1;;105004:13:::0;;::::1;:25:::0;;;;;;105060:11;;104955:14;;-1:-1:-1;105004:25:0;105050:21;::::1;;105042:67;;;;-1:-1:-1::0;;;105042:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;105144:19;::::0;::::1;::::0;:31:::1;::::0;105168:6;105144:23:::1;:31::i;:::-;105122:19;::::0;::::1;:53:::0;105200:11;;:20;;::::1;105186:34:::0;;105354:10:::1;105200:11;105341:24:::0;;;-1:-1:-1;105341:24:0::1;::::0;;;;;;;:30;;;;;;;;;105409:17:::1;::::0;::::1;::::0;105214:6;;105341:30;105430:15:::1;::::0;105388:39:::1;::::0;105341:30;;105388:20:::1;:39::i;:::-;:57;105384:896;;;105478:44;105516:5;105478:33;105489:4;:21;;;105478:6;:10;;:33;;;;:::i;:44::-;105563:20;::::0;105537:12;;105460:62;;-1:-1:-1;105537:64:0::1;::::0;-1:-1:-1;;;;;105537:12:0;;::::1;::::0;105563:20:::1;105460:62:::0;105537:25:::1;:64::i;:::-;105632:36;:15:::0;105652;105632:19:::1;:36::i;:::-;105614:54;;105384:896;;;105723:8;::::0;:30:::1;::::0;;-1:-1:-1;;;105723:30:0;;105742:10:::1;105723:30;::::0;::::1;::::0;;;105699:21:::1;::::0;-1:-1:-1;;;;;105723:8:0::1;::::0;:18:::1;::::0;:30;;;;;::::1;::::0;;;;;;;;:8;:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;105723:30:0;105795:11:::1;::::0;105723:30;;-1:-1:-1;105784:34:0::1;::::0;105812:5:::1;::::0;105784:23:::1;::::0;:6;;:10:::1;:23::i;:34::-;105766:52;;105840:9;105835:290;105859:1;105855;:5;105835:290;;;105902:26;105920:7;105903:8;105912:1;105903:11;;;;;;;;;;;;;;;;105902:17;;:26;;;;:::i;:::-;105885:13;:43;105882:230;;105964:34;105992:5;105964:23;105975:11;;105964:6;:10;;:23;;;;:::i;:34::-;105946:52;;106033:63;92875:3;106033:50;106053:29;106065:13;106079:1;106065:16;;;;;;;;;;;;;;;;92875:3;106053:11;;:29;;;;:::i;:::-;106033:15:::0;;:19:::1;:50::i;:63::-;106015:81;;105882:230;105862:3;;105835:290;;;-1:-1:-1::0;106163:20:0::1;::::0;106137:12;;:64:::1;::::0;-1:-1:-1;;;;;106137:12:0;;::::1;::::0;106163:20:::1;106185:15:::0;106137:25:::1;:64::i;:::-;106232:36;:15:::0;106252;106232:19:::1;:36::i;:::-;106214:54;;105384:896;;106292:12:::0;;:54:::1;::::0;-1:-1:-1;;;;;106292:12:0::1;106318:10;106330:15:::0;106292:25:::1;:54::i;:::-;106364:34;::::0;;;;;;;106385:4;;106373:10:::1;::::0;106364:34:::1;::::0;;;;::::1;::::0;;::::1;102423:1;;;;;102468:36:::0;102489:4;102495:8;102468:20;:36::i;:::-;102533:56;102584:4;102533:46;102556:4;:22;;;102533:4;:18;;;:22;;:46;;;;:::i;:56::-;102515:15;;;;:74;-1:-1:-1;;;;;104832:1574:0:o;23436:205::-;23564:68;;;-1:-1:-1;;;;;23564:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23564:68:0;-1:-1:-1;;;23564:68:0;;;23537:96;;23557:5;;23537:19;:96::i;:::-;23436:205;;;;:::o;14121:106::-;14179:7;14210:1;14206;:5;:13;;14218:1;14206:13;;;-1:-1:-1;14214:1:0;;14199:20;-1:-1:-1;14121:106:0:o;23251:177::-;23361:58;;;-1:-1:-1;;;;;23361:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23361:58:0;-1:-1:-1;;;23361:58:0;;;23334:86;;23354:5;;25556:761;25980:23;26006:69;26034:4;26006:69;;;;;;;;;;;;;;;;;26014:5;-1:-1:-1;;;;;26006:27:0;;;:69;;;;;:::i;:::-;26090:17;;25980:95;;-1:-1:-1;26090:21:0;26086:224;;26232:10;26221:30;;;;;;;;;;;;;;;-1:-1:-1;26221:30:0;26213:85;;;;-1:-1:-1;;;26213:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18242:195;18345:12;18377:52;18399:6;18407:4;18413:1;18416:12;18377:21;:52::i;:::-;18370:59;18242:195;-1:-1:-1;;;;18242:195:0:o;19294:530::-;19421:12;19479:5;19454:21;:30;;19446:81;;;;-1:-1:-1;;;19446:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19546:18;19557:6;19546:10;:18::i;:::-;19538:60;;;;;-1:-1:-1;;;19538:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19672:12;19686:23;19713:6;-1:-1:-1;;;;;19713:11:0;19733:5;19741:4;19713:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19713:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19671:75;;;;19764:52;19782:7;19791:10;19803:12;19764:17;:52::i;:::-;19757:59;19294:530;-1:-1:-1;;;;;;;19294:530:0:o;15324:422::-;15691:20;15730:8;;;15324:422::o;21834:742::-;21949:12;21978:7;21974:595;;;-1:-1:-1;22009:10:0;22002:17;;21974:595;22123:17;;:21;22119:439;;22386:10;22380:17;22447:15;22434:10;22430:2;22426:19;22419:44;22334:148;22529:12;22522:20;;-1:-1:-1;;;22522:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://1ec58a3ee694777eb031d1371dbb73cc8943f23864ad35619ba3185d1b6f0f6c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.