Contract
0x3FaE9b2637dbEB6Cc570784BA886145fa5F2c0f6
7
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x941fbeeaa0e0e1d0ff5e91e6041afbba17ed6e5af1778812329b244675223dec | Transfer Ownersh... | 6670215 | 683 days 9 hrs ago | 0xc9a51fb9057380494262fd291aed74317332c0a2 | IN | Axial : MasterChef V2 | 0 AVAX | 0.00071965 | |
0x20c7c8031834c7640e6612b859223f9067118e8d4002f885b589a4cd2fe2234b | Add | 6540995 | 686 days 11 hrs ago | 0xc9a51fb9057380494262fd291aed74317332c0a2 | IN | Axial : MasterChef V2 | 0 AVAX | 0.004633925 | |
0xe8ecb12059232950e4c44bb154b2203c63c7d781115c3bf399cdac68799e17f8 | Set | 6540927 | 686 days 11 hrs ago | 0xc9a51fb9057380494262fd291aed74317332c0a2 | IN | Axial : MasterChef V2 | 0 AVAX | 0.001167325 | |
0x9a1a4a9346aca92bc6fdb49608edb352d45040fb9cddc19a5bd30c5c3b298b9b | Add | 6540816 | 686 days 11 hrs ago | 0xc9a51fb9057380494262fd291aed74317332c0a2 | IN | Axial : MasterChef V2 | 0 AVAX | 0.00542855 | |
0x902306fdafb7d1929dd219d54bf8ba7cc84c0ef66f2c962c812b07063a2e16ad | 0x60806040 | 6536705 | 686 days 13 hrs ago | 0xc9a51fb9057380494262fd291aed74317332c0a2 | IN | Create: MasterChefAxialV2 | 0 AVAX | 0.064223225 |
[ Download CSV Export ]
Contract Name:
MasterChefAxialV2
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2021-11-05 */ // Sources flattened with hardhat v2.6.7 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 @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/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 @openzeppelin/contracts/utils/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/access/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) public { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File contracts/AxialToken.sol pragma solidity 0.6.12; // AxialToken with Governance. contract AxialToken is ERC20("AxialToken", "AXIAL"), Ownable { /// @dev Total number of tokens uint256 public maxSupply = 365_000_000e18; // 365 million Axial /// @dev Creates `_amount` token to `_to`. Must only be called by the owner (MasterAxial). function mint(address _to, uint256 _amount) public onlyOwner { require(totalSupply().add(_amount) <= maxSupply, "AXIAL::mint: cannot exceed max supply"); _mint(_to, _amount); _moveDelegates(address(0), _delegates[_to], _amount); } // Copied and modified from YAM code: // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernanceStorage.sol // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernance.sol // Which is copied and modified from COMPOUND: // https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol /// @dev A record of each accounts delegate mapping(address => address) internal _delegates; /// @dev A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } /// @dev A record of votes checkpoints for each account, by index mapping(address => mapping(uint32 => Checkpoint)) public checkpoints; /// @dev The number of checkpoints for each account mapping(address => uint32) public numCheckpoints; /// @dev The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @dev The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @dev A record of states for signing / validating signatures mapping(address => uint256) public nonces; /// @dev An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @dev An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance); /** * @dev Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } /** * @dev Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } /** * @dev Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig( address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s ) external { bytes32 domainSeparator = keccak256( abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name())), getChainId(), address(this)) ); bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry)); bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "AXIAL::delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "AXIAL::delegateBySig: invalid nonce"); require(now <= expiry, "AXIAL::delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @dev Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @dev Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint256 blockNumber) external view returns (uint256) { require(blockNumber < block.number, "AXIAL::getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = balanceOf(delegator); // balance of underlying AXIALs (not scaled); _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _moveDelegates( address srcRep, address dstRep, uint256 amount ) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes ) internal { uint32 blockNumber = safe32(block.number, "AXIAL::_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function getChainId() internal pure returns (uint256) { uint256 chainId; assembly { chainId := chainid() } return chainId; } } // File contracts/libraries/BoringERC20.sol pragma solidity 0.6.12; // solhint-disable avoid-low-level-calls library BoringERC20 { bytes4 private constant SIG_SYMBOL = 0x95d89b41; // symbol() bytes4 private constant SIG_NAME = 0x06fdde03; // name() bytes4 private constant SIG_DECIMALS = 0x313ce567; // decimals() bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256) bytes4 private constant SIG_TRANSFER_FROM = 0x23b872dd; // transferFrom(address,address,uint256) function returnDataToString(bytes memory data) internal pure returns (string memory) { if (data.length >= 64) { return abi.decode(data, (string)); } else if (data.length == 32) { uint8 i = 0; while (i < 32 && data[i] != 0) { i++; } bytes memory bytesArray = new bytes(i); for (i = 0; i < 32 && data[i] != 0; i++) { bytesArray[i] = data[i]; } return string(bytesArray); } else { return "???"; } } /// @dev Provides a safe ERC20.symbol version which returns '???' as fallback string. /// @param token The address of the ERC-20 token contract. /// @return (string) Token symbol. function safeSymbol(IERC20 token) internal view returns (string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_SYMBOL)); return success ? returnDataToString(data) : "???"; } /// @dev Provides a safe ERC20.name version which returns '???' as fallback string. /// @param token The address of the ERC-20 token contract. /// @return (string) Token name. function safeName(IERC20 token) internal view returns (string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_NAME)); return success ? returnDataToString(data) : "???"; } /// @dev Provides a safe ERC20.decimals version which returns '18' as fallback value. /// @param token The address of the ERC-20 token contract. /// @return (uint8) Token decimals. function safeDecimals(IERC20 token) internal view returns (uint8) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_DECIMALS)); return success && data.length == 32 ? abi.decode(data, (uint8)) : 18; } /// @dev Provides a safe ERC20.transfer version for different ERC-20 implementations. /// Reverts on a failed transfer. /// @param token The address of the ERC-20 token. /// @param to Transfer tokens to. /// @param amount The token amount. function safeTransfer( IERC20 token, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: Transfer failed"); } /// @dev Provides a safe ERC20.transferFrom version for different ERC-20 implementations. /// Reverts on a failed transfer. /// @param token The address of the ERC-20 token. /// @param from Transfer tokens from. /// @param to Transfer tokens to. /// @param amount The token amount. function safeTransferFrom( IERC20 token, address from, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(SIG_TRANSFER_FROM, from, to, amount) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: TransferFrom failed"); } } // 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/MasterChefAxialV2.sol pragma solidity 0.6.12; pragma experimental ABIEncoderV2; interface IRewarder { using SafeERC20 for IERC20; function onAxialReward(address user, uint256 newLpAmount) external; function pendingTokens(address user) external view returns (uint256 pending); function rewardToken() external view returns (address); } // MasterChefAxial is a boss. He says "go f your blocks lego boy, I'm gonna use timestamp instead". // And to top it off, it takes no risks. Because the biggest risk is operator error. // So we make it virtually impossible for the operator of this contract to cause a bug with people's harvests. // // Note that it's ownable and the owner wields tremendous power. The ownership // will be transferred to a governance smart contract once AXIAL is sufficiently // distributed and the community can show to govern itself. // // With thanks to the Lydia Finance team. // // Godspeed and may the 10x be with you. contract MasterChefAxialV2 is Ownable { using SafeMath for uint256; using BoringERC20 for IERC20; using EnumerableSet for EnumerableSet.AddressSet; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. // // We do some fancy math here. Basically, any point in time, the amount of AXIALs // entitled to a user but is pending to be distributed is: // // pending reward = (user.amount * pool.accAxialPerShare) - user.rewardDebt // // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens: // 1. The pool's `accAxialPerShare` (and `lastRewardTimestamp`) gets updated. // 2. User receives the pending reward sent to his/her address. // 3. User's `amount` gets updated. // 4. User's `rewardDebt` gets updated. } // Info of each pool. struct PoolInfo { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. AXIALs to distribute per second. uint256 lastRewardTimestamp; // Last timestamp that AXIALs distribution occurs. uint256 accAxialPerShare; // Accumulated AXIALs per share, times 1e12. See below. IRewarder rewarder; } // The AXIAL TOKEN! AxialToken public axial; // Dev address. address public devAddr; // Treasury address. address public treasuryAddr; // Investor address address public investorAddr; // AXIAL tokens created per second. uint256 public axialPerSec; // Percentage of pool rewards that goto the devs. uint256 public devPercent; // Percentage of pool rewards that goes to the treasury. uint256 public treasuryPercent; // Percentage of pool rewards that goes to the investor. uint256 public investorPercent; // Info of each pool. PoolInfo[] public poolInfo; // Set of all LP tokens that have been added as pools EnumerableSet.AddressSet private lpTokens; // Info of each user that stakes LP tokens. mapping(uint256 => mapping(address => UserInfo)) public userInfo; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint; // The timestamp when AXIAL mining starts. uint256 public startTimestamp; event Add(uint256 indexed pid, uint256 allocPoint, IERC20 indexed lpToken, IRewarder indexed rewarder); event Set(uint256 indexed pid, uint256 allocPoint, IRewarder indexed rewarder, bool overwrite); event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event UpdatePool(uint256 indexed pid, uint256 lastRewardTimestamp, uint256 lpSupply, uint256 accAxialPerShare); event Harvest(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); event SetDevAddress(address indexed oldAddress, address indexed newAddress); event UpdateEmissionRate(address indexed user, uint256 _axialPerSec); constructor( AxialToken _axial, address _devAddr, address _treasuryAddr, address _investorAddr, uint256 _axialPerSec, uint256 _startTimestamp, uint256 _devPercent, uint256 _treasuryPercent, uint256 _investorPercent ) public { require(0 <= _devPercent && _devPercent <= 1000, "constructor: invalid dev percent value"); require(0 <= _treasuryPercent && _treasuryPercent <= 1000, "constructor: invalid treasury percent value"); require(0 <= _investorPercent && _investorPercent <= 1000, "constructor: invalid investor percent value"); require(_devPercent + _treasuryPercent + _investorPercent <= 1000, "constructor: total percent over max"); axial = _axial; devAddr = _devAddr; treasuryAddr = _treasuryAddr; investorAddr = _investorAddr; axialPerSec = _axialPerSec; startTimestamp = _startTimestamp; devPercent = _devPercent; treasuryPercent = _treasuryPercent; investorPercent = _investorPercent; totalAllocPoint = 0; } 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, IRewarder _rewarder ) public onlyOwner { require(Address.isContract(address(_lpToken)), "add: LP token must be a valid contract"); require( Address.isContract(address(_rewarder)) || address(_rewarder) == address(0), "add: rewarder must be contract or zero" ); require(!lpTokens.contains(address(_lpToken)), "add: LP already added"); massUpdatePools(); uint256 lastRewardTimestamp = block.timestamp > startTimestamp ? block.timestamp : startTimestamp; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push( PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardTimestamp: lastRewardTimestamp, accAxialPerShare: 0, rewarder: _rewarder }) ); lpTokens.add(address(_lpToken)); emit Add(poolInfo.length.sub(1), _allocPoint, _lpToken, _rewarder); } // Update the given pool's AXIAL allocation point. Can only be called by the owner. function set( uint256 _pid, uint256 _allocPoint, IRewarder _rewarder, bool overwrite ) public onlyOwner { require( Address.isContract(address(_rewarder)) || address(_rewarder) == address(0), "set: rewarder must be contract or zero" ); massUpdatePools(); totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; if (overwrite) { poolInfo[_pid].rewarder = _rewarder; } emit Set(_pid, _allocPoint, overwrite ? _rewarder : poolInfo[_pid].rewarder, overwrite); } // View function to see pending AXIALs on frontend. function pendingTokens(uint256 _pid, address _user) external view returns ( uint256 pendingAxial, address bonusTokenAddress, string memory bonusTokenSymbol, uint256 pendingBonusToken ) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accAxialPerShare = pool.accAxialPerShare; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (block.timestamp > pool.lastRewardTimestamp && lpSupply != 0) { uint256 multiplier = block.timestamp.sub(pool.lastRewardTimestamp); uint256 lpPercent = 1000 - devPercent - treasuryPercent - investorPercent; uint256 axialReward = multiplier.mul(axialPerSec).mul(pool.allocPoint).div(totalAllocPoint).mul(lpPercent).div( 1000 ); accAxialPerShare = accAxialPerShare.add(axialReward.mul(1e12).div(lpSupply)); } pendingAxial = user.amount.mul(accAxialPerShare).div(1e12).sub(user.rewardDebt); // If it's a double reward farm, we return info about the bonus token if (address(pool.rewarder) != address(0)) { (bonusTokenAddress, bonusTokenSymbol) = rewarderBonusTokenInfo(_pid); pendingBonusToken = pool.rewarder.pendingTokens(_user); } } // Get bonus token info from the rewarder contract for a given pool, if it is a double reward farm function rewarderBonusTokenInfo(uint256 _pid) public view returns (address bonusTokenAddress, string memory bonusTokenSymbol) { PoolInfo storage pool = poolInfo[_pid]; if (address(pool.rewarder) != address(0)) { bonusTokenAddress = address(pool.rewarder.rewardToken()); bonusTokenSymbol = IERC20(pool.rewarder.rewardToken()).safeSymbol(); } } // 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 { PoolInfo storage pool = poolInfo[_pid]; if (block.timestamp <= pool.lastRewardTimestamp) { return; } uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (lpSupply == 0) { pool.lastRewardTimestamp = block.timestamp; return; } uint256 multiplier = block.timestamp.sub(pool.lastRewardTimestamp); uint256 axialReward = multiplier.mul(axialPerSec).mul(pool.allocPoint).div(totalAllocPoint); uint256 lpPercent = 1000 - devPercent - treasuryPercent - investorPercent; axial.mint(devAddr, axialReward.mul(devPercent).div(1000)); axial.mint(treasuryAddr, axialReward.mul(treasuryPercent).div(1000)); axial.mint(investorAddr, axialReward.mul(investorPercent).div(1000)); axial.mint(address(this), axialReward.mul(lpPercent).div(1000)); pool.accAxialPerShare = pool.accAxialPerShare.add(axialReward.mul(1e12).div(lpSupply).mul(lpPercent).div(1000)); pool.lastRewardTimestamp = block.timestamp; emit UpdatePool(_pid, pool.lastRewardTimestamp, lpSupply, pool.accAxialPerShare); } // Deposit LP tokens to MasterChef for AXIAL allocation. function deposit(uint256 _pid, uint256 _amount) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); if (user.amount > 0) { // Harvest AXIAL uint256 pending = user.amount.mul(pool.accAxialPerShare).div(1e12).sub(user.rewardDebt); safeAxialTransfer(msg.sender, pending); emit Harvest(msg.sender, _pid, pending); } user.amount = user.amount.add(_amount); user.rewardDebt = user.amount.mul(pool.accAxialPerShare).div(1e12); IRewarder rewarder = poolInfo[_pid].rewarder; if (address(rewarder) != address(0)) { rewarder.onAxialReward(msg.sender, user.amount); } pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); emit Deposit(msg.sender, _pid, _amount); } // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _amount) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount >= _amount, "withdraw: not good"); updatePool(_pid); // Harvest AXIAL uint256 pending = user.amount.mul(pool.accAxialPerShare).div(1e12).sub(user.rewardDebt); safeAxialTransfer(msg.sender, pending); emit Harvest(msg.sender, _pid, pending); user.amount = user.amount.sub(_amount); user.rewardDebt = user.amount.mul(pool.accAxialPerShare).div(1e12); IRewarder rewarder = poolInfo[_pid].rewarder; if (address(rewarder) != address(0)) { rewarder.onAxialReward(msg.sender, user.amount); } pool.lpToken.safeTransfer(address(msg.sender), _amount); emit Withdraw(msg.sender, _pid, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; pool.lpToken.safeTransfer(address(msg.sender), user.amount); emit EmergencyWithdraw(msg.sender, _pid, user.amount); user.amount = 0; user.rewardDebt = 0; } // Safe axial transfer function, just in case if rounding error causes pool to not have enough AXIALs. function safeAxialTransfer(address _to, uint256 _amount) internal { uint256 axialBal = axial.balanceOf(address(this)); if (_amount > axialBal) { axial.transfer(_to, axialBal); } else { axial.transfer(_to, _amount); } } // Update dev address by the previous dev. function dev(address _devAddr) public { require(msg.sender == devAddr, "dev: wut?"); devAddr = _devAddr; emit SetDevAddress(msg.sender, _devAddr); } function setDevPercent(uint256 _newDevPercent) public onlyOwner { require(0 <= _newDevPercent && _newDevPercent <= 1000, "setDevPercent: invalid percent value"); require(treasuryPercent + _newDevPercent + investorPercent <= 1000, "setDevPercent: total percent over max"); devPercent = _newDevPercent; } // Update treasury address by the previous treasury. function setTreasuryAddr(address _treasuryAddr) public { require(msg.sender == treasuryAddr, "setTreasuryAddr: wut?"); treasuryAddr = _treasuryAddr; } function setTreasuryPercent(uint256 _newTreasuryPercent) public onlyOwner { require(0 <= _newTreasuryPercent && _newTreasuryPercent <= 1000, "setTreasuryPercent: invalid percent value"); require( devPercent + _newTreasuryPercent + investorPercent <= 1000, "setTreasuryPercent: total percent over max" ); treasuryPercent = _newTreasuryPercent; } // Update the investor address by the previous investor. function setInvestorAddr(address _investorAddr) public { require(msg.sender == investorAddr, "setInvestorAddr: wut?"); investorAddr = _investorAddr; } function setInvestorPercent(uint256 _newInvestorPercent) public onlyOwner { require(0 <= _newInvestorPercent && _newInvestorPercent <= 1000, "setInvestorPercent: invalid percent value"); require( devPercent + _newInvestorPercent + treasuryPercent <= 1000, "setInvestorPercent: total percent over max" ); investorPercent = _newInvestorPercent; } // Pancake has to add hidden dummy pools inorder to alter the emission, // here we make it simple and transparent to all. function updateEmissionRate(uint256 _axialPerSec) public onlyOwner { massUpdatePools(); axialPerSec = _axialPerSec; emit UpdateEmissionRate(msg.sender, _axialPerSec); } }
[{"inputs":[{"internalType":"contract AxialToken","name":"_axial","type":"address"},{"internalType":"address","name":"_devAddr","type":"address"},{"internalType":"address","name":"_treasuryAddr","type":"address"},{"internalType":"address","name":"_investorAddr","type":"address"},{"internalType":"uint256","name":"_axialPerSec","type":"uint256"},{"internalType":"uint256","name":"_startTimestamp","type":"uint256"},{"internalType":"uint256","name":"_devPercent","type":"uint256"},{"internalType":"uint256","name":"_treasuryPercent","type":"uint256"},{"internalType":"uint256","name":"_investorPercent","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"lpToken","type":"address"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"name":"Add","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","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":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"},{"indexed":false,"internalType":"bool","name":"overwrite","type":"bool"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_axialPerSec","type":"uint256"}],"name":"UpdateEmissionRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accAxialPerShare","type":"uint256"}],"name":"UpdatePool","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"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"axial","outputs":[{"internalType":"contract AxialToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"axialPerSec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddr","type":"address"}],"name":"dev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investorAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investorPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingTokens","outputs":[{"internalType":"uint256","name":"pendingAxial","type":"uint256"},{"internalType":"address","name":"bonusTokenAddress","type":"address"},{"internalType":"string","name":"bonusTokenSymbol","type":"string"},{"internalType":"uint256","name":"pendingBonusToken","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":"lastRewardTimestamp","type":"uint256"},{"internalType":"uint256","name":"accAxialPerShare","type":"uint256"},{"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"rewarderBonusTokenInfo","outputs":[{"internalType":"address","name":"bonusTokenAddress","type":"address"},{"internalType":"string","name":"bonusTokenSymbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDevPercent","type":"uint256"}],"name":"setDevPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_investorAddr","type":"address"}],"name":"setInvestorAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newInvestorPercent","type":"uint256"}],"name":"setInvestorPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddr","type":"address"}],"name":"setTreasuryAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTreasuryPercent","type":"uint256"}],"name":"setTreasuryPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_axialPerSec","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002d5e38038062002d5e8339810160408190526200003491620001a3565b6000620000406200019f565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506103e8831115620000b85760405162461bcd60e51b8152600401620000af9062000288565b60405180910390fd5b6103e8821115620000dd5760405162461bcd60e51b8152600401620000af906200023d565b6103e8811115620001025760405162461bcd60e51b8152600401620000af9062000311565b6103e8818385010111156200012b5760405162461bcd60e51b8152600401620000af90620002ce565b600180546001600160a01b039a8b166001600160a01b03199182161790915560028054998b169982169990991790985560038054978a169789169790971790965560048054959098169490961693909317909555600555600e939093556006929092556007556008556000600d5562000375565b3390565b60008060008060008060008060006101208a8c031215620001c2578485fd5b8951620001cf816200035c565b60208b0151909950620001e2816200035c565b60408b0151909850620001f5816200035c565b60608b015190975062000208816200035c565b8096505060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b6020808252602b908201527f636f6e7374727563746f723a20696e76616c696420747265617375727920706560408201526a7263656e742076616c756560a81b606082015260800190565b60208082526026908201527f636f6e7374727563746f723a20696e76616c6964206465762070657263656e746040820152652076616c756560d01b606082015260800190565b60208082526023908201527f636f6e7374727563746f723a20746f74616c2070657263656e74206f766572206040820152620dac2f60eb1b606082015260800190565b6020808252602b908201527f636f6e7374727563746f723a20696e76616c696420696e766573746f7220706560408201526a7263656e742076616c756560a81b606082015260800190565b6001600160a01b03811681146200037257600080fd5b50565b6129d980620003856000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063876d3c9c1161010f578063acc4cc50116100a2578063e6fd48bc11610071578063e6fd48bc146103d7578063f2fde38b146103df578063fc3c28af146103f2578063ffcd4263146103fa576101f0565b8063acc4cc5014610393578063bc70fdbc1461039b578063da09c72c146103bc578063e2bbb158146103c4576101f0565b80638da5cb5b116100de5780638da5cb5b1461034457806393f1a40b1461034c578063a7e05b9c1461036d578063ab7de09814610380576101f0565b8063876d3c9c146102f857806388bba42f1461030b57806389a2bc251461031e5780638d88a90e14610331576101f0565b806330d9a62a116101875780635312ea8e116101565780635312ea8e146102c2578063630b5ba1146102d55780636eaddad2146102dd578063715018a6146102f0576101f0565b806330d9a62a1461027f578063441a3e70146102945780634cc13089146102a757806351eb05a6146102af576101f0565b80630f51f8ff116101c35780630f51f8ff146102385780631526fe271461024b57806317caf6f11461026f578063194ed6af14610277576101f0565b806304ef9d58146101f55780630735b20814610213578063081e3eda1461021b5780630ba84cd214610223575b600080fd5b6101fd61041d565b60405161020a91906128dc565b60405180910390f35b6101fd610423565b6101fd610429565b6102366102313660046121bb565b61042f565b005b6102366102463660046120cc565b6104c1565b61025e6102593660046121bb565b61050d565b60405161020a959493929190612382565b6101fd610558565b6101fd61055e565b610287610564565b60405161020a919061230d565b6102366102a236600461225b565b610573565b610287610782565b6102366102bd3660046121bb565b610791565b6102366102d03660046121bb565b610b2b565b610236610bca565b6102366102eb3660046121bb565b610bed565b610236610c7d565b6102366103063660046121bb565b610d06565b61023661031936600461227c565b610d96565b61023661032c3660046121bb565b610f43565b61023661033f3660046120cc565b610fd3565b610287611049565b61035f61035a3660046121eb565b611058565b60405161020a929190612930565b61023661037b3660046120cc565b61107c565b61023661038e36600461221a565b6110c8565b610287611349565b6103ae6103a93660046121bb565b611358565b60405161020a92919061235e565b6102876114b1565b6102366103d236600461225b565b6114c0565b6101fd6116ab565b6102366103ed3660046120cc565b6116b1565b6101fd611771565b61040d6104083660046121eb565b611777565b60405161020a94939291906128e5565b60075481565b60085481565b60095490565b6104376119b8565b6001600160a01b0316610448611049565b6001600160a01b0316146104775760405162461bcd60e51b815260040161046e90612644565b60405180910390fd5b61047f610bca565b600581905560405133907fe2492e003bbe8afa53088b406f0c1cb5d9e280370fc72a74cf116ffd343c4053906104b69084906128dc565b60405180910390a250565b6004546001600160a01b031633146104eb5760405162461bcd60e51b815260040161046e9061277c565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6009818154811061051a57fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b0393841695509193909290911685565b600d5481565b60055481565b6003546001600160a01b031681565b60006009838154811061058257fe5b60009182526020808320868452600c8252604080852033865290925292208054600590920290920192508311156105cb5760405162461bcd60e51b815260040161046e906127ab565b6105d484610791565b600061060e826001015461060864e8d4a51000610602876003015487600001546119bc90919063ffffffff16565b906119ff565b90611a31565b905061061a3382611a59565b84336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae06609249548360405161065491906128dc565b60405180910390a381546106689085611a31565b80835560038401546106859164e8d4a510009161060291906119bc565b826001018190555060006009868154811061069c57fe5b60009182526020909120600460059092020101546001600160a01b031690508015610722578254604051630301b52960e31b81526001600160a01b0383169163180da948916106ef913391600401612321565b600060405180830381600087803b15801561070957600080fd5b505af115801561071d573d6000803e3d6000fd5b505050505b8354610738906001600160a01b03163387611bf9565b85336001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688760405161077291906128dc565b60405180910390a3505050505050565b6001546001600160a01b031681565b6000600982815481106107a057fe5b90600052602060002090600502019050806002015442116107c15750610b28565b80546040516370a0823160e01b81526000916001600160a01b0316906370a08231906107f190309060040161230d565b60206040518083038186803b15801561080957600080fd5b505afa15801561081d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084191906121d3565b905080610855575042600290910155610b28565b600061086e836002015442611a3190919063ffffffff16565b9050600061089b600d546106028660010154610895600554876119bc90919063ffffffff16565b906119bc565b6008546007546006546001546002549495506103e88281039390930393909303936001600160a01b03938416936340c10f19939116916108e191906106029088906119bc565b6040518363ffffffff1660e01b81526004016108fe929190612321565b600060405180830381600087803b15801561091857600080fd5b505af115801561092c573d6000803e3d6000fd5b50506001546003546007546001600160a01b0392831694506340c10f199350911690610961906103e8906106029088906119bc565b6040518363ffffffff1660e01b815260040161097e929190612321565b600060405180830381600087803b15801561099857600080fd5b505af11580156109ac573d6000803e3d6000fd5b50506001546004546008546001600160a01b0392831694506340c10f1993509116906109e1906103e8906106029088906119bc565b6040518363ffffffff1660e01b81526004016109fe929190612321565b600060405180830381600087803b158015610a1857600080fd5b505af1158015610a2c573d6000803e3d6000fd5b50506001546001600160a01b031691506340c10f19905030610a546103e861060287876119bc565b6040518363ffffffff1660e01b8152600401610a71929190612321565b600060405180830381600087803b158015610a8b57600080fd5b505af1158015610a9f573d6000803e3d6000fd5b50505050610ad7610acc6103e8610602846108958961060264e8d4a510008a6119bc90919063ffffffff16565b600387015490611cef565b60038601819055426002870181905560405188927f3be3541fc42237d611b30329040bfa4569541d156560acdbbae57640d20b8f4692610b1a929091899161293e565b60405180910390a250505050505b50565b600060098281548110610b3a57fe5b60009182526020808320858452600c82526040808520338087529352909320805460059093029093018054909450610b7f926001600160a01b03919091169190611bf9565b8054604051849133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae059591610bb3916128dc565b60405180910390a360008082556001909101555050565b60095460005b81811015610be957610be181610791565b600101610bd0565b5050565b610bf56119b8565b6001600160a01b0316610c06611049565b6001600160a01b031614610c2c5760405162461bcd60e51b815260040161046e90612644565b6103e8811115610c4e5760405162461bcd60e51b815260040161046e90612898565b6103e86008548260075401011115610c785760405162461bcd60e51b815260040161046e906126a8565b600655565b610c856119b8565b6001600160a01b0316610c96611049565b6001600160a01b031614610cbc5760405162461bcd60e51b815260040161046e90612644565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610d0e6119b8565b6001600160a01b0316610d1f611049565b6001600160a01b031614610d455760405162461bcd60e51b815260040161046e90612644565b6103e8811115610d675760405162461bcd60e51b815260040161046e906126ed565b6103e86007548260065401011115610d915760405162461bcd60e51b815260040161046e90612433565b600855565b610d9e6119b8565b6001600160a01b0316610daf611049565b6001600160a01b031614610dd55760405162461bcd60e51b815260040161046e90612644565b610dde82611d14565b80610df057506001600160a01b038216155b610e0c5760405162461bcd60e51b815260040161046e906127d7565b610e14610bca565b610e5183610e4b60098781548110610e2857fe5b906000526020600020906005020160010154600d54611a3190919063ffffffff16565b90611cef565b600d819055508260098581548110610e6557fe5b9060005260206000209060050201600101819055508015610ec4578160098581548110610e8e57fe5b906000526020600020906005020160040160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80610ef85760098481548110610ed657fe5b60009182526020909120600460059092020101546001600160a01b0316610efa565b815b6001600160a01b0316847fa54644aae5c48c5971516f334e4fe8ecbc7930e23f34877d4203c6551e67ffaa8584604051610f35929190612920565b60405180910390a350505050565b610f4b6119b8565b6001600160a01b0316610f5c611049565b6001600160a01b031614610f825760405162461bcd60e51b815260040161046e90612644565b6103e8811115610fa45760405162461bcd60e51b815260040161046e906124fa565b6103e86008548260065401011115610fce5760405162461bcd60e51b815260040161046e906123b2565b600755565b6002546001600160a01b03163314610ffd5760405162461bcd60e51b815260040161046e906125b1565b600280546001600160a01b0319166001600160a01b03831690811790915560405133907f618c54559e94f1499a808aad71ee8729f8e74e8c48e979616328ce493a1a52e790600090a350565b6000546001600160a01b031690565b600c6020908152600092835260408084209091529082529020805460019091015482565b6003546001600160a01b031633146110a65760405162461bcd60e51b815260040161046e90612679565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6110d06119b8565b6001600160a01b03166110e1611049565b6001600160a01b0316146111075760405162461bcd60e51b815260040161046e90612644565b61111082611d14565b61112c5760405162461bcd60e51b815260040161046e90612736565b61113581611d14565b8061114757506001600160a01b038116155b6111635760405162461bcd60e51b815260040161046e9061281d565b61116e600a83611d1e565b1561118b5760405162461bcd60e51b815260040161046e90612615565b611193610bca565b6000600e5442116111a657600e546111a8565b425b600d549091506111b89085611cef565b600d556040805160a0810182526001600160a01b038581168252602082018781529282018481526000606084018181528784166080860190815260098054600181018255935294517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af600590930292830180546001600160a01b031990811692871692909217905595517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b083015591517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b182015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b282015591517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b3909201805490931691161790556112ed600a84611d33565b506009546001600160a01b03808416919085169061130c906001611a31565b7f4b16bd2431ad24dc020ab0e1de7fcb6563dead6a24fb10089d6c23e97a70381f8760405161133b91906128dc565b60405180910390a450505050565b6004546001600160a01b031681565b6000606060006009848154811061136b57fe5b6000918252602090912060059091020160048101549091506001600160a01b0316156114ab576004808201546040805163f7c618c160e01b815290516001600160a01b039092169263f7c618c1928282019260209290829003018186803b1580156113d557600080fd5b505afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140d91906120e8565b92506114a88160040160009054906101000a90046001600160a01b03166001600160a01b031663f7c618c16040518163ffffffff1660e01b815260040160206040518083038186803b15801561146257600080fd5b505afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a91906120e8565b6001600160a01b0316611d48565b91505b50915091565b6002546001600160a01b031681565b6000600983815481106114cf57fe5b60009182526020808320868452600c8252604080852033865290925292206005909102909101915061150084610791565b805415611585576000611535826001015461060864e8d4a51000610602876003015487600001546119bc90919063ffffffff16565b90506115413382611a59565b84336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae06609249548360405161157b91906128dc565b60405180910390a3505b80546115919084611cef565b80825560038301546115ae9164e8d4a510009161060291906119bc565b81600101819055506000600985815481106115c557fe5b60009182526020909120600460059092020101546001600160a01b03169050801561164b578154604051630301b52960e31b81526001600160a01b0383169163180da94891611618913391600401612321565b600060405180830381600087803b15801561163257600080fd5b505af1158015611646573d6000803e3d6000fd5b505050505b8254611662906001600160a01b0316333087611e0b565b84336001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158660405161169c91906128dc565b60405180910390a35050505050565b600e5481565b6116b96119b8565b6001600160a01b03166116ca611049565b6001600160a01b0316146116f05760405162461bcd60e51b815260040161046e90612644565b6001600160a01b0381166117165760405162461bcd60e51b815260040161046e9061247d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60065481565b60008060606000806009878154811061178c57fe5b600091825260208083208a8452600c825260408085206001600160a01b03808d16875293528085206003600590950290920193840154845491516370a0823160e01b815294965091949193919216906370a08231906117ef90309060040161230d565b60206040518083038186803b15801561180757600080fd5b505afa15801561181b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183f91906121d3565b905083600201544211801561185357508015155b156118da576000611871856002015442611a3190919063ffffffff16565b905060006008546007546006546103e8030303905060006118b56103e861060284610895600d546106028d600101546108956005548c6119bc90919063ffffffff16565b90506118d46118cd856106028464e8d4a510006119bc565b8690611cef565b94505050505b611902836001015461060864e8d4a510006106028688600001546119bc90919063ffffffff16565b60048501549098506001600160a01b0316156119ab576119218a611358565b60048087015460405163c031a66f60e01b8152939a509198506001600160a01b039091169163c031a66f91611958918d910161230d565b60206040518083038186803b15801561197057600080fd5b505afa158015611984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a891906121d3565b94505b5050505092959194509250565b3390565b6000826119cb575060006119f9565b828202828482816119d857fe5b04146119f65760405162461bcd60e51b815260040161046e906125d4565b90505b92915050565b6000808211611a205760405162461bcd60e51b815260040161046e9061257a565b818381611a2957fe5b049392505050565b600082821115611a535760405162461bcd60e51b815260040161046e90612543565b50900390565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611a8a90309060040161230d565b60206040518083038186803b158015611aa257600080fd5b505afa158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada91906121d3565b905080821115611b6e5760015460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611b169086908590600401612321565b602060405180830381600087803b158015611b3057600080fd5b505af1158015611b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b689190612104565b50611bf4565b60015460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611ba09086908690600401612321565b602060405180830381600087803b158015611bba57600080fd5b505af1158015611bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf29190612104565b505b505050565b60006060846001600160a01b031663a9059cbb60e01b8585604051602401611c22929190612321565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611c6091906122f1565b6000604051808303816000865af19150503d8060008114611c9d576040519150601f19603f3d011682016040523d82523d6000602084013e611ca2565b606091505b5091509150818015611ccc575080511580611ccc575080806020019051810190611ccc9190612104565b611ce85760405162461bcd60e51b815260040161046e906123fc565b5050505050565b6000828201838110156119f65760405162461bcd60e51b815260040161046e906124c3565b803b15155b919050565b60006119f6836001600160a01b038416611f04565b60006119f6836001600160a01b038416611f1c565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b179052905160609160009183916001600160a01b03861691611d8f91906122f1565b600060405180830381855afa9150503d8060008114611dca576040519150601f19603f3d011682016040523d82523d6000602084013e611dcf565b606091505b509150915081611dfa57604051806040016040528060038152602001623f3f3f60e81b815250611e03565b611e0381611f66565b949350505050565b60006060856001600160a01b03166323b872dd60e01b868686604051602401611e369392919061233a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611e7491906122f1565b6000604051808303816000865af19150503d8060008114611eb1576040519150601f19603f3d011682016040523d82523d6000602084013e611eb6565b606091505b5091509150818015611ee0575080511580611ee0575080806020019051810190611ee09190612104565b611efc5760405162461bcd60e51b815260040161046e90612863565b505050505050565b60009081526001919091016020526040902054151590565b6000611f288383611f04565b611f5e575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556119f9565b5060006119f9565b60606040825110611f8c5781806020019051810190611f859190612120565b9050611d19565b8151602014156120ac5760005b60208160ff16108015611fc85750828160ff1681518110611fb657fe5b01602001516001600160f81b03191615155b15611fd557600101611f99565b60608160ff1667ffffffffffffffff81118015611ff157600080fd5b506040519080825280601f01601f19166020018201604052801561201c576020820181803683370190505b509050600091505b60208260ff161080156120535750838260ff168151811061204157fe5b01602001516001600160f81b03191615155b156120a357838260ff168151811061206757fe5b602001015160f81c60f81b818360ff168151811061208157fe5b60200101906001600160f81b031916908160001a905350600190910190612024565b9150611d199050565b506040805180820190915260038152623f3f3f60e81b6020820152611d19565b6000602082840312156120dd578081fd5b81356119f681612980565b6000602082840312156120f9578081fd5b81516119f681612980565b600060208284031215612115578081fd5b81516119f681612995565b600060208284031215612131578081fd5b815167ffffffffffffffff80821115612148578283fd5b818401915084601f83011261215b578283fd5b815181811115612169578384fd5b604051601f8201601f191681016020018381118282101715612189578586fd5b6040528181528382016020018710156121a0578485fd5b6121b1826020830160208701612954565b9695505050505050565b6000602082840312156121cc578081fd5b5035919050565b6000602082840312156121e4578081fd5b5051919050565b600080604083850312156121fd578081fd5b82359150602083013561220f81612980565b809150509250929050565b60008060006060848603121561222e578081fd5b83359250602084013561224081612980565b9150604084013561225081612980565b809150509250925092565b6000806040838503121561226d578182fd5b50508035926020909101359150565b60008060008060808587031215612291578081fd5b843593506020850135925060408501356122aa81612980565b915060608501356122ba81612995565b939692955090935050565b600081518084526122dd816020860160208601612954565b601f01601f19169290920160200192915050565b60008251612303818460208701612954565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0383168152604060208201819052600090611e03908301846122c5565b6001600160a01b039586168152602081019490945260408401929092526060830152909116608082015260a00190565b6020808252602a908201527f736574547265617375727950657263656e743a20746f74616c2070657263656e6040820152690e840deeccae440dac2f60b31b606082015260800190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b6020808252602a908201527f736574496e766573746f7250657263656e743a20746f74616c2070657263656e6040820152690e840deeccae440dac2f60b31b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526029908201527f736574547265617375727950657263656e743a20696e76616c69642070657263604082015268656e742076616c756560b81b606082015260800190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b6020808252600990820152686465763a207775743f60b81b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152741859190e88131408185b1c9958591e481859191959605a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601590820152747365745472656173757279416464723a207775743f60581b604082015260600190565b60208082526025908201527f73657444657650657263656e743a20746f74616c2070657263656e74206f76656040820152640e440dac2f60db1b606082015260800190565b60208082526029908201527f736574496e766573746f7250657263656e743a20696e76616c69642070657263604082015268656e742076616c756560b81b606082015260800190565b60208082526026908201527f6164643a204c5020746f6b656e206d75737420626520612076616c696420636f6040820152651b9d1c9858dd60d21b606082015260800190565b602080825260159082015274736574496e766573746f72416464723a207775743f60581b604082015260600190565b6020808252601290820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604082015260600190565b60208082526026908201527f7365743a207265776172646572206d75737420626520636f6e7472616374206f60408201526572207a65726f60d01b606082015260800190565b60208082526026908201527f6164643a207265776172646572206d75737420626520636f6e7472616374206f60408201526572207a65726f60d01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526024908201527f73657444657650657263656e743a20696e76616c69642070657263656e742076604082015263616c756560e01b606082015260800190565b90815260200190565b8481526001600160a01b038416602082015260806040820181905260009061290f908301856122c5565b905082606083015295945050505050565b9182521515602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b60005b8381101561296f578181015183820152602001612957565b83811115611bf25750506000910152565b6001600160a01b0381168114610b2857600080fd5b8015158114610b2857600080fdfea26469706673582212205d5c5b8129991c04c5f17bbb6abc2454659b0e783d7a8c8c593662ce7e907c2d64736f6c634300060c0033000000000000000000000000cf8419a615c57511807236751c0af38db4ba33510000000000000000000000000aa5cb6f365259524f7ece8e09cce9a7b394077a0000000000000000000000004980ad7ccb304f7d3c5053aa1131ed1edaf48809000000000000000000000000294ab3200ef36200db84c4128b7f1b4eec71e38a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000618c24c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000015e
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cf8419a615c57511807236751c0af38db4ba33510000000000000000000000000aa5cb6f365259524f7ece8e09cce9a7b394077a0000000000000000000000004980ad7ccb304f7d3c5053aa1131ed1edaf48809000000000000000000000000294ab3200ef36200db84c4128b7f1b4eec71e38a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000618c24c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000015e
-----Decoded View---------------
Arg [0] : _axial (address): 0xcf8419a615c57511807236751c0af38db4ba3351
Arg [1] : _devAddr (address): 0x0aa5cb6f365259524f7ece8e09cce9a7b394077a
Arg [2] : _treasuryAddr (address): 0x4980ad7ccb304f7d3c5053aa1131ed1edaf48809
Arg [3] : _investorAddr (address): 0x294ab3200ef36200db84c4128b7f1b4eec71e38a
Arg [4] : _axialPerSec (uint256): 0
Arg [5] : _startTimestamp (uint256): 1636574400
Arg [6] : _devPercent (uint256): 0
Arg [7] : _treasuryPercent (uint256): 150
Arg [8] : _investorPercent (uint256): 350
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf8419a615c57511807236751c0af38db4ba3351
Arg [1] : 0000000000000000000000000aa5cb6f365259524f7ece8e09cce9a7b394077a
Arg [2] : 0000000000000000000000004980ad7ccb304f7d3c5053aa1131ed1edaf48809
Arg [3] : 000000000000000000000000294ab3200ef36200db84c4128b7f1b4eec71e38a
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 00000000000000000000000000000000000000000000000000000000618c24c0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000096
Arg [8] : 000000000000000000000000000000000000000000000000000000000000015e
Deployed ByteCode Sourcemap
123556:15212:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;125447:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;125546;;;:::i;128038:95::-;;;:::i;138565:200::-;;;;;;:::i;:::-;;:::i;:::-;;137833:173;;;;;;:::i;:::-;;:::i;125612:26::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;125960:30::-;;;:::i;125265:26::-;;;:::i;125131:27::-;;;:::i;:::-;;;;;;;:::i;134782:917::-;;;;;;:::i;:::-;;:::i;125025:23::-;;;:::i;132531:1206::-;;;;;;:::i;:::-;;:::i;135770:356::-;;;;;;:::i;:::-;;:::i;132275:180::-;;;:::i;136771:334::-;;;;;;:::i;:::-;;:::i;34650:148::-;;;:::i;138014:411::-;;;;;;:::i;:::-;;:::i;129488:681::-;;;;;;:::i;:::-;;:::i;137352:411::-;;;;;;:::i;:::-;;:::i;136583:180::-;;;;;;:::i;:::-;;:::i;33999:87::-;;;:::i;125801:64::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;137171:173::-;;;;;;:::i;:::-;;:::i;128302:1089::-;;;;;;:::i;:::-;;:::i;125190:27::-;;;:::i;131760:432::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;125076:22::-;;;:::i;133807:923::-;;;;;;:::i;:::-;;:::i;126045:29::-;;;:::i;34953:244::-;;;;;;:::i;:::-;;:::i;125353:25::-;;;:::i;130234:1414::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;125447:30::-;;;;:::o;125546:::-;;;;:::o;128038:95::-;128110:8;:15;128038:95;:::o;138565:200::-;34230:12;:10;:12::i;:::-;-1:-1:-1;;;;;34219:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34219:23:0;;34211:68;;;;-1:-1:-1;;;34211:68:0;;;;;;;:::i;:::-;;;;;;;;;138643:17:::1;:15;:17::i;:::-;138671:11;:26:::0;;;138713:44:::1;::::0;138732:10:::1;::::0;138713:44:::1;::::0;::::1;::::0;138685:12;;138713:44:::1;:::i;:::-;;;;;;;;138565:200:::0;:::o;137833:173::-;137921:12;;-1:-1:-1;;;;;137921:12:0;137907:10;:26;137899:60;;;;-1:-1:-1;;;137899:60:0;;;;;;;:::i;:::-;137970:12;:28;;-1:-1:-1;;;;;;137970:28:0;-1:-1:-1;;;;;137970:28:0;;;;;;;;;;137833:173::o;125612:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;125612:26:0;;;;-1:-1:-1;125612:26:0;;;;;;;;:::o;125960:30::-;;;;:::o;125265:26::-;;;;:::o;125131:27::-;;;-1:-1:-1;;;;;125131:27:0;;:::o;134782:917::-;134849:21;134873:8;134882:4;134873:14;;;;;;;;;;;;;;;;134922;;;:8;:14;;;;;;134937:10;134922:26;;;;;;;134967:11;;134873:14;;;;;;;;-1:-1:-1;134967:22:0;-1:-1:-1;134967:22:0;134959:53;;;;-1:-1:-1;;;134959:53:0;;;;;;;:::i;:::-;135025:16;135036:4;135025:10;:16::i;:::-;135080:15;135098:69;135151:4;:15;;;135098:48;135141:4;135098:38;135114:4;:21;;;135098:4;:11;;;:15;;:38;;;;:::i;:::-;:42;;:48::i;:::-;:52;;:69::i;:::-;135080:87;;135178:38;135196:10;135208:7;135178:17;:38::i;:::-;135252:4;135240:10;-1:-1:-1;;;;;135232:34:0;;135258:7;135232:34;;;;;;:::i;:::-;;;;;;;;135293:11;;:24;;135309:7;135293:15;:24::i;:::-;135279:38;;;135362:21;;;;135346:48;;135389:4;;135346:38;;135279;135346:15;:38::i;:48::-;135328:4;:15;;:66;;;;135407:18;135428:8;135437:4;135428:14;;;;;;;;;;;;;;;;:23;:14;;;;;:23;;-1:-1:-1;;;;;135428:23:0;;-1:-1:-1;135466:31:0;;135462:111;;135549:11;;135514:47;;-1:-1:-1;;;135514:47:0;;-1:-1:-1;;;;;135514:22:0;;;;;:47;;135537:10;;135514:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;135462:111;135585:12;;:55;;-1:-1:-1;;;;;135585:12:0;135619:10;135632:7;135585:25;:55::i;:::-;135677:4;135665:10;-1:-1:-1;;;;;135656:35:0;;135683:7;135656:35;;;;;;:::i;:::-;;;;;;;;134782:917;;;;;;:::o;125025:23::-;;;-1:-1:-1;;;;;125025:23:0;;:::o;132531:1206::-;132583:21;132607:8;132616:4;132607:14;;;;;;;;;;;;;;;;;;132583:38;;132655:4;:24;;;132636:15;:43;132632:82;;132696:7;;;132632:82;132743:12;;:37;;-1:-1:-1;;;132743:37:0;;132724:16;;-1:-1:-1;;;;;132743:12:0;;:22;;:37;;132774:4;;132743:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;132724:56;-1:-1:-1;132795:13:0;132791:109;;-1:-1:-1;132852:15:0;132825:24;;;;:42;132882:7;;132791:109;132910:18;132931:45;132951:4;:24;;;132931:15;:19;;:45;;;;:::i;:::-;132910:66;;132987:19;133009:69;133062:15;;133009:48;133041:4;:15;;;133009:27;133024:11;;133009:10;:14;;:27;;;;:::i;:::-;:31;;:48::i;:69::-;133147:15;;133129;;133116:10;;133173:5;;133184:7;;132987:91;;-1:-1:-1;133109:4:0;:17;;;:35;;;;:53;;;;;-1:-1:-1;;;;;133173:5:0;;;;:10;;133184:7;;;133193:37;;133109:4;133193:27;;132987:91;;133193:15;:27::i;:37::-;133173:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;133242:5:0;;133253:12;;133283:15;;-1:-1:-1;;;;;133242:5:0;;;;-1:-1:-1;133242:10:0;;-1:-1:-1;133253:12:0;;;133267:42;;133304:4;;133267:32;;:11;;:15;:32::i;:42::-;133242:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;133321:5:0;;133332:12;;133362:15;;-1:-1:-1;;;;;133321:5:0;;;;-1:-1:-1;133321:10:0;;-1:-1:-1;133332:12:0;;;133346:42;;133383:4;;133346:32;;:11;;:15;:32::i;:42::-;133321:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;133400:5:0;;-1:-1:-1;;;;;133400:5:0;;-1:-1:-1;133400:10:0;;-1:-1:-1;133419:4:0;133426:36;133457:4;133426:26;:11;133442:9;133426:15;:26::i;:36::-;133400:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;133498:87;133524:60;133579:4;133524:50;133564:9;133524:35;133550:8;133524:21;133540:4;133524:11;:15;;:21;;;;:::i;:60::-;133498:21;;;;;:25;:87::i;:::-;133474:21;;;:111;;;133623:15;133596:24;;;:42;;;133654:75;;133665:4;;133654:75;;;;133623:15;;133697:8;;133654:75;:::i;:::-;;;;;;;;132531:1206;;;;;;;:::o;135770:356::-;135829:21;135853:8;135862:4;135853:14;;;;;;;;;;;;;;;;135902;;;:8;:14;;;;;;135917:10;135902:26;;;;;;;;135986:11;;135853:14;;;;;;;135939:12;;135853:14;;-1:-1:-1;135939:59:0;;-1:-1:-1;;;;;135939:12:0;;;;;135917:10;135939:25;:59::i;:::-;136050:11;;136014:48;;136044:4;;136032:10;;136014:48;;;;;:::i;:::-;;;;;;;;136087:1;136073:15;;;136099;;;;:19;-1:-1:-1;;135770:356:0:o;132275:180::-;132337:8;:15;132320:14;132363:85;132391:6;132385:3;:12;132363:85;;;132421:15;132432:3;132421:10;:15::i;:::-;132399:5;;132363:85;;;;132275:180;:::o;136771:334::-;34230:12;:10;:12::i;:::-;-1:-1:-1;;;;;34219:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34219:23:0;;34211:68;;;;-1:-1:-1;;;34211:68:0;;;;;;;:::i;:::-;136895:4:::1;136877:14;:22;;136846:94;;;;-1:-1:-1::0;;;136846:94:0::1;;;;;;;:::i;:::-;137013:4;136994:15;;136977:14;136959:15;;:32;:50;:58;;136951:108;;;;-1:-1:-1::0;;;136951:108:0::1;;;;;;;:::i;:::-;137070:10;:27:::0;136771:334::o;34650:148::-;34230:12;:10;:12::i;:::-;-1:-1:-1;;;;;34219:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34219:23:0;;34211:68;;;;-1:-1:-1;;;34211:68:0;;;;;;;:::i;:::-;34757:1:::1;34741:6:::0;;34720:40:::1;::::0;-1:-1:-1;;;;;34741:6:0;;::::1;::::0;34720:40:::1;::::0;34757:1;;34720:40:::1;34788:1;34771:19:::0;;-1:-1:-1;;;;;;34771:19:0::1;::::0;;34650:148::o;138014:411::-;34230:12;:10;:12::i;:::-;-1:-1:-1;;;;;34219:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34219:23:0;;34211:68;;;;-1:-1:-1;;;34211:68:0;;;;;;;:::i;:::-;138158:4:::1;138135:19;:27;;138099:109;;;;-1:-1:-1::0;;;138099:109:0::1;;;;;;;:::i;:::-;138295:4;138276:15;;138254:19;138241:10;;:32;:50;:58;;138219:150;;;;-1:-1:-1::0;;;138219:150:0::1;;;;;;;:::i;:::-;138380:15;:37:::0;138014:411::o;129488:681::-;34230:12;:10;:12::i;:::-;-1:-1:-1;;;;;34219:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34219:23:0;;34211:68;;;;-1:-1:-1;;;34211:68:0;;;;;;;:::i;:::-;129666:38:::1;129693:9;129666:18;:38::i;:::-;:74;;;-1:-1:-1::0;;;;;;129708:32:0;::::1;::::0;129666:74:::1;129644:162;;;;-1:-1:-1::0;;;129644:162:0::1;;;;;;;:::i;:::-;129817:17;:15;:17::i;:::-;129863:63;129914:11;129863:46;129883:8;129892:4;129883:14;;;;;;;;;;;;;;;;;;:25;;;129863:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;129845:15;:81;;;;129965:11;129937:8;129946:4;129937:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;129991:9;129987:77;;;130043:9;130017:8;130026:4;130017:14;;;;;;;;;;;;;;;;;;:23;;;:35;;;;;-1:-1:-1::0;;;;;130017:35:0::1;;;;;-1:-1:-1::0;;;;;130017:35:0::1;;;;;;129987:77;130102:9;:47;;130126:8;130135:4;130126:14;;;;;;;;;::::0;;;::::1;::::0;;;:23:::1;:14;::::0;;::::1;;:23;::::0;-1:-1:-1;;;;;130126:23:0::1;130102:47;;;130114:9;130102:47;-1:-1:-1::0;;;;;130079:82:0::1;130083:4;130079:82;130089:11;130151:9;130079:82;;;;;;;:::i;:::-;;;;;;;;129488:681:::0;;;;:::o;137352:411::-;34230:12;:10;:12::i;:::-;-1:-1:-1;;;;;34219:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34219:23:0;;34211:68;;;;-1:-1:-1;;;34211:68:0;;;;;;;:::i;:::-;137496:4:::1;137473:19;:27;;137437:109;;;;-1:-1:-1::0;;;137437:109:0::1;;;;;;;:::i;:::-;137633:4;137614:15;;137592:19;137579:10;;:32;:50;:58;;137557:150;;;;-1:-1:-1::0;;;137557:150:0::1;;;;;;;:::i;:::-;137718:15;:37:::0;137352:411::o;136583:180::-;136654:7;;-1:-1:-1;;;;;136654:7:0;136640:10;:21;136632:43;;;;-1:-1:-1;;;136632:43:0;;;;;;;:::i;:::-;136686:7;:18;;-1:-1:-1;;;;;;136686:18:0;-1:-1:-1;;;;;136686:18:0;;;;;;;;136720:35;;136734:10;;136720:35;;-1:-1:-1;;136720:35:0;136583:180;:::o;33999:87::-;34045:7;34072:6;-1:-1:-1;;;;;34072:6:0;33999:87;:::o;125801:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;137171:173::-;137259:12;;-1:-1:-1;;;;;137259:12:0;137245:10;:26;137237:60;;;;-1:-1:-1;;;137237:60:0;;;;;;;:::i;:::-;137308:12;:28;;-1:-1:-1;;;;;;137308:28:0;-1:-1:-1;;;;;137308:28:0;;;;;;;;;;137171:173::o;128302:1089::-;34230:12;:10;:12::i;:::-;-1:-1:-1;;;;;34219:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34219:23:0;;34211:68;;;;-1:-1:-1;;;34211:68:0;;;;;;;:::i;:::-;128444:37:::1;128471:8;128444:18;:37::i;:::-;128436:88;;;;-1:-1:-1::0;;;128436:88:0::1;;;;;;;:::i;:::-;128557:38;128584:9;128557:18;:38::i;:::-;:74;;;-1:-1:-1::0;;;;;;128599:32:0;::::1;::::0;128557:74:::1;128535:162;;;;-1:-1:-1::0;;;128535:162:0::1;;;;;;;:::i;:::-;128717:36;:8;128743::::0;128717:17:::1;:36::i;:::-;128716:37;128708:71;;;;-1:-1:-1::0;;;128708:71:0::1;;;;;;;:::i;:::-;128790:17;:15;:17::i;:::-;128818:27;128866:14;;128848:15;:32;:67;;128901:14;;128848:67;;;128883:15;128848:67;128944:15;::::0;128818:97;;-1:-1:-1;128944:32:0::1;::::0;128964:11;128944:19:::1;:32::i;:::-;128926:15;:50:::0;129015:238:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;129015:238:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;129015:238:0;;;;;;;;::::1;::::0;;;;;;128987:8:::1;:277:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;128987:277:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;;::::0;;129275:31:::1;:8;129015:238:::0;129275:12:::1;:31::i;:::-;-1:-1:-1::0;129326:8:0::1;:15:::0;-1:-1:-1;;;;;129322:61:0;;::::1;::::0;;;::::1;::::0;129326:22:::1;::::0;129346:1:::1;129326:19;:22::i;:::-;129322:61;129350:11;129322:61;;;;;;:::i;:::-;;;;;;;;34290:1;128302:1089:::0;;;:::o;125190:27::-;;;-1:-1:-1;;;;;125190:27:0;;:::o;131760:432::-;131854:25;131881:30;131929:21;131953:8;131962:4;131953:14;;;;;;;;;;;;;;;;;;;;;131990:13;;;;131953:14;;-1:-1:-1;;;;;;131990:13:0;131982:36;131978:207;;132063:13;;;;;:27;;;-1:-1:-1;;;132063:27:0;;;;-1:-1:-1;;;;;132063:13:0;;;;:25;;:27;;;;;;;;;;;;:13;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;132035:56;;132125:48;132132:4;:13;;;;;;;;;;-1:-1:-1;;;;;132132:13:0;-1:-1:-1;;;;;132132:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;132125:46:0;;:48::i;:::-;132106:67;;131978:207;131760:432;;;;:::o;125076:22::-;;;-1:-1:-1;;;;;125076:22:0;;:::o;133807:923::-;133873:21;133897:8;133906:4;133897:14;;;;;;;;;;;;;;;;133946;;;:8;:14;;;;;;133961:10;133946:26;;;;;;;133897:14;;;;;;;;-1:-1:-1;133983:16:0;133955:4;133983:10;:16::i;:::-;134014:11;;:15;134010:272;;134076:15;134094:69;134147:4;:15;;;134094:48;134137:4;134094:38;134110:4;:21;;;134094:4;:11;;;:15;;:38;;;;:::i;:69::-;134076:87;;134178:38;134196:10;134208:7;134178:17;:38::i;:::-;134256:4;134244:10;-1:-1:-1;;;;;134236:34:0;;134262:7;134236:34;;;;;;:::i;:::-;;;;;;;;134010:272;;134306:11;;:24;;134322:7;134306:15;:24::i;:::-;134292:38;;;134375:21;;;;134359:48;;134402:4;;134359:38;;134292;134359:15;:38::i;:48::-;134341:4;:15;;:66;;;;134420:18;134441:8;134450:4;134441:14;;;;;;;;;;;;;;;;:23;:14;;;;;:23;;-1:-1:-1;;;;;134441:23:0;;-1:-1:-1;134479:31:0;;134475:111;;134562:11;;134527:47;;-1:-1:-1;;;134527:47:0;;-1:-1:-1;;;;;134527:22:0;;;;;:47;;134550:10;;134527:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;134475:111;134598:12;;:74;;-1:-1:-1;;;;;134598:12:0;134636:10;134657:4;134664:7;134598:29;:74::i;:::-;134708:4;134696:10;-1:-1:-1;;;;;134688:34:0;;134714:7;134688:34;;;;;;:::i;:::-;;;;;;;;133807:923;;;;;:::o;126045:29::-;;;;:::o;34953:244::-;34230:12;:10;:12::i;:::-;-1:-1:-1;;;;;34219:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34219:23:0;;34211:68;;;;-1:-1:-1;;;34211:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35042:22:0;::::1;35034:73;;;;-1:-1:-1::0;;;35034:73:0::1;;;;;;;:::i;:::-;35144:6;::::0;;35123:38:::1;::::0;-1:-1:-1;;;;;35123:38:0;;::::1;::::0;35144:6;::::1;::::0;35123:38:::1;::::0;::::1;35172:6;:17:::0;;-1:-1:-1;;;;;;35172:17:0::1;-1:-1:-1::0;;;;;35172:17:0;;;::::1;::::0;;;::::1;::::0;;34953:244::o;125353:25::-;;;;:::o;130234:1414::-;130350:20;130385:25;130425:30;130470:25;130523:21;130547:8;130556:4;130547:14;;;;;;;;;;;;;;;;130596;;;:8;:14;;;;;;-1:-1:-1;;;;;130596:21:0;;;;;;;;;;130655;130547:14;;;;;;;130655:21;;;;130706:12;;:37;;-1:-1:-1;;;130706:37:0;;130547:14;;-1:-1:-1;130596:21:0;;130655;;130547:14;;130706:12;;:22;;:37;;130737:4;;130706:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;130687:56;;130776:4;:24;;;130758:15;:42;:59;;;;-1:-1:-1;130804:13:0;;;130758:59;130754:500;;;130834:18;130855:45;130875:4;:24;;;130855:15;:19;;:45;;;;:::i;:::-;130834:66;;130915:17;130973:15;;130955;;130942:10;;130935:4;:17;:35;:53;130915:73;;131003:19;131025:126;131132:4;131025:84;131099:9;131025:69;131078:15;;131025:48;131057:4;:15;;;131025:27;131040:11;;131025:10;:14;;:27;;;;:::i;:126::-;131003:148;-1:-1:-1;131185:57:0;131206:35;131232:8;131206:21;131003:148;131222:4;131206:15;:21::i;:35::-;131185:16;;:20;:57::i;:::-;131166:76;;130754:500;;;;131279:64;131327:4;:15;;;131279:43;131317:4;131279:33;131295:16;131279:4;:11;;;:15;;:33;;;;:::i;:64::-;131447:13;;;;131264:79;;-1:-1:-1;;;;;;131447:13:0;131439:36;131435:206;;131532:28;131555:4;131532:22;:28::i;:::-;131595:13;;;;;:34;;-1:-1:-1;;;131595:34:0;;131492:68;;-1:-1:-1;131492:68:0;;-1:-1:-1;;;;;;131595:13:0;;;;:27;;:34;;131623:5;;131595:34;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;131575:54;;131435:206;130234:1414;;;;;;;;;;;:::o;32528:106::-;32616:10;32528:106;:::o;6594:220::-;6652:7;6676:6;6672:20;;-1:-1:-1;6691:1:0;6684:8;;6672:20;6715:5;;;6719:1;6715;:5;:1;6739:5;;;;;:10;6731:56;;;;-1:-1:-1;;;6731:56:0;;;;;;;:::i;:::-;6805:1;-1:-1:-1;6594:220:0;;;;;:::o;7292:153::-;7350:7;7382:1;7378;:5;7370:44;;;;-1:-1:-1;;;7370:44:0;;;;;;;:::i;:::-;7436:1;7432;:5;;;;;;;7292:153;-1:-1:-1;;;7292:153:0:o;6177:158::-;6235:7;6268:1;6263;:6;;6255:49;;;;-1:-1:-1;;;6255:49:0;;;;;;;:::i;:::-;-1:-1:-1;6322:5:0;;;6177:158::o;136242:285::-;136338:5;;:30;;-1:-1:-1;;;136338:30:0;;136319:16;;-1:-1:-1;;;;;136338:5:0;;:15;;:30;;136362:4;;136338:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;136319:49;;136393:8;136383:7;:18;136379:141;;;136418:5;;:29;;-1:-1:-1;;;136418:29:0;;-1:-1:-1;;;;;136418:5:0;;;;:14;;:29;;136433:3;;136438:8;;136418:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;136379:141;;;136480:5;;:28;;-1:-1:-1;;;136480:28:0;;-1:-1:-1;;;;;136480:5:0;;;;:14;;:28;;136495:3;;136500:7;;136480:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;136379:141;136242:285;;;:::o;57880:340::-;57999:12;58013:17;58042:5;-1:-1:-1;;;;;58034:19:0;55509:10;58077:12;;58091:2;58095:6;58054:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;58054:48:0;;;;;;;;;;;;;;-1:-1:-1;;;;;58054:48:0;-1:-1:-1;;;;;;58054:48:0;;;;;;;;;;58034:69;;;;58054:48;58034:69;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57998:105;;;;58122:7;:57;;;;-1:-1:-1;58134:11:0;;:16;;:44;;;58165:4;58154:24;;;;;;;;;;;;:::i;:::-;58114:98;;;;-1:-1:-1;;;58114:98:0;;;;;;;:::i;:::-;57880:340;;;;;:::o;5715:179::-;5773:7;5805:5;;;5829:6;;;;5821:46;;;;-1:-1:-1;;;5821:46:0;;;;;;;:::i;11162:422::-;11529:20;;11568:8;;11162:422;;;;:::o;29400:167::-;29480:4;29504:55;29514:3;-1:-1:-1;;;;;29534:23:0;;29504:9;:55::i;28828:152::-;28898:4;28922:50;28927:3;-1:-1:-1;;;;;28947:23:0;;28922:4;:50::i;56449:248::-;56594:34;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56594:34:0;-1:-1:-1;;;56594:34:0;;;56568:61;;56506:13;;56533:12;;56506:13;;-1:-1:-1;;;;;56568:25:0;;;:61;;56594:34;56568:61;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56532:97;;;;56647:7;:42;;;;;;;;;;;;;;;-1:-1:-1;;;56647:42:0;;;;;;56657:24;56676:4;56657:18;:24::i;:::-;56640:49;56449:248;-1:-1:-1;;;;56449:248:0:o;58540:406::-;58686:12;58700:17;58729:5;-1:-1:-1;;;;;58721:19:0;55599:10;58778:17;;58797:4;58803:2;58807:6;58755:59;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;58755:59:0;;;;;;;;;;;;;;-1:-1:-1;;;;;58755:59:0;-1:-1:-1;;;;;;58755:59:0;;;;;;;;;;58721:104;;;;58755:59;58721:104;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58685:140;;;;58844:7;:57;;;;-1:-1:-1;58856:11:0;;:16;;:44;;;58887:4;58876:24;;;;;;;;;;;;:::i;:::-;58836:102;;;;-1:-1:-1;;;58836:102:0;;;;;;;:::i;:::-;58540:406;;;;;;:::o;26112:129::-;26185:4;26209:19;;;:12;;;;;:19;;;;;;:24;;;26112:129::o;23892:414::-;23955:4;23977:21;23987:3;23992:5;23977:9;:21::i;:::-;23972:327;;-1:-1:-1;24015:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;24198:18;;24176:19;;;:12;;;:19;;;;;;:40;;;;24231:11;;23972:327;-1:-1:-1;24282:5:0;24275:12;;55659:587;55729:13;55774:2;55759:4;:11;:17;55755:484;;55811:4;55800:26;;;;;;;;;;;;:::i;:::-;55793:33;;;;55755:484;55848:4;:11;55863:2;55848:17;55844:395;;;55882:7;55908:69;55919:2;55915:1;:6;;;:22;;;;;55925:4;55930:1;55925:7;;;;;;;;;;;;;;-1:-1:-1;;;;;;55925:7:0;:12;;55915:22;55908:69;;;55958:3;;55908:69;;;55991:23;56027:1;56017:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56017:12:0;;55991:38;;56053:1;56049:5;;56044:99;56060:2;56056:1;:6;;;:22;;;;;56066:4;56071:1;56066:7;;;;;;;;;;;;;;-1:-1:-1;;;;;;56066:7:0;:12;;56056:22;56044:99;;;56120:4;56125:1;56120:7;;;;;;;;;;;;;;;;;;56104:10;56115:1;56104:13;;;;;;;;;;;;;:23;-1:-1:-1;;;;;56104:23:0;;;;;;;;-1:-1:-1;56080:3:0;;;;;56044:99;;;56171:10;-1:-1:-1;56157:25:0;;-1:-1:-1;56157:25:0;55844:395;-1:-1:-1;56215:12:0;;;;;;;;;;;;-1:-1:-1;;;56215:12:0;;;;;;1618:241:-1;;1722:2;1710:9;1701:7;1697:23;1693:32;1690:2;;;-1:-1;;1728:12;1690:2;85:6;72:20;97:33;124:5;97:33;:::i;1866:263::-;;1981:2;1969:9;1960:7;1956:23;1952:32;1949:2;;;-1:-1;;1987:12;1949:2;226:6;220:13;238:33;265:5;238:33;:::i;2136:257::-;;2248:2;2236:9;2227:7;2223:23;2219:32;2216:2;;;-1:-1;;2254:12;2216:2;495:6;489:13;507:30;531:5;507:30;:::i;2400:362::-;;2525:2;2513:9;2504:7;2500:23;2496:32;2493:2;;;-1:-1;;2531:12;2493:2;2582:17;2576:24;2620:18;;2612:6;2609:30;2606:2;;;-1:-1;;2642:12;2606:2;2729:6;2718:9;2714:22;;;1001:3;994:4;986:6;982:17;978:27;968:2;;-1:-1;;1009:12;968:2;1049:6;1043:13;2620:18;29654:6;29651:30;29648:2;;;-1:-1;;29684:12;29648:2;29317;29311:9;29757;29738:17;;-1:-1;;29734:33;29343:17;;2525:2;29343:17;29403:34;;;29439:22;;;29400:62;29397:2;;;-1:-1;;29465:12;29397:2;29317;29484:22;1142:21;;;1242:16;;;2525:2;1242:16;1239:25;-1:-1;1236:2;;;-1:-1;;1267:12;1236:2;1287:39;1319:6;2525:2;1218:5;1214:16;2525:2;1184:6;1180:17;1287:39;:::i;:::-;2662:84;2487:275;-1:-1;;;;;;2487:275::o;2769:241::-;;2873:2;2861:9;2852:7;2848:23;2844:32;2841:2;;;-1:-1;;2879:12;2841:2;-1:-1;1407:20;;2835:175;-1:-1;2835:175::o;3017:263::-;;3132:2;3120:9;3111:7;3107:23;3103:32;3100:2;;;-1:-1;;3138:12;3100:2;-1:-1;1555:13;;3094:186;-1:-1;3094:186::o;3287:366::-;;;3408:2;3396:9;3387:7;3383:23;3379:32;3376:2;;;-1:-1;;3414:12;3376:2;1420:6;1407:20;3466:63;;3566:2;3609:9;3605:22;72:20;97:33;124:5;97:33;:::i;:::-;3574:63;;;;3370:283;;;;;:::o;3660:555::-;;;;3830:2;3818:9;3809:7;3805:23;3801:32;3798:2;;;-1:-1;;3836:12;3798:2;1420:6;1407:20;3888:63;;3988:2;4044:9;4040:22;629:20;654:46;694:5;654:46;:::i;:::-;3996:76;-1:-1;4109:2;4167:22;;798:20;823:52;798:20;823:52;:::i;:::-;4117:82;;;;3792:423;;;;;:::o;4222:366::-;;;4343:2;4331:9;4322:7;4318:23;4314:32;4311:2;;;-1:-1;;4349:12;4311:2;-1:-1;;1407:20;;;4501:2;4540:22;;;1407:20;;-1:-1;4305:283::o;4595:649::-;;;;;4766:3;4754:9;4745:7;4741:23;4737:33;4734:2;;;-1:-1;;4773:12;4734:2;1420:6;1407:20;4825:63;;4925:2;4968:9;4964:22;1407:20;4933:63;;5033:2;5095:9;5091:22;798:20;823:52;869:5;823:52;:::i;:::-;5041:82;-1:-1;5160:2;5196:22;;347:20;372:30;347:20;372:30;:::i;:::-;4728:516;;;;-1:-1;4728:516;;-1:-1;;4728:516::o;6495:347::-;;6640:5;29934:12;30373:6;30368:3;30361:19;6734:52;6779:6;30410:4;30405:3;30401:14;30410:4;6760:5;6756:16;6734:52;:::i;:::-;29757:9;32660:14;-1:-1;;32656:28;6798:39;;;;30410:4;6798:39;;6587:255;-1:-1;;6587:255::o;14862:271::-;;5791:5;29934:12;5902:52;5947:6;5942:3;5935:4;5928:5;5924:16;5902:52;:::i;:::-;5966:16;;;;;14996:137;-1:-1;;14996:137::o;15140:222::-;-1:-1;;;;;30909:54;;;;5471:37;;15267:2;15252:18;;15238:124::o;15369:349::-;-1:-1;;;;;30909:54;;;;5330:58;;15704:2;15689:18;;14813:37;15532:2;15517:18;;15503:215::o;15725:444::-;-1:-1;;;;;30909:54;;;5471:37;;30909:54;;;;16072:2;16057:18;;5471:37;16155:2;16140:18;;14813:37;;;;15908:2;15893:18;;15879:290::o;16176:421::-;-1:-1;;;;;30909:54;;5471:37;;16351:2;16469;16454:18;;16447:48;;;16176:421;;16509:78;;16336:18;;16573:6;16509:78;:::i;17211:732::-;-1:-1;;;;;30909:54;;;6084:69;;17660:2;17645:18;;14813:37;;;;17743:2;17728:18;;14813:37;;;;17826:2;17811:18;;14813:37;30909:54;;;17928:3;17913:19;;6084:69;17482:3;17467:19;;17453:490::o;17950:416::-;18150:2;18164:47;;;7074:2;18135:18;;;30361:19;7110:34;30401:14;;;7090:55;-1:-1;;;7165:12;;;7158:34;7211:12;;;18121:245::o;18373:416::-;18573:2;18587:47;;;7462:2;18558:18;;;30361:19;7498:30;30401:14;;;7478:51;7548:12;;;18544:245::o;18796:416::-;18996:2;19010:47;;;7799:2;18981:18;;;30361:19;7835:34;30401:14;;;7815:55;-1:-1;;;7890:12;;;7883:34;7936:12;;;18967:245::o;19219:416::-;19419:2;19433:47;;;8187:2;19404:18;;;30361:19;8223:34;30401:14;;;8203:55;-1:-1;;;8278:12;;;8271:30;8320:12;;;19390:245::o;19642:416::-;19842:2;19856:47;;;8571:2;19827:18;;;30361:19;8607:29;30401:14;;;8587:50;8656:12;;;19813:245::o;20065:416::-;20265:2;20279:47;;;8907:2;20250:18;;;30361:19;8943:34;30401:14;;;8923:55;-1:-1;;;8998:12;;;8991:33;9043:12;;;20236:245::o;20488:416::-;20688:2;20702:47;;;9294:2;20673:18;;;30361:19;9330:32;30401:14;;;9310:53;9382:12;;;20659:245::o;20911:416::-;21111:2;21125:47;;;9633:2;21096:18;;;30361:19;9669:28;30401:14;;;9649:49;9717:12;;;21082:245::o;21334:416::-;21534:2;21548:47;;;9968:1;21519:18;;;30361:19;-1:-1;;;30401:14;;;9983:32;10034:12;;;21505:245::o;21757:416::-;21957:2;21971:47;;;10285:2;21942:18;;;30361:19;10321:34;30401:14;;;10301:55;-1:-1;;;10376:12;;;10369:25;10413:12;;;21928:245::o;22180:416::-;22380:2;22394:47;;;10664:2;22365:18;;;30361:19;-1:-1;;;30401:14;;;10680:44;10743:12;;;22351:245::o;22603:416::-;22803:2;22817:47;;;22788:18;;;30361:19;11030:34;30401:14;;;11010:55;11084:12;;;22774:245::o;23026:416::-;23226:2;23240:47;;;11335:2;23211:18;;;30361:19;-1:-1;;;30401:14;;;11351:44;11414:12;;;23197:245::o;23449:416::-;23649:2;23663:47;;;11665:2;23634:18;;;30361:19;11701:34;30401:14;;;11681:55;-1:-1;;;11756:12;;;11749:29;11797:12;;;23620:245::o;23872:416::-;24072:2;24086:47;;;12048:2;24057:18;;;30361:19;12084:34;30401:14;;;12064:55;-1:-1;;;12139:12;;;12132:33;12184:12;;;24043:245::o;24295:416::-;24495:2;24509:47;;;12435:2;24480:18;;;30361:19;12471:34;30401:14;;;12451:55;-1:-1;;;12526:12;;;12519:30;12568:12;;;24466:245::o;24718:416::-;24918:2;24932:47;;;12819:2;24903:18;;;30361:19;-1:-1;;;30401:14;;;12835:44;12898:12;;;24889:245::o;25141:416::-;25341:2;25355:47;;;13149:2;25326:18;;;30361:19;-1:-1;;;30401:14;;;13165:41;13225:12;;;25312:245::o;25564:416::-;25764:2;25778:47;;;13476:2;25749:18;;;30361:19;13512:34;30401:14;;;13492:55;-1:-1;;;13567:12;;;13560:30;13609:12;;;25735:245::o;25987:416::-;26187:2;26201:47;;;13860:2;26172:18;;;30361:19;13896:34;30401:14;;;13876:55;-1:-1;;;13951:12;;;13944:30;13993:12;;;26158:245::o;26410:416::-;26610:2;26624:47;;;26595:18;;;30361:19;14280:34;30401:14;;;14260:55;14334:12;;;26581:245::o;26833:416::-;27033:2;27047:47;;;14585:2;27018:18;;;30361:19;14621:34;30401:14;;;14601:55;-1:-1;;;14676:12;;;14669:28;14716:12;;;27004:245::o;27256:222::-;14813:37;;;27383:2;27368:18;;27354:124::o;27485:644::-;14813:37;;;-1:-1;;;;;30909:54;;27881:2;27866:18;;5471:37;27716:3;27918:2;27903:18;;27896:48;;;27485:644;;27958:78;;27701:19;;28022:6;27958:78;:::i;:::-;27950:86;;14843:5;28115:2;28104:9;28100:18;14813:37;27687:442;;;;;;;:::o;28136:321::-;14813:37;;;30593:13;30586:21;28443:2;28428:18;;5585:34;28285:2;28270:18;;28256:201::o;28464:333::-;14813:37;;;28783:2;28768:18;;14813:37;28619:2;28604:18;;28590:207::o;28804:444::-;14813:37;;;29151:2;29136:18;;14813:37;;;;29234:2;29219:18;;14813:37;28987:2;28972:18;;28958:290::o;32316:268::-;32381:1;32388:101;32402:6;32399:1;32396:13;32388:101;;;32469:11;;;32463:18;32450:11;;;32443:39;32424:2;32417:10;32388:101;;;32504:6;32501:1;32498:13;32495:2;;;-1:-1;;32381:1;32551:16;;32544:27;32365:219::o;32697:117::-;-1:-1;;;;;30909:54;;32756:35;;32746:2;;32805:1;;32795:12;32821:111;32902:5;30593:13;30586:21;32880:5;32877:32;32867:2;;32923:1;;32913:12
Swarm Source
ipfs://5d5c5b8129991c04c5f17bbb6abc2454659b0e783d7a8c8c593662ce7e907c2d
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.