Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
LudwigTosser
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-01-30 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ 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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol) pragma solidity ^0.8.20; // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol) pragma solidity ^0.8.20; // File: @openzeppelin/contracts/interfaces/IERC1363.sol // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol) pragma solidity ^0.8.20; /** * @title IERC1363 * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. * * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction. */ interface IERC1363 is IERC20, IERC165 { /* * Note: the ERC-165 identifier for this interface is 0xb0202a11. * 0xb0202a11 === * bytes4(keccak256('transferAndCall(address,uint256)')) ^ * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^ * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^ * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^ * bytes4(keccak256('approveAndCall(address,uint256)')) ^ * bytes4(keccak256('approveAndCall(address,uint256,bytes)')) */ /** * @dev Moves a `value` amount of tokens from the caller's account to `to` * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferAndCall(address to, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from the caller's account to `to` * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @param data Additional data with no specified format, sent in call to `to`. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param from The address which you want to send tokens from. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferFromAndCall(address from, address to, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param from The address which you want to send tokens from. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @param data Additional data with no specified format, sent in call to `to`. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`. * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function approveAndCall(address spender, uint256 value) external returns (bool); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`. * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. * @param data Additional data with no specified format, sent in call to `spender`. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v5.2.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; /** * @title SafeERC20 * @dev Wrappers around ERC-20 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 { /** * @dev An operation with an ERC-20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value))); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. * * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client" * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior. */ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no * value, non-reverting calls are assumed to be successful. * * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client" * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior. */ function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. * * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function * only sets the "standard" allowance. Any temporary allowance will remain active, in addition to the value being * set here. */ function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value)); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0))); _callOptionalReturn(token, approvalCall); } } /** * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when * targeting contracts. * * Reverts if the returned value is other than `true`. */ function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal { if (to.code.length == 0) { safeTransfer(token, to, value); } else if (!token.transferAndCall(to, value, data)) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when * targeting contracts. * * Reverts if the returned value is other than `true`. */ function transferFromAndCallRelaxed( IERC1363 token, address from, address to, uint256 value, bytes memory data ) internal { if (to.code.length == 0) { safeTransferFrom(token, from, to, value); } else if (!token.transferFromAndCall(from, to, value, data)) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when * targeting contracts. * * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}. * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall} * once without retrying, and relies on the returned value to be true. * * Reverts if the returned value is other than `true`. */ function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal { if (to.code.length == 0) { forceApprove(token, to, value); } else if (!token.approveAndCall(to, value, data)) { revert SafeERC20FailedOperation(address(token)); } } /** * @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). * * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements. */ function _callOptionalReturn(IERC20 token, bytes memory data) private { uint256 returnSize; uint256 returnValue; assembly ("memory-safe") { let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20) // bubble errors if iszero(success) { let ptr := mload(0x40) returndatacopy(ptr, 0, returndatasize()) revert(ptr, returndatasize()) } returnSize := returndatasize() returnValue := mload(0) } if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) { revert SafeERC20FailedOperation(address(token)); } } /** * @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). * * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { bool success; uint256 returnSize; uint256 returnValue; assembly ("memory-safe") { success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20) returnSize := returndatasize() returnValue := mload(0) } return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1); } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: LudwigTosser.sol pragma solidity ^0.8.19; contract LudwigTosser is Ownable, ReentrancyGuard { using SafeERC20 for IERC20; IERC20 public immutable ludwig; event LudwigTossed(address[] recipients, uint256 amountEach); error NoSToWithdraw(); error STransferFailed(); error NoLudwigToWithdraw(); error NoTokensToWithdraw(); error TokenTransferFailed(); constructor() Ownable(0xc5D45215944F087beB996EAd9537269bc2595b36) { ludwig = IERC20(0xe6cc4D855B4fD4A9D02F46B9adae4C5EfB1764B5); } function ludwigToss(address[] calldata recipients, uint256 amountEach) external onlyOwner { uint256 totalAmount = recipients.length * amountEach; require(ludwig.balanceOf(address(this)) >= totalAmount, "Insufficient token balance"); require(recipients.length <= 1000, "Too many recipients"); for (uint256 i = 0; i < recipients.length; i++) { ludwig.safeTransfer(recipients[i], amountEach); } emit LudwigTossed(recipients, amountEach); } function withdrawLudwig() external onlyOwner nonReentrant { uint256 balance = ludwig.balanceOf(address(this)); require(balance != 0, "No Ludwig to withdraw"); ludwig.safeTransfer(owner(), balance); } function withdrawS() external onlyOwner nonReentrant { uint256 balance = address(this).balance; require(balance != 0, "No ETH to withdraw"); (bool success,) = payable(owner()).call{value: balance}(""); require(success, "ETH transfer failed"); } function withdrawToken(address token) external onlyOwner nonReentrant { uint256 balance = IERC20(token).balanceOf(address(this)); require(balance != 0, "No tokens to withdraw"); IERC20(token).safeTransfer(owner(), balance); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NoLudwigToWithdraw","type":"error"},{"inputs":[],"name":"NoSToWithdraw","type":"error"},{"inputs":[],"name":"NoTokensToWithdraw","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"STransferFailed","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"TokenTransferFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"recipients","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"amountEach","type":"uint256"}],"name":"LudwigTossed","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":[],"name":"ludwig","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256","name":"amountEach","type":"uint256"}],"name":"ludwigToss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLudwig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405234801561000f575f5ffd5b5073c5d45215944f087beb996ead9537269bc2595b365f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610095575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161008c91906101f9565b60405180910390fd5b6100a4816100f960201b60201c565b506001808190555073e6cc4d855b4fd4a9d02f46b9adae4c5efb1764b573ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050610212565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101e3826101ba565b9050919050565b6101f3816101d9565b82525050565b5f60208201905061020c5f8301846101ea565b92915050565b6080516112226102465f395f81816101b401528181610311015281816103a6015281816103db01526104c301526112225ff3fe60806040526004361061007e575f3560e01c8063894760691161004d57806389476069146101075780638da5cb5b1461012f578063ecf93fcb14610159578063f2fde38b1461016f57610085565b80631b58483b1461008957806333e34bb4146100b1578063497d7802146100db578063715018a6146100f157610085565b3661008557005b5f5ffd5b348015610094575f5ffd5b506100af60048036038101906100aa9190610b49565b610197565b005b3480156100bc575f5ffd5b506100c56103a4565b6040516100d29190610c20565b60405180910390f35b3480156100e6575f5ffd5b506100ef6103c8565b005b3480156100fc575f5ffd5b50610105610512565b005b348015610112575f5ffd5b5061012d60048036038101906101289190610c74565b610525565b005b34801561013a575f5ffd5b50610143610630565b6040516101509190610cae565b60405180910390f35b348015610164575f5ffd5b5061016d610657565b005b34801561017a575f5ffd5b5061019560048036038101906101909190610c74565b610768565b005b61019f6107ec565b5f81848490506101af9190610cf4565b9050807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161020b9190610cae565b602060405180830381865afa158015610226573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024a9190610d49565b101561028b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028290610dce565b60405180910390fd5b6103e88484905011156102d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ca90610e36565b60405180910390fd5b5f5f90505b84849050811015610362576103558585838181106102f9576102f8610e54565b5b905060200201602081019061030e9190610c74565b847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108739092919063ffffffff16565b80806001019150506102d8565b507fb7054b21f10ed1d962c753cd9b9131b1be8005b3f70e835ff0cf7b799271c7dd84848460405161039693929190610f4c565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6103d06107ec565b6103d86108f2565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016104329190610cae565b602060405180830381865afa15801561044d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104719190610d49565b90505f81036104b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ac90610fc6565b60405180910390fd5b6105076104c0610630565b827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108739092919063ffffffff16565b50610510610941565b565b61051a6107ec565b6105235f61094a565b565b61052d6107ec565b6105356108f2565b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161056f9190610cae565b602060405180830381865afa15801561058a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ae9190610d49565b90505f81036105f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e99061102e565b60405180910390fd5b6106246105fd610630565b828473ffffffffffffffffffffffffffffffffffffffff166108739092919063ffffffff16565b5061062d610941565b50565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61065f6107ec565b6106676108f2565b5f4790505f81036106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a490611096565b60405180910390fd5b5f6106b6610630565b73ffffffffffffffffffffffffffffffffffffffff16826040516106d9906110e1565b5f6040518083038185875af1925050503d805f8114610713576040519150601f19603f3d011682016040523d82523d5f602084013e610718565b606091505b505090508061075c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107539061113f565b60405180910390fd5b5050610766610941565b565b6107706107ec565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107e0575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016107d79190610cae565b60405180910390fd5b6107e98161094a565b50565b6107f4610a0b565b73ffffffffffffffffffffffffffffffffffffffff16610812610630565b73ffffffffffffffffffffffffffffffffffffffff161461087157610835610a0b565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016108689190610cae565b60405180910390fd5b565b6108ed838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016108a692919061115d565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610a12565b505050565b600260015403610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e906111ce565b60405180910390fd5b6002600181905550565b60018081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f5f60205f8451602086015f885af180610a31576040513d5f823e3d81fd5b3d92505f519150505f8214610a4a576001811415610a65565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b15610aa757836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610a9e9190610cae565b60405180910390fd5b50505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610ad657610ad5610ab5565b5b8235905067ffffffffffffffff811115610af357610af2610ab9565b5b602083019150836020820283011115610b0f57610b0e610abd565b5b9250929050565b5f819050919050565b610b2881610b16565b8114610b32575f5ffd5b50565b5f81359050610b4381610b1f565b92915050565b5f5f5f60408486031215610b6057610b5f610aad565b5b5f84013567ffffffffffffffff811115610b7d57610b7c610ab1565b5b610b8986828701610ac1565b93509350506020610b9c86828701610b35565b9150509250925092565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f610be8610be3610bde84610ba6565b610bc5565b610ba6565b9050919050565b5f610bf982610bce565b9050919050565b5f610c0a82610bef565b9050919050565b610c1a81610c00565b82525050565b5f602082019050610c335f830184610c11565b92915050565b5f610c4382610ba6565b9050919050565b610c5381610c39565b8114610c5d575f5ffd5b50565b5f81359050610c6e81610c4a565b92915050565b5f60208284031215610c8957610c88610aad565b5b5f610c9684828501610c60565b91505092915050565b610ca881610c39565b82525050565b5f602082019050610cc15f830184610c9f565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610cfe82610b16565b9150610d0983610b16565b9250828202610d1781610b16565b91508282048414831517610d2e57610d2d610cc7565b5b5092915050565b5f81519050610d4381610b1f565b92915050565b5f60208284031215610d5e57610d5d610aad565b5b5f610d6b84828501610d35565b91505092915050565b5f82825260208201905092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e63650000000000005f82015250565b5f610db8601a83610d74565b9150610dc382610d84565b602082019050919050565b5f6020820190508181035f830152610de581610dac565b9050919050565b7f546f6f206d616e7920726563697069656e7473000000000000000000000000005f82015250565b5f610e20601383610d74565b9150610e2b82610dec565b602082019050919050565b5f6020820190508181035f830152610e4d81610e14565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82825260208201905092915050565b5f819050919050565b610ea381610c39565b82525050565b5f610eb48383610e9a565b60208301905092915050565b5f610ece6020840184610c60565b905092915050565b5f602082019050919050565b5f610eed8385610e81565b9350610ef882610e91565b805f5b85811015610f3057610f0d8284610ec0565b610f178882610ea9565b9750610f2283610ed6565b925050600181019050610efb565b5085925050509392505050565b610f4681610b16565b82525050565b5f6040820190508181035f830152610f65818587610ee2565b9050610f746020830184610f3d565b949350505050565b7f4e6f204c756477696720746f20776974686472617700000000000000000000005f82015250565b5f610fb0601583610d74565b9150610fbb82610f7c565b602082019050919050565b5f6020820190508181035f830152610fdd81610fa4565b9050919050565b7f4e6f20746f6b656e7320746f20776974686472617700000000000000000000005f82015250565b5f611018601583610d74565b915061102382610fe4565b602082019050919050565b5f6020820190508181035f8301526110458161100c565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f611080601283610d74565b915061108b8261104c565b602082019050919050565b5f6020820190508181035f8301526110ad81611074565b9050919050565b5f81905092915050565b50565b5f6110cc5f836110b4565b91506110d7826110be565b5f82019050919050565b5f6110eb826110c1565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f611129601383610d74565b9150611134826110f5565b602082019050919050565b5f6020820190508181035f8301526111568161111d565b9050919050565b5f6040820190506111705f830185610c9f565b61117d6020830184610f3d565b9392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6111b8601f83610d74565b91506111c382611184565b602082019050919050565b5f6020820190508181035f8301526111e5816111ac565b905091905056fea264697066735822122081f177d9f4ec578d8ae87c976bf2a89d724c918c4d71ecfa4f288dbe8c8f849464736f6c634300081c0033
Deployed Bytecode
0x60806040526004361061007e575f3560e01c8063894760691161004d57806389476069146101075780638da5cb5b1461012f578063ecf93fcb14610159578063f2fde38b1461016f57610085565b80631b58483b1461008957806333e34bb4146100b1578063497d7802146100db578063715018a6146100f157610085565b3661008557005b5f5ffd5b348015610094575f5ffd5b506100af60048036038101906100aa9190610b49565b610197565b005b3480156100bc575f5ffd5b506100c56103a4565b6040516100d29190610c20565b60405180910390f35b3480156100e6575f5ffd5b506100ef6103c8565b005b3480156100fc575f5ffd5b50610105610512565b005b348015610112575f5ffd5b5061012d60048036038101906101289190610c74565b610525565b005b34801561013a575f5ffd5b50610143610630565b6040516101509190610cae565b60405180910390f35b348015610164575f5ffd5b5061016d610657565b005b34801561017a575f5ffd5b5061019560048036038101906101909190610c74565b610768565b005b61019f6107ec565b5f81848490506101af9190610cf4565b9050807f000000000000000000000000e6cc4d855b4fd4a9d02f46b9adae4c5efb1764b573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161020b9190610cae565b602060405180830381865afa158015610226573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024a9190610d49565b101561028b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028290610dce565b60405180910390fd5b6103e88484905011156102d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ca90610e36565b60405180910390fd5b5f5f90505b84849050811015610362576103558585838181106102f9576102f8610e54565b5b905060200201602081019061030e9190610c74565b847f000000000000000000000000e6cc4d855b4fd4a9d02f46b9adae4c5efb1764b573ffffffffffffffffffffffffffffffffffffffff166108739092919063ffffffff16565b80806001019150506102d8565b507fb7054b21f10ed1d962c753cd9b9131b1be8005b3f70e835ff0cf7b799271c7dd84848460405161039693929190610f4c565b60405180910390a150505050565b7f000000000000000000000000e6cc4d855b4fd4a9d02f46b9adae4c5efb1764b581565b6103d06107ec565b6103d86108f2565b5f7f000000000000000000000000e6cc4d855b4fd4a9d02f46b9adae4c5efb1764b573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016104329190610cae565b602060405180830381865afa15801561044d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104719190610d49565b90505f81036104b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ac90610fc6565b60405180910390fd5b6105076104c0610630565b827f000000000000000000000000e6cc4d855b4fd4a9d02f46b9adae4c5efb1764b573ffffffffffffffffffffffffffffffffffffffff166108739092919063ffffffff16565b50610510610941565b565b61051a6107ec565b6105235f61094a565b565b61052d6107ec565b6105356108f2565b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161056f9190610cae565b602060405180830381865afa15801561058a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ae9190610d49565b90505f81036105f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e99061102e565b60405180910390fd5b6106246105fd610630565b828473ffffffffffffffffffffffffffffffffffffffff166108739092919063ffffffff16565b5061062d610941565b50565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61065f6107ec565b6106676108f2565b5f4790505f81036106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a490611096565b60405180910390fd5b5f6106b6610630565b73ffffffffffffffffffffffffffffffffffffffff16826040516106d9906110e1565b5f6040518083038185875af1925050503d805f8114610713576040519150601f19603f3d011682016040523d82523d5f602084013e610718565b606091505b505090508061075c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107539061113f565b60405180910390fd5b5050610766610941565b565b6107706107ec565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107e0575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016107d79190610cae565b60405180910390fd5b6107e98161094a565b50565b6107f4610a0b565b73ffffffffffffffffffffffffffffffffffffffff16610812610630565b73ffffffffffffffffffffffffffffffffffffffff161461087157610835610a0b565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016108689190610cae565b60405180910390fd5b565b6108ed838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016108a692919061115d565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610a12565b505050565b600260015403610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e906111ce565b60405180910390fd5b6002600181905550565b60018081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f5f60205f8451602086015f885af180610a31576040513d5f823e3d81fd5b3d92505f519150505f8214610a4a576001811415610a65565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b15610aa757836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610a9e9190610cae565b60405180910390fd5b50505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610ad657610ad5610ab5565b5b8235905067ffffffffffffffff811115610af357610af2610ab9565b5b602083019150836020820283011115610b0f57610b0e610abd565b5b9250929050565b5f819050919050565b610b2881610b16565b8114610b32575f5ffd5b50565b5f81359050610b4381610b1f565b92915050565b5f5f5f60408486031215610b6057610b5f610aad565b5b5f84013567ffffffffffffffff811115610b7d57610b7c610ab1565b5b610b8986828701610ac1565b93509350506020610b9c86828701610b35565b9150509250925092565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f610be8610be3610bde84610ba6565b610bc5565b610ba6565b9050919050565b5f610bf982610bce565b9050919050565b5f610c0a82610bef565b9050919050565b610c1a81610c00565b82525050565b5f602082019050610c335f830184610c11565b92915050565b5f610c4382610ba6565b9050919050565b610c5381610c39565b8114610c5d575f5ffd5b50565b5f81359050610c6e81610c4a565b92915050565b5f60208284031215610c8957610c88610aad565b5b5f610c9684828501610c60565b91505092915050565b610ca881610c39565b82525050565b5f602082019050610cc15f830184610c9f565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610cfe82610b16565b9150610d0983610b16565b9250828202610d1781610b16565b91508282048414831517610d2e57610d2d610cc7565b5b5092915050565b5f81519050610d4381610b1f565b92915050565b5f60208284031215610d5e57610d5d610aad565b5b5f610d6b84828501610d35565b91505092915050565b5f82825260208201905092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e63650000000000005f82015250565b5f610db8601a83610d74565b9150610dc382610d84565b602082019050919050565b5f6020820190508181035f830152610de581610dac565b9050919050565b7f546f6f206d616e7920726563697069656e7473000000000000000000000000005f82015250565b5f610e20601383610d74565b9150610e2b82610dec565b602082019050919050565b5f6020820190508181035f830152610e4d81610e14565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82825260208201905092915050565b5f819050919050565b610ea381610c39565b82525050565b5f610eb48383610e9a565b60208301905092915050565b5f610ece6020840184610c60565b905092915050565b5f602082019050919050565b5f610eed8385610e81565b9350610ef882610e91565b805f5b85811015610f3057610f0d8284610ec0565b610f178882610ea9565b9750610f2283610ed6565b925050600181019050610efb565b5085925050509392505050565b610f4681610b16565b82525050565b5f6040820190508181035f830152610f65818587610ee2565b9050610f746020830184610f3d565b949350505050565b7f4e6f204c756477696720746f20776974686472617700000000000000000000005f82015250565b5f610fb0601583610d74565b9150610fbb82610f7c565b602082019050919050565b5f6020820190508181035f830152610fdd81610fa4565b9050919050565b7f4e6f20746f6b656e7320746f20776974686472617700000000000000000000005f82015250565b5f611018601583610d74565b915061102382610fe4565b602082019050919050565b5f6020820190508181035f8301526110458161100c565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f611080601283610d74565b915061108b8261104c565b602082019050919050565b5f6020820190508181035f8301526110ad81611074565b9050919050565b5f81905092915050565b50565b5f6110cc5f836110b4565b91506110d7826110be565b5f82019050919050565b5f6110eb826110c1565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f611129601383610d74565b9150611134826110f5565b602082019050919050565b5f6020820190508181035f8301526111568161111d565b9050919050565b5f6040820190506111705f830185610c9f565b61117d6020830184610f3d565b9392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6111b8601f83610d74565b91506111c382611184565b602082019050919050565b5f6020820190508181035f8301526111e5816111ac565b905091905056fea264697066735822122081f177d9f4ec578d8ae87c976bf2a89d724c918c4d71ecfa4f288dbe8c8f849464736f6c634300081c0033
Deployed Bytecode Sourcemap
25710:1861:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26222:512;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25802:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26742:231;;;;;;;;;;;;;:::i;:::-;;3394:103;;;;;;;;;;;;;:::i;:::-;;27274:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2719:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26981:285;;;;;;;;;;;;;:::i;:::-;;3652:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26222:512;2605:13;:11;:13::i;:::-;26323:19:::1;26365:10;26345;;:17;;:30;;;;:::i;:::-;26323:52;;26429:11;26394:6;:16;;;26419:4;26394:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;26386:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;26511:4;26490:10;;:17;;:25;;26482:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26557:9;26569:1;26557:13;;26552:121;26576:10;;:17;;26572:1;:21;26552:121;;;26615:46;26635:10;;26646:1;26635:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26650:10;26615:6;:19;;;;:46;;;;;:::i;:::-;26595:3;;;;;;;26552:121;;;;26690:36;26703:10;;26715;26690:36;;;;;;;;:::i;:::-;;;;;;;;26312:422;26222:512:::0;;;:::o;25802:30::-;;;:::o;26742:231::-;2605:13;:11;:13::i;:::-;24756:21:::1;:19;:21::i;:::-;26811:15:::2;26829:6;:16;;;26854:4;26829:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26811:49;;26890:1;26879:7;:12:::0;26871:46:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;26928:37;26948:7;:5;:7::i;:::-;26957;26928:6;:19;;;;:37;;;;;:::i;:::-;26800:173;24800:20:::1;:18;:20::i;:::-;26742:231::o:0;3394:103::-;2605:13;:11;:13::i;:::-;3459:30:::1;3486:1;3459:18;:30::i;:::-;3394:103::o:0;27274:257::-;2605:13;:11;:13::i;:::-;24756:21:::1;:19;:21::i;:::-;27355:15:::2;27380:5;27373:23;;;27405:4;27373:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27355:56;;27441:1;27430:7;:12:::0;27422:46:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;27479:44;27506:7;:5;:7::i;:::-;27515;27486:5;27479:26;;;;:44;;;;;:::i;:::-;27344:187;24800:20:::1;:18;:20::i;:::-;27274:257:::0;:::o;2719:87::-;2765:7;2792:6;;;;;;;;;;;2785:13;;2719:87;:::o;26981:285::-;2605:13;:11;:13::i;:::-;24756:21:::1;:19;:21::i;:::-;27045:15:::2;27063:21;27045:39;;27114:1;27103:7;:12:::0;27095:43:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;27150:12;27175:7;:5;:7::i;:::-;27167:21;;27196:7;27167:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27149:59;;;27227:7;27219:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;27034:232;;24800:20:::1;:18;:20::i;:::-;26981:285::o:0;3652:220::-;2605:13;:11;:13::i;:::-;3757:1:::1;3737:22;;:8;:22;;::::0;3733:93:::1;;3811:1;3783:31;;;;;;;;;;;:::i;:::-;;;;;;;;3733:93;3836:28;3855:8;3836:18;:28::i;:::-;3652:220:::0;:::o;2884:166::-;2955:12;:10;:12::i;:::-;2944:23;;:7;:5;:7::i;:::-;:23;;;2940:103;;3018:12;:10;:12::i;:::-;2991:40;;;;;;;;;;;:::i;:::-;;;;;;;;2940:103;2884:166::o;14071:162::-;14154:71;14174:5;14196;:14;;;14213:2;14217:5;14181:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14154:19;:71::i;:::-;14071:162;;;:::o;24836:293::-;24238:1;24970:7;;:19;24962:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24238:1;25103:7;:18;;;;24836:293::o;25137:213::-;24194:1;25320:7;:22;;;;25137:213::o;4032:191::-;4106:16;4125:6;;;;;;;;;;;4106:25;;4151:8;4142:6;;:17;;;;;;;;;;;;;;;;;;4206:8;4175:40;;4196:8;4175:40;;;;;;;;;;;;4095:128;4032:191;:::o;728:98::-;781:7;808:10;801:17;;728:98;:::o;20664:738::-;20745:18;20774:19;20914:4;20911:1;20904:4;20898:11;20891:4;20885;20881:15;20878:1;20871:5;20864;20859:60;20973:7;20963:180;;21018:4;21012:11;21064:16;21061:1;21056:3;21041:40;21111:16;21106:3;21099:29;20963:180;21171:16;21157:30;;21222:1;21216:8;21201:23;;20829:406;21265:1;21251:10;:15;:68;;21318:1;21303:11;:16;;21251:68;;;21299:1;21277:5;21269:26;;;:31;21251:68;21247:148;;;21376:5;21343:40;;;;;;;;;;;:::i;:::-;;;;;;;;21247:148;20734:668;;20664:738;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:117;689:1;686;679:12;720:568;793:8;803:6;853:3;846:4;838:6;834:17;830:27;820:122;;861:79;;:::i;:::-;820:122;974:6;961:20;951:30;;1004:18;996:6;993:30;990:117;;;1026:79;;:::i;:::-;990:117;1140:4;1132:6;1128:17;1116:29;;1194:3;1186:4;1178:6;1174:17;1164:8;1160:32;1157:41;1154:128;;;1201:79;;:::i;:::-;1154:128;720:568;;;;;:::o;1294:77::-;1331:7;1360:5;1349:16;;1294:77;;;:::o;1377:122::-;1450:24;1468:5;1450:24;:::i;:::-;1443:5;1440:35;1430:63;;1489:1;1486;1479:12;1430:63;1377:122;:::o;1505:139::-;1551:5;1589:6;1576:20;1567:29;;1605:33;1632:5;1605:33;:::i;:::-;1505:139;;;;:::o;1650:704::-;1745:6;1753;1761;1810:2;1798:9;1789:7;1785:23;1781:32;1778:119;;;1816:79;;:::i;:::-;1778:119;1964:1;1953:9;1949:17;1936:31;1994:18;1986:6;1983:30;1980:117;;;2016:79;;:::i;:::-;1980:117;2129:80;2201:7;2192:6;2181:9;2177:22;2129:80;:::i;:::-;2111:98;;;;1907:312;2258:2;2284:53;2329:7;2320:6;2309:9;2305:22;2284:53;:::i;:::-;2274:63;;2229:118;1650:704;;;;;:::o;2360:126::-;2397:7;2437:42;2430:5;2426:54;2415:65;;2360:126;;;:::o;2492:60::-;2520:3;2541:5;2534:12;;2492:60;;;:::o;2558:142::-;2608:9;2641:53;2659:34;2668:24;2686:5;2668:24;:::i;:::-;2659:34;:::i;:::-;2641:53;:::i;:::-;2628:66;;2558:142;;;:::o;2706:126::-;2756:9;2789:37;2820:5;2789:37;:::i;:::-;2776:50;;2706:126;;;:::o;2838:140::-;2902:9;2935:37;2966:5;2935:37;:::i;:::-;2922:50;;2838:140;;;:::o;2984:159::-;3085:51;3130:5;3085:51;:::i;:::-;3080:3;3073:64;2984:159;;:::o;3149:250::-;3256:4;3294:2;3283:9;3279:18;3271:26;;3307:85;3389:1;3378:9;3374:17;3365:6;3307:85;:::i;:::-;3149:250;;;;:::o;3405:96::-;3442:7;3471:24;3489:5;3471:24;:::i;:::-;3460:35;;3405:96;;;:::o;3507:122::-;3580:24;3598:5;3580:24;:::i;:::-;3573:5;3570:35;3560:63;;3619:1;3616;3609:12;3560:63;3507:122;:::o;3635:139::-;3681:5;3719:6;3706:20;3697:29;;3735:33;3762:5;3735:33;:::i;:::-;3635:139;;;;:::o;3780:329::-;3839:6;3888:2;3876:9;3867:7;3863:23;3859:32;3856:119;;;3894:79;;:::i;:::-;3856:119;4014:1;4039:53;4084:7;4075:6;4064:9;4060:22;4039:53;:::i;:::-;4029:63;;3985:117;3780:329;;;;:::o;4115:118::-;4202:24;4220:5;4202:24;:::i;:::-;4197:3;4190:37;4115:118;;:::o;4239:222::-;4332:4;4370:2;4359:9;4355:18;4347:26;;4383:71;4451:1;4440:9;4436:17;4427:6;4383:71;:::i;:::-;4239:222;;;;:::o;4467:180::-;4515:77;4512:1;4505:88;4612:4;4609:1;4602:15;4636:4;4633:1;4626:15;4653:410;4693:7;4716:20;4734:1;4716:20;:::i;:::-;4711:25;;4750:20;4768:1;4750:20;:::i;:::-;4745:25;;4805:1;4802;4798:9;4827:30;4845:11;4827:30;:::i;:::-;4816:41;;5006:1;4997:7;4993:15;4990:1;4987:22;4967:1;4960:9;4940:83;4917:139;;5036:18;;:::i;:::-;4917:139;4701:362;4653:410;;;;:::o;5069:143::-;5126:5;5157:6;5151:13;5142:22;;5173:33;5200:5;5173:33;:::i;:::-;5069:143;;;;:::o;5218:351::-;5288:6;5337:2;5325:9;5316:7;5312:23;5308:32;5305:119;;;5343:79;;:::i;:::-;5305:119;5463:1;5488:64;5544:7;5535:6;5524:9;5520:22;5488:64;:::i;:::-;5478:74;;5434:128;5218:351;;;;:::o;5575:169::-;5659:11;5693:6;5688:3;5681:19;5733:4;5728:3;5724:14;5709:29;;5575:169;;;;:::o;5750:176::-;5890:28;5886:1;5878:6;5874:14;5867:52;5750:176;:::o;5932:366::-;6074:3;6095:67;6159:2;6154:3;6095:67;:::i;:::-;6088:74;;6171:93;6260:3;6171:93;:::i;:::-;6289:2;6284:3;6280:12;6273:19;;5932:366;;;:::o;6304:419::-;6470:4;6508:2;6497:9;6493:18;6485:26;;6557:9;6551:4;6547:20;6543:1;6532:9;6528:17;6521:47;6585:131;6711:4;6585:131;:::i;:::-;6577:139;;6304:419;;;:::o;6729:169::-;6869:21;6865:1;6857:6;6853:14;6846:45;6729:169;:::o;6904:366::-;7046:3;7067:67;7131:2;7126:3;7067:67;:::i;:::-;7060:74;;7143:93;7232:3;7143:93;:::i;:::-;7261:2;7256:3;7252:12;7245:19;;6904:366;;;:::o;7276:419::-;7442:4;7480:2;7469:9;7465:18;7457:26;;7529:9;7523:4;7519:20;7515:1;7504:9;7500:17;7493:47;7557:131;7683:4;7557:131;:::i;:::-;7549:139;;7276:419;;;:::o;7701:180::-;7749:77;7746:1;7739:88;7846:4;7843:1;7836:15;7870:4;7867:1;7860:15;7887:184;7986:11;8020:6;8015:3;8008:19;8060:4;8055:3;8051:14;8036:29;;7887:184;;;;:::o;8077:102::-;8146:4;8169:3;8161:11;;8077:102;;;:::o;8185:108::-;8262:24;8280:5;8262:24;:::i;:::-;8257:3;8250:37;8185:108;;:::o;8299:179::-;8368:10;8389:46;8431:3;8423:6;8389:46;:::i;:::-;8467:4;8462:3;8458:14;8444:28;;8299:179;;;;:::o;8484:122::-;8536:5;8561:39;8596:2;8591:3;8587:12;8582:3;8561:39;:::i;:::-;8552:48;;8484:122;;;;:::o;8612:115::-;8684:4;8716;8711:3;8707:14;8699:22;;8612:115;;;:::o;8763:699::-;8892:3;8915:86;8994:6;8989:3;8915:86;:::i;:::-;8908:93;;9025:58;9077:5;9025:58;:::i;:::-;9106:7;9137:1;9122:315;9147:6;9144:1;9141:13;9122:315;;;9217:42;9252:6;9243:7;9217:42;:::i;:::-;9279:63;9338:3;9323:13;9279:63;:::i;:::-;9272:70;;9365:62;9420:6;9365:62;:::i;:::-;9355:72;;9182:255;9169:1;9166;9162:9;9157:14;;9122:315;;;9126:14;9453:3;9446:10;;8897:565;;8763:699;;;;;:::o;9468:118::-;9555:24;9573:5;9555:24;:::i;:::-;9550:3;9543:37;9468:118;;:::o;9592:503::-;9773:4;9811:2;9800:9;9796:18;9788:26;;9860:9;9854:4;9850:20;9846:1;9835:9;9831:17;9824:47;9888:118;10001:4;9992:6;9984;9888:118;:::i;:::-;9880:126;;10016:72;10084:2;10073:9;10069:18;10060:6;10016:72;:::i;:::-;9592:503;;;;;;:::o;10101:171::-;10241:23;10237:1;10229:6;10225:14;10218:47;10101:171;:::o;10278:366::-;10420:3;10441:67;10505:2;10500:3;10441:67;:::i;:::-;10434:74;;10517:93;10606:3;10517:93;:::i;:::-;10635:2;10630:3;10626:12;10619:19;;10278:366;;;:::o;10650:419::-;10816:4;10854:2;10843:9;10839:18;10831:26;;10903:9;10897:4;10893:20;10889:1;10878:9;10874:17;10867:47;10931:131;11057:4;10931:131;:::i;:::-;10923:139;;10650:419;;;:::o;11075:171::-;11215:23;11211:1;11203:6;11199:14;11192:47;11075:171;:::o;11252:366::-;11394:3;11415:67;11479:2;11474:3;11415:67;:::i;:::-;11408:74;;11491:93;11580:3;11491:93;:::i;:::-;11609:2;11604:3;11600:12;11593:19;;11252:366;;;:::o;11624:419::-;11790:4;11828:2;11817:9;11813:18;11805:26;;11877:9;11871:4;11867:20;11863:1;11852:9;11848:17;11841:47;11905:131;12031:4;11905:131;:::i;:::-;11897:139;;11624:419;;;:::o;12049:168::-;12189:20;12185:1;12177:6;12173:14;12166:44;12049:168;:::o;12223:366::-;12365:3;12386:67;12450:2;12445:3;12386:67;:::i;:::-;12379:74;;12462:93;12551:3;12462:93;:::i;:::-;12580:2;12575:3;12571:12;12564:19;;12223:366;;;:::o;12595:419::-;12761:4;12799:2;12788:9;12784:18;12776:26;;12848:9;12842:4;12838:20;12834:1;12823:9;12819:17;12812:47;12876:131;13002:4;12876:131;:::i;:::-;12868:139;;12595:419;;;:::o;13020:147::-;13121:11;13158:3;13143:18;;13020:147;;;;:::o;13173:114::-;;:::o;13293:398::-;13452:3;13473:83;13554:1;13549:3;13473:83;:::i;:::-;13466:90;;13565:93;13654:3;13565:93;:::i;:::-;13683:1;13678:3;13674:11;13667:18;;13293:398;;;:::o;13697:379::-;13881:3;13903:147;14046:3;13903:147;:::i;:::-;13896:154;;14067:3;14060:10;;13697:379;;;:::o;14082:169::-;14222:21;14218:1;14210:6;14206:14;14199:45;14082:169;:::o;14257:366::-;14399:3;14420:67;14484:2;14479:3;14420:67;:::i;:::-;14413:74;;14496:93;14585:3;14496:93;:::i;:::-;14614:2;14609:3;14605:12;14598:19;;14257:366;;;:::o;14629:419::-;14795:4;14833:2;14822:9;14818:18;14810:26;;14882:9;14876:4;14872:20;14868:1;14857:9;14853:17;14846:47;14910:131;15036:4;14910:131;:::i;:::-;14902:139;;14629:419;;;:::o;15054:332::-;15175:4;15213:2;15202:9;15198:18;15190:26;;15226:71;15294:1;15283:9;15279:17;15270:6;15226:71;:::i;:::-;15307:72;15375:2;15364:9;15360:18;15351:6;15307:72;:::i;:::-;15054:332;;;;;:::o;15392:181::-;15532:33;15528:1;15520:6;15516:14;15509:57;15392:181;:::o;15579:366::-;15721:3;15742:67;15806:2;15801:3;15742:67;:::i;:::-;15735:74;;15818:93;15907:3;15818:93;:::i;:::-;15936:2;15931:3;15927:12;15920:19;;15579:366;;;:::o;15951:419::-;16117:4;16155:2;16144:9;16140:18;16132:26;;16204:9;16198:4;16194:20;16190:1;16179:9;16175:17;16168:47;16232:131;16358:4;16232:131;:::i;:::-;16224:139;;15951:419;;;:::o
Swarm Source
ipfs://81f177d9f4ec578d8ae87c976bf2a89d724c918c4d71ecfa4f288dbe8c8f8494
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.