BscScan - Sponsored slots available. Book your slot here!
Overview
BNB Balance
0.019008675965772485 BNB
BNB Value
$13.23 (@ $696.18/BNB)Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,082,267 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 45325061 | 1 min ago | IN | 0 BNB | 0.00007587 | ||||
Claim | 45325054 | 2 mins ago | IN | 0 BNB | 0.00007584 | ||||
Claim | 45325040 | 2 mins ago | IN | 0 BNB | 0.00009294 | ||||
Claim | 45324979 | 5 mins ago | IN | 0 BNB | 0.00007584 | ||||
Claim | 45324964 | 6 mins ago | IN | 0 BNB | 0.00007587 | ||||
Claim | 45324962 | 6 mins ago | IN | 0 BNB | 0.00009295 | ||||
Claim | 45324950 | 7 mins ago | IN | 0 BNB | 0.00007586 | ||||
Claim | 45324908 | 9 mins ago | IN | 0 BNB | 0.00007583 | ||||
Claim | 45324864 | 11 mins ago | IN | 0 BNB | 0.00007584 | ||||
Claim | 45324810 | 14 mins ago | IN | 0 BNB | 0.00007585 | ||||
Claim | 45324706 | 19 mins ago | IN | 0 BNB | 0.00007585 | ||||
Claim | 45324685 | 20 mins ago | IN | 0 BNB | 0.00007587 | ||||
Claim | 45324666 | 21 mins ago | IN | 0 BNB | 0.00009297 | ||||
Claim | 45324641 | 22 mins ago | IN | 0 BNB | 0.00007587 | ||||
Claim | 45324641 | 22 mins ago | IN | 0 BNB | 0.00007586 | ||||
Claim | 45324544 | 27 mins ago | IN | 0 BNB | 0.00007585 | ||||
Claim | 45324519 | 28 mins ago | IN | 0 BNB | 0.00007587 | ||||
Claim | 45324457 | 31 mins ago | IN | 0 BNB | 0.00009297 | ||||
Claim | 45324440 | 32 mins ago | IN | 0 BNB | 0.00009295 | ||||
Claim | 45324417 | 33 mins ago | IN | 0 BNB | 0.00007585 | ||||
Claim | 45324325 | 38 mins ago | IN | 0 BNB | 0.00007587 | ||||
Claim | 45324325 | 38 mins ago | IN | 0 BNB | 0.00009293 | ||||
Claim | 45324302 | 39 mins ago | IN | 0 BNB | 0.00007584 | ||||
Claim | 45324291 | 40 mins ago | IN | 0 BNB | 0.00009297 | ||||
Claim | 45324284 | 40 mins ago | IN | 0 BNB | 0.00007585 |
Loading...
Loading
Contract Name:
JasanWellness
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2023-01-04 */ pragma solidity 0.8.16; // SPDX-License-Identifier: Unlicensed // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) /** * @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); } } } } interface IBEP20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/token/BEP20/extensions/draft-IBEP20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/BEP20/extensions/draft-IBEP20Permit.sol) /** * @dev Interface of the BEP20 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 BEP20 allowance (see {IBEP20-allowance}) by * presenting a message signed by the account. By not relying on {IBEP20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IBEP20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IBEP20-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); } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_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) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @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] = _HEX_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); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/ECDSA.sol) /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File: @openzeppelin/contracts/token/BEP20/utils/SafeBEP20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/BEP20/utils/SafeBEP20.sol) /** * @title SafeBEP20 * @dev Wrappers around BEP20 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 SafeBEP20 for IBEP20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeBEP20 { using Address for address; function safeTransfer( IBEP20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IBEP20 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 * {IBEP20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IBEP20 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), "SafeBEP20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IBEP20 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( IBEP20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeBEP20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IBEP20Permit 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, "SafeBEP20: 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(IBEP20 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, "SafeBEP20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeBEP20: BEP20 operation did not succeed"); } } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) /** * @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()); } } contract JasanWellness is Ownable, Pausable { using Address for address payable; using SafeBEP20 for IBEP20; struct userDetails { uint amount; address token; } address public signer; IBEP20 public token; address public adminWallet; uint256 public expiry = 300; event SetSigner(address indexed user,address indexed signer); event AddToken(address indexed user,uint indexed amount,address indexed token,uint time); event Deposit(address indexed user,uint indexed amount,address indexed token,uint time); event Claim(address indexed user,address indexed token,uint indexed amount,uint time); event Withdraw(address indexed user,address indexed token,uint indexed amount,uint time); event Fallback(address indexed user,uint indexed amount,uint time); event Retrieve(address indexed token,address indexed user,uint indexed amount,uint time); mapping(bytes32 => bool) private msgHash; mapping(address => userDetails) public users; constructor (address _signer,address _token, address _adminWallet){ signer = _signer; token = IBEP20(_token); adminWallet = _adminWallet; } function setExpiry(uint _newExpiry) external onlyOwner{ require(_newExpiry > 0,"Invalid Expiry"); expiry = _newExpiry; } function addToken(uint _amount) external onlyOwner { require(_amount > 0,"Invalid amount"); token.safeTransferFrom(msg.sender,address(this),_amount); emit AddToken(msg.sender,_amount,address(token),block.timestamp); } receive() external payable { emit Fallback(msg.sender,msg.value,block.timestamp); } function pause() external onlyOwner{ _pause(); } function unpause() external onlyOwner{ _unpause(); } function deposit(uint _amount) external whenNotPaused { require (_amount > 0,"Invalid Amount"); token.safeTransferFrom(msg.sender,adminWallet,_amount); users[msg.sender].token = address(token); users[msg.sender].amount += _amount; emit Deposit(msg.sender,_amount,address(token),block.timestamp); } function claim(address _user,uint amount,uint8 v, bytes32 r, bytes32 s,uint deadline) public { require(block.timestamp <= deadline && deadline <= block.timestamp + expiry, "JasanWellness: Expired deadline"); bytes32 messageHash = toSigEthMsg(_user,amount,deadline); require(!msgHash[messageHash], "claim: signature duplicate"); address src = verifySignature(messageHash,v,r,s); require(signer == src, " claim: unauthorized"); token.safeTransfer(_user,amount); msgHash[messageHash] = true; emit Claim(_user,address(token),amount,block.timestamp); } function verifySignature(bytes32 _messageHash, uint8 v, bytes32 r, bytes32 s) public pure returns (address signatureAddress){ bytes32 hash = ECDSA.toEthSignedMessageHash(_messageHash); signatureAddress = ECDSA.recover(hash, v, r, s); } function toSigEthMsg(address _receiver ,uint amount,uint time) public pure returns(bytes32 messageHash) { messageHash = keccak256(abi.encodePacked(_receiver,amount,time)); } function withdraw(address user,uint amount) external { require(signer==msg.sender,"Only Access Signer Wallet"); token.safeTransfer(user,amount); emit Withdraw(user,address(token),amount,block.timestamp); } function setSigner(address _signer) external onlyOwner{ require(_signer != address(0), "Invalid Signer Address"); signer = _signer; emit SetSigner(msg.sender, _signer); } function checkBalance() external view returns(uint){ return address(this).balance; } function retrieve(address _token,address to,uint amount) external onlyOwner{ require(to != address(0) && amount > 0 ,"JasanWellness:Invalid Address || amount"); if(_token == address(0)){ require(address(this).balance >=amount, "JasanWellness:Invalid Amount"); require(payable(to).send(amount),"JasanWellness : Transaction failed"); } else{ require(IBEP20(_token).balanceOf(address(this)) >=amount,"JasanWellness:Invalid Amount"); IBEP20(_token).safeTransfer(to,amount); } emit Retrieve(_token,to,amount,block.timestamp); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_adminWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"AddToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Fallback","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":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Retrieve","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"SetSigner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expiry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"retrieve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newExpiry","type":"uint256"}],"name":"setExpiry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"toSigEthMsg","outputs":[{"internalType":"bytes32","name":"messageHash","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_messageHash","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"verifySignature","outputs":[{"internalType":"address","name":"signatureAddress","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405261012c6004553480156200001757600080fd5b5060405162001a0f38038062001a0f8339810160408190526200003a91620000e8565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b19169055600180546001600160a01b039485166001600160a01b03199182161790915560028054938516938216939093179092556003805491909316911617905562000132565b80516001600160a01b0381168114620000e357600080fd5b919050565b600080600060608486031215620000fe57600080fd5b6200010984620000cb565b92506200011960208501620000cb565b91506200012960408501620000cb565b90509250925092565b6118cd80620001426000396000f3fe60806040526004361061012e5760003560e01c80638456cb59116100ab578063c1b17eda1161006f578063c1b17eda1461039f578063c71daccb146103bf578063e184c9be146103d2578063f2fde38b146103e8578063f3fef3a314610408578063fc0c546a1461042857600080fd5b80638456cb59146102d25780638da5cb5b146102e75780639695786914610305578063a87430ba14610325578063b6b55f251461037f57600080fd5b80633f4ba83a116100f25780633f4ba83a146102305780635809bb39146102455780635c975abb146102735780636c19e7831461029d578063715018a6146102bd57600080fd5b806301cceb3814610171578063179d375c14610193578063238ac933146101b357806328c4e24c146101f057806336b19cd71461021057600080fd5b3661016c57604051428152349033907f5115e4a7d07906aaa4680b7f5e3c5b1c010378ab8ebfd649f4b6969a641c93269060200160405180910390a3005b600080fd5b34801561017d57600080fd5b5061019161018c3660046115ea565b610448565b005b34801561019f57600080fd5b506101916101ae3660046115ea565b6104c1565b3480156101bf57600080fd5b506001546101d3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101fc57600080fd5b5061019161020b36600461161f565b61058e565b34801561021c57600080fd5b506003546101d3906001600160a01b031681565b34801561023c57600080fd5b5061019161082a565b34801561025157600080fd5b5061026561026036600461165b565b61085e565b6040519081526020016101e7565b34801561027f57600080fd5b50600054600160a01b900460ff1660405190151581526020016101e7565b3480156102a957600080fd5b506101916102b836600461168e565b6108ad565b3480156102c957600080fd5b50610191610972565b3480156102de57600080fd5b506101916109e6565b3480156102f357600080fd5b506000546001600160a01b03166101d3565b34801561031157600080fd5b506101d36103203660046116ba565b610a18565b34801561033157600080fd5b5061036261034036600461168e565b600660205260009081526040902080546001909101546001600160a01b031682565b604080519283526001600160a01b039091166020830152016101e7565b34801561038b57600080fd5b5061019161039a3660046115ea565b610a8a565b3480156103ab57600080fd5b506101916103ba3660046116f5565b610b7f565b3480156103cb57600080fd5b5047610265565b3480156103de57600080fd5b5061026560045481565b3480156103f457600080fd5b5061019161040336600461168e565b610d45565b34801561041457600080fd5b5061019161042336600461174d565b610e2f565b34801561043457600080fd5b506002546101d3906001600160a01b031681565b6000546001600160a01b0316331461047b5760405162461bcd60e51b815260040161047290611777565b60405180910390fd5b600081116104bc5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642045787069727960901b6044820152606401610472565b600455565b6000546001600160a01b031633146104eb5760405162461bcd60e51b815260040161047290611777565b6000811161052c5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606401610472565b600254610544906001600160a01b0316333084610eec565b6002546040514281526001600160a01b0390911690829033907faa5691e674e13a259a9c879e137a46059eaf8a8e076357e5d0e0e422c7079333906020015b60405180910390a450565b6000546001600160a01b031633146105b85760405162461bcd60e51b815260040161047290611777565b6001600160a01b038216158015906105d05750600081115b61062c5760405162461bcd60e51b815260206004820152602760248201527f4a6173616e57656c6c6e6573733a496e76616c69642041646472657373207c7c60448201526608185b5bdd5b9d60ca1b6064820152608401610472565b6001600160a01b03831661070b578047101561068a5760405162461bcd60e51b815260206004820152601c60248201527f4a6173616e57656c6c6e6573733a496e76616c696420416d6f756e74000000006044820152606401610472565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050506107065760405162461bcd60e51b815260206004820152602260248201527f4a6173616e57656c6c6e657373203a205472616e73616374696f6e206661696c604482015261195960f21b6064820152608401610472565b6107d7565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a0823190602401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077591906117ac565b10156107c35760405162461bcd60e51b815260206004820152601c60248201527f4a6173616e57656c6c6e6573733a496e76616c696420416d6f756e74000000006044820152606401610472565b6107d76001600160a01b0384168383610f5d565b80826001600160a01b0316846001600160a01b03167f9d60f0403eac0553cfce77880fc61018e4c1138b922228fef15350071162f1314260405161081d91815260200190565b60405180910390a4505050565b6000546001600160a01b031633146108545760405162461bcd60e51b815260040161047290611777565b61085c610f92565b565b6040516bffffffffffffffffffffffff19606085901b16602082015260348101839052605481018290526000906074016040516020818303038152906040528051906020012090509392505050565b6000546001600160a01b031633146108d75760405162461bcd60e51b815260040161047290611777565b6001600160a01b0381166109265760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964205369676e6572204164647265737360501b6044820152606401610472565b600180546001600160a01b0319166001600160a01b03831690811790915560405133907f3271c8694494a7cc76cd185c743e9ee6b515a043ea98c0db7f5ca112f694add490600090a350565b6000546001600160a01b0316331461099c5760405162461bcd60e51b815260040161047290611777565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610a105760405162461bcd60e51b815260040161047290611777565b61085c610fe7565b600080610a72866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050610a808186868661102a565b9695505050505050565b610a92611052565b60008111610ad35760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610472565b600354600254610af2916001600160a01b039182169133911684610eec565b6002543360009081526006602052604081206001810180546001600160a01b0319166001600160a01b0390941693909317909255815483929190610b379084906117c5565b90915550506002546040514281526001600160a01b0390911690829033907fd2f8022f659fd9c8c558f30c00fd5ee7038f7cb56da45095c3e0e7d48b3e0c4b90602001610583565b804211158015610b9b5750600454610b9790426117c5565b8111155b610be75760405162461bcd60e51b815260206004820152601f60248201527f4a6173616e57656c6c6e6573733a204578706972656420646561646c696e65006044820152606401610472565b6000610bf487878461085e565b60008181526005602052604090205490915060ff1615610c565760405162461bcd60e51b815260206004820152601a60248201527f636c61696d3a207369676e6174757265206475706c69636174650000000000006044820152606401610472565b6000610c6482878787610a18565b6001549091506001600160a01b03808316911614610cbb5760405162461bcd60e51b81526020600482015260146024820152730818db185a5b4e881d5b985d5d1a1bdc9a5e995960621b6044820152606401610472565b600254610cd2906001600160a01b03168989610f5d565b60008281526005602052604090819020805460ff19166001179055600254905188916001600160a01b0390811691908b16907f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e9464590610d339042815260200190565b60405180910390a45050505050505050565b6000546001600160a01b03163314610d6f5760405162461bcd60e51b815260040161047290611777565b6001600160a01b038116610dd45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610472565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610e895760405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920416363657373205369676e65722057616c6c6574000000000000006044820152606401610472565b600254610ea0906001600160a01b03168383610f5d565b60025460405142815282916001600160a01b0390811691908516907ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679060200160405180910390a45050565b6040516001600160a01b0380851660248301528316604482015260648101829052610f579085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261109f565b50505050565b6040516001600160a01b038316602482015260448101829052610f8d90849063a9059cbb60e01b90606401610f20565b505050565b610f9a611171565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610fef611052565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610fca3390565b600080600061103b878787876111c1565b91509150611048816112ae565b5095945050505050565b600054600160a01b900460ff161561085c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610472565b60006110f4826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114679092919063ffffffff16565b805190915015610f8d578080602001905181019061111291906117ec565b610f8d5760405162461bcd60e51b815260206004820152602a60248201527f5361666542455032303a204245503230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610472565b600054600160a01b900460ff1661085c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610472565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156111f857506000905060036112a5565b8460ff16601b1415801561121057508460ff16601c14155b1561122157506000905060046112a5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611275573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661129e576000600192509250506112a5565b9150600090505b94509492505050565b60008160048111156112c2576112c261180e565b036112ca5750565b60018160048111156112de576112de61180e565b0361132b5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610472565b600281600481111561133f5761133f61180e565b0361138c5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610472565b60038160048111156113a0576113a061180e565b036113f85760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610472565b600481600481111561140c5761140c61180e565b036114645760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610472565b50565b60606114768484600085611480565b90505b9392505050565b6060824710156114e15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610472565b6001600160a01b0385163b6115385760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610472565b600080866001600160a01b031685876040516115549190611848565b60006040518083038185875af1925050503d8060008114611591576040519150601f19603f3d011682016040523d82523d6000602084013e611596565b606091505b50915091506115a68282866115b1565b979650505050505050565b606083156115c0575081611479565b8251156115d05782518084602001fd5b8160405162461bcd60e51b81526004016104729190611864565b6000602082840312156115fc57600080fd5b5035919050565b80356001600160a01b038116811461161a57600080fd5b919050565b60008060006060848603121561163457600080fd5b61163d84611603565b925061164b60208501611603565b9150604084013590509250925092565b60008060006060848603121561167057600080fd5b61167984611603565b95602085013595506040909401359392505050565b6000602082840312156116a057600080fd5b61147982611603565b803560ff8116811461161a57600080fd5b600080600080608085870312156116d057600080fd5b843593506116e0602086016116a9565b93969395505050506040820135916060013590565b60008060008060008060c0878903121561170e57600080fd5b61171787611603565b95506020870135945061172c604088016116a9565b9350606087013592506080870135915060a087013590509295509295509295565b6000806040838503121561176057600080fd5b61176983611603565b946020939093013593505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156117be57600080fd5b5051919050565b808201808211156117e657634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156117fe57600080fd5b8151801515811461147957600080fd5b634e487b7160e01b600052602160045260246000fd5b60005b8381101561183f578181015183820152602001611827565b50506000910152565b6000825161185a818460208701611824565b9190910192915050565b6020815260008251806020840152611883816040850160208701611824565b601f01601f1916919091016040019291505056fea2646970667358221220c30abf461fbae6f89ad5413a9f7b8be8beddbc958d03ddf10fc7c94577744da264736f6c634300081000330000000000000000000000003a33969697a0d469554b7b08a30e38252c59a29f000000000000000000000000ab785054251db0fc44538f5deebe7507b748b6920000000000000000000000005936c8415c62c4b5c2515d7fa93d9a5881a2218d
Deployed Bytecode
0x60806040526004361061012e5760003560e01c80638456cb59116100ab578063c1b17eda1161006f578063c1b17eda1461039f578063c71daccb146103bf578063e184c9be146103d2578063f2fde38b146103e8578063f3fef3a314610408578063fc0c546a1461042857600080fd5b80638456cb59146102d25780638da5cb5b146102e75780639695786914610305578063a87430ba14610325578063b6b55f251461037f57600080fd5b80633f4ba83a116100f25780633f4ba83a146102305780635809bb39146102455780635c975abb146102735780636c19e7831461029d578063715018a6146102bd57600080fd5b806301cceb3814610171578063179d375c14610193578063238ac933146101b357806328c4e24c146101f057806336b19cd71461021057600080fd5b3661016c57604051428152349033907f5115e4a7d07906aaa4680b7f5e3c5b1c010378ab8ebfd649f4b6969a641c93269060200160405180910390a3005b600080fd5b34801561017d57600080fd5b5061019161018c3660046115ea565b610448565b005b34801561019f57600080fd5b506101916101ae3660046115ea565b6104c1565b3480156101bf57600080fd5b506001546101d3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101fc57600080fd5b5061019161020b36600461161f565b61058e565b34801561021c57600080fd5b506003546101d3906001600160a01b031681565b34801561023c57600080fd5b5061019161082a565b34801561025157600080fd5b5061026561026036600461165b565b61085e565b6040519081526020016101e7565b34801561027f57600080fd5b50600054600160a01b900460ff1660405190151581526020016101e7565b3480156102a957600080fd5b506101916102b836600461168e565b6108ad565b3480156102c957600080fd5b50610191610972565b3480156102de57600080fd5b506101916109e6565b3480156102f357600080fd5b506000546001600160a01b03166101d3565b34801561031157600080fd5b506101d36103203660046116ba565b610a18565b34801561033157600080fd5b5061036261034036600461168e565b600660205260009081526040902080546001909101546001600160a01b031682565b604080519283526001600160a01b039091166020830152016101e7565b34801561038b57600080fd5b5061019161039a3660046115ea565b610a8a565b3480156103ab57600080fd5b506101916103ba3660046116f5565b610b7f565b3480156103cb57600080fd5b5047610265565b3480156103de57600080fd5b5061026560045481565b3480156103f457600080fd5b5061019161040336600461168e565b610d45565b34801561041457600080fd5b5061019161042336600461174d565b610e2f565b34801561043457600080fd5b506002546101d3906001600160a01b031681565b6000546001600160a01b0316331461047b5760405162461bcd60e51b815260040161047290611777565b60405180910390fd5b600081116104bc5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642045787069727960901b6044820152606401610472565b600455565b6000546001600160a01b031633146104eb5760405162461bcd60e51b815260040161047290611777565b6000811161052c5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606401610472565b600254610544906001600160a01b0316333084610eec565b6002546040514281526001600160a01b0390911690829033907faa5691e674e13a259a9c879e137a46059eaf8a8e076357e5d0e0e422c7079333906020015b60405180910390a450565b6000546001600160a01b031633146105b85760405162461bcd60e51b815260040161047290611777565b6001600160a01b038216158015906105d05750600081115b61062c5760405162461bcd60e51b815260206004820152602760248201527f4a6173616e57656c6c6e6573733a496e76616c69642041646472657373207c7c60448201526608185b5bdd5b9d60ca1b6064820152608401610472565b6001600160a01b03831661070b578047101561068a5760405162461bcd60e51b815260206004820152601c60248201527f4a6173616e57656c6c6e6573733a496e76616c696420416d6f756e74000000006044820152606401610472565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050506107065760405162461bcd60e51b815260206004820152602260248201527f4a6173616e57656c6c6e657373203a205472616e73616374696f6e206661696c604482015261195960f21b6064820152608401610472565b6107d7565b6040516370a0823160e01b815230600482015281906001600160a01b038516906370a0823190602401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077591906117ac565b10156107c35760405162461bcd60e51b815260206004820152601c60248201527f4a6173616e57656c6c6e6573733a496e76616c696420416d6f756e74000000006044820152606401610472565b6107d76001600160a01b0384168383610f5d565b80826001600160a01b0316846001600160a01b03167f9d60f0403eac0553cfce77880fc61018e4c1138b922228fef15350071162f1314260405161081d91815260200190565b60405180910390a4505050565b6000546001600160a01b031633146108545760405162461bcd60e51b815260040161047290611777565b61085c610f92565b565b6040516bffffffffffffffffffffffff19606085901b16602082015260348101839052605481018290526000906074016040516020818303038152906040528051906020012090509392505050565b6000546001600160a01b031633146108d75760405162461bcd60e51b815260040161047290611777565b6001600160a01b0381166109265760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964205369676e6572204164647265737360501b6044820152606401610472565b600180546001600160a01b0319166001600160a01b03831690811790915560405133907f3271c8694494a7cc76cd185c743e9ee6b515a043ea98c0db7f5ca112f694add490600090a350565b6000546001600160a01b0316331461099c5760405162461bcd60e51b815260040161047290611777565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610a105760405162461bcd60e51b815260040161047290611777565b61085c610fe7565b600080610a72866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050610a808186868661102a565b9695505050505050565b610a92611052565b60008111610ad35760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610472565b600354600254610af2916001600160a01b039182169133911684610eec565b6002543360009081526006602052604081206001810180546001600160a01b0319166001600160a01b0390941693909317909255815483929190610b379084906117c5565b90915550506002546040514281526001600160a01b0390911690829033907fd2f8022f659fd9c8c558f30c00fd5ee7038f7cb56da45095c3e0e7d48b3e0c4b90602001610583565b804211158015610b9b5750600454610b9790426117c5565b8111155b610be75760405162461bcd60e51b815260206004820152601f60248201527f4a6173616e57656c6c6e6573733a204578706972656420646561646c696e65006044820152606401610472565b6000610bf487878461085e565b60008181526005602052604090205490915060ff1615610c565760405162461bcd60e51b815260206004820152601a60248201527f636c61696d3a207369676e6174757265206475706c69636174650000000000006044820152606401610472565b6000610c6482878787610a18565b6001549091506001600160a01b03808316911614610cbb5760405162461bcd60e51b81526020600482015260146024820152730818db185a5b4e881d5b985d5d1a1bdc9a5e995960621b6044820152606401610472565b600254610cd2906001600160a01b03168989610f5d565b60008281526005602052604090819020805460ff19166001179055600254905188916001600160a01b0390811691908b16907f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e9464590610d339042815260200190565b60405180910390a45050505050505050565b6000546001600160a01b03163314610d6f5760405162461bcd60e51b815260040161047290611777565b6001600160a01b038116610dd45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610472565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610e895760405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920416363657373205369676e65722057616c6c6574000000000000006044820152606401610472565b600254610ea0906001600160a01b03168383610f5d565b60025460405142815282916001600160a01b0390811691908516907ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679060200160405180910390a45050565b6040516001600160a01b0380851660248301528316604482015260648101829052610f579085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261109f565b50505050565b6040516001600160a01b038316602482015260448101829052610f8d90849063a9059cbb60e01b90606401610f20565b505050565b610f9a611171565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610fef611052565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610fca3390565b600080600061103b878787876111c1565b91509150611048816112ae565b5095945050505050565b600054600160a01b900460ff161561085c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610472565b60006110f4826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114679092919063ffffffff16565b805190915015610f8d578080602001905181019061111291906117ec565b610f8d5760405162461bcd60e51b815260206004820152602a60248201527f5361666542455032303a204245503230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610472565b600054600160a01b900460ff1661085c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610472565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156111f857506000905060036112a5565b8460ff16601b1415801561121057508460ff16601c14155b1561122157506000905060046112a5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611275573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661129e576000600192509250506112a5565b9150600090505b94509492505050565b60008160048111156112c2576112c261180e565b036112ca5750565b60018160048111156112de576112de61180e565b0361132b5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610472565b600281600481111561133f5761133f61180e565b0361138c5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610472565b60038160048111156113a0576113a061180e565b036113f85760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610472565b600481600481111561140c5761140c61180e565b036114645760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610472565b50565b60606114768484600085611480565b90505b9392505050565b6060824710156114e15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610472565b6001600160a01b0385163b6115385760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610472565b600080866001600160a01b031685876040516115549190611848565b60006040518083038185875af1925050503d8060008114611591576040519150601f19603f3d011682016040523d82523d6000602084013e611596565b606091505b50915091506115a68282866115b1565b979650505050505050565b606083156115c0575081611479565b8251156115d05782518084602001fd5b8160405162461bcd60e51b81526004016104729190611864565b6000602082840312156115fc57600080fd5b5035919050565b80356001600160a01b038116811461161a57600080fd5b919050565b60008060006060848603121561163457600080fd5b61163d84611603565b925061164b60208501611603565b9150604084013590509250925092565b60008060006060848603121561167057600080fd5b61167984611603565b95602085013595506040909401359392505050565b6000602082840312156116a057600080fd5b61147982611603565b803560ff8116811461161a57600080fd5b600080600080608085870312156116d057600080fd5b843593506116e0602086016116a9565b93969395505050506040820135916060013590565b60008060008060008060c0878903121561170e57600080fd5b61171787611603565b95506020870135945061172c604088016116a9565b9350606087013592506080870135915060a087013590509295509295509295565b6000806040838503121561176057600080fd5b61176983611603565b946020939093013593505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156117be57600080fd5b5051919050565b808201808211156117e657634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156117fe57600080fd5b8151801515811461147957600080fd5b634e487b7160e01b600052602160045260246000fd5b60005b8381101561183f578181015183820152602001611827565b50506000910152565b6000825161185a818460208701611824565b9190910192915050565b6020815260008251806020840152611883816040850160208701611824565b601f01601f1916919091016040019291505056fea2646970667358221220c30abf461fbae6f89ad5413a9f7b8be8beddbc958d03ddf10fc7c94577744da264736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003a33969697a0d469554b7b08a30e38252c59a29f000000000000000000000000ab785054251db0fc44538f5deebe7507b748b6920000000000000000000000005936c8415c62c4b5c2515d7fa93d9a5881a2218d
-----Decoded View---------------
Arg [0] : _signer (address): 0x3a33969697a0D469554b7B08a30E38252C59A29F
Arg [1] : _token (address): 0xaB785054251DB0fc44538F5DeeBE7507B748b692
Arg [2] : _adminWallet (address): 0x5936c8415C62C4B5C2515D7fa93d9a5881A2218d
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000003a33969697a0d469554b7b08a30e38252c59a29f
Arg [1] : 000000000000000000000000ab785054251db0fc44538f5deebe7507b748b692
Arg [2] : 0000000000000000000000005936c8415c62c4b5c2515d7fa93d9a5881a2218d
Deployed Bytecode Sourcemap
34625:4551:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36302:46;;36332:15;160:25:1;;36322:9:0;;36311:10;;36302:46;;148:2:1;133:18;36302:46:0;;;;;;;34625:4551;;;;;35851:143;;;;;;;;;;-1:-1:-1;35851:143:0;;;;;:::i;:::-;;:::i;:::-;;36002:249;;;;;;;;;;-1:-1:-1;36002:249:0;;;;;:::i;:::-;;:::i;34836:21::-;;;;;;;;;;-1:-1:-1;34836:21:0;;;;-1:-1:-1;;;;;34836:21:0;;;;;;-1:-1:-1;;;;;545:32:1;;;527:51;;515:2;500:18;34836:21:0;;;;;;;;38536:637;;;;;;;;;;-1:-1:-1;38536:637:0;;;;;:::i;:::-;;:::i;34890:26::-;;;;;;;;;;-1:-1:-1;34890:26:0;;;;-1:-1:-1;;;;;34890:26:0;;;36432:64;;;;;;;;;;;;;:::i;37768:202::-;;;;;;;;;;-1:-1:-1;37768:202:0;;;;;:::i;:::-;;:::i;:::-;;;160:25:1;;;148:2;133:18;37768:202:0;14:177:1;33637:86:0;;;;;;;;;;-1:-1:-1;33684:4:0;33708:7;-1:-1:-1;;;33708:7:0;;;;33637:86;;1774:14:1;;1767:22;1749:41;;1737:2;1722:18;33637:86:0;1609:187:1;38220:202:0;;;;;;;;;;-1:-1:-1;38220:202:0;;;;;:::i;:::-;;:::i;12693:148::-;;;;;;;;;;;;;:::i;36364:60::-;;;;;;;;;;;;;:::i;12042:87::-;;;;;;;;;;-1:-1:-1;12088:7:0;12115:6;-1:-1:-1;;;;;12115:6:0;12042:87;;37497:258;;;;;;;;;;-1:-1:-1;37497:258:0;;;;;:::i;:::-;;:::i;35619:44::-;;;;;;;;;;-1:-1:-1;35619:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35619:44:0;;;;;;;2719:25:1;;;-1:-1:-1;;;;;2780:32:1;;;2775:2;2760:18;;2753:60;2692:18;35619:44:0;2545:274:1;36504:347:0;;;;;;;;;;-1:-1:-1;36504:347:0;;;;;:::i;:::-;;:::i;36859:627::-;;;;;;;;;;-1:-1:-1;36859:627:0;;;;;:::i;:::-;;:::i;38430:98::-;;;;;;;;;;-1:-1:-1;38499:21:0;38430:98;;34923:27;;;;;;;;;;;;;;;;12996:244;;;;;;;;;;-1:-1:-1;12996:244:0;;;;;:::i;:::-;;:::i;37978:234::-;;;;;;;;;;-1:-1:-1;37978:234:0;;;;;:::i;:::-;;:::i;34864:19::-;;;;;;;;;;-1:-1:-1;34864:19:0;;;;-1:-1:-1;;;;;34864:19:0;;;35851:143;12088:7;12115:6;-1:-1:-1;;;;;12115:6:0;11275:10;12262:23;12254:68;;;;-1:-1:-1;;;12254:68:0;;;;;;;:::i;:::-;;;;;;;;;35937:1:::1;35924:10;:14;35916:40;;;::::0;-1:-1:-1;;;35916:40:0;;4404:2:1;35916:40:0::1;::::0;::::1;4386:21:1::0;4443:2;4423:18;;;4416:30;-1:-1:-1;;;4462:18:1;;;4455:44;4516:18;;35916:40:0::1;4202:338:1::0;35916:40:0::1;35967:6;:19:::0;35851:143::o;36002:249::-;12088:7;12115:6;-1:-1:-1;;;;;12115:6:0;11275:10;12262:23;12254:68;;;;-1:-1:-1;;;12254:68:0;;;;;;;:::i;:::-;36082:1:::1;36072:7;:11;36064:37;;;::::0;-1:-1:-1;;;36064:37:0;;4747:2:1;36064:37:0::1;::::0;::::1;4729:21:1::0;4786:2;4766:18;;;4759:30;-1:-1:-1;;;4805:18:1;;;4798:44;4859:18;;36064:37:0::1;4545:338:1::0;36064:37:0::1;36112:5;::::0;:56:::1;::::0;-1:-1:-1;;;;;36112:5:0::1;36135:10;36154:4;36160:7:::0;36112:22:::1;:56::i;:::-;36220:5;::::0;36184:59:::1;::::0;36227:15:::1;160:25:1::0;;-1:-1:-1;;;;;36220:5:0;;::::1;::::0;36204:7;;36193:10:::1;::::0;36184:59:::1;::::0;148:2:1;133:18;36184:59:0::1;;;;;;;;36002:249:::0;:::o;38536:637::-;12088:7;12115:6;-1:-1:-1;;;;;12115:6:0;11275:10;12262:23;12254:68;;;;-1:-1:-1;;;12254:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38630:16:0;::::1;::::0;;::::1;::::0;:30:::1;;;38659:1;38650:6;:10;38630:30;38622:82;;;::::0;-1:-1:-1;;;38622:82:0;;5090:2:1;38622:82:0::1;::::0;::::1;5072:21:1::0;5129:2;5109:18;;;5102:30;5168:34;5148:18;;;5141:62;-1:-1:-1;;;5219:18:1;;;5212:37;5266:19;;38622:82:0::1;4888:403:1::0;38622:82:0::1;-1:-1:-1::0;;;;;38720:20:0;::::1;38717:391;;38789:6;38765:21;:30;;38757:71;;;::::0;-1:-1:-1;;;38757:71:0;;5498:2:1;38757:71:0::1;::::0;::::1;5480:21:1::0;5537:2;5517:18;;;5510:30;5576;5556:18;;;5549:58;5624:18;;38757:71:0::1;5296:352:1::0;38757:71:0::1;38852:24;::::0;-1:-1:-1;;;;;38852:16:0;::::1;::::0;:24;::::1;;;::::0;38869:6;;38852:24:::1;::::0;;;38869:6;38852:16;:24;::::1;;;;;;38844:70;;;::::0;-1:-1:-1;;;38844:70:0;;5855:2:1;38844:70:0::1;::::0;::::1;5837:21:1::0;5894:2;5874:18;;;5867:30;5933:34;5913:18;;;5906:62;-1:-1:-1;;;5984:18:1;;;5977:32;6026:19;;38844:70:0::1;5653:398:1::0;38844:70:0::1;38717:391;;;38963:39;::::0;-1:-1:-1;;;38963:39:0;;38996:4:::1;38963:39;::::0;::::1;527:51:1::0;39005:6:0;;-1:-1:-1;;;;;38963:24:0;::::1;::::0;::::1;::::0;500:18:1;;38963:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;38955:88;;;::::0;-1:-1:-1;;;38955:88:0;;5498:2:1;38955:88:0::1;::::0;::::1;5480:21:1::0;5537:2;5517:18;;;5510:30;5576;5556:18;;;5549:58;5624:18;;38955:88:0::1;5296:352:1::0;38955:88:0::1;39058:38;-1:-1:-1::0;;;;;39058:27:0;::::1;39086:2:::0;39089:6;39058:27:::1;:38::i;:::-;39142:6;39139:2;-1:-1:-1::0;;;;;39123:42:0::1;39132:6;-1:-1:-1::0;;;;;39123:42:0::1;;39149:15;39123:42;;;;160:25:1::0;;148:2;133:18;;14:177;39123:42:0::1;;;;;;;;38536:637:::0;;;:::o;36432:64::-;12088:7;12115:6;-1:-1:-1;;;;;12115:6:0;11275:10;12262:23;12254:68;;;;-1:-1:-1;;;12254:68:0;;;;;;;:::i;:::-;36478:10:::1;:8;:10::i;:::-;36432:64::o:0;37768:202::-;37922:39;;-1:-1:-1;;6450:2:1;6446:15;;;6442:53;37922:39:0;;;6430:66:1;6512:12;;;6505:28;;;6549:12;;;6542:28;;;37861:19:0;;6586:12:1;;37922:39:0;;;;;;;;;;;;37912:50;;;;;;37898:64;;37768:202;;;;;:::o;38220:::-;12088:7;12115:6;-1:-1:-1;;;;;12115:6:0;11275:10;12262:23;12254:68;;;;-1:-1:-1;;;12254:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38293:21:0;::::1;38285:56;;;::::0;-1:-1:-1;;;38285:56:0;;6811:2:1;38285:56:0::1;::::0;::::1;6793:21:1::0;6850:2;6830:18;;;6823:30;-1:-1:-1;;;6869:18:1;;;6862:52;6931:18;;38285:56:0::1;6609:346:1::0;38285:56:0::1;38352:6;:16:::0;;-1:-1:-1;;;;;;38352:16:0::1;-1:-1:-1::0;;;;;38352:16:0;::::1;::::0;;::::1;::::0;;;38384:30:::1;::::0;38394:10:::1;::::0;38384:30:::1;::::0;-1:-1:-1;;38384:30:0::1;38220:202:::0;:::o;12693:148::-;12088:7;12115:6;-1:-1:-1;;;;;12115:6:0;11275:10;12262:23;12254:68;;;;-1:-1:-1;;;12254:68:0;;;;;;;:::i;:::-;12800:1:::1;12784:6:::0;;12763:40:::1;::::0;-1:-1:-1;;;;;12784:6:0;;::::1;::::0;12763:40:::1;::::0;12800:1;;12763:40:::1;12831:1;12814:19:::0;;-1:-1:-1;;;;;;12814:19:0::1;::::0;;12693:148::o;36364:60::-;12088:7;12115:6;-1:-1:-1;;;;;12115:6:0;11275:10;12262:23;12254:68;;;;-1:-1:-1;;;12254:68:0;;;;;;;:::i;:::-;36408:8:::1;:6;:8::i;37497:258::-:0;37596:24;37632:12;37647:42;37676:12;26426:58;;10256:66:1;26426:58:0;;;10244:79:1;10339:12;;;10332:28;;;26293:7:0;;10376:12:1;;26426:58:0;;;;;;;;;;;;26416:69;;;;;;26409:76;;26224:269;;;;37647:42;37632:57;;37719:28;37733:4;37739:1;37742;37745;37719:13;:28::i;:::-;37700:47;37497:258;-1:-1:-1;;;;;;37497:258:0:o;36504:347::-;33242:19;:17;:19::i;:::-;36588:1:::1;36578:7;:11;36569:38;;;::::0;-1:-1:-1;;;36569:38:0;;7162:2:1;36569:38:0::1;::::0;::::1;7144:21:1::0;7201:2;7181:18;;;7174:30;-1:-1:-1;;;7220:18:1;;;7213:44;7274:18;;36569:38:0::1;6960:338:1::0;36569:38:0::1;36652:11;::::0;36618:5:::1;::::0;:54:::1;::::0;-1:-1:-1;;;;;36618:5:0;;::::1;::::0;36641:10:::1;::::0;36652:11:::1;36664:7:::0;36618:22:::1;:54::i;:::-;36717:5;::::0;36689:10:::1;36717:5;36683:17:::0;;;:5:::1;:17;::::0;;;;36717:5;36683:23;::::1;:40:::0;;-1:-1:-1;;;;;;36683:40:0::1;-1:-1:-1::0;;;;;36717:5:0;;::::1;36683:40:::0;;;::::1;::::0;;;36734:35;;36762:7;;36683:17;36717:5;36734:35:::1;::::0;36762:7;;36734:35:::1;:::i;:::-;::::0;;;-1:-1:-1;;36820:5:0::1;::::0;36785:58:::1;::::0;36827:15:::1;160:25:1::0;;-1:-1:-1;;;;;36820:5:0;;::::1;::::0;36804:7;;36793:10:::1;::::0;36785:58:::1;::::0;148:2:1;133:18;36785:58:0::1;14:177:1::0;36859:627:0;36993:8;36974:15;:27;;:67;;;;-1:-1:-1;37035:6:0;;37017:24;;:15;:24;:::i;:::-;37005:8;:36;;36974:67;36966:111;;;;-1:-1:-1;;;36966:111:0;;7732:2:1;36966:111:0;;;7714:21:1;7771:2;7751:18;;;7744:30;7810:33;7790:18;;;7783:61;7861:18;;36966:111:0;7530:355:1;36966:111:0;37088:19;37110:34;37122:5;37128:6;37135:8;37110:11;:34::i;:::-;37164:20;;;;:7;:20;;;;;;37088:56;;-1:-1:-1;37164:20:0;;37163:21;37155:60;;;;-1:-1:-1;;;37155:60:0;;8092:2:1;37155:60:0;;;8074:21:1;8131:2;8111:18;;;8104:30;8170:28;8150:18;;;8143:56;8216:18;;37155:60:0;7890:350:1;37155:60:0;37226:11;37240:34;37256:11;37268:1;37270;37272;37240:15;:34::i;:::-;37293:6;;37226:48;;-1:-1:-1;;;;;;37293:13:0;;;:6;;:13;37285:46;;;;-1:-1:-1;;;37285:46:0;;8447:2:1;37285:46:0;;;8429:21:1;8486:2;8466:18;;;8459:30;-1:-1:-1;;;8505:18:1;;;8498:50;8565:18;;37285:46:0;8245:344:1;37285:46:0;37342:5;;:32;;-1:-1:-1;;;;;37342:5:0;37361;37367:6;37342:18;:32::i;:::-;37385:20;;;;:7;:20;;;;;;;:27;;-1:-1:-1;;37385:27:0;37408:4;37385:27;;;37448:5;;37428:50;;37455:6;;-1:-1:-1;;;;;37448:5:0;;;;37428:50;;;;;;;;37462:15;160:25:1;;148:2;133:18;;14:177;37428:50:0;;;;;;;;36953:533;;36859:627;;;;;;:::o;12996:244::-;12088:7;12115:6;-1:-1:-1;;;;;12115:6:0;11275:10;12262:23;12254:68;;;;-1:-1:-1;;;12254:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13085:22:0;::::1;13077:73;;;::::0;-1:-1:-1;;;13077:73:0;;8796:2:1;13077:73:0::1;::::0;::::1;8778:21:1::0;8835:2;8815:18;;;8808:30;8874:34;8854:18;;;8847:62;-1:-1:-1;;;8925:18:1;;;8918:36;8971:19;;13077:73:0::1;8594:402:1::0;13077:73:0::1;13187:6;::::0;;13166:38:::1;::::0;-1:-1:-1;;;;;13166:38:0;;::::1;::::0;13187:6;::::1;::::0;13166:38:::1;::::0;::::1;13215:6;:17:::0;;-1:-1:-1;;;;;;13215:17:0::1;-1:-1:-1::0;;;;;13215:17:0;;;::::1;::::0;;;::::1;::::0;;12996:244::o;37978:234::-;38049:6;;-1:-1:-1;;;;;38049:6:0;38057:10;38049:18;38041:55;;;;-1:-1:-1;;;38041:55:0;;9203:2:1;38041:55:0;;;9185:21:1;9242:2;9222:18;;;9215:30;9281:27;9261:18;;;9254:55;9326:18;;38041:55:0;9001:349:1;38041:55:0;38106:5;;:31;;-1:-1:-1;;;;;38106:5:0;38125:4;38130:6;38106:18;:31::i;:::-;38174:5;;38152:52;;38188:15;160:25:1;;38181:6:0;;-1:-1:-1;;;;;38174:5:0;;;;38152:52;;;;;;148:2:1;133:18;38152:52:0;;;;;;;37978:234;;:::o;28439:248::-;28610:68;;-1:-1:-1;;;;;9613:15:1;;;28610:68:0;;;9595:34:1;9665:15;;9645:18;;;9638:43;9697:18;;;9690:34;;;28583:96:0;;28603:5;;-1:-1:-1;;;28633:27:0;9530:18:1;;28610:68:0;;;;-1:-1:-1;;28610:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;28610:68:0;-1:-1:-1;;;;;;28610:68:0;;;;;;;;;;28583:19;:96::i;:::-;28439:248;;;;:::o;28220:211::-;28364:58;;-1:-1:-1;;;;;9927:32:1;;28364:58:0;;;9909:51:1;9976:18;;;9969:34;;;28337:86:0;;28357:5;;-1:-1:-1;;;28387:23:0;9882:18:1;;28364:58:0;9735:274:1;28337:86:0;28220:211;;;:::o;34496:120::-;33501:16;:14;:16::i;:::-;34565:5:::1;34555:15:::0;;-1:-1:-1;;;;34555:15:0::1;::::0;;34586:22:::1;11275:10:::0;34595:12:::1;34586:22;::::0;-1:-1:-1;;;;;545:32:1;;;527:51;;515:2;500:18;34586:22:0::1;;;;;;;34496:120::o:0;34233:118::-;33242:19;:17;:19::i;:::-;34293:7:::1;:14:::0;;-1:-1:-1;;;;34293:14:0::1;-1:-1:-1::0;;;34293:14:0::1;::::0;;34323:20:::1;34330:12;11275:10:::0;;11195:98;25645:279;25773:7;25794:17;25813:18;25835:25;25846:4;25852:1;25855;25858;25835:10;:25::i;:::-;25793:67;;;;25871:18;25883:5;25871:11;:18::i;:::-;-1:-1:-1;25907:9:0;25645:279;-1:-1:-1;;;;;25645:279:0:o;33796:108::-;33684:4;33708:7;-1:-1:-1;;;33708:7:0;;;;33866:9;33858:38;;;;-1:-1:-1;;;33858:38:0;;10601:2:1;33858:38:0;;;10583:21:1;10640:2;10620:18;;;10613:30;-1:-1:-1;;;10659:18:1;;;10652:46;10715:18;;33858:38:0;10399:340:1;31287:716:0;31711:23;31737:69;31765:4;31737:69;;;;;;;;;;;;;;;;;31745:5;-1:-1:-1;;;;;31737:27:0;;;:69;;;;;:::i;:::-;31821:17;;31711:95;;-1:-1:-1;31821:21:0;31817:179;;31918:10;31907:30;;;;;;;;;;;;:::i;:::-;31899:85;;;;-1:-1:-1;;;31899:85:0;;11228:2:1;31899:85:0;;;11210:21:1;11267:2;11247:18;;;11240:30;11306:34;11286:18;;;11279:62;-1:-1:-1;;;11357:18:1;;;11350:40;11407:19;;31899:85:0;11026:406:1;33981:108:0;33684:4;33708:7;-1:-1:-1;;;33708:7:0;;;;34040:41;;;;-1:-1:-1;;;34040:41:0;;11639:2:1;34040:41:0;;;11621:21:1;11678:2;11658:18;;;11651:30;-1:-1:-1;;;11697:18:1;;;11690:50;11757:18;;34040:41:0;11437:344:1;23874:1632:0;24005:7;;24939:66;24926:79;;24922:163;;;-1:-1:-1;25038:1:0;;-1:-1:-1;25042:30:0;25022:51;;24922:163;25099:1;:7;;25104:2;25099:7;;:18;;;;;25110:1;:7;;25115:2;25110:7;;25099:18;25095:102;;;-1:-1:-1;25150:1:0;;-1:-1:-1;25154:30:0;25134:51;;25095:102;25311:24;;;25294:14;25311:24;;;;;;;;;12013:25:1;;;12086:4;12074:17;;12054:18;;;12047:45;;;;12108:18;;;12101:34;;;12151:18;;;12144:34;;;25311:24:0;;11985:19:1;;25311:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25311:24:0;;-1:-1:-1;;25311:24:0;;;-1:-1:-1;;;;;;;25350:20:0;;25346:103;;25403:1;25407:29;25387:50;;;;;;;25346:103;25469:6;-1:-1:-1;25477:20:0;;-1:-1:-1;23874:1632:0;;;;;;;;:::o;18487:643::-;18565:20;18556:5;:29;;;;;;;;:::i;:::-;;18552:571;;18487:643;:::o;18552:571::-;18663:29;18654:5;:38;;;;;;;;:::i;:::-;;18650:473;;18709:34;;-1:-1:-1;;;18709:34:0;;12523:2:1;18709:34:0;;;12505:21:1;12562:2;12542:18;;;12535:30;12601:26;12581:18;;;12574:54;12645:18;;18709:34:0;12321:348:1;18650:473:0;18774:35;18765:5;:44;;;;;;;;:::i;:::-;;18761:362;;18826:41;;-1:-1:-1;;;18826:41:0;;12876:2:1;18826:41:0;;;12858:21:1;12915:2;12895:18;;;12888:30;12954:33;12934:18;;;12927:61;13005:18;;18826:41:0;12674:355:1;18761:362:0;18898:30;18889:5;:39;;;;;;;;:::i;:::-;;18885:238;;18945:44;;-1:-1:-1;;;18945:44:0;;13236:2:1;18945:44:0;;;13218:21:1;13275:2;13255:18;;;13248:30;13314:34;13294:18;;;13287:62;-1:-1:-1;;;13365:18:1;;;13358:32;13407:19;;18945:44:0;13034:398:1;18885:238:0;19020:30;19011:5;:39;;;;;;;;:::i;:::-;;19007:116;;19067:44;;-1:-1:-1;;;19067:44:0;;13639:2:1;19067:44:0;;;13621:21:1;13678:2;13658:18;;;13651:30;13717:34;13697:18;;;13690:62;-1:-1:-1;;;13768:18:1;;;13761:32;13810:19;;19067:44:0;13437:398:1;19007:116:0;18487:643;:::o;4018:229::-;4155:12;4187:52;4209:6;4217:4;4223:1;4226:12;4187:21;:52::i;:::-;4180:59;;4018:229;;;;;;:::o;5138:510::-;5308:12;5366:5;5341:21;:30;;5333:81;;;;-1:-1:-1;;;5333:81:0;;14042:2:1;5333:81:0;;;14024:21:1;14081:2;14061:18;;;14054:30;14120:34;14100:18;;;14093:62;-1:-1:-1;;;14171:18:1;;;14164:36;14217:19;;5333:81:0;13840:402:1;5333:81:0;-1:-1:-1;;;;;1568:19:0;;;5425:60;;;;-1:-1:-1;;;5425:60:0;;14449:2:1;5425:60:0;;;14431:21:1;14488:2;14468:18;;;14461:30;14527:31;14507:18;;;14500:59;14576:18;;5425:60:0;14247:353:1;5425:60:0;5499:12;5513:23;5540:6;-1:-1:-1;;;;;5540:11:0;5559:5;5566:4;5540:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5498:73;;;;5589:51;5606:7;5615:10;5627:12;5589:16;:51::i;:::-;5582:58;5138:510;-1:-1:-1;;;;;;;5138:510:0:o;7824:762::-;7974:12;8003:7;7999:580;;;-1:-1:-1;8034:10:0;8027:17;;7999:580;8148:17;;:21;8144:424;;8396:10;8390:17;8457:15;8444:10;8440:2;8436:19;8429:44;8144:424;8539:12;8532:20;;-1:-1:-1;;;8532:20:0;;;;;;;;:::i;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;589:173::-;657:20;;-1:-1:-1;;;;;706:31:1;;696:42;;686:70;;752:1;749;742:12;686:70;589:173;;;:::o;767:328::-;844:6;852;860;913:2;901:9;892:7;888:23;884:32;881:52;;;929:1;926;919:12;881:52;952:29;971:9;952:29;:::i;:::-;942:39;;1000:38;1034:2;1023:9;1019:18;1000:38;:::i;:::-;990:48;;1085:2;1074:9;1070:18;1057:32;1047:42;;767:328;;;;;:::o;1100:322::-;1177:6;1185;1193;1246:2;1234:9;1225:7;1221:23;1217:32;1214:52;;;1262:1;1259;1252:12;1214:52;1285:29;1304:9;1285:29;:::i;:::-;1275:39;1361:2;1346:18;;1333:32;;-1:-1:-1;1412:2:1;1397:18;;;1384:32;;1100:322;-1:-1:-1;;;1100:322:1:o;1801:186::-;1860:6;1913:2;1901:9;1892:7;1888:23;1884:32;1881:52;;;1929:1;1926;1919:12;1881:52;1952:29;1971:9;1952:29;:::i;1992:156::-;2058:20;;2118:4;2107:16;;2097:27;;2087:55;;2138:1;2135;2128:12;2153:387;2237:6;2245;2253;2261;2314:3;2302:9;2293:7;2289:23;2285:33;2282:53;;;2331:1;2328;2321:12;2282:53;2367:9;2354:23;2344:33;;2396:36;2428:2;2417:9;2413:18;2396:36;:::i;:::-;2153:387;;2386:46;;-1:-1:-1;;;;2479:2:1;2464:18;;2451:32;;2530:2;2515:18;2502:32;;2153:387::o;2824:531::-;2926:6;2934;2942;2950;2958;2966;3019:3;3007:9;2998:7;2994:23;2990:33;2987:53;;;3036:1;3033;3026:12;2987:53;3059:29;3078:9;3059:29;:::i;:::-;3049:39;;3135:2;3124:9;3120:18;3107:32;3097:42;;3158:36;3190:2;3179:9;3175:18;3158:36;:::i;:::-;3148:46;;3241:2;3230:9;3226:18;3213:32;3203:42;;3292:3;3281:9;3277:19;3264:33;3254:43;;3344:3;3333:9;3329:19;3316:33;3306:43;;2824:531;;;;;;;;:::o;3360:254::-;3428:6;3436;3489:2;3477:9;3468:7;3464:23;3460:32;3457:52;;;3505:1;3502;3495:12;3457:52;3528:29;3547:9;3528:29;:::i;:::-;3518:39;3604:2;3589:18;;;;3576:32;;-1:-1:-1;;;3360:254:1:o;3841:356::-;4043:2;4025:21;;;4062:18;;;4055:30;4121:34;4116:2;4101:18;;4094:62;4188:2;4173:18;;3841:356::o;6056:184::-;6126:6;6179:2;6167:9;6158:7;6154:23;6150:32;6147:52;;;6195:1;6192;6185:12;6147:52;-1:-1:-1;6218:16:1;;6056:184;-1:-1:-1;6056:184:1:o;7303:222::-;7368:9;;;7389:10;;;7386:133;;;7441:10;7436:3;7432:20;7429:1;7422:31;7476:4;7473:1;7466:15;7504:4;7501:1;7494:15;7386:133;7303:222;;;;:::o;10744:277::-;10811:6;10864:2;10852:9;10843:7;10839:23;10835:32;10832:52;;;10880:1;10877;10870:12;10832:52;10912:9;10906:16;10965:5;10958:13;10951:21;10944:5;10941:32;10931:60;;10987:1;10984;10977:12;12189:127;12250:10;12245:3;12241:20;12238:1;12231:31;12281:4;12278:1;12271:15;12305:4;12302:1;12295:15;14605:250;14690:1;14700:113;14714:6;14711:1;14708:13;14700:113;;;14790:11;;;14784:18;14771:11;;;14764:39;14736:2;14729:10;14700:113;;;-1:-1:-1;;14847:1:1;14829:16;;14822:27;14605:250::o;14860:287::-;14989:3;15027:6;15021:13;15043:66;15102:6;15097:3;15090:4;15082:6;15078:17;15043:66;:::i;:::-;15125:16;;;;;14860:287;-1:-1:-1;;14860:287:1:o;15152:396::-;15301:2;15290:9;15283:21;15264:4;15333:6;15327:13;15376:6;15371:2;15360:9;15356:18;15349:34;15392:79;15464:6;15459:2;15448:9;15444:18;15439:2;15431:6;15427:15;15392:79;:::i;:::-;15532:2;15511:15;-1:-1:-1;;15507:29:1;15492:45;;;;15539:2;15488:54;;15152:396;-1:-1:-1;;15152:396:1:o
Swarm Source
ipfs://c30abf461fbae6f89ad5413a9f7b8be8beddbc958d03ddf10fc7c94577744da2
Loading...
Loading
Loading...
Loading
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.