Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 41 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Use Kyber Api Da... | 21171286 | 5 days ago | IN | 0.22 ETH | 0.01250069 | ||||
Use Kyber Api Da... | 21057864 | 21 days ago | IN | 0 ETH | 0.00336122 | ||||
Use Kyber Api Da... | 20898203 | 43 days ago | IN | 0 ETH | 0.00173275 | ||||
Use Kyber Api Da... | 20555971 | 91 days ago | IN | 0 ETH | 0.00042555 | ||||
Use Kyber Api Da... | 20506530 | 98 days ago | IN | 0 ETH | 0.000975 | ||||
Use Kyber Api Da... | 20506480 | 98 days ago | IN | 0.03 ETH | 0.00090265 | ||||
Use Kyber Api Da... | 20225868 | 137 days ago | IN | 0 ETH | 0.00213057 | ||||
Use Kyber Api Da... | 20203600 | 140 days ago | IN | 0 ETH | 0.00131663 | ||||
Use Kyber Api Da... | 20064031 | 160 days ago | IN | 0.6 ETH | 0.00532182 | ||||
Use Kyber Api Da... | 20064015 | 160 days ago | IN | 0.5 ETH | 0.00528793 | ||||
Use Kyber Api Da... | 20049793 | 162 days ago | IN | 0.33942487 ETH | 0.00182298 | ||||
Use Kyber Api Da... | 20049772 | 162 days ago | IN | 0.5 ETH | 0.00188946 | ||||
Use Kyber Api Da... | 19917608 | 180 days ago | IN | 0.68 ETH | 0.00403447 | ||||
Use Kyber Api Da... | 19868295 | 187 days ago | IN | 0 ETH | 0.00310405 | ||||
Use Kyber Api Da... | 19347967 | 260 days ago | IN | 0 ETH | 0.01713571 | ||||
Use Kyber Api Da... | 19059534 | 301 days ago | IN | 0 ETH | 0.00289413 | ||||
Use Kyber Api Da... | 18778990 | 340 days ago | IN | 0.04804 ETH | 0.00261014 | ||||
Use Kyber Api Da... | 18778949 | 340 days ago | IN | 0.05121 ETH | 0.00688224 | ||||
Use Kyber Api Da... | 18642520 | 359 days ago | IN | 0.05 ETH | 0.01174374 | ||||
Use Kyber Api Da... | 18406275 | 392 days ago | IN | 0 ETH | 0.00244843 | ||||
Use Kyber Api Da... | 18404172 | 393 days ago | IN | 0 ETH | 0.00235973 | ||||
Use Kyber Api Da... | 18401428 | 393 days ago | IN | 0 ETH | 0.00359826 | ||||
Use Kyber Api Da... | 18389668 | 395 days ago | IN | 0 ETH | 0.00183881 | ||||
Use Kyber Api Da... | 18389441 | 395 days ago | IN | 0.087 ETH | 0.00254553 | ||||
Use Kyber Api Da... | 18333517 | 402 days ago | IN | 0 ETH | 0.00236425 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
21171286 | 5 days ago | 0.22 ETH | ||||
20898203 | 43 days ago | 0.04779964 ETH | ||||
20898203 | 43 days ago | 0.00024019 ETH | ||||
20898203 | 43 days ago | 0.04803984 ETH | ||||
20555971 | 91 days ago | 0.03805573 ETH | ||||
20555971 | 91 days ago | 0.00019123 ETH | ||||
20555971 | 91 days ago | 0.03824696 ETH | ||||
20506530 | 98 days ago | 0.01120449 ETH | ||||
20506530 | 98 days ago | 0.0000563 ETH | ||||
20506530 | 98 days ago | 0.0112608 ETH | ||||
20506480 | 98 days ago | 0.03 ETH | ||||
20225868 | 137 days ago | 0.08113273 ETH | ||||
20225868 | 137 days ago | 0.0004077 ETH | ||||
20225868 | 137 days ago | 0.08154043 ETH | ||||
20203600 | 140 days ago | 0.01442089 ETH | ||||
20203600 | 140 days ago | 0.00007246 ETH | ||||
20203600 | 140 days ago | 0.01449335 ETH | ||||
20064031 | 160 days ago | 0.6 ETH | ||||
20064015 | 160 days ago | 0.5 ETH | ||||
20049793 | 162 days ago | 0.33942487 ETH | ||||
20049772 | 162 days ago | 0.5 ETH | ||||
19917608 | 180 days ago | 0.68 ETH | ||||
19868295 | 187 days ago | 0.01840829 ETH | ||||
19868295 | 187 days ago | 0.0000925 ETH | ||||
19868295 | 187 days ago | 0.0185008 ETH |
Loading...
Loading
Contract Name:
KyberSwapLIQ
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-14 */ // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.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/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // 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.7.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 anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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: contracts/kyberSwapLiq.sol pragma solidity 0.8.4; interface ILiquidusFeeEstimation { function userFee(address user) external view returns (uint256); } contract KyberSwapLIQ is Ownable{ using SafeMath for uint256; using SafeERC20 for IERC20; event AdminTokenRecovery(address tokenRecovered, uint256 amount); mapping(address => bool) public whitelistRouter; mapping(address => bool) public whitelistFromFee; address payable public feeWallet; address public feeEstimationContract; address constant _ETH_ADDRESS_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; receive() external payable {} //Compatible with ETH=>ERC20, ERC20=>ETH function useKyberApiData( address fromToken, address toToken, uint256 fromAmount, address router, bytes memory apiData ) external payable { require(whitelistRouter[router], "Router not whitelisted"); if (fromToken != _ETH_ADDRESS_) { IERC20(fromToken).transferFrom(msg.sender, address(this), fromAmount); _generalApproveMax(fromToken, router, fromAmount); } else { require(fromAmount == msg.value); } (bool success, ) = router.call{value: fromToken == _ETH_ADDRESS_ ? fromAmount : 0}(apiData); require(success, "Swap failed"); // Handle fee, send fee to fee address if(!whitelistFromFee[msg.sender]){ uint256 fee = ILiquidusFeeEstimation(feeEstimationContract).userFee(msg.sender); // Charge fees based on holdings if (fee != 0) { _generalTransfer(toToken, feeWallet, _generalBalanceOf(toToken, address(this)).mul(fee).div(10000)); } } uint256 returnAmount = _generalBalanceOf(toToken, address(this)); address payable to = payable(msg.sender); _generalTransfer(toToken, to, returnAmount); } function _generalApproveMax( address token, address to, uint256 amount ) internal { uint256 allowance = IERC20(token).allowance(address(this), to); if (allowance < amount) { if (allowance > 0) { IERC20(token).safeApprove(to, 0); } IERC20(token).safeApprove(to, uint256(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)); } } function _generalTransfer( address token, address payable to, uint256 amount ) internal { if (amount > 0) { if (token == _ETH_ADDRESS_) { to.transfer(amount); } else { IERC20(token).safeTransfer(to, amount); } } } function _generalBalanceOf( address token, address who ) internal view returns (uint256) { if (token == _ETH_ADDRESS_ ) { return who.balance; } else { return IERC20(token).balanceOf(who); } } function setFees(address payable _feeWallet, address _feeEstimationContract) public onlyOwner { feeWallet = _feeWallet; feeEstimationContract = _feeEstimationContract; } function addWhitelistFromFee(address _account) public onlyOwner { whitelistFromFee[_account] = true; } function removeWhitelistFromFee(address _account) public onlyOwner { whitelistFromFee[_account] = false; } function addWhitelistRouter(address _router) public onlyOwner { whitelistRouter[_router] = true; } function removeWhitelistRouter(address _router) public onlyOwner { whitelistRouter[_router] = false; } function recoverWrongTokens(address _tokenAddress, uint256 _tokenAmount) external onlyOwner { IERC20(_tokenAddress).safeTransfer(address(msg.sender), _tokenAmount); emit AdminTokenRecovery(_tokenAddress, _tokenAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenRecovered","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AdminTokenRecovery","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"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addWhitelistFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"addWhitelistRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeEstimationContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"recoverWrongTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeWhitelistFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"removeWhitelistRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_feeWallet","type":"address"},{"internalType":"address","name":"_feeEstimationContract","type":"address"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromAmount","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"apiData","type":"bytes"}],"name":"useKyberApiData","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ef08061010d6000396000f3fe6080604052600436106100e15760003560e01c80638da5cb5b1161007f578063db2c656b11610059578063db2c656b14610280578063f25f4b56146102bd578063f2fde38b146102e8578063fcd4efd014610311576100e8565b80638da5cb5b146102035780638f01f9d11461022e578063c2861ad914610257576100e8565b806350a73d0d116100bb57806350a73d0d1461016a578063540eee27146101865780635615cd2a146101c3578063715018a6146101ec576100e8565b80633f138d4b146100ed578063404ea1bd146101165780634f258ad914610141576100e8565b366100e857005b600080fd5b3480156100f957600080fd5b50610114600480360381019061010f91906115a1565b61033a565b005b34801561012257600080fd5b5061012b6103aa565b6040516101389190611804565b60405180910390f35b34801561014d57600080fd5b50610168600480360381019061016391906114ad565b6103d0565b005b610184600480360381019061017f9190611512565b610433565b005b34801561019257600080fd5b506101ad60048036038101906101a891906114ad565b61083f565b6040516101ba91906118c3565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e591906114ad565b61085f565b005b3480156101f857600080fd5b506102016108c1565b005b34801561020f57600080fd5b506102186108d5565b6040516102259190611804565b60405180910390f35b34801561023a57600080fd5b50610255600480360381019061025091906114d6565b6108fe565b005b34801561026357600080fd5b5061027e600480360381019061027991906114ad565b61098c565b005b34801561028c57600080fd5b506102a760048036038101906102a291906114ad565b6109ef565b6040516102b491906118c3565b60405180910390f35b3480156102c957600080fd5b506102d2610a0f565b6040516102df919061181f565b60405180910390f35b3480156102f457600080fd5b5061030f600480360381019061030a91906114ad565b610a35565b005b34801561031d57600080fd5b50610338600480360381019061033391906114ad565b610ab9565b005b610342610b1c565b61036d33828473ffffffffffffffffffffffffffffffffffffffff16610b9a9092919063ffffffff16565b7f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab78129828260405161039e92919061189a565b60405180910390a15050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6103d8610b1c565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166104bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b690611940565b60405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146105a6578473ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b815260040161054393929190611863565b602060405180830381600087803b15801561055d57600080fd5b505af1158015610571573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059591906115dd565b506105a1858385610c20565b6105b3565b3483146105b257600080fd5b5b60008273ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461061a57600061061c565b845b8360405161062a91906117ed565b60006040518083038185875af1925050503d8060008114610667576040519150601f19603f3d011682016040523d82523d6000602084013e61066c565b606091505b50509050806106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a790611900565b60405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610817576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356c5f349336040518263ffffffff1660e01b815260040161075e9190611804565b60206040518083038186803b15801561077657600080fd5b505afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae9190611606565b9050600081146108155761081486600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661080f612710610801866107f38d30610d3f565b610e3a90919063ffffffff16565b610e5090919063ffffffff16565b610e66565b5b505b60006108238630610d3f565b90506000339050610835878284610e66565b5050505050505050565b60026020528060005260406000206000915054906101000a900460ff1681565b610867610b1c565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6108c9610b1c565b6108d36000610f35565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610906610b1c565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610994610b1c565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60016020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a3d610b1c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa490611920565b60405180910390fd5b610ab681610f35565b50565b610ac1610b1c565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610b24610ff9565b73ffffffffffffffffffffffffffffffffffffffff16610b426108d5565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90611980565b60405180910390fd5b565b610c1b8363a9059cbb60e01b8484604051602401610bb992919061189a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611001565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401610c5d92919061183a565b60206040518083038186803b158015610c7557600080fd5b505afa158015610c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cad9190611606565b905081811015610d39576000811115610ced57610cec8360008673ffffffffffffffffffffffffffffffffffffffff166110c89092919063ffffffff16565b5b610d38837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff166110c89092919063ffffffff16565b5b50505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610da8578173ffffffffffffffffffffffffffffffffffffffff16319050610e34565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610de19190611804565b60206040518083038186803b158015610df957600080fd5b505afa158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e319190611606565b90505b92915050565b60008183610e489190611ab9565b905092915050565b60008183610e5e9190611a88565b905092915050565b6000811115610f305773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f03578173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610efd573d6000803e3d6000fd5b50610f2f565b610f2e82828573ffffffffffffffffffffffffffffffffffffffff16610b9a9092919063ffffffff16565b5b5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000611063826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166112269092919063ffffffff16565b90506000815111156110c3578080602001905181019061108391906115dd565b6110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b9906119c0565b60405180910390fd5b5b505050565b6000811480611161575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161110f92919061183a565b60206040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115f9190611606565b145b6111a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611197906119e0565b60405180910390fd5b6112218363095ea7b360e01b84846040516024016111bf92919061189a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611001565b505050565b6060611235848460008561123e565b90509392505050565b606082471015611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90611960565b60405180910390fd5b61128c85611352565b6112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c2906119a0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516112f491906117ed565b60006040518083038185875af1925050503d8060008114611331576040519150601f19603f3d011682016040523d82523d6000602084013e611336565b606091505b5091509150611346828286611375565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315611385578290506113d5565b6000835111156113985782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc91906118de565b60405180910390fd5b9392505050565b60006113ef6113ea84611a25565b611a00565b90508281526020810184848401111561140757600080fd5b611412848285611b6d565b509392505050565b60008135905061142981611e5e565b92915050565b60008135905061143e81611e75565b92915050565b60008151905061145381611e8c565b92915050565b600082601f83011261146a57600080fd5b813561147a8482602086016113dc565b91505092915050565b60008135905061149281611ea3565b92915050565b6000815190506114a781611ea3565b92915050565b6000602082840312156114bf57600080fd5b60006114cd8482850161141a565b91505092915050565b600080604083850312156114e957600080fd5b60006114f78582860161142f565b92505060206115088582860161141a565b9150509250929050565b600080600080600060a0868803121561152a57600080fd5b60006115388882890161141a565b95505060206115498882890161141a565b945050604061155a88828901611483565b935050606061156b8882890161141a565b925050608086013567ffffffffffffffff81111561158857600080fd5b61159488828901611459565b9150509295509295909350565b600080604083850312156115b457600080fd5b60006115c28582860161141a565b92505060206115d385828601611483565b9150509250929050565b6000602082840312156115ef57600080fd5b60006115fd84828501611444565b91505092915050565b60006020828403121561161857600080fd5b600061162684828501611498565b91505092915050565b61163881611b25565b82525050565b61164781611b13565b82525050565b61165681611b37565b82525050565b600061166782611a56565b6116718185611a6c565b9350611681818560208601611b7c565b80840191505092915050565b600061169882611a61565b6116a28185611a77565b93506116b2818560208601611b7c565b6116bb81611c6d565b840191505092915050565b60006116d3600b83611a77565b91506116de82611c7e565b602082019050919050565b60006116f6602683611a77565b915061170182611ca7565b604082019050919050565b6000611719601683611a77565b915061172482611cf6565b602082019050919050565b600061173c602683611a77565b915061174782611d1f565b604082019050919050565b600061175f602083611a77565b915061176a82611d6e565b602082019050919050565b6000611782601d83611a77565b915061178d82611d97565b602082019050919050565b60006117a5602a83611a77565b91506117b082611dc0565b604082019050919050565b60006117c8603683611a77565b91506117d382611e0f565b604082019050919050565b6117e781611b63565b82525050565b60006117f9828461165c565b915081905092915050565b6000602082019050611819600083018461163e565b92915050565b6000602082019050611834600083018461162f565b92915050565b600060408201905061184f600083018561163e565b61185c602083018461163e565b9392505050565b6000606082019050611878600083018661163e565b611885602083018561163e565b61189260408301846117de565b949350505050565b60006040820190506118af600083018561163e565b6118bc60208301846117de565b9392505050565b60006020820190506118d8600083018461164d565b92915050565b600060208201905081810360008301526118f8818461168d565b905092915050565b60006020820190508181036000830152611919816116c6565b9050919050565b60006020820190508181036000830152611939816116e9565b9050919050565b600060208201905081810360008301526119598161170c565b9050919050565b600060208201905081810360008301526119798161172f565b9050919050565b6000602082019050818103600083015261199981611752565b9050919050565b600060208201905081810360008301526119b981611775565b9050919050565b600060208201905081810360008301526119d981611798565b9050919050565b600060208201905081810360008301526119f9816117bb565b9050919050565b6000611a0a611a1b565b9050611a168282611baf565b919050565b6000604051905090565b600067ffffffffffffffff821115611a4057611a3f611c3e565b5b611a4982611c6d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000611a9382611b63565b9150611a9e83611b63565b925082611aae57611aad611c0f565b5b828204905092915050565b6000611ac482611b63565b9150611acf83611b63565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b0857611b07611be0565b5b828202905092915050565b6000611b1e82611b43565b9050919050565b6000611b3082611b43565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611b9a578082015181840152602081019050611b7f565b83811115611ba9576000848401525b50505050565b611bb882611c6d565b810181811067ffffffffffffffff82111715611bd757611bd6611c3e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f53776170206661696c6564000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f526f75746572206e6f742077686974656c697374656400000000000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015250565b611e6781611b13565b8114611e7257600080fd5b50565b611e7e81611b25565b8114611e8957600080fd5b50565b611e9581611b37565b8114611ea057600080fd5b50565b611eac81611b63565b8114611eb757600080fd5b5056fea2646970667358221220559068d3cbc456d2ef307ad9cf4584ff7a404b62999e93f0343ad1c9cea3671164736f6c63430008040033
Deployed Bytecode
0x6080604052600436106100e15760003560e01c80638da5cb5b1161007f578063db2c656b11610059578063db2c656b14610280578063f25f4b56146102bd578063f2fde38b146102e8578063fcd4efd014610311576100e8565b80638da5cb5b146102035780638f01f9d11461022e578063c2861ad914610257576100e8565b806350a73d0d116100bb57806350a73d0d1461016a578063540eee27146101865780635615cd2a146101c3578063715018a6146101ec576100e8565b80633f138d4b146100ed578063404ea1bd146101165780634f258ad914610141576100e8565b366100e857005b600080fd5b3480156100f957600080fd5b50610114600480360381019061010f91906115a1565b61033a565b005b34801561012257600080fd5b5061012b6103aa565b6040516101389190611804565b60405180910390f35b34801561014d57600080fd5b50610168600480360381019061016391906114ad565b6103d0565b005b610184600480360381019061017f9190611512565b610433565b005b34801561019257600080fd5b506101ad60048036038101906101a891906114ad565b61083f565b6040516101ba91906118c3565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e591906114ad565b61085f565b005b3480156101f857600080fd5b506102016108c1565b005b34801561020f57600080fd5b506102186108d5565b6040516102259190611804565b60405180910390f35b34801561023a57600080fd5b50610255600480360381019061025091906114d6565b6108fe565b005b34801561026357600080fd5b5061027e600480360381019061027991906114ad565b61098c565b005b34801561028c57600080fd5b506102a760048036038101906102a291906114ad565b6109ef565b6040516102b491906118c3565b60405180910390f35b3480156102c957600080fd5b506102d2610a0f565b6040516102df919061181f565b60405180910390f35b3480156102f457600080fd5b5061030f600480360381019061030a91906114ad565b610a35565b005b34801561031d57600080fd5b50610338600480360381019061033391906114ad565b610ab9565b005b610342610b1c565b61036d33828473ffffffffffffffffffffffffffffffffffffffff16610b9a9092919063ffffffff16565b7f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab78129828260405161039e92919061189a565b60405180910390a15050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6103d8610b1c565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166104bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b690611940565b60405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146105a6578473ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b815260040161054393929190611863565b602060405180830381600087803b15801561055d57600080fd5b505af1158015610571573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059591906115dd565b506105a1858385610c20565b6105b3565b3483146105b257600080fd5b5b60008273ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461061a57600061061c565b845b8360405161062a91906117ed565b60006040518083038185875af1925050503d8060008114610667576040519150601f19603f3d011682016040523d82523d6000602084013e61066c565b606091505b50509050806106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a790611900565b60405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610817576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356c5f349336040518263ffffffff1660e01b815260040161075e9190611804565b60206040518083038186803b15801561077657600080fd5b505afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae9190611606565b9050600081146108155761081486600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661080f612710610801866107f38d30610d3f565b610e3a90919063ffffffff16565b610e5090919063ffffffff16565b610e66565b5b505b60006108238630610d3f565b90506000339050610835878284610e66565b5050505050505050565b60026020528060005260406000206000915054906101000a900460ff1681565b610867610b1c565b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6108c9610b1c565b6108d36000610f35565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610906610b1c565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610994610b1c565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60016020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a3d610b1c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa490611920565b60405180910390fd5b610ab681610f35565b50565b610ac1610b1c565b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610b24610ff9565b73ffffffffffffffffffffffffffffffffffffffff16610b426108d5565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90611980565b60405180910390fd5b565b610c1b8363a9059cbb60e01b8484604051602401610bb992919061189a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611001565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401610c5d92919061183a565b60206040518083038186803b158015610c7557600080fd5b505afa158015610c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cad9190611606565b905081811015610d39576000811115610ced57610cec8360008673ffffffffffffffffffffffffffffffffffffffff166110c89092919063ffffffff16565b5b610d38837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff166110c89092919063ffffffff16565b5b50505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610da8578173ffffffffffffffffffffffffffffffffffffffff16319050610e34565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610de19190611804565b60206040518083038186803b158015610df957600080fd5b505afa158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e319190611606565b90505b92915050565b60008183610e489190611ab9565b905092915050565b60008183610e5e9190611a88565b905092915050565b6000811115610f305773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f03578173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610efd573d6000803e3d6000fd5b50610f2f565b610f2e82828573ffffffffffffffffffffffffffffffffffffffff16610b9a9092919063ffffffff16565b5b5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000611063826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166112269092919063ffffffff16565b90506000815111156110c3578080602001905181019061108391906115dd565b6110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b9906119c0565b60405180910390fd5b5b505050565b6000811480611161575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161110f92919061183a565b60206040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115f9190611606565b145b6111a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611197906119e0565b60405180910390fd5b6112218363095ea7b360e01b84846040516024016111bf92919061189a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611001565b505050565b6060611235848460008561123e565b90509392505050565b606082471015611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90611960565b60405180910390fd5b61128c85611352565b6112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c2906119a0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516112f491906117ed565b60006040518083038185875af1925050503d8060008114611331576040519150601f19603f3d011682016040523d82523d6000602084013e611336565b606091505b5091509150611346828286611375565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315611385578290506113d5565b6000835111156113985782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc91906118de565b60405180910390fd5b9392505050565b60006113ef6113ea84611a25565b611a00565b90508281526020810184848401111561140757600080fd5b611412848285611b6d565b509392505050565b60008135905061142981611e5e565b92915050565b60008135905061143e81611e75565b92915050565b60008151905061145381611e8c565b92915050565b600082601f83011261146a57600080fd5b813561147a8482602086016113dc565b91505092915050565b60008135905061149281611ea3565b92915050565b6000815190506114a781611ea3565b92915050565b6000602082840312156114bf57600080fd5b60006114cd8482850161141a565b91505092915050565b600080604083850312156114e957600080fd5b60006114f78582860161142f565b92505060206115088582860161141a565b9150509250929050565b600080600080600060a0868803121561152a57600080fd5b60006115388882890161141a565b95505060206115498882890161141a565b945050604061155a88828901611483565b935050606061156b8882890161141a565b925050608086013567ffffffffffffffff81111561158857600080fd5b61159488828901611459565b9150509295509295909350565b600080604083850312156115b457600080fd5b60006115c28582860161141a565b92505060206115d385828601611483565b9150509250929050565b6000602082840312156115ef57600080fd5b60006115fd84828501611444565b91505092915050565b60006020828403121561161857600080fd5b600061162684828501611498565b91505092915050565b61163881611b25565b82525050565b61164781611b13565b82525050565b61165681611b37565b82525050565b600061166782611a56565b6116718185611a6c565b9350611681818560208601611b7c565b80840191505092915050565b600061169882611a61565b6116a28185611a77565b93506116b2818560208601611b7c565b6116bb81611c6d565b840191505092915050565b60006116d3600b83611a77565b91506116de82611c7e565b602082019050919050565b60006116f6602683611a77565b915061170182611ca7565b604082019050919050565b6000611719601683611a77565b915061172482611cf6565b602082019050919050565b600061173c602683611a77565b915061174782611d1f565b604082019050919050565b600061175f602083611a77565b915061176a82611d6e565b602082019050919050565b6000611782601d83611a77565b915061178d82611d97565b602082019050919050565b60006117a5602a83611a77565b91506117b082611dc0565b604082019050919050565b60006117c8603683611a77565b91506117d382611e0f565b604082019050919050565b6117e781611b63565b82525050565b60006117f9828461165c565b915081905092915050565b6000602082019050611819600083018461163e565b92915050565b6000602082019050611834600083018461162f565b92915050565b600060408201905061184f600083018561163e565b61185c602083018461163e565b9392505050565b6000606082019050611878600083018661163e565b611885602083018561163e565b61189260408301846117de565b949350505050565b60006040820190506118af600083018561163e565b6118bc60208301846117de565b9392505050565b60006020820190506118d8600083018461164d565b92915050565b600060208201905081810360008301526118f8818461168d565b905092915050565b60006020820190508181036000830152611919816116c6565b9050919050565b60006020820190508181036000830152611939816116e9565b9050919050565b600060208201905081810360008301526119598161170c565b9050919050565b600060208201905081810360008301526119798161172f565b9050919050565b6000602082019050818103600083015261199981611752565b9050919050565b600060208201905081810360008301526119b981611775565b9050919050565b600060208201905081810360008301526119d981611798565b9050919050565b600060208201905081810360008301526119f9816117bb565b9050919050565b6000611a0a611a1b565b9050611a168282611baf565b919050565b6000604051905090565b600067ffffffffffffffff821115611a4057611a3f611c3e565b5b611a4982611c6d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000611a9382611b63565b9150611a9e83611b63565b925082611aae57611aad611c0f565b5b828204905092915050565b6000611ac482611b63565b9150611acf83611b63565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b0857611b07611be0565b5b828202905092915050565b6000611b1e82611b43565b9050919050565b6000611b3082611b43565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611b9a578082015181840152602081019050611b7f565b83811115611ba9576000848401525b50505050565b611bb882611c6d565b810181811067ffffffffffffffff82111715611bd757611bd6611c3e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f53776170206661696c6564000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f526f75746572206e6f742077686974656c697374656400000000000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015250565b611e6781611b13565b8114611e7257600080fd5b50565b611e7e81611b25565b8114611e8957600080fd5b50565b611e9581611b37565b8114611ea057600080fd5b50565b611eac81611b63565b8114611eb757600080fd5b5056fea2646970667358221220559068d3cbc456d2ef307ad9cf4584ff7a404b62999e93f0343ad1c9cea3671164736f6c63430008040033
Deployed Bytecode Sourcemap
29120:3893:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32767:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29450:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32395:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29666:1295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29354:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32523:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28118:103;;;;;;;;;;;;;:::i;:::-;;27470:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32071:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32643:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29300:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29411:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28376:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32271:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32767:243;27356:13;:11;:13::i;:::-;32870:69:::1;32913:10;32926:12;32877:13;32870:34;;;;:69;;;;;:::i;:::-;32955:47;32974:13;32989:12;32955:47;;;;;;;:::i;:::-;;;;;;;;32767:243:::0;;:::o;29450:36::-;;;;;;;;;;;;;:::o;32395:120::-;27356:13;:11;:13::i;:::-;32502:5:::1;32473:16;:26;32490:8;32473:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32395:120:::0;:::o;29666:1295::-;29896:15;:23;29912:6;29896:23;;;;;;;;;;;;;;;;;;;;;;;;;29888:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29526:42;29963:26;;:9;:26;;;29959:257;;30013:9;30006:30;;;30037:10;30057:4;30064:10;30006:69;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30090:49;30109:9;30120:6;30128:10;30090:18;:49::i;:::-;29959:257;;;30194:9;30180:10;:23;30172:32;;;;;;29959:257;30229:12;30247:6;:11;;29526:42;30266:26;;:9;:26;;;:43;;30308:1;30266:43;;;30295:10;30266:43;30311:7;30247:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30228:91;;;30338:7;30330:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;30426:16;:28;30443:10;30426:28;;;;;;;;;;;;;;;;;;;;;;;;;30422:348;;30470:11;30507:21;;;;;;;;;;;30484:53;;;30538:10;30484:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30470:79;;30621:1;30614:3;:8;30610:148;;30643:99;30660:7;30669:9;;;;;;;;;;;30680:61;30735:5;30680:50;30726:3;30680:41;30698:7;30715:4;30680:17;:41::i;:::-;:45;;:50;;;;:::i;:::-;:54;;:61;;;;:::i;:::-;30643:16;:99::i;:::-;30610:148;30422:348;;30782:20;30805:41;30823:7;30840:4;30805:17;:41::i;:::-;30782:64;;30859:18;30888:10;30859:40;;30910:43;30927:7;30936:2;30940:12;30910:16;:43::i;:::-;29666:1295;;;;;;;;:::o;29354:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;32523:112::-;27356:13;:11;:13::i;:::-;32623:4:::1;32596:15:::0;:24:::1;32612:7;32596:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32523:112:::0;:::o;28118:103::-;27356:13;:11;:13::i;:::-;28183:30:::1;28210:1;28183:18;:30::i;:::-;28118:103::o:0;27470:87::-;27516:7;27543:6;;;;;;;;;;;27536:13;;27470:87;:::o;32071:192::-;27356:13;:11;:13::i;:::-;32188:10:::1;32176:9;;:22;;;;;;;;;;;;;;;;;;32233;32209:21;;:46;;;;;;;;;;;;;;;;;;32071:192:::0;;:::o;32643:116::-;27356:13;:11;:13::i;:::-;32746:5:::1;32719:15;:24;32735:7;32719:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;32643:116:::0;:::o;29300:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;29411:32::-;;;;;;;;;;;;;:::o;28376:201::-;27356:13;:11;:13::i;:::-;28485:1:::1;28465:22;;:8;:22;;;;28457:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28541:28;28560:8;28541:18;:28::i;:::-;28376:201:::0;:::o;32271:116::-;27356:13;:11;:13::i;:::-;32375:4:::1;32346:16;:26;32363:8;32346:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;32271:116:::0;:::o;27635:132::-;27710:12;:10;:12::i;:::-;27699:23;;:7;:5;:7::i;:::-;:23;;;27691:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27635:132::o;21552:211::-;21669:86;21689:5;21719:23;;;21744:2;21748:5;21696:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21669:19;:86::i;:::-;21552:211;;;:::o;30971:462::-;31096:17;31123:5;31116:23;;;31148:4;31155:2;31116:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31096:62;;31185:6;31173:9;:18;31169:257;;;31224:1;31212:9;:13;31208:86;;;31246:32;31272:2;31276:1;31253:5;31246:25;;;;:32;;;;;:::i;:::-;31208:86;31308:106;31334:2;31346:66;31315:5;31308:25;;;;:106;;;;;:::i;:::-;31169:257;30971:462;;;;:::o;31790:273::-;31894:7;29526:42;31918:22;;:5;:22;;;31914:142;;;31965:3;:11;;;31958:18;;;;31914:142;32023:5;32016:23;;;32040:3;32016:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32009:35;;31790:273;;;;;:::o;3614:98::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;4013:::-;4071:7;4102:1;4098;:5;;;;:::i;:::-;4091:12;;4013:98;;;;:::o;31441:341::-;31585:1;31576:6;:10;31572:203;;;29526:42;31607:22;;:5;:22;;;31603:161;;;31650:2;:11;;:19;31662:6;31650:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31603:161;;;31710:38;31737:2;31741:6;31717:5;31710:26;;;;:38;;;;;:::i;:::-;31603:161;31572:203;31441:341;;;:::o;28737:191::-;28811:16;28830:6;;;;;;;;;;;28811:25;;28856:8;28847:6;;:17;;;;;;;;;;;;;;;;;;28911:8;28880:40;;28901:8;28880:40;;;;;;;;;;;;28737:191;;:::o;26021:98::-;26074:7;26101:10;26094:17;;26021:98;:::o;24619:716::-;25043:23;25069:69;25097:4;25069:69;;;;;;;;;;;;;;;;;25077:5;25069:27;;;;:69;;;;;:::i;:::-;25043:95;;25173:1;25153:10;:17;:21;25149:179;;;25250:10;25239:30;;;;;;;;;;;;:::i;:::-;25231:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25149:179;24619:716;;;:::o;22288:616::-;22661:1;22652:5;:10;22651:62;;;;22711:1;22668:5;:15;;;22692:4;22699:7;22668:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;22651:62;22629:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;22806:90;22826:5;22856:22;;;22880:7;22889:5;22833:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22806:19;:90::i;:::-;22288:616;;;:::o;11019:229::-;11156:12;11188:52;11210:6;11218:4;11224:1;11227:12;11188:21;:52::i;:::-;11181:59;;11019:229;;;;;:::o;12139:510::-;12309:12;12367:5;12342:21;:30;;12334:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;12434:18;12445:6;12434:10;:18::i;:::-;12426:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;12500:12;12514:23;12541:6;:11;;12560:5;12567:4;12541:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12499:73;;;;12590:51;12607:7;12616:10;12628:12;12590:16;:51::i;:::-;12583:58;;;;12139:510;;;;;;:::o;8274:326::-;8334:4;8591:1;8569:7;:19;;;:23;8562:30;;8274:326;;;:::o;14825:762::-;14975:12;15004:7;15000:580;;;15035:10;15028:17;;;;15000:580;15169:1;15149:10;:17;:21;15145:424;;;15397:10;15391:17;15458:15;15445:10;15441:2;15437:19;15430:44;15345:148;15540:12;15533:20;;;;;;;;;;;:::i;:::-;;;;;;;;14825:762;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:155::-;555:5;593:6;580:20;571:29;;609:41;644:5;609:41;:::i;:::-;561:95;;;;:::o;662:137::-;716:5;747:6;741:13;732:22;;763:30;787:5;763:30;:::i;:::-;722:77;;;;:::o;818:271::-;873:5;922:3;915:4;907:6;903:17;899:27;889:2;;940:1;937;930:12;889:2;980:6;967:20;1005:78;1079:3;1071:6;1064:4;1056:6;1052:17;1005:78;:::i;:::-;996:87;;879:210;;;;;:::o;1095:139::-;1141:5;1179:6;1166:20;1157:29;;1195:33;1222:5;1195:33;:::i;:::-;1147:87;;;;:::o;1240:143::-;1297:5;1328:6;1322:13;1313:22;;1344:33;1371:5;1344:33;:::i;:::-;1303:80;;;;:::o;1389:262::-;1448:6;1497:2;1485:9;1476:7;1472:23;1468:32;1465:2;;;1513:1;1510;1503:12;1465:2;1556:1;1581:53;1626:7;1617:6;1606:9;1602:22;1581:53;:::i;:::-;1571:63;;1527:117;1455:196;;;;:::o;1657:423::-;1733:6;1741;1790:2;1778:9;1769:7;1765:23;1761:32;1758:2;;;1806:1;1803;1796:12;1758:2;1849:1;1874:61;1927:7;1918:6;1907:9;1903:22;1874:61;:::i;:::-;1864:71;;1820:125;1984:2;2010:53;2055:7;2046:6;2035:9;2031:22;2010:53;:::i;:::-;2000:63;;1955:118;1748:332;;;;;:::o;2086:955::-;2190:6;2198;2206;2214;2222;2271:3;2259:9;2250:7;2246:23;2242:33;2239:2;;;2288:1;2285;2278:12;2239:2;2331:1;2356:53;2401:7;2392:6;2381:9;2377:22;2356:53;:::i;:::-;2346:63;;2302:117;2458:2;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2429:118;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2714:2;2740:53;2785:7;2776:6;2765:9;2761:22;2740:53;:::i;:::-;2730:63;;2685:118;2870:3;2859:9;2855:19;2842:33;2902:18;2894:6;2891:30;2888:2;;;2934:1;2931;2924:12;2888:2;2962:62;3016:7;3007:6;2996:9;2992:22;2962:62;:::i;:::-;2952:72;;2813:221;2229:812;;;;;;;;:::o;3047:407::-;3115:6;3123;3172:2;3160:9;3151:7;3147:23;3143:32;3140:2;;;3188:1;3185;3178:12;3140:2;3231:1;3256:53;3301:7;3292:6;3281:9;3277:22;3256:53;:::i;:::-;3246:63;;3202:117;3358:2;3384:53;3429:7;3420:6;3409:9;3405:22;3384:53;:::i;:::-;3374:63;;3329:118;3130:324;;;;;:::o;3460:278::-;3527:6;3576:2;3564:9;3555:7;3551:23;3547:32;3544:2;;;3592:1;3589;3582:12;3544:2;3635:1;3660:61;3713:7;3704:6;3693:9;3689:22;3660:61;:::i;:::-;3650:71;;3606:125;3534:204;;;;:::o;3744:284::-;3814:6;3863:2;3851:9;3842:7;3838:23;3834:32;3831:2;;;3879:1;3876;3869:12;3831:2;3922:1;3947:64;4003:7;3994:6;3983:9;3979:22;3947:64;:::i;:::-;3937:74;;3893:128;3821:207;;;;:::o;4034:142::-;4137:32;4163:5;4137:32;:::i;:::-;4132:3;4125:45;4115:61;;:::o;4182:118::-;4269:24;4287:5;4269:24;:::i;:::-;4264:3;4257:37;4247:53;;:::o;4306:109::-;4387:21;4402:5;4387:21;:::i;:::-;4382:3;4375:34;4365:50;;:::o;4421:373::-;4525:3;4553:38;4585:5;4553:38;:::i;:::-;4607:88;4688:6;4683:3;4607:88;:::i;:::-;4600:95;;4704:52;4749:6;4744:3;4737:4;4730:5;4726:16;4704:52;:::i;:::-;4781:6;4776:3;4772:16;4765:23;;4529:265;;;;;:::o;4800:364::-;4888:3;4916:39;4949:5;4916:39;:::i;:::-;4971:71;5035:6;5030:3;4971:71;:::i;:::-;4964:78;;5051:52;5096:6;5091:3;5084:4;5077:5;5073:16;5051:52;:::i;:::-;5128:29;5150:6;5128:29;:::i;:::-;5123:3;5119:39;5112:46;;4892:272;;;;;:::o;5170:366::-;5312:3;5333:67;5397:2;5392:3;5333:67;:::i;:::-;5326:74;;5409:93;5498:3;5409:93;:::i;:::-;5527:2;5522:3;5518:12;5511:19;;5316:220;;;:::o;5542:366::-;5684:3;5705:67;5769:2;5764:3;5705:67;:::i;:::-;5698:74;;5781:93;5870:3;5781:93;:::i;:::-;5899:2;5894:3;5890:12;5883:19;;5688:220;;;:::o;5914:366::-;6056:3;6077:67;6141:2;6136:3;6077:67;:::i;:::-;6070:74;;6153:93;6242:3;6153:93;:::i;:::-;6271:2;6266:3;6262:12;6255:19;;6060:220;;;:::o;6286:366::-;6428:3;6449:67;6513:2;6508:3;6449:67;:::i;:::-;6442:74;;6525:93;6614:3;6525:93;:::i;:::-;6643:2;6638:3;6634:12;6627:19;;6432:220;;;:::o;6658:366::-;6800:3;6821:67;6885:2;6880:3;6821:67;:::i;:::-;6814:74;;6897:93;6986:3;6897:93;:::i;:::-;7015:2;7010:3;7006:12;6999:19;;6804:220;;;:::o;7030:366::-;7172:3;7193:67;7257:2;7252:3;7193:67;:::i;:::-;7186:74;;7269:93;7358:3;7269:93;:::i;:::-;7387:2;7382:3;7378:12;7371:19;;7176:220;;;:::o;7402:366::-;7544:3;7565:67;7629:2;7624:3;7565:67;:::i;:::-;7558:74;;7641:93;7730:3;7641:93;:::i;:::-;7759:2;7754:3;7750:12;7743:19;;7548:220;;;:::o;7774:366::-;7916:3;7937:67;8001:2;7996:3;7937:67;:::i;:::-;7930:74;;8013:93;8102:3;8013:93;:::i;:::-;8131:2;8126:3;8122:12;8115:19;;7920:220;;;:::o;8146:118::-;8233:24;8251:5;8233:24;:::i;:::-;8228:3;8221:37;8211:53;;:::o;8270:271::-;8400:3;8422:93;8511:3;8502:6;8422:93;:::i;:::-;8415:100;;8532:3;8525:10;;8404:137;;;;:::o;8547:222::-;8640:4;8678:2;8667:9;8663:18;8655:26;;8691:71;8759:1;8748:9;8744:17;8735:6;8691:71;:::i;:::-;8645:124;;;;:::o;8775:254::-;8884:4;8922:2;8911:9;8907:18;8899:26;;8935:87;9019:1;9008:9;9004:17;8995:6;8935:87;:::i;:::-;8889:140;;;;:::o;9035:332::-;9156:4;9194:2;9183:9;9179:18;9171:26;;9207:71;9275:1;9264:9;9260:17;9251:6;9207:71;:::i;:::-;9288:72;9356:2;9345:9;9341:18;9332:6;9288:72;:::i;:::-;9161:206;;;;;:::o;9373:442::-;9522:4;9560:2;9549:9;9545:18;9537:26;;9573:71;9641:1;9630:9;9626:17;9617:6;9573:71;:::i;:::-;9654:72;9722:2;9711:9;9707:18;9698:6;9654:72;:::i;:::-;9736;9804:2;9793:9;9789:18;9780:6;9736:72;:::i;:::-;9527:288;;;;;;:::o;9821:332::-;9942:4;9980:2;9969:9;9965:18;9957:26;;9993:71;10061:1;10050:9;10046:17;10037:6;9993:71;:::i;:::-;10074:72;10142:2;10131:9;10127:18;10118:6;10074:72;:::i;:::-;9947:206;;;;;:::o;10159:210::-;10246:4;10284:2;10273:9;10269:18;10261:26;;10297:65;10359:1;10348:9;10344:17;10335:6;10297:65;:::i;:::-;10251:118;;;;:::o;10375:313::-;10488:4;10526:2;10515:9;10511:18;10503:26;;10575:9;10569:4;10565:20;10561:1;10550:9;10546:17;10539:47;10603:78;10676:4;10667:6;10603:78;:::i;:::-;10595:86;;10493:195;;;;:::o;10694:419::-;10860:4;10898:2;10887:9;10883:18;10875:26;;10947:9;10941:4;10937:20;10933:1;10922:9;10918:17;10911:47;10975:131;11101:4;10975:131;:::i;:::-;10967:139;;10865:248;;;:::o;11119:419::-;11285:4;11323:2;11312:9;11308:18;11300:26;;11372:9;11366:4;11362:20;11358:1;11347:9;11343:17;11336:47;11400:131;11526:4;11400:131;:::i;:::-;11392:139;;11290:248;;;:::o;11544:419::-;11710:4;11748:2;11737:9;11733:18;11725:26;;11797:9;11791:4;11787:20;11783:1;11772:9;11768:17;11761:47;11825:131;11951:4;11825:131;:::i;:::-;11817:139;;11715:248;;;:::o;11969:419::-;12135:4;12173:2;12162:9;12158:18;12150:26;;12222:9;12216:4;12212:20;12208:1;12197:9;12193:17;12186:47;12250:131;12376:4;12250:131;:::i;:::-;12242:139;;12140:248;;;:::o;12394:419::-;12560:4;12598:2;12587:9;12583:18;12575:26;;12647:9;12641:4;12637:20;12633:1;12622:9;12618:17;12611:47;12675:131;12801:4;12675:131;:::i;:::-;12667:139;;12565:248;;;:::o;12819:419::-;12985:4;13023:2;13012:9;13008:18;13000:26;;13072:9;13066:4;13062:20;13058:1;13047:9;13043:17;13036:47;13100:131;13226:4;13100:131;:::i;:::-;13092:139;;12990:248;;;:::o;13244:419::-;13410:4;13448:2;13437:9;13433:18;13425:26;;13497:9;13491:4;13487:20;13483:1;13472:9;13468:17;13461:47;13525:131;13651:4;13525:131;:::i;:::-;13517:139;;13415:248;;;:::o;13669:419::-;13835:4;13873:2;13862:9;13858:18;13850:26;;13922:9;13916:4;13912:20;13908:1;13897:9;13893:17;13886:47;13950:131;14076:4;13950:131;:::i;:::-;13942:139;;13840:248;;;:::o;14094:129::-;14128:6;14155:20;;:::i;:::-;14145:30;;14184:33;14212:4;14204:6;14184:33;:::i;:::-;14135:88;;;:::o;14229:75::-;14262:6;14295:2;14289:9;14279:19;;14269:35;:::o;14310:307::-;14371:4;14461:18;14453:6;14450:30;14447:2;;;14483:18;;:::i;:::-;14447:2;14521:29;14543:6;14521:29;:::i;:::-;14513:37;;14605:4;14599;14595:15;14587:23;;14376:241;;;:::o;14623:98::-;14674:6;14708:5;14702:12;14692:22;;14681:40;;;:::o;14727:99::-;14779:6;14813:5;14807:12;14797:22;;14786:40;;;:::o;14832:147::-;14933:11;14970:3;14955:18;;14945:34;;;;:::o;14985:169::-;15069:11;15103:6;15098:3;15091:19;15143:4;15138:3;15134:14;15119:29;;15081:73;;;;:::o;15160:185::-;15200:1;15217:20;15235:1;15217:20;:::i;:::-;15212:25;;15251:20;15269:1;15251:20;:::i;:::-;15246:25;;15290:1;15280:2;;15295:18;;:::i;:::-;15280:2;15337:1;15334;15330:9;15325:14;;15202:143;;;;:::o;15351:348::-;15391:7;15414:20;15432:1;15414:20;:::i;:::-;15409:25;;15448:20;15466:1;15448:20;:::i;:::-;15443:25;;15636:1;15568:66;15564:74;15561:1;15558:81;15553:1;15546:9;15539:17;15535:105;15532:2;;;15643:18;;:::i;:::-;15532:2;15691:1;15688;15684:9;15673:20;;15399:300;;;;:::o;15705:96::-;15742:7;15771:24;15789:5;15771:24;:::i;:::-;15760:35;;15750:51;;;:::o;15807:104::-;15852:7;15881:24;15899:5;15881:24;:::i;:::-;15870:35;;15860:51;;;:::o;15917:90::-;15951:7;15994:5;15987:13;15980:21;15969:32;;15959:48;;;:::o;16013:126::-;16050:7;16090:42;16083:5;16079:54;16068:65;;16058:81;;;:::o;16145:77::-;16182:7;16211:5;16200:16;;16190:32;;;:::o;16228:154::-;16312:6;16307:3;16302;16289:30;16374:1;16365:6;16360:3;16356:16;16349:27;16279:103;;;:::o;16388:307::-;16456:1;16466:113;16480:6;16477:1;16474:13;16466:113;;;16565:1;16560:3;16556:11;16550:18;16546:1;16541:3;16537:11;16530:39;16502:2;16499:1;16495:10;16490:15;;16466:113;;;16597:6;16594:1;16591:13;16588:2;;;16677:1;16668:6;16663:3;16659:16;16652:27;16588:2;16437:258;;;;:::o;16701:281::-;16784:27;16806:4;16784:27;:::i;:::-;16776:6;16772:40;16914:6;16902:10;16899:22;16878:18;16866:10;16863:34;16860:62;16857:2;;;16925:18;;:::i;:::-;16857:2;16965:10;16961:2;16954:22;16744:238;;;:::o;16988:180::-;17036:77;17033:1;17026:88;17133:4;17130:1;17123:15;17157:4;17154:1;17147:15;17174:180;17222:77;17219:1;17212:88;17319:4;17316:1;17309:15;17343:4;17340:1;17333:15;17360:180;17408:77;17405:1;17398:88;17505:4;17502:1;17495:15;17529:4;17526:1;17519:15;17546:102;17587:6;17638:2;17634:7;17629:2;17622:5;17618:14;17614:28;17604:38;;17594:54;;;:::o;17654:161::-;17794:13;17790:1;17782:6;17778:14;17771:37;17760:55;:::o;17821:225::-;17961:34;17957:1;17949:6;17945:14;17938:58;18030:8;18025:2;18017:6;18013:15;18006:33;17927:119;:::o;18052:172::-;18192:24;18188:1;18180:6;18176:14;18169:48;18158:66;:::o;18230:225::-;18370:34;18366:1;18358:6;18354:14;18347:58;18439:8;18434:2;18426:6;18422:15;18415:33;18336:119;:::o;18461:182::-;18601:34;18597:1;18589:6;18585:14;18578:58;18567:76;:::o;18649:179::-;18789:31;18785:1;18777:6;18773:14;18766:55;18755:73;:::o;18834:229::-;18974:34;18970:1;18962:6;18958:14;18951:58;19043:12;19038:2;19030:6;19026:15;19019:37;18940:123;:::o;19069:241::-;19209:34;19205:1;19197:6;19193:14;19186:58;19278:24;19273:2;19265:6;19261:15;19254:49;19175:135;:::o;19316:122::-;19389:24;19407:5;19389:24;:::i;:::-;19382:5;19379:35;19369:2;;19428:1;19425;19418:12;19369:2;19359:79;:::o;19444:138::-;19525:32;19551:5;19525:32;:::i;:::-;19518:5;19515:43;19505:2;;19572:1;19569;19562:12;19505:2;19495:87;:::o;19588:116::-;19658:21;19673:5;19658:21;:::i;:::-;19651:5;19648:32;19638:2;;19694:1;19691;19684:12;19638:2;19628:76;:::o;19710:122::-;19783:24;19801:5;19783:24;:::i;:::-;19776:5;19773:35;19763:2;;19822:1;19819;19812:12;19763:2;19753:79;:::o
Swarm Source
ipfs://559068d3cbc456d2ef307ad9cf4584ff7a404b62999e93f0343ad1c9cea36711
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.