Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 452 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Pools | 19087128 | 303 days ago | IN | 0 ETH | 0.00172836 | ||||
Create Accounts | 19086929 | 303 days ago | IN | 0 ETH | 0.00144246 | ||||
Create Pools | 19079281 | 304 days ago | IN | 0 ETH | 0.00077647 | ||||
Create Accounts | 19079240 | 304 days ago | IN | 0 ETH | 0.000833 | ||||
Create Pools | 19071774 | 305 days ago | IN | 0 ETH | 0.0010904 | ||||
Create Accounts | 19071712 | 305 days ago | IN | 0 ETH | 0.001067 | ||||
Create Pools | 19044636 | 309 days ago | IN | 0 ETH | 0.00157503 | ||||
Create Accounts | 19044511 | 309 days ago | IN | 0 ETH | 0.00176537 | ||||
Create Pools | 19043034 | 309 days ago | IN | 0 ETH | 0.00265848 | ||||
Create Accounts | 19041318 | 309 days ago | IN | 0 ETH | 0.00291931 | ||||
Renew Accounts | 18933244 | 324 days ago | IN | 0 ETH | 0.0011136 | ||||
Renew Accounts | 18922761 | 326 days ago | IN | 0 ETH | 0.00162576 | ||||
Create Pools | 18886184 | 331 days ago | IN | 0 ETH | 0.00194639 | ||||
Create Pools | 18879006 | 332 days ago | IN | 0 ETH | 0.00307352 | ||||
Create Accounts | 18878976 | 332 days ago | IN | 0 ETH | 0.00333607 | ||||
Create Pools | 18836406 | 338 days ago | IN | 0 ETH | 0.00304253 | ||||
Create Pools | 18836355 | 338 days ago | IN | 0 ETH | 0.00337697 | ||||
Create Pools | 18836271 | 338 days ago | IN | 0 ETH | 0.00352422 | ||||
Create Accounts | 18836006 | 338 days ago | IN | 0 ETH | 0.0045026 | ||||
Create Pools | 18829607 | 339 days ago | IN | 0 ETH | 0.0043967 | ||||
Create Accounts | 18829576 | 339 days ago | IN | 0 ETH | 0.00466902 | ||||
Create Pools | 18788328 | 345 days ago | IN | 0 ETH | 0.00270409 | ||||
Create Accounts | 18788301 | 345 days ago | IN | 0 ETH | 0.00331094 | ||||
Create Pools | 18773656 | 347 days ago | IN | 0 ETH | 0.00384455 | ||||
Create Pools | 18773364 | 347 days ago | IN | 0 ETH | 0.00412167 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
XetaBlack
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-05 */ // File: @openzeppelin/contracts/utils/math/SignedMath.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.0; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toString(int256 value) internal pure returns (string memory) { return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value)))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead 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, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override 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 default value returned by this function, unless * it's overridden. * * 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 override returns (uint8) { return 18; } /** * @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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); 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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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: * * - `account` 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 += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(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); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @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 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } // File: xetaBlack.sol //SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.17; /// @title A XETA Black contract /// @notice Use this contract to manage XETA Black contract XetaBlack is Ownable, Pausable { uint8 private constant CUSTOM_POOL = 0; IERC20 public usdcToken; mapping(uint8 => uint) public accountCost; mapping(uint8 => uint) public accountCreationFee; mapping(uint8 => uint) public accountMembershipFee; mapping(uint8 => uint) public poolCost; mapping(uint8 => uint) public poolCreationFee; mapping(uint8 => uint) public poolManagementFee; address public gaxsysWallet; address public blackOpsWallet; uint public customPoolCreationFeePercent = 2500; // 2.5% /// @notice Accounts event CreatingAccountsEvent(address indexed userWallet, uint indexed amount, uint8 indexed _type); event RenewAccountsEvent(address indexed userWallet, bytes24[] accountIds, uint8[] tokenTypes, uint8 indexed months); event WithdrawAccountsEvent(address indexed userWallet, uint indexed sum); event WithdrawAccountsByIdsEvent(address indexed userWallet, bytes24[] accountIds, uint[] sum); /// @notice Pools event CreatingPoolsEvent(address indexed userWallet, uint indexed amount, uint8 indexed _type, uint _poolPrincipal); event RenewPoolsEvent(address indexed userWallet, bytes24 indexed poolId, uint8 indexed tokenType, uint managementFee); event WithdrawPoolsEvent(address indexed userWallet, bytes24[] poolIds, uint[] amount, bool[] liquidates); event SetAccountCostEvent(uint8 indexed _type, uint indexed cost); event SetAccountCreationFeeEvent(uint8 indexed _type, uint indexed fee); event SetAccountMembershipFeeEvent(uint8 indexed _type, uint indexed fee); event SetPoolCostEvent(uint8 indexed _type, uint indexed cost); event SetPoolCreationFeeEvent(uint8 indexed _type, uint indexed fee); event SetPoolManagementFeeEvent(uint8 indexed _type, uint indexed fee); event SetCustomPoolCreationFeePercentEvent(uint indexed fee); event SetGaxsysWalletEvent(address indexed newAddress); event SetBlackOpsWalletEvent(address indexed newAddress); constructor(address _usdcToken, address _gaxsysWallet, address _blackOpsWallet) { require(_usdcToken != address(0x0)); require(_gaxsysWallet != address(0x0)); require(_blackOpsWallet != address(0x0)); usdcToken = IERC20(_usdcToken); gaxsysWallet = _gaxsysWallet; blackOpsWallet = _blackOpsWallet; accountCost[0] = 1000 * (10 ** 6); // 1000 USDC Account accountCost[1] = 500 * (10 ** 6); // 500 USDC Account accountCost[2] = 250 * (10 ** 6); // 250 USDC Account accountCreationFee[0] = 2500 * (10 ** 4); // 25 USDC accountCreationFee[1] = 1250 * (10 ** 4); // 12.5 USDC accountCreationFee[2] = 625 * (10 ** 4); // 6.25 USDC accountMembershipFee[0] = 25 * (10 ** 6); // 25 USDC accountMembershipFee[1] = 25 * (10 ** 6); // 25 USDC accountMembershipFee[2] = 25 * (10 ** 6); // 25 USDC poolCost[1] = 1000 * (10 ** 6); // 1000 USDC Pool poolCost[2] = 10000 * (10 ** 6); // 10000 USDC Pool poolCost[3] = 25000 * (10 ** 6); // 25000 USDC Pool poolCost[4] = 50000 * (10 ** 6); // 50000 USDC Pool poolCost[5] = 100000 * (10 ** 6); // 100000 USDC Pool poolCost[6] = 250000 * (10 ** 6); // 250000 USDC Pool poolCreationFee[1] = 25 * (10 ** 6); // 25 USDC poolCreationFee[2] = 250 * (10 ** 6); // 250 USDC poolCreationFee[3] = 625 * (10 ** 6); // 625 USDC poolCreationFee[4] = 1250 * (10 ** 6); // 1250 USDC poolCreationFee[5] = 2500 * (10 ** 6); // 2500 USDC poolCreationFee[6] = 6250 * (10 ** 6); // 6250 USDC poolManagementFee[1] = 25 * (10 ** 6); // 25 USDC poolManagementFee[2] = 250 * (10 ** 6); // 250 USDC poolManagementFee[3] = 625 * (10 ** 6); // 625 USDC poolManagementFee[4] = 1250 * (10 ** 6); // 1250 USDC poolManagementFee[5] = 2500 * (10 ** 6); // 2500 USDC poolManagementFee[6] = 6250 * (10 ** 6); // 6250 USDC } /// @notice Use this function to create accounts. A user should pay create fee and create cost (initial size) function createAccounts(uint8 _type, uint amount, uint _accountPrincipal, uint _accountCreationFee, uint _accountMembershipFee) external whenNotPaused { require(amount > 0 && amount <= 1000, "Illegal amount"); // 1000 accounts max per operation to prevent overflow require(_accountCreationFee > 0 && _accountCreationFee == accountCreationFee[_type], "Invalid account creation fee"); require(_accountMembershipFee > 0 && _accountMembershipFee == accountMembershipFee[_type], "Invalid account management fee"); require(_accountPrincipal > 0 && _accountPrincipal == accountCost[_type], "Invalid account principal (cost)"); uint sumAmount = (accountCost[_type] + accountCreationFee[_type] + accountMembershipFee[_type]) * amount; require(usdcToken.balanceOf(msg.sender) >= sumAmount, "Insufficient balance"); require(usdcToken.allowance(msg.sender, address(this)) >= sumAmount, "Insufficient allowance"); bool res = usdcToken.transferFrom(msg.sender, gaxsysWallet, accountCost[_type] * amount) && usdcToken.transferFrom(msg.sender, blackOpsWallet, (accountCreationFee[_type] + accountMembershipFee[_type]) * amount); require(res == true, "Error in payment transfer"); emit CreatingAccountsEvent(msg.sender, amount, _type); } /// @notice A user with accounts should pay a membership fee for each account every 28 days /// @dev There is no info about account IDs. So, this should be verified on the backend function renewAccounts(bytes24[] memory accountIds, uint8[] memory tokenTypes, uint8 months, uint sumMembershipFee) external whenNotPaused { require(months > 0 && months < 14, "Invalid month amount"); require(accountIds.length == tokenTypes.length, "Account and types array length mismatch"); uint _sumMembershipFee = 0; for (uint8 i = 0; i < tokenTypes.length; i++) { _sumMembershipFee += accountMembershipFee[tokenTypes[i]]; } require(_sumMembershipFee > 0 && _sumMembershipFee * months == sumMembershipFee, "Invalid management fee"); require(accountIds.length > 0, "Illegal number of accounts"); bool res = usdcToken.transferFrom(msg.sender, blackOpsWallet, sumMembershipFee); require(res == true, "Error in payment transfer"); emit RenewAccountsEvent(msg.sender, accountIds, tokenTypes, months); } /// @dev Backend should listen to this event and send a request to GAXSYS function withdrawAccounts(uint sum) external whenNotPaused { emit WithdrawAccountsEvent(msg.sender, sum); } /// @dev Backend should listen to this event and send a request to GAXSYS function withdrawAccountsByIds(bytes24[] memory accountIds, uint[] memory sum) external whenNotPaused { require(accountIds.length == sum.length, "Accounts and sum array length mismatch"); emit WithdrawAccountsByIdsEvent(msg.sender, accountIds, sum); } /// @notice Use this function to create pools. A user should pay create fee and create cost (processing fee) function createPools(uint8 _type, uint amount, uint _poolPrincipal, uint _poolCreationFee) external whenNotPaused { require(amount > 0 && amount <= 1000, "Illegal amount"); // 1000 pools max per operation to prevent overflow require(_poolPrincipal > 0, "Invalid pool cost (principal)"); require(_poolCreationFee > 0, "Invalid pool creation fee"); uint sumAmount; uint poolsCost; uint creationFees; if (_type != CUSTOM_POOL) { require(_poolCreationFee == poolCreationFee[_type], "Invalid pool creation fee"); require(_poolPrincipal == poolCost[_type], "Invalid pool principal"); sumAmount = (poolCost[_type] + poolCreationFee[_type]) * amount; poolsCost = poolCost[_type] * amount; creationFees = poolCreationFee[_type] * amount; } else { // Custom pool require(_poolPrincipal >= 250000 * (10 ** 6) && _poolPrincipal < 1e18, "Invalid pool cost (principal)"); // 250000 USDC min and prevent overflow sumAmount = amount * _poolPrincipal * (100000 + customPoolCreationFeePercent) / 100000; // 100% + 2.5% creation fee poolsCost = _poolPrincipal * amount; creationFees = sumAmount - poolsCost; // 2.5% creation fee } require(usdcToken.balanceOf(msg.sender) >= sumAmount, "Insufficient balance"); require(usdcToken.allowance(msg.sender, address(this)) >= sumAmount, "Insufficient allowance"); bool res = usdcToken.transferFrom(msg.sender, gaxsysWallet, poolsCost) && usdcToken.transferFrom(msg.sender, blackOpsWallet, creationFees); require(res == true, "Error in payment transfer"); emit CreatingPoolsEvent(msg.sender, amount, _type, _poolPrincipal); } /// @notice A user with pools should pay a management fee for each pool every 28 days /// @dev There is no info about pool id. So, this should be verified on the backend function renewPool(bytes24 poolId, uint8 tokenType, uint managementFee) external whenNotPaused { require(managementFee >= poolManagementFee[tokenType], "Invalid management fee"); bool res = usdcToken.transferFrom(msg.sender, blackOpsWallet, managementFee); require(res == true, "Error in payment transfer"); emit RenewPoolsEvent(msg.sender, poolId, tokenType, managementFee); } /// @notice Makes a request to withdraw pools function withdrawPool(bytes24[] memory poolIds, uint[] memory amount, bool[] memory liquidates) external whenNotPaused { require(poolIds.length > 0, "Illegal number of pools"); require(poolIds.length == amount.length, "Pools and amount array length mismatch"); require(poolIds.length == liquidates.length, "Pools and liquidates array length mismatch"); emit WithdrawPoolsEvent(msg.sender, poolIds, amount, liquidates); } /// @dev If a user sends other tokens to this smart contract, the owner can transfer it to himself. function withdrawToken(address _tokenContract, address _recipient, uint _amount) external onlyOwner { IERC20 tokenContract = IERC20(_tokenContract); // transfer the token from address of this contract // to address of the user (executing the withdrawToken() function) tokenContract.transfer(_recipient, _amount); } /// @dev Due to the nature of smart contracts and the fact they're immutable, for the interest of the community and /// @dev the ecosystem, we decided to add an option to disable critical contract functionality in case of an emergency. function pause() external onlyOwner { _pause(); } /// @dev Due to the nature of smart contracts and the fact they're immutable, for the interest of the community and /// @dev the ecosystem, we decided to add an option to disable critical contract functionality in case of an emergency. function unpause() external onlyOwner { _unpause(); } /// @notice The owner can change the gaxsys wallet (creation fee should be transfered here). function setGaxsysWallet(address newAddress) external onlyOwner { require(newAddress != address(0x0)); gaxsysWallet = newAddress; emit SetGaxsysWalletEvent(newAddress); } /// @notice The owner can change the black ops wallet (management fee should be transfered here). function setBlackOpsWallet(address newAddress) external onlyOwner { require(newAddress != address(0x0)); blackOpsWallet = newAddress; emit SetBlackOpsWalletEvent(newAddress); } /// @notice Sets the account cost in USDC function setAccountCost(uint8 _type, uint cost) external onlyOwner { accountCost[_type] = cost; emit SetAccountCostEvent(_type, cost); } /// @notice Sets the account creation fee in USDC function setAccountCreationFee(uint8 _type, uint fee) external onlyOwner { accountCreationFee[_type] = fee; emit SetAccountCreationFeeEvent(_type, fee); } /// @notice Sets the account membership fee in USDC function setAccountMembershipFee(uint8 _type, uint cost) external onlyOwner { accountMembershipFee[_type] = cost; emit SetAccountMembershipFeeEvent(_type, cost); } /// @notice Sets the pool cost in USDC function setPoolCost(uint8 _type, uint cost) external onlyOwner { require(_type != CUSTOM_POOL, "Illegal pool type"); poolCost[_type] = cost; emit SetPoolCostEvent(_type, cost); } /// @notice Sets the pool creation fee in USDC function setPoolCreationFee(uint8 _type, uint fee) external onlyOwner { require(_type != CUSTOM_POOL, "Illegal pool type"); poolCreationFee[_type] = fee; emit SetPoolCreationFeeEvent(_type, fee); } /// @notice Sets the pool management fee in USDC function setPoolManagementFee(uint8 _type, uint fee) external onlyOwner { require(_type != CUSTOM_POOL, "Illegal pool type"); poolManagementFee[_type] = fee; emit SetPoolManagementFeeEvent(_type, fee); } /// @notice Sets the custom pool creation fee in percents multiplied by 1000 (ex. 2500 is 2.5%) function SetCustomPoolCreationFeePercent(uint fee) external onlyOwner { customPoolCreationFeePercent = fee; emit SetCustomPoolCreationFeePercentEvent(fee); } /// @notice Returns account cost and fees /// @param _type Account type function getAccountTypeDetails(uint8 _type) external view returns(uint[3] memory) { return [ accountCost[_type], accountCreationFee[_type], accountMembershipFee[_type] ]; } /// @notice Returns pool cost and fees /// @param _type Account type function getPoolTypeDetails(uint8 _type) external view returns(uint[3] memory) { return [ poolCost[_type], poolCreationFee[_type], poolManagementFee[_type] ]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_usdcToken","type":"address"},{"internalType":"address","name":"_gaxsysWallet","type":"address"},{"internalType":"address","name":"_blackOpsWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userWallet","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"_type","type":"uint8"}],"name":"CreatingAccountsEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userWallet","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"_type","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_poolPrincipal","type":"uint256"}],"name":"CreatingPoolsEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userWallet","type":"address"},{"indexed":false,"internalType":"bytes24[]","name":"accountIds","type":"bytes24[]"},{"indexed":false,"internalType":"uint8[]","name":"tokenTypes","type":"uint8[]"},{"indexed":true,"internalType":"uint8","name":"months","type":"uint8"}],"name":"RenewAccountsEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userWallet","type":"address"},{"indexed":true,"internalType":"bytes24","name":"poolId","type":"bytes24"},{"indexed":true,"internalType":"uint8","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"managementFee","type":"uint256"}],"name":"RenewPoolsEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"_type","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"cost","type":"uint256"}],"name":"SetAccountCostEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"_type","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetAccountCreationFeeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"_type","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetAccountMembershipFeeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetBlackOpsWalletEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetCustomPoolCreationFeePercentEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetGaxsysWalletEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"_type","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"cost","type":"uint256"}],"name":"SetPoolCostEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"_type","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetPoolCreationFeeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"_type","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetPoolManagementFeeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userWallet","type":"address"},{"indexed":false,"internalType":"bytes24[]","name":"accountIds","type":"bytes24[]"},{"indexed":false,"internalType":"uint256[]","name":"sum","type":"uint256[]"}],"name":"WithdrawAccountsByIdsEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userWallet","type":"address"},{"indexed":true,"internalType":"uint256","name":"sum","type":"uint256"}],"name":"WithdrawAccountsEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userWallet","type":"address"},{"indexed":false,"internalType":"bytes24[]","name":"poolIds","type":"bytes24[]"},{"indexed":false,"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"indexed":false,"internalType":"bool[]","name":"liquidates","type":"bool[]"}],"name":"WithdrawPoolsEvent","type":"event"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"SetCustomPoolCreationFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"accountCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"accountCreationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"accountMembershipFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blackOpsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"_accountPrincipal","type":"uint256"},{"internalType":"uint256","name":"_accountCreationFee","type":"uint256"},{"internalType":"uint256","name":"_accountMembershipFee","type":"uint256"}],"name":"createAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"_poolPrincipal","type":"uint256"},{"internalType":"uint256","name":"_poolCreationFee","type":"uint256"}],"name":"createPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"customPoolCreationFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gaxsysWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_type","type":"uint8"}],"name":"getAccountTypeDetails","outputs":[{"internalType":"uint256[3]","name":"","type":"uint256[3]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_type","type":"uint8"}],"name":"getPoolTypeDetails","outputs":[{"internalType":"uint256[3]","name":"","type":"uint256[3]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"poolCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"poolCreationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"poolManagementFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes24[]","name":"accountIds","type":"bytes24[]"},{"internalType":"uint8[]","name":"tokenTypes","type":"uint8[]"},{"internalType":"uint8","name":"months","type":"uint8"},{"internalType":"uint256","name":"sumMembershipFee","type":"uint256"}],"name":"renewAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes24","name":"poolId","type":"bytes24"},{"internalType":"uint8","name":"tokenType","type":"uint8"},{"internalType":"uint256","name":"managementFee","type":"uint256"}],"name":"renewPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"setAccountCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setAccountCreationFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"setAccountMembershipFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setBlackOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setGaxsysWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"setPoolCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setPoolCreationFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setPoolManagementFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdcToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sum","type":"uint256"}],"name":"withdrawAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes24[]","name":"accountIds","type":"bytes24[]"},{"internalType":"uint256[]","name":"sum","type":"uint256[]"}],"name":"withdrawAccountsByIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes24[]","name":"poolIds","type":"bytes24[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"bool[]","name":"liquidates","type":"bool[]"}],"name":"withdrawPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526109c4600a553480156200001757600080fd5b5060405162002b3638038062002b368339810160408190526200003a9162000551565b6200004533620004e4565b6000805460ff60a01b191690556001600160a01b0383166200006657600080fd5b6001600160a01b0382166200007a57600080fd5b6001600160a01b0381166200008e57600080fd5b600180546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055633b9aca007fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b819055631dcd65007fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e055630ee6b2807f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c81905563017d78407f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff81905562bebc207fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c55625f5e107fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d557f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec8190557fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058190557f91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a78190557f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b929092556402540be4007f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a556405d21dba007fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc055640ba43b74007f3eec716f11ba9e820c81ca75eb978ffb45831ef8b7a53e5e422c26008e1ca6d55564174876e8007f458b30c2d72bfd2c6317304a4594ecbafe5f729d3111b65fdc3a33bd48e5432d55643a352944007f069400f22b28c6c362558d92f66163cec5671cba50b61abd2eecfcd0eaeac518557f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a318290557f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace29819055632540be407f75f96ab15d697e93042dc45b5c896c4b27e89bb6eaf39475c5c371cb2513f7d2819055634a817c807fc5069e24aaadb2addc3e52e868fcf3f4f8acf5a87e24300992fd4540c2a87eed819055639502f9007fbfd358e93f18da3ed276c3afdbdba00b8f0b6008a03476a6a86bd6320ee6938b819055640174876e807f697b2bd7bb2984c4e0dc14c79c987d37818484a62958b9c45a0e8b962f20650f81905560076020527fb39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b828959095557fb7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d939093557f3be6fd20d5acfde5b873b48692cd31f4d3c7e8ee8a813af4696af8859e5ca6c6919091557fb805995a7ec585a251200611a61d179cfd7fb105e1ab17dc415a7336783786f7557fbcdda56b5d08466ec462cbbe0adfa57cb0a15fcc8940ef68f702f21b787bc9355560066000527f55c5b153ab560fcde54a63b18c7f53d75501706907cef8767fbded79ab9997c7556200059b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200054c57600080fd5b919050565b6000806000606084860312156200056757600080fd5b620005728462000534565b9250620005826020850162000534565b9150620005926040850162000534565b90509250925092565b61258b80620005ab6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80637715e5ae11610125578063cb90abfb116100ad578063e7b19ae41161007c578063e7b19ae41461049b578063f06a73f4146104bb578063f2fde38b146104db578063f57f2761146104ee578063f9ff45511461050157600080fd5b8063cb90abfb1461044f578063d22482cf14610462578063de283f7914610475578063e74684d61461048857600080fd5b8063a0f00541116100f4578063a0f00541146103e3578063ad602fa6146103f6578063bc31331614610416578063bd7bdeca14610429578063cb01cd841461043c57600080fd5b80637715e5ae146103975780637d3ef678146103aa5780638456cb59146103ca5780638da5cb5b146103d257600080fd5b806340e5627c116101a8578063631cdb1811610177578063631cdb18146103295780636b136218146103495780636bc28c1c14610369578063715018a61461037c5780637511f90e1461038457600080fd5b806340e5627c146102d357806343d47264146102e65780634524799c146102f95780635c975abb1461030c57600080fd5b80632b6d87bf116101e45780632b6d87bf146102815780633390a949146102945780633bbf8cd6146102c25780633f4ba83a146102cb57600080fd5b806301e336671461021657806311eac8551461022b57806328f877151461025b5780632b4282761461026e575b600080fd5b610229610224366004611d57565b610514565b005b60015461023e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610229610269366004611da4565b610599565b61022961027c366004611da4565b6105e2565b61022961028f366004611da4565b61062b565b6102b46102a2366004611dce565b60036020526000908152604090205481565b604051908152602001610252565b6102b4600a5481565b61022961069d565b6102296102e1366004611df0565b6106af565b6102296102f4366004611e0b565b610714565b610229610307366004611f75565b61074f565b600054600160a01b900460ff166040519015158152602001610252565b6102b4610337366004611dce565b60026020526000908152604090205481565b6102b4610357366004611dce565b60076020526000908152604090205481565b610229610377366004611fe7565b6107fe565b610229610965565b6102296103923660046120ce565b610977565b6102296103a5366004612110565b610e81565b6102b46103b8366004611dce565b60046020526000908152604090205481565b610229610fd2565b6000546001600160a01b031661023e565b6102296103f1366004611df0565b610fe2565b610409610404366004611dce565b611047565b604051610252919061213c565b61022961042436600461216d565b611093565b610229610437366004611e0b565b61135c565b60085461023e906001600160a01b031681565b61022961045d366004611da4565b611394565b610229610470366004611da4565b6113dd565b610229610483366004612247565b611446565b610409610496366004611dce565b611a10565b6102b46104a9366004611dce565b60066020526000908152604090205481565b6102b46104c9366004611dce565b60056020526000908152604090205481565b6102296104e9366004611df0565b611a5c565b6102296104fc366004611da4565b611ad5565b60095461023e906001600160a01b031681565b61051c611b3e565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284919082169063a9059cbb906044016020604051808303816000875af115801561056e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105929190612280565b5050505050565b6105a1611b3e565b60ff8216600081815260026020526040808220849055518392917fec9572c8e5429fba029ee85e1ba8f418ffc1b65739c7fbbe0919c53843ff736991a35050565b6105ea611b3e565b60ff8216600081815260036020526040808220849055518392917f103cfa2426194920263e5e9b57778b8bb433eda3df86fe1a130be99d1d51dbb991a35050565b610633611b3e565b60ff821661065c5760405162461bcd60e51b81526004016106539061229d565b60405180910390fd5b60ff8216600081815260076020526040808220849055518392917f6371dafa143ffc408a2d6d6210dec80613b9c903ac1cdd10972c4e137b2bda8a91a35050565b6106a5611b3e565b6106ad611b98565b565b6106b7611b3e565b6001600160a01b0381166106ca57600080fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040517fdc81bbbcfb12fc7f3a737b8205ecb9113985f8207f50cfb649b495ae74f103f590600090a250565b61071c611b3e565b600a81905560405181907fee546d3e3a8fbf54aafe8592801fb3c1d88d17f717f906a35e6296bcf35fa7ff90600090a250565b610757611bed565b80518251146107b75760405162461bcd60e51b815260206004820152602660248201527f4163636f756e747320616e642073756d206172726179206c656e677468206d696044820152650e6dac2e8c6d60d31b6064820152608401610653565b336001600160a01b03167fcd3cb25dcf0987294c604415344227fb2f1c3691d90cf6f43a27eff44d98fda583836040516107f292919061233e565b60405180910390a25050565b610806611bed565b60008351116108575760405162461bcd60e51b815260206004820152601760248201527f496c6c6567616c206e756d626572206f6620706f6f6c730000000000000000006044820152606401610653565b81518351146108b75760405162461bcd60e51b815260206004820152602660248201527f506f6f6c7320616e6420616d6f756e74206172726179206c656e677468206d696044820152650e6dac2e8c6d60d31b6064820152608401610653565b805183511461091b5760405162461bcd60e51b815260206004820152602a60248201527f506f6f6c7320616e64206c697175696461746573206172726179206c656e67746044820152690d040dad2e6dac2e8c6d60b31b6064820152608401610653565b336001600160a01b03167f1a855a827a0161910b16ce3b877ccfecdc63f689f2a30e1a4ca047f7a0840f808484846040516109589392919061236c565b60405180910390a2505050565b61096d611b3e565b6106ad6000611c3a565b61097f611bed565b60008411801561099157506103e88411155b6109ce5760405162461bcd60e51b815260206004820152600e60248201526d125b1b1959d85b08185b5bdd5b9d60921b6044820152606401610653565b6000821180156109ef575060ff851660009081526003602052604090205482145b610a3b5760405162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206163636f756e74206372656174696f6e20666565000000006044820152606401610653565b600081118015610a5c575060ff851660009081526004602052604090205481145b610aa85760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206163636f756e74206d616e6167656d656e742066656500006044820152606401610653565b600083118015610ac9575060ff851660009081526002602052604090205483145b610b155760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964206163636f756e74207072696e636970616c2028636f7374296044820152606401610653565b60ff851660009081526004602090815260408083205460038352818420546002909352908320548792610b47916123ed565b610b5191906123ed565b610b5b9190612406565b6001546040516370a0823160e01b815233600482015291925082916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcc919061241d565b1015610c115760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610653565b600154604051636eb1769f60e11b815233600482015230602482015282916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c83919061241d565b1015610cca5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b6044820152606401610653565b60015460085460ff881660009081526002602052604081205490926001600160a01b03908116926323b872dd92339290911690610d08908b90612406565b6040518463ffffffff1660e01b8152600401610d2693929190612436565b6020604051808303816000875af1158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190612280565b8015610e22575060015460095460ff89166000908152600460209081526040808320546003909252909120546001600160a01b03938416936323b872dd9333939116918b91610db7916123ed565b610dc19190612406565b6040518463ffffffff1660e01b8152600401610ddf93929190612436565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612280565b9050600181151514610e465760405162461bcd60e51b81526004016106539061245a565b60405160ff881690879033907f5ea97fc792fa1d1ed9c18893e3c95abc494b9dfe899b4b93c7bed147bacce5ef90600090a450505050505050565b610e89611bed565b60ff8216600090815260076020526040902054811015610ee45760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206d616e6167656d656e742066656560501b6044820152606401610653565b6001546009546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd92610f1e92339216908790600401612436565b6020604051808303816000875af1158015610f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f619190612280565b9050600181151514610f855760405162461bcd60e51b81526004016106539061245a565b60405182815260ff84169067ffffffffffffffff1986169033907f1439f191419c0448b0f7db690323887783c9ef9acd91b92290c3321b9d1f18fb9060200160405180910390a450505050565b610fda611b3e565b6106ad611c8a565b610fea611b3e565b6001600160a01b038116610ffd57600080fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040517f345b539d11cf9b824a2c67c4c97c881b0e06b2c3835514907ac6eb746043d77190600090a250565b61104f611d1d565b506040805160608101825260ff9092166000818152600560209081528382205485528282526006815283822054818601529181526007909152819020549082015290565b61109b611bed565b60008260ff161180156110b15750600e8260ff16105b6110f45760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081b5bdb9d1a08185b5bdd5b9d60621b6044820152606401610653565b82518451146111555760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616e64207479706573206172726179206c656e677468206d6044820152660d2e6dac2e8c6d60cb1b6064820152608401610653565b6000805b84518160ff1610156111ba5760046000868360ff168151811061117e5761117e612491565b602002602001015160ff1660ff16815260200190815260200160002054826111a691906123ed565b9150806111b2816124a7565b915050611159565b506000811180156111d65750816111d460ff851683612406565b145b61121b5760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206d616e6167656d656e742066656560501b6044820152606401610653565b600085511161126c5760405162461bcd60e51b815260206004820152601a60248201527f496c6c6567616c206e756d626572206f66206163636f756e74730000000000006044820152606401610653565b6001546009546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926112a692339216908890600401612436565b6020604051808303816000875af11580156112c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e99190612280565b905060018115151461130d5760405162461bcd60e51b81526004016106539061245a565b8360ff16336001600160a01b03167f74dd80ad933c4c8ff57b29ccef2c361bb50137a44126308704de95d6c892f8fa888860405161134c9291906124c6565b60405180910390a3505050505050565b611364611bed565b604051819033907f5db052638b64433fbb37d0f072b1d1b6be4e77457379b9b990b43b37c5d29bbb90600090a350565b61139c611b3e565b60ff8216600081815260046020526040808220849055518392917fb8c569f85bc146812feb84b7aa0374302cd16fb77044212e8c98369f495473b791a35050565b6113e5611b3e565b60ff82166114055760405162461bcd60e51b81526004016106539061229d565b60ff8216600081815260066020526040808220849055518392917f32ae6d85684114291023272225d48c0d71a1a33e449cfd19b3a9420b89a83e0591a35050565b61144e611bed565b60008311801561146057506103e88311155b61149d5760405162461bcd60e51b815260206004820152600e60248201526d125b1b1959d85b08185b5bdd5b9d60921b6044820152606401610653565b600082116114ed5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420706f6f6c20636f737420287072696e636970616c290000006044820152606401610653565b600081116115395760405162461bcd60e51b8152602060048201526019602482015278496e76616c696420706f6f6c206372656174696f6e2066656560381b6044820152606401610653565b6000808060ff87161561167a5760ff871660009081526006602052604090205484146115a35760405162461bcd60e51b8152602060048201526019602482015278496e76616c696420706f6f6c206372656174696f6e2066656560381b6044820152606401610653565b60ff871660009081526005602052604090205485146115fd5760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c1bdbdb081c1c9a5b98da5c185b60521b6044820152606401610653565b60ff87166000908152600660209081526040808320546005909252909120548791611627916123ed565b6116319190612406565b60ff8816600090815260056020526040902054909350611652908790612406565b60ff8816600090815260066020526040902054909250611673908790612406565b9050611730565b643a3529440085101580156116965750670de0b6b3a764000085105b6116e25760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420706f6f6c20636f737420287072696e636970616c290000006044820152606401610653565b620186a0600a54620186a06116f791906123ed565b6117018789612406565b61170b9190612406565b6117159190612520565b92506117218686612406565b915061172d8284612542565b90505b6001546040516370a0823160e01b815233600482015284916001600160a01b0316906370a0823190602401602060405180830381865afa158015611778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179c919061241d565b10156117e15760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610653565b600154604051636eb1769f60e11b815233600482015230602482015284916001600160a01b03169063dd62ed3e90604401602060405180830381865afa15801561182f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611853919061241d565b101561189a5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b6044820152606401610653565b6001546008546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926118d492339216908890600401612436565b6020604051808303816000875af11580156118f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119179190612280565b801561199a57506001546009546040516323b872dd60e01b81526001600160a01b03928316926323b872dd92611957923392909116908790600401612436565b6020604051808303816000875af1158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a9190612280565b90506001811515146119be5760405162461bcd60e51b81526004016106539061245a565b8760ff1687336001600160a01b03167ffd9c7d3e5a4cae8892aa67e51d67a2fdb0d0944a1e240abf73324d67a92f7302896040516119fe91815260200190565b60405180910390a45050505050505050565b611a18611d1d565b506040805160608101825260ff9092166000818152600260209081528382205485528282526003815283822054818601529181526004909152819020549082015290565b611a64611b3e565b6001600160a01b038116611ac95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610653565b611ad281611c3a565b50565b611add611b3e565b60ff8216611afd5760405162461bcd60e51b81526004016106539061229d565b60ff8216600081815260056020526040808220849055518392917fe185a9eaafe9f2594e89a01f5b4f8e9fe4331f6bee5fdfe3c09a5644543ad76091a35050565b6000546001600160a01b031633146106ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610653565b611ba0611ccd565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff16156106ad5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610653565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611c92611bed565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bd03390565b600054600160a01b900460ff166106ad5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610653565b60405180606001604052806003906020820280368337509192915050565b80356001600160a01b0381168114611d5257600080fd5b919050565b600080600060608486031215611d6c57600080fd5b611d7584611d3b565b9250611d8360208501611d3b565b9150604084013590509250925092565b803560ff81168114611d5257600080fd5b60008060408385031215611db757600080fd5b611dc083611d93565b946020939093013593505050565b600060208284031215611de057600080fd5b611de982611d93565b9392505050565b600060208284031215611e0257600080fd5b611de982611d3b565b600060208284031215611e1d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e6357611e63611e24565b604052919050565b600067ffffffffffffffff821115611e8557611e85611e24565b5060051b60200190565b803567ffffffffffffffff1981168114611d5257600080fd5b600082601f830112611eb957600080fd5b81356020611ece611ec983611e6b565b611e3a565b82815260059290921b84018101918181019086841115611eed57600080fd5b8286015b84811015611f0f57611f0281611e8f565b8352918301918301611ef1565b509695505050505050565b600082601f830112611f2b57600080fd5b81356020611f3b611ec983611e6b565b82815260059290921b84018101918181019086841115611f5a57600080fd5b8286015b84811015611f0f5780358352918301918301611f5e565b60008060408385031215611f8857600080fd5b823567ffffffffffffffff80821115611fa057600080fd5b611fac86838701611ea8565b93506020850135915080821115611fc257600080fd5b50611fcf85828601611f1a565b9150509250929050565b8015158114611ad257600080fd5b600080600060608486031215611ffc57600080fd5b833567ffffffffffffffff8082111561201457600080fd5b61202087838801611ea8565b945060209150818601358181111561203757600080fd5b61204388828901611f1a565b94505060408601358181111561205857600080fd5b86019050601f8101871361206b57600080fd5b8035612079611ec982611e6b565b81815260059190911b8201830190838101908983111561209857600080fd5b928401925b828410156120bf5783356120b081611fd9565b8252928401929084019061209d565b80955050505050509250925092565b600080600080600060a086880312156120e657600080fd5b6120ef86611d93565b97602087013597506040870135966060810135965060800135945092505050565b60008060006060848603121561212557600080fd5b61212e84611e8f565b9250611d8360208501611d93565b60608101818360005b6003811015612164578151835260209283019290910190600101612145565b50505092915050565b6000806000806080858703121561218357600080fd5b843567ffffffffffffffff8082111561219b57600080fd5b6121a788838901611ea8565b95506020915081870135818111156121be57600080fd5b87019050601f810188136121d157600080fd5b80356121df611ec982611e6b565b81815260059190911b8201830190838101908a8311156121fe57600080fd5b928401925b828410156122235761221484611d93565b82529284019290840190612203565b809750505050505061223760408601611d93565b9396929550929360600135925050565b6000806000806080858703121561225d57600080fd5b61226685611d93565b966020860135965060408601359560600135945092505050565b60006020828403121561229257600080fd5b8151611de981611fd9565b602080825260119082015270496c6c6567616c20706f6f6c207479706560781b604082015260600190565b600081518084526020808501945080840160005b8381101561230357815167ffffffffffffffff1916875295820195908201906001016122dc565b509495945050505050565b600081518084526020808501945080840160005b8381101561230357815187529582019590820190600101612322565b60408152600061235160408301856122c8565b8281036020840152612363818561230e565b95945050505050565b60608152600061237f60608301866122c8565b602083820381850152612392828761230e565b8481036040860152855180825282870193509082019060005b818110156123c95784511515835293830193918301916001016123ab565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115612400576124006123d7565b92915050565b8082028115828204841417612400576124006123d7565b60006020828403121561242f57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526019908201527f4572726f7220696e207061796d656e74207472616e7366657200000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81036124bd576124bd6123d7565b60010192915050565b6040815260006124d960408301856122c8565b82810360208481019190915284518083528582019282019060005b8181101561251357845160ff16835293830193918301916001016124f4565b5090979650505050505050565b60008261253d57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115612400576124006123d756fea2646970667358221220de7bb9f05449edf375b1ccb746954908ccdacbe8d5ed913883df3e1a7b56f94264736f6c63430008110033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000061abb983f1e1ddecaeb2d88606ad2473be525d78000000000000000000000000102fbf1a66c3f734d55a96a45c05cdf5698f221d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c80637715e5ae11610125578063cb90abfb116100ad578063e7b19ae41161007c578063e7b19ae41461049b578063f06a73f4146104bb578063f2fde38b146104db578063f57f2761146104ee578063f9ff45511461050157600080fd5b8063cb90abfb1461044f578063d22482cf14610462578063de283f7914610475578063e74684d61461048857600080fd5b8063a0f00541116100f4578063a0f00541146103e3578063ad602fa6146103f6578063bc31331614610416578063bd7bdeca14610429578063cb01cd841461043c57600080fd5b80637715e5ae146103975780637d3ef678146103aa5780638456cb59146103ca5780638da5cb5b146103d257600080fd5b806340e5627c116101a8578063631cdb1811610177578063631cdb18146103295780636b136218146103495780636bc28c1c14610369578063715018a61461037c5780637511f90e1461038457600080fd5b806340e5627c146102d357806343d47264146102e65780634524799c146102f95780635c975abb1461030c57600080fd5b80632b6d87bf116101e45780632b6d87bf146102815780633390a949146102945780633bbf8cd6146102c25780633f4ba83a146102cb57600080fd5b806301e336671461021657806311eac8551461022b57806328f877151461025b5780632b4282761461026e575b600080fd5b610229610224366004611d57565b610514565b005b60015461023e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610229610269366004611da4565b610599565b61022961027c366004611da4565b6105e2565b61022961028f366004611da4565b61062b565b6102b46102a2366004611dce565b60036020526000908152604090205481565b604051908152602001610252565b6102b4600a5481565b61022961069d565b6102296102e1366004611df0565b6106af565b6102296102f4366004611e0b565b610714565b610229610307366004611f75565b61074f565b600054600160a01b900460ff166040519015158152602001610252565b6102b4610337366004611dce565b60026020526000908152604090205481565b6102b4610357366004611dce565b60076020526000908152604090205481565b610229610377366004611fe7565b6107fe565b610229610965565b6102296103923660046120ce565b610977565b6102296103a5366004612110565b610e81565b6102b46103b8366004611dce565b60046020526000908152604090205481565b610229610fd2565b6000546001600160a01b031661023e565b6102296103f1366004611df0565b610fe2565b610409610404366004611dce565b611047565b604051610252919061213c565b61022961042436600461216d565b611093565b610229610437366004611e0b565b61135c565b60085461023e906001600160a01b031681565b61022961045d366004611da4565b611394565b610229610470366004611da4565b6113dd565b610229610483366004612247565b611446565b610409610496366004611dce565b611a10565b6102b46104a9366004611dce565b60066020526000908152604090205481565b6102b46104c9366004611dce565b60056020526000908152604090205481565b6102296104e9366004611df0565b611a5c565b6102296104fc366004611da4565b611ad5565b60095461023e906001600160a01b031681565b61051c611b3e565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284919082169063a9059cbb906044016020604051808303816000875af115801561056e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105929190612280565b5050505050565b6105a1611b3e565b60ff8216600081815260026020526040808220849055518392917fec9572c8e5429fba029ee85e1ba8f418ffc1b65739c7fbbe0919c53843ff736991a35050565b6105ea611b3e565b60ff8216600081815260036020526040808220849055518392917f103cfa2426194920263e5e9b57778b8bb433eda3df86fe1a130be99d1d51dbb991a35050565b610633611b3e565b60ff821661065c5760405162461bcd60e51b81526004016106539061229d565b60405180910390fd5b60ff8216600081815260076020526040808220849055518392917f6371dafa143ffc408a2d6d6210dec80613b9c903ac1cdd10972c4e137b2bda8a91a35050565b6106a5611b3e565b6106ad611b98565b565b6106b7611b3e565b6001600160a01b0381166106ca57600080fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040517fdc81bbbcfb12fc7f3a737b8205ecb9113985f8207f50cfb649b495ae74f103f590600090a250565b61071c611b3e565b600a81905560405181907fee546d3e3a8fbf54aafe8592801fb3c1d88d17f717f906a35e6296bcf35fa7ff90600090a250565b610757611bed565b80518251146107b75760405162461bcd60e51b815260206004820152602660248201527f4163636f756e747320616e642073756d206172726179206c656e677468206d696044820152650e6dac2e8c6d60d31b6064820152608401610653565b336001600160a01b03167fcd3cb25dcf0987294c604415344227fb2f1c3691d90cf6f43a27eff44d98fda583836040516107f292919061233e565b60405180910390a25050565b610806611bed565b60008351116108575760405162461bcd60e51b815260206004820152601760248201527f496c6c6567616c206e756d626572206f6620706f6f6c730000000000000000006044820152606401610653565b81518351146108b75760405162461bcd60e51b815260206004820152602660248201527f506f6f6c7320616e6420616d6f756e74206172726179206c656e677468206d696044820152650e6dac2e8c6d60d31b6064820152608401610653565b805183511461091b5760405162461bcd60e51b815260206004820152602a60248201527f506f6f6c7320616e64206c697175696461746573206172726179206c656e67746044820152690d040dad2e6dac2e8c6d60b31b6064820152608401610653565b336001600160a01b03167f1a855a827a0161910b16ce3b877ccfecdc63f689f2a30e1a4ca047f7a0840f808484846040516109589392919061236c565b60405180910390a2505050565b61096d611b3e565b6106ad6000611c3a565b61097f611bed565b60008411801561099157506103e88411155b6109ce5760405162461bcd60e51b815260206004820152600e60248201526d125b1b1959d85b08185b5bdd5b9d60921b6044820152606401610653565b6000821180156109ef575060ff851660009081526003602052604090205482145b610a3b5760405162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206163636f756e74206372656174696f6e20666565000000006044820152606401610653565b600081118015610a5c575060ff851660009081526004602052604090205481145b610aa85760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206163636f756e74206d616e6167656d656e742066656500006044820152606401610653565b600083118015610ac9575060ff851660009081526002602052604090205483145b610b155760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964206163636f756e74207072696e636970616c2028636f7374296044820152606401610653565b60ff851660009081526004602090815260408083205460038352818420546002909352908320548792610b47916123ed565b610b5191906123ed565b610b5b9190612406565b6001546040516370a0823160e01b815233600482015291925082916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcc919061241d565b1015610c115760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610653565b600154604051636eb1769f60e11b815233600482015230602482015282916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c83919061241d565b1015610cca5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b6044820152606401610653565b60015460085460ff881660009081526002602052604081205490926001600160a01b03908116926323b872dd92339290911690610d08908b90612406565b6040518463ffffffff1660e01b8152600401610d2693929190612436565b6020604051808303816000875af1158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190612280565b8015610e22575060015460095460ff89166000908152600460209081526040808320546003909252909120546001600160a01b03938416936323b872dd9333939116918b91610db7916123ed565b610dc19190612406565b6040518463ffffffff1660e01b8152600401610ddf93929190612436565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612280565b9050600181151514610e465760405162461bcd60e51b81526004016106539061245a565b60405160ff881690879033907f5ea97fc792fa1d1ed9c18893e3c95abc494b9dfe899b4b93c7bed147bacce5ef90600090a450505050505050565b610e89611bed565b60ff8216600090815260076020526040902054811015610ee45760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206d616e6167656d656e742066656560501b6044820152606401610653565b6001546009546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd92610f1e92339216908790600401612436565b6020604051808303816000875af1158015610f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f619190612280565b9050600181151514610f855760405162461bcd60e51b81526004016106539061245a565b60405182815260ff84169067ffffffffffffffff1986169033907f1439f191419c0448b0f7db690323887783c9ef9acd91b92290c3321b9d1f18fb9060200160405180910390a450505050565b610fda611b3e565b6106ad611c8a565b610fea611b3e565b6001600160a01b038116610ffd57600080fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040517f345b539d11cf9b824a2c67c4c97c881b0e06b2c3835514907ac6eb746043d77190600090a250565b61104f611d1d565b506040805160608101825260ff9092166000818152600560209081528382205485528282526006815283822054818601529181526007909152819020549082015290565b61109b611bed565b60008260ff161180156110b15750600e8260ff16105b6110f45760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081b5bdb9d1a08185b5bdd5b9d60621b6044820152606401610653565b82518451146111555760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420616e64207479706573206172726179206c656e677468206d6044820152660d2e6dac2e8c6d60cb1b6064820152608401610653565b6000805b84518160ff1610156111ba5760046000868360ff168151811061117e5761117e612491565b602002602001015160ff1660ff16815260200190815260200160002054826111a691906123ed565b9150806111b2816124a7565b915050611159565b506000811180156111d65750816111d460ff851683612406565b145b61121b5760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206d616e6167656d656e742066656560501b6044820152606401610653565b600085511161126c5760405162461bcd60e51b815260206004820152601a60248201527f496c6c6567616c206e756d626572206f66206163636f756e74730000000000006044820152606401610653565b6001546009546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926112a692339216908890600401612436565b6020604051808303816000875af11580156112c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e99190612280565b905060018115151461130d5760405162461bcd60e51b81526004016106539061245a565b8360ff16336001600160a01b03167f74dd80ad933c4c8ff57b29ccef2c361bb50137a44126308704de95d6c892f8fa888860405161134c9291906124c6565b60405180910390a3505050505050565b611364611bed565b604051819033907f5db052638b64433fbb37d0f072b1d1b6be4e77457379b9b990b43b37c5d29bbb90600090a350565b61139c611b3e565b60ff8216600081815260046020526040808220849055518392917fb8c569f85bc146812feb84b7aa0374302cd16fb77044212e8c98369f495473b791a35050565b6113e5611b3e565b60ff82166114055760405162461bcd60e51b81526004016106539061229d565b60ff8216600081815260066020526040808220849055518392917f32ae6d85684114291023272225d48c0d71a1a33e449cfd19b3a9420b89a83e0591a35050565b61144e611bed565b60008311801561146057506103e88311155b61149d5760405162461bcd60e51b815260206004820152600e60248201526d125b1b1959d85b08185b5bdd5b9d60921b6044820152606401610653565b600082116114ed5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420706f6f6c20636f737420287072696e636970616c290000006044820152606401610653565b600081116115395760405162461bcd60e51b8152602060048201526019602482015278496e76616c696420706f6f6c206372656174696f6e2066656560381b6044820152606401610653565b6000808060ff87161561167a5760ff871660009081526006602052604090205484146115a35760405162461bcd60e51b8152602060048201526019602482015278496e76616c696420706f6f6c206372656174696f6e2066656560381b6044820152606401610653565b60ff871660009081526005602052604090205485146115fd5760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c1bdbdb081c1c9a5b98da5c185b60521b6044820152606401610653565b60ff87166000908152600660209081526040808320546005909252909120548791611627916123ed565b6116319190612406565b60ff8816600090815260056020526040902054909350611652908790612406565b60ff8816600090815260066020526040902054909250611673908790612406565b9050611730565b643a3529440085101580156116965750670de0b6b3a764000085105b6116e25760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420706f6f6c20636f737420287072696e636970616c290000006044820152606401610653565b620186a0600a54620186a06116f791906123ed565b6117018789612406565b61170b9190612406565b6117159190612520565b92506117218686612406565b915061172d8284612542565b90505b6001546040516370a0823160e01b815233600482015284916001600160a01b0316906370a0823190602401602060405180830381865afa158015611778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179c919061241d565b10156117e15760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610653565b600154604051636eb1769f60e11b815233600482015230602482015284916001600160a01b03169063dd62ed3e90604401602060405180830381865afa15801561182f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611853919061241d565b101561189a5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b6044820152606401610653565b6001546008546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926118d492339216908890600401612436565b6020604051808303816000875af11580156118f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119179190612280565b801561199a57506001546009546040516323b872dd60e01b81526001600160a01b03928316926323b872dd92611957923392909116908790600401612436565b6020604051808303816000875af1158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a9190612280565b90506001811515146119be5760405162461bcd60e51b81526004016106539061245a565b8760ff1687336001600160a01b03167ffd9c7d3e5a4cae8892aa67e51d67a2fdb0d0944a1e240abf73324d67a92f7302896040516119fe91815260200190565b60405180910390a45050505050505050565b611a18611d1d565b506040805160608101825260ff9092166000818152600260209081528382205485528282526003815283822054818601529181526004909152819020549082015290565b611a64611b3e565b6001600160a01b038116611ac95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610653565b611ad281611c3a565b50565b611add611b3e565b60ff8216611afd5760405162461bcd60e51b81526004016106539061229d565b60ff8216600081815260056020526040808220849055518392917fe185a9eaafe9f2594e89a01f5b4f8e9fe4331f6bee5fdfe3c09a5644543ad76091a35050565b6000546001600160a01b031633146106ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610653565b611ba0611ccd565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff16156106ad5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610653565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611c92611bed565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bd03390565b600054600160a01b900460ff166106ad5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610653565b60405180606001604052806003906020820280368337509192915050565b80356001600160a01b0381168114611d5257600080fd5b919050565b600080600060608486031215611d6c57600080fd5b611d7584611d3b565b9250611d8360208501611d3b565b9150604084013590509250925092565b803560ff81168114611d5257600080fd5b60008060408385031215611db757600080fd5b611dc083611d93565b946020939093013593505050565b600060208284031215611de057600080fd5b611de982611d93565b9392505050565b600060208284031215611e0257600080fd5b611de982611d3b565b600060208284031215611e1d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e6357611e63611e24565b604052919050565b600067ffffffffffffffff821115611e8557611e85611e24565b5060051b60200190565b803567ffffffffffffffff1981168114611d5257600080fd5b600082601f830112611eb957600080fd5b81356020611ece611ec983611e6b565b611e3a565b82815260059290921b84018101918181019086841115611eed57600080fd5b8286015b84811015611f0f57611f0281611e8f565b8352918301918301611ef1565b509695505050505050565b600082601f830112611f2b57600080fd5b81356020611f3b611ec983611e6b565b82815260059290921b84018101918181019086841115611f5a57600080fd5b8286015b84811015611f0f5780358352918301918301611f5e565b60008060408385031215611f8857600080fd5b823567ffffffffffffffff80821115611fa057600080fd5b611fac86838701611ea8565b93506020850135915080821115611fc257600080fd5b50611fcf85828601611f1a565b9150509250929050565b8015158114611ad257600080fd5b600080600060608486031215611ffc57600080fd5b833567ffffffffffffffff8082111561201457600080fd5b61202087838801611ea8565b945060209150818601358181111561203757600080fd5b61204388828901611f1a565b94505060408601358181111561205857600080fd5b86019050601f8101871361206b57600080fd5b8035612079611ec982611e6b565b81815260059190911b8201830190838101908983111561209857600080fd5b928401925b828410156120bf5783356120b081611fd9565b8252928401929084019061209d565b80955050505050509250925092565b600080600080600060a086880312156120e657600080fd5b6120ef86611d93565b97602087013597506040870135966060810135965060800135945092505050565b60008060006060848603121561212557600080fd5b61212e84611e8f565b9250611d8360208501611d93565b60608101818360005b6003811015612164578151835260209283019290910190600101612145565b50505092915050565b6000806000806080858703121561218357600080fd5b843567ffffffffffffffff8082111561219b57600080fd5b6121a788838901611ea8565b95506020915081870135818111156121be57600080fd5b87019050601f810188136121d157600080fd5b80356121df611ec982611e6b565b81815260059190911b8201830190838101908a8311156121fe57600080fd5b928401925b828410156122235761221484611d93565b82529284019290840190612203565b809750505050505061223760408601611d93565b9396929550929360600135925050565b6000806000806080858703121561225d57600080fd5b61226685611d93565b966020860135965060408601359560600135945092505050565b60006020828403121561229257600080fd5b8151611de981611fd9565b602080825260119082015270496c6c6567616c20706f6f6c207479706560781b604082015260600190565b600081518084526020808501945080840160005b8381101561230357815167ffffffffffffffff1916875295820195908201906001016122dc565b509495945050505050565b600081518084526020808501945080840160005b8381101561230357815187529582019590820190600101612322565b60408152600061235160408301856122c8565b8281036020840152612363818561230e565b95945050505050565b60608152600061237f60608301866122c8565b602083820381850152612392828761230e565b8481036040860152855180825282870193509082019060005b818110156123c95784511515835293830193918301916001016123ab565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115612400576124006123d7565b92915050565b8082028115828204841417612400576124006123d7565b60006020828403121561242f57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526019908201527f4572726f7220696e207061796d656e74207472616e7366657200000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81036124bd576124bd6123d7565b60010192915050565b6040815260006124d960408301856122c8565b82810360208481019190915284518083528582019282019060005b8181101561251357845160ff16835293830193918301916001016124f4565b5090979650505050505050565b60008261253d57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115612400576124006123d756fea2646970667358221220de7bb9f05449edf375b1ccb746954908ccdacbe8d5ed913883df3e1a7b56f94264736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000061abb983f1e1ddecaeb2d88606ad2473be525d78000000000000000000000000102fbf1a66c3f734d55a96a45c05cdf5698f221d
-----Decoded View---------------
Arg [0] : _usdcToken (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : _gaxsysWallet (address): 0x61aBB983f1e1DdecAEB2d88606Ad2473bE525d78
Arg [2] : _blackOpsWallet (address): 0x102FBf1a66C3f734d55A96a45c05cdF5698F221d
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 00000000000000000000000061abb983f1e1ddecaeb2d88606ad2473be525d78
Arg [2] : 000000000000000000000000102fbf1a66c3f734d55a96a45c05cdf5698f221d
Deployed Bytecode Sourcemap
40474:14543:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50916:357;;;;;;:::i;:::-;;:::i;:::-;;40568:23;;;;;-1:-1:-1;;;;;40568:23:0;;;;;;-1:-1:-1;;;;;704:32:1;;;686:51;;674:2;659:18;40568:23:0;;;;;;;;52593:159;;;;;;:::i;:::-;;:::i;52815:177::-;;;;;;:::i;:::-;;:::i;53857:235::-;;;;;;:::i;:::-;;:::i;40648:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1497:25:1;;;1485:2;1470:18;40648:48:0;1351:177:1;40987:47:0;;;;;;51844:67;;;:::i;52330:208::-;;;;;;:::i;:::-;;:::i;54201:180::-;;;;;;:::i;:::-;;:::i;47446:276::-;;;;;;:::i;:::-;;:::i;22581:86::-;22628:4;22652:7;-1:-1:-1;;;22652:7:0;;;;22581:86;;4796:14:1;;4789:22;4771:41;;4759:2;4744:18;22581:86:0;4631:187:1;40600:41:0;;;;;;:::i;:::-;;;;;;;;;;;;;;40859:47;;;;;;:::i;:::-;;;;;;;;;;;;;;50340:463;;;;;;:::i;:::-;;:::i;20091:103::-;;;:::i;44708:1332::-;;;;;;:::i;:::-;;:::i;49859:422::-;;;;;;:::i;:::-;;:::i;40703:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;51527:63;;;:::i;19450:87::-;19496:7;19523:6;-1:-1:-1;;;;;19523:6:0;19450:87;;52017:202;;;;;;:::i;:::-;;:::i;54792:222::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46238:913::-;;;;;;:::i;:::-;;:::i;47238:121::-;;;;;;:::i;:::-;;:::i;40915:27::-;;;;;-1:-1:-1;;;;;40915:27:0;;;53057:186;;;;;;:::i;:::-;;:::i;53566:229::-;;;;;;:::i;:::-;;:::i;47844:1827::-;;;;;;:::i;:::-;;:::i;54471:234::-;;;;;;:::i;:::-;;:::i;40807:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;40762:38;;;;;;:::i;:::-;;;;;;;;;;;;;;20349:201;;;;;;:::i;:::-;;:::i;53295:211::-;;;;;;:::i;:::-;;:::i;40949:29::-;;;;;-1:-1:-1;;;;;40949:29:0;;;50916:357;19336:13;:11;:13::i;:::-;51222:43:::1;::::0;-1:-1:-1;;;51222:43:0;;-1:-1:-1;;;;;9749:32:1;;;51222:43:0::1;::::0;::::1;9731:51:1::0;9798:18;;;9791:34;;;51057:14:0;;51222:22;;::::1;::::0;::::1;::::0;9704:18:1;;51222:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51016:257;50916:357:::0;;;:::o;52593:159::-;19336:13;:11;:13::i;:::-;52671:18:::1;::::0;::::1;;::::0;;;:11:::1;:18;::::0;;;;;:25;;;52712:32;52692:4;;52671:18;52712:32:::1;::::0;::::1;52593:159:::0;;:::o;52815:177::-;19336:13;:11;:13::i;:::-;52899:25:::1;::::0;::::1;;::::0;;;:18:::1;:25;::::0;;;;;:31;;;52946:38;52927:3;;52899:25;52946:38:::1;::::0;::::1;52815:177:::0;;:::o;53857:235::-;19336:13;:11;:13::i;:::-;53948:20:::1;::::0;::::1;53940:50;;;;-1:-1:-1::0;;;53940:50:0::1;;;;;;;:::i;:::-;;;;;;;;;54001:24;::::0;::::1;;::::0;;;:17:::1;:24;::::0;;;;;:30;;;54047:37;54028:3;;54001:24;54047:37:::1;::::0;::::1;53857:235:::0;;:::o;51844:67::-;19336:13;:11;:13::i;:::-;51893:10:::1;:8;:10::i;:::-;51844:67::o:0;52330:208::-;19336:13;:11;:13::i;:::-;-1:-1:-1;;;;;52415:26:0;::::1;52407:35;;;::::0;::::1;;52453:14;:27:::0;;-1:-1:-1;;;;;;52453:27:0::1;-1:-1:-1::0;;;;;52453:27:0;::::1;::::0;;::::1;::::0;;;52496:34:::1;::::0;::::1;::::0;-1:-1:-1;;52496:34:0::1;52330:208:::0;:::o;54201:180::-;19336:13;:11;:13::i;:::-;54282:28:::1;:34:::0;;;54332:41:::1;::::0;54313:3;;54332:41:::1;::::0;;;::::1;54201:180:::0;:::o;47446:276::-;22186:19;:17;:19::i;:::-;47588:3:::1;:10;47567;:17;:31;47559:82;;;::::0;-1:-1:-1;;;47559:82:0;;10634:2:1;47559:82:0::1;::::0;::::1;10616:21:1::0;10673:2;10653:18;;;10646:30;10712:34;10692:18;;;10685:62;-1:-1:-1;;;10763:18:1;;;10756:36;10809:19;;47559:82:0::1;10432:402:1::0;47559:82:0::1;47686:10;-1:-1:-1::0;;;;;47659:55:0::1;;47698:10;47710:3;47659:55;;;;;;;:::i;:::-;;;;;;;;47446:276:::0;;:::o;50340:463::-;22186:19;:17;:19::i;:::-;50495:1:::1;50478:7;:14;:18;50470:54;;;::::0;-1:-1:-1;;;50470:54:0;;12421:2:1;50470:54:0::1;::::0;::::1;12403:21:1::0;12460:2;12440:18;;;12433:30;12499:25;12479:18;;;12472:53;12542:18;;50470:54:0::1;12219:347:1::0;50470:54:0::1;50561:6;:13;50543:7;:14;:31;50535:82;;;::::0;-1:-1:-1;;;50535:82:0;;12773:2:1;50535:82:0::1;::::0;::::1;12755:21:1::0;12812:2;12792:18;;;12785:30;12851:34;12831:18;;;12824:62;-1:-1:-1;;;12902:18:1;;;12895:36;12948:19;;50535:82:0::1;12571:402:1::0;50535:82:0::1;50654:10;:17;50636:7;:14;:35;50628:90;;;::::0;-1:-1:-1;;;50628:90:0;;13180:2:1;50628:90:0::1;::::0;::::1;13162:21:1::0;13219:2;13199:18;;;13192:30;13258:34;13238:18;;;13231:62;-1:-1:-1;;;13309:18:1;;;13302:40;13359:19;;50628:90:0::1;12978:406:1::0;50628:90:0::1;50755:10;-1:-1:-1::0;;;;;50736:59:0::1;;50767:7;50776:6;50784:10;50736:59;;;;;;;;:::i;:::-;;;;;;;;50340:463:::0;;;:::o;20091:103::-;19336:13;:11;:13::i;:::-;20156:30:::1;20183:1;20156:18;:30::i;44708:1332::-:0;22186:19;:17;:19::i;:::-;44887:1:::1;44878:6;:10;:28;;;;;44902:4;44892:6;:14;;44878:28;44870:55;;;::::0;-1:-1:-1;;;44870:55:0;;14614:2:1;44870:55:0::1;::::0;::::1;14596:21:1::0;14653:2;14633:18;;;14626:30;-1:-1:-1;;;14672:18:1;;;14665:44;14726:18;;44870:55:0::1;14412:338:1::0;44870:55:0::1;45021:1;44999:19;:23;:75;;;;-1:-1:-1::0;45049:25:0::1;::::0;::::1;;::::0;;;:18:::1;:25;::::0;;;;;45026:48;::::1;44999:75;44991:116;;;::::0;-1:-1:-1;;;44991:116:0;;14957:2:1;44991:116:0::1;::::0;::::1;14939:21:1::0;14996:2;14976:18;;;14969:30;15035;15015:18;;;15008:58;15083:18;;44991:116:0::1;14755:352:1::0;44991:116:0::1;45150:1;45126:21;:25;:81;;;;-1:-1:-1::0;45180:27:0::1;::::0;::::1;;::::0;;;:20:::1;:27;::::0;;;;;45155:52;::::1;45126:81;45118:124;;;::::0;-1:-1:-1;;;45118:124:0;;15314:2:1;45118:124:0::1;::::0;::::1;15296:21:1::0;15353:2;15333:18;;;15326:30;15392:32;15372:18;;;15365:60;15442:18;;45118:124:0::1;15112:354:1::0;45118:124:0::1;45281:1;45261:17;:21;:64;;;;-1:-1:-1::0;45307:18:0::1;::::0;::::1;;::::0;;;:11:::1;:18;::::0;;;;;45286:39;::::1;45261:64;45253:109;;;::::0;-1:-1:-1;;;45253:109:0;;15673:2:1;45253:109:0::1;::::0;::::1;15655:21:1::0;;;15692:18;;;15685:30;15751:34;15731:18;;;15724:62;15803:18;;45253:109:0::1;15471:356:1::0;45253:109:0::1;45440:27;::::0;::::1;45373:14;45440:27:::0;;;:20:::1;:27;::::0;;;;;;;;45412:18:::1;:25:::0;;;;;;45391:11:::1;:18:::0;;;;;;;45471:6;;45391:46:::1;::::0;::::1;:::i;:::-;:76;;;;:::i;:::-;45390:87;;;;:::i;:::-;45496:9;::::0;:31:::1;::::0;-1:-1:-1;;;45496:31:0;;45516:10:::1;45496:31;::::0;::::1;686:51:1::0;45373:104:0;;-1:-1:-1;45373:104:0;;-1:-1:-1;;;;;45496:9:0;;::::1;::::0;:19:::1;::::0;659:18:1;;45496:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;45488:77;;;::::0;-1:-1:-1;;;45488:77:0;;16658:2:1;45488:77:0::1;::::0;::::1;16640:21:1::0;16697:2;16677:18;;;16670:30;-1:-1:-1;;;16716:18:1;;;16709:50;16776:18;;45488:77:0::1;16456:344:1::0;45488:77:0::1;45584:9;::::0;:46:::1;::::0;-1:-1:-1;;;45584:46:0;;45604:10:::1;45584:46;::::0;::::1;17017:34:1::0;45624:4:0::1;17067:18:1::0;;;17060:43;45634:9:0;;-1:-1:-1;;;;;45584:9:0::1;::::0;:19:::1;::::0;16952:18:1;;45584:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;45576:94;;;::::0;-1:-1:-1;;;45576:94:0;;17316:2:1;45576:94:0::1;::::0;::::1;17298:21:1::0;17355:2;17335:18;;;17328:30;-1:-1:-1;;;17374:18:1;;;17367:52;17436:18;;45576:94:0::1;17114:346:1::0;45576:94:0::1;45694:9;::::0;45729:12:::1;::::0;45743:18:::1;::::0;::::1;45683:8;45743:18:::0;;;:11:::1;:18;::::0;;;;;45683:8;;-1:-1:-1;;;;;45694:9:0;;::::1;::::0;:22:::1;::::0;45717:10:::1;::::0;45729:12;;::::1;::::0;45743:27:::1;::::0;45764:6;;45743:27:::1;:::i;:::-;45694:77;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:212;;;;-1:-1:-1::0;45788:9:0::1;::::0;45823:14:::1;::::0;45868:27:::1;::::0;::::1;45788:9;45868:27:::0;;;:20:::1;:27;::::0;;;;;;;;45840:18:::1;:25:::0;;;;;;;-1:-1:-1;;;;;45788:9:0;;::::1;::::0;:22:::1;::::0;45811:10:::1;::::0;45823:14;::::1;::::0;45899:6;;45840:55:::1;::::0;::::1;:::i;:::-;45839:66;;;;:::i;:::-;45788:118;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45683:223:::0;-1:-1:-1;45932:4:0::1;45925:11:::0;::::1;;;45917:49;;;;-1:-1:-1::0;;;45917:49:0::1;;;;;;;:::i;:::-;45984:48;::::0;::::1;::::0;::::1;::::0;46018:6;;46006:10:::1;::::0;45984:48:::1;::::0;;;::::1;44859:1181;;44708:1332:::0;;;;;:::o;49859:422::-;22186:19;:17;:19::i;:::-;49990:28:::1;::::0;::::1;;::::0;;;:17:::1;:28;::::0;;;;;49973:45;::::1;;49965:80;;;::::0;-1:-1:-1;;;49965:80:0;;18401:2:1;49965:80:0::1;::::0;::::1;18383:21:1::0;18440:2;18420:18;;;18413:30;-1:-1:-1;;;18459:18:1;;;18452:52;18521:18;;49965:80:0::1;18199:346:1::0;49965:80:0::1;50069:9;::::0;50104:14:::1;::::0;50069:65:::1;::::0;-1:-1:-1;;;50069:65:0;;50058:8:::1;::::0;-1:-1:-1;;;;;50069:9:0;;::::1;::::0;:22:::1;::::0;:65:::1;::::0;50092:10:::1;::::0;50104:14:::1;::::0;50120:13;;50069:65:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50058:76:::0;-1:-1:-1;50160:4:0::1;50153:11:::0;::::1;;;50145:49;;;;-1:-1:-1::0;;;50145:49:0::1;;;;;;;:::i;:::-;50212:61;::::0;1497:25:1;;;50212:61:0::1;::::0;::::1;::::0;-1:-1:-1;;50212:61:0;::::1;::::0;50228:10:::1;::::0;50212:61:::1;::::0;1485:2:1;1470:18;50212:61:0::1;;;;;;;49954:327;49859:422:::0;;;:::o;51527:63::-;19336:13;:11;:13::i;:::-;51574:8:::1;:6;:8::i;52017:202::-:0;19336:13;:11;:13::i;:::-;-1:-1:-1;;;;;52100:26:0;::::1;52092:35;;;::::0;::::1;;52138:12;:25:::0;;-1:-1:-1;;;;;;52138:25:0::1;-1:-1:-1::0;;;;;52138:25:0;::::1;::::0;;::::1;::::0;;;52179:32:::1;::::0;::::1;::::0;-1:-1:-1;;52179:32:0::1;52017:202:::0;:::o;54792:222::-;54855:14;;:::i;:::-;-1:-1:-1;54882:124:0;;;;;;;;54904:15;;;;-1:-1:-1;54904:15:0;;;:8;:15;;;;;;;;54882:124;;54934:22;;;:15;:22;;;;;;54882:124;;;;54971:24;;;:17;:24;;;;;;;54882:124;;;;;54792:222::o;46238:913::-;22186:19;:17;:19::i;:::-;46405:1:::1;46396:6;:10;;;:25;;;;;46419:2;46410:6;:11;;;46396:25;46388:58;;;::::0;-1:-1:-1;;;46388:58:0;;18752:2:1;46388:58:0::1;::::0;::::1;18734:21:1::0;18791:2;18771:18;;;18764:30;-1:-1:-1;;;18810:18:1;;;18803:50;18870:18;;46388:58:0::1;18550:344:1::0;46388:58:0::1;46486:10;:17;46465:10;:17;:38;46457:90;;;::::0;-1:-1:-1;;;46457:90:0;;19101:2:1;46457:90:0::1;::::0;::::1;19083:21:1::0;19140:2;19120:18;;;19113:30;19179:34;19159:18;;;19152:62;-1:-1:-1;;;19230:18:1;;;19223:37;19277:19;;46457:90:0::1;18899:403:1::0;46457:90:0::1;46558:22;46600:7:::0;46595:129:::1;46617:10;:17;46613:1;:21;;;46595:129;;;46677:20;:35;46698:10;46709:1;46698:13;;;;;;;;;;:::i;:::-;;;;;;;46677:35;;;;;;;;;;;;;;;;46656:56;;;;;:::i;:::-;::::0;-1:-1:-1;46636:3:0;::::1;::::0;::::1;:::i;:::-;;;;46595:129;;;;46762:1;46742:17;:21;:71;;;;-1:-1:-1::0;46797:16:0;46767:26:::1;;::::0;::::1;:17:::0;:26:::1;:::i;:::-;:46;46742:71;46734:106;;;::::0;-1:-1:-1;;;46734:106:0;;18401:2:1;46734:106:0::1;::::0;::::1;18383:21:1::0;18440:2;18420:18;;;18413:30;-1:-1:-1;;;18459:18:1;;;18452:52;18521:18;;46734:106:0::1;18199:346:1::0;46734:106:0::1;46879:1;46859:10;:17;:21;46851:60;;;::::0;-1:-1:-1;;;46851:60:0;;19821:2:1;46851:60:0::1;::::0;::::1;19803:21:1::0;19860:2;19840:18;;;19833:30;19899:28;19879:18;;;19872:56;19945:18;;46851:60:0::1;19619:350:1::0;46851:60:0::1;46935:9;::::0;46970:14:::1;::::0;46935:68:::1;::::0;-1:-1:-1;;;46935:68:0;;46924:8:::1;::::0;-1:-1:-1;;;;;46935:9:0;;::::1;::::0;:22:::1;::::0;:68:::1;::::0;46958:10:::1;::::0;46970:14:::1;::::0;46986:16;;46935:68:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46924:79:::0;-1:-1:-1;47029:4:0::1;47022:11:::0;::::1;;;47014:49;;;;-1:-1:-1::0;;;47014:49:0::1;;;;;;;:::i;:::-;47136:6;47081:62;;47100:10;-1:-1:-1::0;;;;;47081:62:0::1;;47112:10;47124;47081:62;;;;;;;:::i;:::-;;;;;;;;46377:774;;46238:913:::0;;;;:::o;47238:121::-;22186:19;:17;:19::i;:::-;47313:38:::1;::::0;47347:3;;47335:10:::1;::::0;47313:38:::1;::::0;;;::::1;47238:121:::0;:::o;53057:186::-;19336:13;:11;:13::i;:::-;53144:27:::1;::::0;::::1;;::::0;;;:20:::1;:27;::::0;;;;;:34;;;53194:41;53174:4;;53144:27;53194:41:::1;::::0;::::1;53057:186:::0;;:::o;53566:229::-;19336:13;:11;:13::i;:::-;53655:20:::1;::::0;::::1;53647:50;;;;-1:-1:-1::0;;;53647:50:0::1;;;;;;;:::i;:::-;53708:22;::::0;::::1;;::::0;;;:15:::1;:22;::::0;;;;;:28;;;53752:35;53733:3;;53708:22;53752:35:::1;::::0;::::1;53566:229:::0;;:::o;47844:1827::-;22186:19;:17;:19::i;:::-;47986:1:::1;47977:6;:10;:28;;;;;48001:4;47991:6;:14;;47977:28;47969:55;;;::::0;-1:-1:-1;;;47969:55:0;;14614:2:1;47969:55:0::1;::::0;::::1;14596:21:1::0;14653:2;14633:18;;;14626:30;-1:-1:-1;;;14672:18:1;;;14665:44;14726:18;;47969:55:0::1;14412:338:1::0;47969:55:0::1;48112:1;48095:14;:18;48087:60;;;::::0;-1:-1:-1;;;48087:60:0;;20992:2:1;48087:60:0::1;::::0;::::1;20974:21:1::0;21031:2;21011:18;;;21004:30;21070:31;21050:18;;;21043:59;21119:18;;48087:60:0::1;20790:353:1::0;48087:60:0::1;48185:1;48166:16;:20;48158:58;;;::::0;-1:-1:-1;;;48158:58:0;;21350:2:1;48158:58:0::1;::::0;::::1;21332:21:1::0;21389:2;21369:18;;;21362:30;-1:-1:-1;;;21408:18:1;;;21401:55;21473:18;;48158:58:0::1;21148:349:1::0;48158:58:0::1;48229:14;::::0;;48311:20:::1;::::0;::::1;::::0;48307:861:::1;;48376:22;::::0;::::1;;::::0;;;:15:::1;:22;::::0;;;;;48356:42;::::1;48348:80;;;::::0;-1:-1:-1;;;48348:80:0;;21350:2:1;48348:80:0::1;::::0;::::1;21332:21:1::0;21389:2;21369:18;;;21362:30;-1:-1:-1;;;21408:18:1;;;21401:55;21473:18;;48348:80:0::1;21148:349:1::0;48348:80:0::1;48469:15;::::0;::::1;;::::0;;;:8:::1;:15;::::0;;;;;48451:33;::::1;48443:68;;;::::0;-1:-1:-1;;;48443:68:0;;21704:2:1;48443:68:0::1;::::0;::::1;21686:21:1::0;21743:2;21723:18;;;21716:30;-1:-1:-1;;;21762:18:1;;;21755:52;21824:18;;48443:68:0::1;21502:346:1::0;48443:68:0::1;48557:22;::::0;::::1;;::::0;;;:15:::1;:22;::::0;;;;;;;;48539:8:::1;:15:::0;;;;;;;48583:6;;48539:40:::1;::::0;::::1;:::i;:::-;48538:51;;;;:::i;:::-;48616:15;::::0;::::1;;::::0;;;:8:::1;:15;::::0;;;;;48526:63;;-1:-1:-1;48616:24:0::1;::::0;48634:6;;48616:24:::1;:::i;:::-;48670:22;::::0;::::1;;::::0;;;:15:::1;:22;::::0;;;;;48604:36;;-1:-1:-1;48670:31:0::1;::::0;48695:6;;48670:31:::1;:::i;:::-;48655:46;;48307:861;;;48788:18;48770:14;:36;;:61;;;;;48827:4;48810:14;:21;48770:61;48762:103;;;::::0;-1:-1:-1;;;48762:103:0;;20992:2:1;48762:103:0::1;::::0;::::1;20974:21:1::0;21031:2;21011:18;;;21004:30;21070:31;21050:18;;;21043:59;21119:18;;48762:103:0::1;20790:353:1::0;48762:103:0::1;49000:6;48968:28;;48959:6;:37;;;;:::i;:::-;48932:23;48941:14:::0;48932:6;:23:::1;:::i;:::-;:65;;;;:::i;:::-;:74;;;;:::i;:::-;48920:86:::0;-1:-1:-1;49061:23:0::1;49078:6:::0;49061:14;:23:::1;:::i;:::-;49049:35:::0;-1:-1:-1;49114:21:0::1;49049:35:::0;49114:9;:21:::1;:::i;:::-;49099:36;;48307:861;49186:9;::::0;:31:::1;::::0;-1:-1:-1;;;49186:31:0;;49206:10:::1;49186:31;::::0;::::1;686:51:1::0;49221:9:0;;-1:-1:-1;;;;;49186:9:0::1;::::0;:19:::1;::::0;659:18:1;;49186:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;49178:77;;;::::0;-1:-1:-1;;;49178:77:0;;16658:2:1;49178:77:0::1;::::0;::::1;16640:21:1::0;16697:2;16677:18;;;16670:30;-1:-1:-1;;;16716:18:1;;;16709:50;16776:18;;49178:77:0::1;16456:344:1::0;49178:77:0::1;49274:9;::::0;:46:::1;::::0;-1:-1:-1;;;49274:46:0;;49294:10:::1;49274:46;::::0;::::1;17017:34:1::0;49314:4:0::1;17067:18:1::0;;;17060:43;49324:9:0;;-1:-1:-1;;;;;49274:9:0::1;::::0;:19:::1;::::0;16952:18:1;;49274:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;49266:94;;;::::0;-1:-1:-1;;;49266:94:0;;17316:2:1;49266:94:0::1;::::0;::::1;17298:21:1::0;17355:2;17335:18;;;17328:30;-1:-1:-1;;;17374:18:1;;;17367:52;17436:18;;49266:94:0::1;17114:346:1::0;49266:94:0::1;49384:9;::::0;49419:12:::1;::::0;49384:59:::1;::::0;-1:-1:-1;;;49384:59:0;;49373:8:::1;::::0;-1:-1:-1;;;;;49384:9:0;;::::1;::::0;:22:::1;::::0;:59:::1;::::0;49407:10:::1;::::0;49419:12:::1;::::0;49433:9;;49384:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:140;;;;-1:-1:-1::0;49460:9:0::1;::::0;49495:14:::1;::::0;49460:64:::1;::::0;-1:-1:-1;;;49460:64:0;;-1:-1:-1;;;;;49460:9:0;;::::1;::::0;:22:::1;::::0;:64:::1;::::0;49483:10:::1;::::0;49495:14;;::::1;::::0;49511:12;;49460:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49373:151:::0;-1:-1:-1;49550:4:0::1;49543:11:::0;::::1;;;49535:49;;;;-1:-1:-1::0;;;49535:49:0::1;;;;;;;:::i;:::-;49641:5;49602:61;;49633:6;49621:10;-1:-1:-1::0;;;;;49602:61:0::1;;49648:14;49602:61;;;;1497:25:1::0;;1485:2;1470:18;;1351:177;49602:61:0::1;;;;;;;;47958:1713;;;;47844:1827:::0;;;;:::o;54471:234::-;54537:14;;:::i;:::-;-1:-1:-1;54564:133:0;;;;;;;;54586:18;;;;-1:-1:-1;54586:18:0;;;:11;:18;;;;;;;;54564:133;;54619:25;;;:18;:25;;;;;;54564:133;;;;54659:27;;;:20;:27;;;;;;;54564:133;;;;;54471:234::o;20349:201::-;19336:13;:11;:13::i;:::-;-1:-1:-1;;;;;20438:22:0;::::1;20430:73;;;::::0;-1:-1:-1;;;20430:73:0;;22410:2:1;20430:73:0::1;::::0;::::1;22392:21:1::0;22449:2;22429:18;;;22422:30;22488:34;22468:18;;;22461:62;-1:-1:-1;;;22539:18:1;;;22532:36;22585:19;;20430:73:0::1;22208:402:1::0;20430:73:0::1;20514:28;20533:8;20514:18;:28::i;:::-;20349:201:::0;:::o;53295:211::-;19336:13;:11;:13::i;:::-;53378:20:::1;::::0;::::1;53370:50;;;;-1:-1:-1::0;;;53370:50:0::1;;;;;;;:::i;:::-;53431:15;::::0;::::1;;::::0;;;:8:::1;:15;::::0;;;;;:22;;;53469:29;53449:4;;53431:15;53469:29:::1;::::0;::::1;53295:211:::0;;:::o;19615:132::-;19496:7;19523:6;-1:-1:-1;;;;;19523:6:0;18081:10;19679:23;19671:68;;;;-1:-1:-1;;;19671:68:0;;22817:2:1;19671:68:0;;;22799:21:1;;;22836:18;;;22829:30;22895:34;22875:18;;;22868:62;22947:18;;19671:68:0;22615:356:1;23436:120:0;22445:16;:14;:16::i;:::-;23505:5:::1;23495:15:::0;;-1:-1:-1;;;;23495:15:0::1;::::0;;23526:22:::1;18081:10:::0;23535:12:::1;23526:22;::::0;-1:-1:-1;;;;;704:32:1;;;686:51;;674:2;659:18;23526:22:0::1;;;;;;;23436:120::o:0;22740:108::-;22628:4;22652:7;-1:-1:-1;;;22652:7:0;;;;22810:9;22802:38;;;;-1:-1:-1;;;22802:38:0;;23178:2:1;22802:38:0;;;23160:21:1;23217:2;23197:18;;;23190:30;-1:-1:-1;;;23236:18:1;;;23229:46;23292:18;;22802:38:0;22976:340:1;20710:191:0;20784:16;20803:6;;-1:-1:-1;;;;;20820:17:0;;;-1:-1:-1;;;;;;20820:17:0;;;;;;20853:40;;20803:6;;;;;;;20853:40;;20784:16;20853:40;20773:128;20710:191;:::o;23177:118::-;22186:19;:17;:19::i;:::-;23237:7:::1;:14:::0;;-1:-1:-1;;;;23237:14:0::1;-1:-1:-1::0;;;23237:14:0::1;::::0;;23267:20:::1;23274:12;18081:10:::0;;18001:98;22925:108;22628:4;22652:7;-1:-1:-1;;;22652:7:0;;;;22984:41;;;;-1:-1:-1;;;22984:41:0;;23523:2:1;22984:41:0;;;23505:21:1;23562:2;23542:18;;;23535:30;-1:-1:-1;;;23581:18:1;;;23574:50;23641:18;;22984:41:0;23321:344:1;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:328::-;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;425:38;459:2;448:9;444:18;425:38;:::i;:::-;415:48;;510:2;499:9;495:18;482:32;472:42;;192:328;;;;;:::o;748:156::-;814:20;;874:4;863:16;;853:27;;843:55;;894:1;891;884:12;909:250;975:6;983;1036:2;1024:9;1015:7;1011:23;1007:32;1004:52;;;1052:1;1049;1042:12;1004:52;1075:27;1092:9;1075:27;:::i;:::-;1065:37;1149:2;1134:18;;;;1121:32;;-1:-1:-1;;;909:250:1:o;1164:182::-;1221:6;1274:2;1262:9;1253:7;1249:23;1245:32;1242:52;;;1290:1;1287;1280:12;1242:52;1313:27;1330:9;1313:27;:::i;:::-;1303:37;1164:182;-1:-1:-1;;;1164:182:1:o;1533:186::-;1592:6;1645:2;1633:9;1624:7;1620:23;1616:32;1613:52;;;1661:1;1658;1651:12;1613:52;1684:29;1703:9;1684:29;:::i;1724:180::-;1783:6;1836:2;1824:9;1815:7;1811:23;1807:32;1804:52;;;1852:1;1849;1842:12;1804:52;-1:-1:-1;1875:23:1;;1724:180;-1:-1:-1;1724:180:1:o;1909:127::-;1970:10;1965:3;1961:20;1958:1;1951:31;2001:4;1998:1;1991:15;2025:4;2022:1;2015:15;2041:275;2112:2;2106:9;2177:2;2158:13;;-1:-1:-1;;2154:27:1;2142:40;;2212:18;2197:34;;2233:22;;;2194:62;2191:88;;;2259:18;;:::i;:::-;2295:2;2288:22;2041:275;;-1:-1:-1;2041:275:1:o;2321:183::-;2381:4;2414:18;2406:6;2403:30;2400:56;;;2436:18;;:::i;:::-;-1:-1:-1;2481:1:1;2477:14;2493:4;2473:25;;2321:183::o;2509:177::-;2577:20;;-1:-1:-1;;2626:35:1;;2616:46;;2606:74;;2676:1;2673;2666:12;2691:668;2745:5;2798:3;2791:4;2783:6;2779:17;2775:27;2765:55;;2816:1;2813;2806:12;2765:55;2852:6;2839:20;2878:4;2902:60;2918:43;2958:2;2918:43;:::i;:::-;2902:60;:::i;:::-;2996:15;;;3082:1;3078:10;;;;3066:23;;3062:32;;;3027:12;;;;3106:15;;;3103:35;;;3134:1;3131;3124:12;3103:35;3170:2;3162:6;3158:15;3182:148;3198:6;3193:3;3190:15;3182:148;;;3264:23;3283:3;3264:23;:::i;:::-;3252:36;;3308:12;;;;3215;;3182:148;;;-1:-1:-1;3348:5:1;2691:668;-1:-1:-1;;;;;;2691:668:1:o;3364:662::-;3418:5;3471:3;3464:4;3456:6;3452:17;3448:27;3438:55;;3489:1;3486;3479:12;3438:55;3525:6;3512:20;3551:4;3575:60;3591:43;3631:2;3591:43;:::i;3575:60::-;3669:15;;;3755:1;3751:10;;;;3739:23;;3735:32;;;3700:12;;;;3779:15;;;3776:35;;;3807:1;3804;3797:12;3776:35;3843:2;3835:6;3831:15;3855:142;3871:6;3866:3;3863:15;3855:142;;;3937:17;;3925:30;;3975:12;;;;3888;;3855:142;;4031:595;4149:6;4157;4210:2;4198:9;4189:7;4185:23;4181:32;4178:52;;;4226:1;4223;4216:12;4178:52;4266:9;4253:23;4295:18;4336:2;4328:6;4325:14;4322:34;;;4352:1;4349;4342:12;4322:34;4375:61;4428:7;4419:6;4408:9;4404:22;4375:61;:::i;:::-;4365:71;;4489:2;4478:9;4474:18;4461:32;4445:48;;4518:2;4508:8;4505:16;4502:36;;;4534:1;4531;4524:12;4502:36;;4557:63;4612:7;4601:8;4590:9;4586:24;4557:63;:::i;:::-;4547:73;;;4031:595;;;;;:::o;4823:118::-;4909:5;4902:13;4895:21;4888:5;4885:32;4875:60;;4931:1;4928;4921:12;4946:1433;5095:6;5103;5111;5164:2;5152:9;5143:7;5139:23;5135:32;5132:52;;;5180:1;5177;5170:12;5132:52;5220:9;5207:23;5249:18;5290:2;5282:6;5279:14;5276:34;;;5306:1;5303;5296:12;5276:34;5329:61;5382:7;5373:6;5362:9;5358:22;5329:61;:::i;:::-;5319:71;;5409:2;5399:12;;5464:2;5453:9;5449:18;5436:32;5493:2;5483:8;5480:16;5477:36;;;5509:1;5506;5499:12;5477:36;5532:63;5587:7;5576:8;5565:9;5561:24;5532:63;:::i;:::-;5522:73;;;5648:2;5637:9;5633:18;5620:32;5677:2;5667:8;5664:16;5661:36;;;5693:1;5690;5683:12;5661:36;5716:24;;;-1:-1:-1;5771:4:1;5763:13;;5759:27;-1:-1:-1;5749:55:1;;5800:1;5797;5790:12;5749:55;5836:2;5823:16;5859:60;5875:43;5915:2;5875:43;:::i;5859:60::-;5953:15;;;6035:1;6031:10;;;;6023:19;;6019:28;;;5984:12;;;;6059:19;;;6056:39;;;6091:1;6088;6081:12;6056:39;6115:11;;;;6135:214;6151:6;6146:3;6143:15;6135:214;;;6231:3;6218:17;6248:28;6270:5;6248:28;:::i;:::-;6289:18;;6168:12;;;;6327;;;;6135:214;;;6368:5;6358:15;;;;;;;4946:1433;;;;;:::o;6384:456::-;6477:6;6485;6493;6501;6509;6562:3;6550:9;6541:7;6537:23;6533:33;6530:53;;;6579:1;6576;6569:12;6530:53;6602:27;6619:9;6602:27;:::i;:::-;6592:37;6676:2;6661:18;;6648:32;;-1:-1:-1;6727:2:1;6712:18;;6699:32;;6778:2;6763:18;;6750:32;;-1:-1:-1;6829:3:1;6814:19;6801:33;;-1:-1:-1;6384:456:1;-1:-1:-1;;;6384:456:1:o;6845:324::-;6920:6;6928;6936;6989:2;6977:9;6968:7;6964:23;6960:32;6957:52;;;7005:1;7002;6995:12;6957:52;7028:29;7047:9;7028:29;:::i;:::-;7018:39;;7076:36;7108:2;7097:9;7093:18;7076:36;:::i;7382:494::-;7562:2;7547:18;;7551:9;7642:6;7520:4;7676:194;7690:4;7687:1;7684:11;7676:194;;;7749:13;;7737:26;;7786:4;7810:12;;;;7845:15;;;;7710:1;7703:9;7676:194;;;7680:3;;;7382:494;;;;:::o;7881:1279::-;8013:6;8021;8029;8037;8090:3;8078:9;8069:7;8065:23;8061:33;8058:53;;;8107:1;8104;8097:12;8058:53;8147:9;8134:23;8176:18;8217:2;8209:6;8206:14;8203:34;;;8233:1;8230;8223:12;8203:34;8256:61;8309:7;8300:6;8289:9;8285:22;8256:61;:::i;:::-;8246:71;;8336:2;8326:12;;8391:2;8380:9;8376:18;8363:32;8420:2;8410:8;8407:16;8404:36;;;8436:1;8433;8426:12;8404:36;8459:24;;;-1:-1:-1;8514:4:1;8506:13;;8502:27;-1:-1:-1;8492:55:1;;8543:1;8540;8533:12;8492:55;8579:2;8566:16;8602:60;8618:43;8658:2;8618:43;:::i;8602:60::-;8696:15;;;8778:1;8774:10;;;;8766:19;;8762:28;;;8727:12;;;;8802:19;;;8799:39;;;8834:1;8831;8824:12;8799:39;8858:11;;;;8878:146;8894:6;8889:3;8886:15;8878:146;;;8960:21;8977:3;8960:21;:::i;:::-;8948:34;;8911:12;;;;9002;;;;8878:146;;;9043:5;9033:15;;;;;;;9067:36;9099:2;9088:9;9084:18;9067:36;:::i;:::-;7881:1279;;;;-1:-1:-1;9057:46:1;;9150:2;9135:18;9122:32;;-1:-1:-1;;7881:1279:1:o;9165:387::-;9249:6;9257;9265;9273;9326:3;9314:9;9305:7;9301:23;9297:33;9294:53;;;9343:1;9340;9333:12;9294:53;9366:27;9383:9;9366:27;:::i;:::-;9356:37;9440:2;9425:18;;9412:32;;-1:-1:-1;9491:2:1;9476:18;;9463:32;;9542:2;9527:18;9514:32;;-1:-1:-1;9165:387:1;-1:-1:-1;;;9165:387:1:o;9836:245::-;9903:6;9956:2;9944:9;9935:7;9931:23;9927:32;9924:52;;;9972:1;9969;9962:12;9924:52;10004:9;9998:16;10023:28;10045:5;10023:28;:::i;10086:341::-;10288:2;10270:21;;;10327:2;10307:18;;;10300:30;-1:-1:-1;;;10361:2:1;10346:18;;10339:47;10418:2;10403:18;;10086:341::o;10839:465::-;10892:3;10930:5;10924:12;10957:6;10952:3;10945:19;10983:4;11012:2;11007:3;11003:12;10996:19;;11049:2;11042:5;11038:14;11070:1;11080:199;11094:6;11091:1;11088:13;11080:199;;;11159:13;;-1:-1:-1;;11155:43:1;11143:56;;11219:12;;;;11254:15;;;;11116:1;11109:9;11080:199;;;-1:-1:-1;11295:3:1;;10839:465;-1:-1:-1;;;;;10839:465:1:o;11309:435::-;11362:3;11400:5;11394:12;11427:6;11422:3;11415:19;11453:4;11482:2;11477:3;11473:12;11466:19;;11519:2;11512:5;11508:14;11540:1;11550:169;11564:6;11561:1;11558:13;11550:169;;;11625:13;;11613:26;;11659:12;;;;11694:15;;;;11586:1;11579:9;11550:169;;11749:465;12006:2;11995:9;11988:21;11969:4;12032:56;12084:2;12073:9;12069:18;12061:6;12032:56;:::i;:::-;12136:9;12128:6;12124:22;12119:2;12108:9;12104:18;12097:50;12164:44;12201:6;12193;12164:44;:::i;:::-;12156:52;11749:465;-1:-1:-1;;;;;11749:465:1:o;13389:1018::-;13718:2;13707:9;13700:21;13681:4;13744:56;13796:2;13785:9;13781:18;13773:6;13744:56;:::i;:::-;13819:2;13869:9;13861:6;13857:22;13852:2;13841:9;13837:18;13830:50;13903:44;13940:6;13932;13903:44;:::i;:::-;13983:22;;;13978:2;13963:18;;13956:50;14055:13;;14077:22;;;14153:15;;;;-1:-1:-1;14115:15:1;;;;14186:1;14196:185;14210:6;14207:1;14204:13;14196:185;;;14285:13;;14278:21;14271:29;14259:42;;14356:15;;;;14321:12;;;;14232:1;14225:9;14196:185;;;-1:-1:-1;14398:3:1;;13389:1018;-1:-1:-1;;;;;;;;13389:1018:1:o;15832:127::-;15893:10;15888:3;15884:20;15881:1;15874:31;15924:4;15921:1;15914:15;15948:4;15945:1;15938:15;15964:125;16029:9;;;16050:10;;;16047:36;;;16063:18;;:::i;:::-;15964:125;;;;:::o;16094:168::-;16167:9;;;16198;;16215:15;;;16209:22;;16195:37;16185:71;;16236:18;;:::i;16267:184::-;16337:6;16390:2;16378:9;16369:7;16365:23;16361:32;16358:52;;;16406:1;16403;16396:12;16358:52;-1:-1:-1;16429:16:1;;16267:184;-1:-1:-1;16267:184:1:o;17465:375::-;-1:-1:-1;;;;;17723:15:1;;;17705:34;;17775:15;;;;17770:2;17755:18;;17748:43;17822:2;17807:18;;17800:34;;;;17655:2;17640:18;;17465:375::o;17845:349::-;18047:2;18029:21;;;18086:2;18066:18;;;18059:30;18125:27;18120:2;18105:18;;18098:55;18185:2;18170:18;;17845:349::o;19307:127::-;19368:10;19363:3;19359:20;19356:1;19349:31;19399:4;19396:1;19389:15;19423:4;19420:1;19413:15;19439:175;19476:3;19520:4;19513:5;19509:16;19549:4;19540:7;19537:17;19534:43;;19557:18;;:::i;:::-;19606:1;19593:15;;19439:175;-1:-1:-1;;19439:175:1:o;19974:811::-;20227:2;20216:9;20209:21;20190:4;20253:56;20305:2;20294:9;20290:18;20282:6;20253:56;:::i;:::-;20366:22;;;20328:2;20346:18;;;20339:50;;;;20438:13;;20460:22;;;20536:15;;;;20498;;;20569:1;20579:180;20593:6;20590:1;20587:13;20579:180;;;20658:13;;20673:4;20654:24;20642:37;;20734:15;;;;20699:12;;;;20615:1;20608:9;20579:180;;;-1:-1:-1;20776:3:1;;19974:811;-1:-1:-1;;;;;;;19974:811:1:o;21853:217::-;21893:1;21919;21909:132;;21963:10;21958:3;21954:20;21951:1;21944:31;21998:4;21995:1;21988:15;22026:4;22023:1;22016:15;21909:132;-1:-1:-1;22055:9:1;;21853:217::o;22075:128::-;22142:9;;;22163:11;;;22160:37;;;22177:18;;:::i
Swarm Source
ipfs://de7bb9f05449edf375b1ccb746954908ccdacbe8d5ed913883df3e1a7b56f942
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.