Overview
ETH Balance
0.003147241807590071 ETH
Eth Value
$7.92 (@ $2,516.95/ETH)More Info
Private Name Tags
ContractCreator
Latest 14 from a total of 14 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Tokens With... | 19348474 | 184 days ago | IN | 0 ETH | 0.02188329 | ||||
Swap Tokens With... | 19348463 | 184 days ago | IN | 0 ETH | 0.02175031 | ||||
Swap Tokens With... | 19348429 | 184 days ago | IN | 0 ETH | 0.01280943 | ||||
Swap Tokens For ... | 18589910 | 290 days ago | IN | 0 ETH | 0.00311003 | ||||
Swap Tokens For ... | 18540441 | 297 days ago | IN | 0 ETH | 0.00517716 | ||||
Swap Tokens With... | 18533521 | 298 days ago | IN | 0 ETH | 0.0071406 | ||||
Swap Tokens For ... | 18530607 | 299 days ago | IN | 0 ETH | 0.00465638 | ||||
Swap Tokens With... | 18514438 | 301 days ago | IN | 0 ETH | 0.00917285 | ||||
Swap Tokens With... | 18514419 | 301 days ago | IN | 0 ETH | 0.01025945 | ||||
Swap Tokens With... | 18514355 | 301 days ago | IN | 0 ETH | 0.00715019 | ||||
Swap Tokens With... | 18513933 | 301 days ago | IN | 0 ETH | 0.00715019 | ||||
Swap Tokens With... | 18512802 | 301 days ago | IN | 0 ETH | 0.00812322 | ||||
Set Uniswap Rout... | 18512713 | 301 days ago | IN | 0 ETH | 0.00064239 | ||||
0x60806040 | 18512241 | 301 days ago | IN | 0 ETH | 0.05618052 |
Latest 20 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18589910 | 290 days ago | 0.1337376 ETH | ||||
18589910 | 290 days ago | 0.00975923 ETH | ||||
18589910 | 290 days ago | 0.14458118 ETH | ||||
18540441 | 297 days ago | 0.05397069 ETH | ||||
18540441 | 297 days ago | 0.0039384 ETH | ||||
18540441 | 297 days ago | 0.0583467 ETH | ||||
18533521 | 298 days ago | 0.05490249 ETH | ||||
18533521 | 298 days ago | 0.00324126 ETH | ||||
18533521 | 298 days ago | 0.00838571 ETH | ||||
18533521 | 298 days ago | 0.0668896 ETH | ||||
18530607 | 299 days ago | 0.14221022 ETH | ||||
18530607 | 299 days ago | 0.0103775 ETH | ||||
18530607 | 299 days ago | 0.15374078 ETH | ||||
18514438 | 301 days ago | 0.02446088 ETH | ||||
18514438 | 301 days ago | 0.00100877 ETH | ||||
18514438 | 301 days ago | 0.01003965 ETH | ||||
18514438 | 301 days ago | 0.0356214 ETH | ||||
18514419 | 301 days ago | 0.00103626 ETH | ||||
18514419 | 301 days ago | 0.0096324 ETH | ||||
18514419 | 301 days ago | 0.0356214 ETH |
Loading...
Loading
Contract Name:
Bitxchange
Compiler Version
v0.8.22+commit.4fc1097e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // // No-gas required token swapping to ETH. // https://xc.bitx.cx // // Keeps gas cost and fee // 90% fee sent to $bitx stakers // $Bitx: 0xD150e07f602bf3239BE3DE4341E10BE1678a3f8b // // Buy & Stake: https://token.bitx.cx // // Developed by @Rotwang9000 for https://Bitx.cx // https://t.me/BitXcx // // Register for Airdrop: https://t.me/BitxLiveBot pragma solidity ^0.8.20; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol"; import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; interface IRewardPot { function addToRewardPot() external payable; } contract Bitxchange is Ownable { IUniswapV2Router02 public uniswapRouter; IRewardPot public rewardPot; uint256 public feePercentage = 750; // 0.75% fee, scaled by 10^4 uint256 public estimatedGasForSwap = 250000; address public relayer; event FeeUpdated(uint256 newFee); event RewardPotUpdated(address newRewardPot); event SwapSuccessful(address indexed from, uint256 receivedETH); constructor( address _uniswapRouter, address _rewardPot, address _relayer ) Ownable(msg.sender) { uniswapRouter = IUniswapV2Router02(_uniswapRouter); rewardPot = IRewardPot(_rewardPot); relayer = _relayer; } // Payable function function receiveFunds() public payable {} receive() external payable {} // Payable fallback function (Solidity 0.6.0 and later) fallback() external payable {} // Owner deposits ETH into the contract function depositETH() external payable {} modifier onlyRelayer() { require( msg.sender == relayer || msg.sender == owner(), "Not the relayer" ); _; } function uniswapAddress() public view returns(address){ return address(uniswapRouter); } // Owner can withdraw ETH function withdrawETH(uint256 amount) external onlyOwner { payable(owner()).transfer(amount); } function setRelayer(address _newRelayer) external onlyOwner { relayer = _newRelayer; } function setFeePercentage(uint256 _newFee) external onlyOwner { feePercentage = _newFee; emit FeeUpdated(_newFee); } function setEstimatedGasForSwap( uint256 _newEstimatedGasForSwap ) external onlyOwner { estimatedGasForSwap = _newEstimatedGasForSwap; } function setUniswapRouter(address _newRouter) external onlyOwner { require(_newRouter != address(0), "Invalid address"); uniswapRouter = IUniswapV2Router02(_newRouter); } function setRewardPot(address _newRewardPot) external onlyOwner { require(_newRewardPot != address(0), "Invalid address"); rewardPot = IRewardPot(_newRewardPot); emit RewardPotUpdated(_newRewardPot); } function rescueTokens( address token, address to, uint256 amount ) external onlyRelayer { uint256 balance = IERC20(token).balanceOf(address(this)); require(amount <= balance, "Not enough tokens to rescue"); require(IERC20(token).transfer(to, amount), "Transfer failed"); } function tryGetAmountsOut( uint amountIn, address[] memory path ) internal view returns (bool success, uint256 amountOut) { try uniswapRouter.getAmountsOut(amountIn, path) returns ( uint256[] memory amounts ) { return (true, amounts[1]); } catch { return (false, 0); } } // Function to check if a swap is possible function canSwap( address token, uint256 amountIn, uint256 userGasPrice ) public view returns (bool) { address[] memory path = new address[](2); path[0] = token; path[1] = uniswapRouter.WETH(); // Check if there's enough liquidity for the swap (bool success, uint256 amountOut) = tryGetAmountsOut(amountIn, path); if (!success || amountOut == 0) { return false; } // Estimate gas cost and check against the minimum output amount uint256 estimatedGasCost = estimatedGasForSwap * userGasPrice; if (estimatedGasCost >= amountOut) { return false; } return true; } function getSwapQuote( address token, uint256 amount, uint256 slippage, uint256 userGasPrice ) public view returns (uint256 minAmountOut, uint256 estimatedGasCost, bool canDoSwap) { address[] memory path = new address[](2); path[0] = token; path[1] = uniswapRouter.WETH(); // Get the expected output amount based on the input amount and path (bool success, uint256 expectedAmountOut) = tryGetAmountsOut( amount, path ); require(success, "No liquidity for this token"); // Apply slippage minAmountOut = (expectedAmountOut * (10000 - slippage)) / 10000; // Benchmark gas for Uniswap swap: 184,523 (from Ethereum.org) // Adding a 20% buffer for other operations and fluctuations: ~221,428 //uint256 estimatedGasForSwap = 221428; // Calculate estimated gas cost based on user-provided gas price estimatedGasCost = estimatedGasForSwap * userGasPrice; return ( minAmountOut, estimatedGasCost, canSwap(token, amount, userGasPrice) ); } function swapTokensWithPermit( address token, address from, address to, uint256 amount, uint256 minAmountOut, uint expectedAmountOut, uint unpaidFees, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public payable onlyRelayer { IERC20Permit(token).permit( from, address(this), amount, deadline, v, r, s ); // Perform the swap return swapTokensWithTransfer( token, from, to, amount, minAmountOut, expectedAmountOut, unpaidFees ); } function swapTokensWithTransfer( address token, address from, address to, uint256 amount, uint256 minAmountOut, uint expectedAmountOut, uint unpaidFees ) public payable onlyRelayer { require( IERC20(token).transferFrom(from, address(this), amount), "Transfer Failed" ); return swapTokensForETH( token, to, amount, minAmountOut, expectedAmountOut, unpaidFees ); } function swapTokensForETH( address token, address to, uint256 amount, uint256 minAmountOut, uint expectedAmountOut, uint unpaidFees ) public payable onlyRelayer { uint256 gasCost = gasleft(); // Estimate gas cost and check against minAmountOut uint256 estimatedGasCost = estimatedGasForSwap * tx.gasprice; require( estimatedGasCost + unpaidFees < minAmountOut, "Estimated gas cost exceeds minAmountOut" ); require( expectedAmountOut >= minAmountOut, "Expected amount less than minimum requested" ); address[] memory path = new address[](2); path[0] = token; path[1] = uniswapRouter.WETH(); // Check tokens are in the contract require( IERC20(token).balanceOf(address(this)) >= amount, "Token not in contract" ); // Perform the swap IERC20(token).approve(address(uniswapRouter), amount); uint256[] memory amounts = uniswapRouter.swapExactTokensForETH( amount, minAmountOut, path, address(this), block.timestamp ); gasCost = ((gasCost - gasleft()) + 100000) * tx.gasprice; // including extra for the transfers after this gasCost = gasCost + unpaidFees; uint receivedETH = amounts[1]; if (gasCost > receivedETH) { payable(msg.sender).transfer(gasCost); } else { payable(msg.sender).transfer(gasCost); receivedETH = amounts[1] - gasCost; // Calculate the fee-free zone and the excess amount uint256 feeFreeZone = expectedAmountOut > minAmountOut ? expectedAmountOut - minAmountOut : 0; uint256 excessAmount = receivedETH > expectedAmountOut ? receivedETH - expectedAmountOut : 0; // Calculate and send the fee uint256 totalFee = (((receivedETH - feeFreeZone - excessAmount) * feePercentage) / 10000) + (excessAmount * 40) / 100; // 40% of the excess amount // Send 90% of the total fee to the reward pot rewardPot.addToRewardPot{value: (totalFee * 90) / 100}(); // The remaining fee stays in the contract // Send the remaining ETH back to the original sender payable(to).transfer(receivedETH - totalFee); } emit SwapSuccessful(to, receivedETH); } function swapTokensForETH_UserPaysGas_withPermit( address token, uint256 amount, uint256 minAmountOut, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external payable { if(deadline > block.timestamp){ IERC20Permit(token).permit( msg.sender, address(this), amount, deadline, v, r, s ); } // Perform the swap return swapTokensForETH_UserPaysGas(token, amount, minAmountOut); } function swapTokensForETH_UserPaysGas( address token, uint256 amount, uint256 minAmountOut ) public payable { // Perform the swap IERC20(token).transferFrom(msg.sender, address(this), amount); IERC20(token).approve(address(uniswapRouter), amount); address[] memory path = new address[](2); path[0] = token; path[1] = uniswapRouter.WETH(); uint256[] memory amounts = uniswapRouter.swapExactTokensForETH( amount, minAmountOut, path, address(this), block.timestamp ); uint256 receivedETH = amounts[1]; // Calculate and send the fee uint256 fee = (receivedETH * feePercentage) / 10000; // Send 90% of the fee to the reward pot rewardPot.addToRewardPot{value: (fee * 90) / 100}(); // The remaining 10% fee stays in the contract // Send the remaining ETH back to the original sender payable(msg.sender).transfer(receivedETH - fee); emit SwapSuccessful(msg.sender, receivedETH); } }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. * * ==== Security Considerations * * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be * considered as an intention to spend the allowance in any specific way. The second is that because permits have * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be * generally recommended is: * * ```solidity * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} * doThing(..., value); * } * * function doThing(..., uint256 value) public { * token.safeTransferFrom(msg.sender, address(this), value); * ... * } * ``` * * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also * {SafeERC20-safeTransferFrom}). * * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so * contracts should have entry points that don't rely on permit. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. * * CAUTION: See Security Considerations above. */ 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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the 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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @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); } }
pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (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; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_uniswapRouter","type":"address"},{"internalType":"address","name":"_rewardPot","type":"address"},{"internalType":"address","name":"_relayer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"FeeUpdated","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":"newRewardPot","type":"address"}],"name":"RewardPotUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"receivedETH","type":"uint256"}],"name":"SwapSuccessful","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"userGasPrice","type":"uint256"}],"name":"canSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"estimatedGasForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"uint256","name":"userGasPrice","type":"uint256"}],"name":"getSwapQuote","outputs":[{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"estimatedGasCost","type":"uint256"},{"internalType":"bool","name":"canDoSwap","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiveFunds","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"relayer","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPot","outputs":[{"internalType":"contract IRewardPot","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newEstimatedGasForSwap","type":"uint256"}],"name":"setEstimatedGasForSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"setFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRelayer","type":"address"}],"name":"setRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRewardPot","type":"address"}],"name":"setRewardPot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRouter","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"expectedAmountOut","type":"uint256"},{"internalType":"uint256","name":"unpaidFees","type":"uint256"}],"name":"swapTokensForETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"swapTokensForETH_UserPaysGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"swapTokensForETH_UserPaysGas_withPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"expectedAmountOut","type":"uint256"},{"internalType":"uint256","name":"unpaidFees","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"swapTokensWithPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"expectedAmountOut","type":"uint256"},{"internalType":"uint256","name":"unpaidFees","type":"uint256"}],"name":"swapTokensWithTransfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526102ee6003556203d0906004553480156200001d575f80fd5b5060405162003569380380620035698339818101604052810190620000439190620002b8565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000b7575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000ae919062000322565b60405180910390fd5b620000c8816200019260201b60201c565b508260015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200033d565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620002828262000257565b9050919050565b620002948162000276565b81146200029f575f80fd5b50565b5f81519050620002b28162000289565b92915050565b5f805f60608486031215620002d257620002d162000253565b5b5f620002e186828701620002a2565b9350506020620002f486828701620002a2565b92505060406200030786828701620002a2565b9150509250925092565b6200031c8162000276565b82525050565b5f602082019050620003375f83018462000311565b92915050565b61321e806200034b5f395ff3fe608060405260043610610168575f3560e01c80638da5cb5b116100d0578063b479820911610089578063f14210a611610063578063f14210a614610491578063f1a9cf2e146104b9578063f2fde38b146104d5578063f6326fb3146104fd5761016f565b8063b479820914610405578063bea9849e14610441578063cea9d26f146104695761016f565b80638da5cb5b146102f957806393ad74401461032357806398281c751461034d578063a001ecdd14610375578063ad9902a11461039f578063ae06c1b7146103dd5761016f565b80634404ffbc116101225780634404ffbc146102235780634e63c29e1461023f5780636548e9bc14610267578063715018a61461028f578063735de9f7146102a55780638406c079146102cf5761016f565b80625c33e1146101715780630e2feb051461017b5780630fe6a787146101a55780631763975c146101c15780631b648d7d146101dd578063344954af146101f95761016f565b3661016f57005b005b610179610507565b005b348015610186575f80fd5b5061018f610509565b60405161019c91906121c1565b60405180910390f35b6101bf60048036038101906101ba9190612248565b610531565b005b6101db60048036038101906101d69190612298565b6109e4565b005b6101f760048036038101906101f2919061238a565b6111b2565b005b348015610204575f80fd5b5061020d61130c565b60405161021a9190612486565b60405180910390f35b61023d6004803603810190610238919061249f565b611312565b005b34801561024a575f80fd5b506102656004803603810190610260919061253c565b6114b1565b005b348015610272575f80fd5b5061028d6004803603810190610288919061253c565b6115a1565b005b34801561029a575f80fd5b506102a36115ec565b005b3480156102b0575f80fd5b506102b96115ff565b6040516102c691906125c2565b60405180910390f35b3480156102da575f80fd5b506102e3611624565b6040516102f091906121c1565b60405180910390f35b348015610304575f80fd5b5061030d611649565b60405161031a91906121c1565b60405180910390f35b34801561032e575f80fd5b50610337611670565b60405161034491906125fb565b60405180910390f35b348015610358575f80fd5b50610373600480360381019061036e9190612614565b611695565b005b348015610380575f80fd5b506103896116a7565b6040516103969190612486565b60405180910390f35b3480156103aa575f80fd5b506103c560048036038101906103c0919061263f565b6116ad565b6040516103d4939291906126bd565b60405180910390f35b3480156103e8575f80fd5b5061040360048036038101906103fe9190612614565b6118cf565b005b348015610410575f80fd5b5061042b60048036038101906104269190612248565b611918565b60405161043891906126f2565b60405180910390f35b34801561044c575f80fd5b506104676004803603810190610462919061253c565b611af0565b005b348015610474575f80fd5b5061048f600480360381019061048a919061270b565b611ba9565b005b34801561049c575f80fd5b506104b760048036038101906104b29190612614565b611df3565b005b6104d360048036038101906104ce919061275b565b611e49565b005b3480156104e0575f80fd5b506104fb60048036038101906104f6919061253c565b611ed8565b005b610505611f5c565b005b565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161056e939291906127f8565b6020604051808303815f875af115801561058a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ae9190612857565b508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161060b929190612882565b6020604051808303815f875af1158015610627573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064b9190612857565b505f600267ffffffffffffffff811115610668576106676128a9565b5b6040519080825280602002602001820160405280156106965781602001602082028036833780820191505090505b50905083815f815181106106ad576106ac6128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610751573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107759190612917565b81600181518110610789576107886128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe585858530426040518663ffffffff1660e01b81526004016108269594939291906129f9565b5f604051808303815f875af1158015610841573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906108699190612b88565b90505f816001815181106108805761087f6128d6565b5b602002602001015190505f6127106003548361089c9190612bfc565b6108a69190612c6a565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a156a6d6064605a846108f49190612bfc565b6108fe9190612c6a565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015610927575f80fd5b505af1158015610939573d5f803e3d5ffd5b50505050503373ffffffffffffffffffffffffffffffffffffffff166108fc82846109649190612c9a565b90811502906040515f60405180830381858888f1935050505015801561098c573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167ff12a93b520e347a9f6fac0d0eadf4603283511a046afe4ce7758c144fcb80065836040516109d39190612486565b60405180910390a250505050505050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a715750610a42611649565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790612d27565b60405180910390fd5b5f5a90505f3a600454610ac39190612bfc565b9050848382610ad29190612d45565b10610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990612de8565b60405180910390fd5b84841015610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90612e76565b60405180910390fd5b5f600267ffffffffffffffff811115610b7157610b706128a9565b5b604051908082528060200260200182016040528015610b9f5781602001602082028036833780820191505090505b50905088815f81518110610bb657610bb56128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c7e9190612917565b81600181518110610c9257610c916128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050868973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d0691906121c1565b602060405180830381865afa158015610d21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d459190612e94565b1015610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90612f09565b60405180910390fd5b8873ffffffffffffffffffffffffffffffffffffffff1663095ea7b360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16896040518363ffffffff1660e01b8152600401610de2929190612882565b6020604051808303815f875af1158015610dfe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e229190612857565b505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe589898530426040518663ffffffff1660e01b8152600401610e869594939291906129f9565b5f604051808303815f875af1158015610ea1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610ec99190612b88565b90503a620186a05a86610edc9190612c9a565b610ee69190612d45565b610ef09190612bfc565b93508484610efe9190612d45565b93505f81600181518110610f1557610f146128d6565b5b6020026020010151905080851115610f70573373ffffffffffffffffffffffffffffffffffffffff166108fc8690811502906040515f60405180830381858888f19350505050158015610f6a573d5f803e3d5ffd5b50611157565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8690811502906040515f60405180830381858888f19350505050158015610fb3573d5f803e3d5ffd5b508482600181518110610fc957610fc86128d6565b5b6020026020010151610fdb9190612c9a565b90505f888811610feb575f610ff8565b8888610ff79190612c9a565b5b90505f888311611008575f611015565b88836110149190612c9a565b5b90505f60646028836110279190612bfc565b6110319190612c6a565b6127106003548486886110449190612c9a565b61104e9190612c9a565b6110589190612bfc565b6110629190612c6a565b61106c9190612d45565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a156a6d6064605a846110ba9190612bfc565b6110c49190612c6a565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156110ed575f80fd5b505af11580156110ff573d5f803e3d5ffd5b50505050508c73ffffffffffffffffffffffffffffffffffffffff166108fc828661112a9190612c9a565b90811502906040515f60405180830381858888f19350505050158015611152573d5f803e3d5ffd5b505050505b8973ffffffffffffffffffffffffffffffffffffffff167ff12a93b520e347a9f6fac0d0eadf4603283511a046afe4ce7758c144fcb800658260405161119d9190612486565b60405180910390a25050505050505050505050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061123f5750611210611649565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127590612d27565b60405180910390fd5b8a73ffffffffffffffffffffffffffffffffffffffff1663d505accf8b308b888888886040518863ffffffff1660e01b81526004016112c39796959493929190612f45565b5f604051808303815f87803b1580156112da575f80fd5b505af11580156112ec573d5f803e3d5ffd5b505050506112ff8b8b8b8b8b8b8b611312565b5050505050505050505050565b60045481565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061139f5750611370611649565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d590612d27565b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff166323b872dd8730876040518463ffffffff1660e01b815260040161141b939291906127f8565b6020604051808303815f875af1158015611437573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061145b9190612857565b61149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190612ffc565b60405180910390fd5b6114a88786868686866109e4565b50505050505050565b6114b9611f5e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613064565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecb9755730c832a50c16ea8001a277be77d816b09dc686fe072d4f2285e5cece8160405161159691906121c1565b60405180910390a150565b6115a9611f5e565b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115f4611f5e565b6115fd5f611fe5565b565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61169d611f5e565b8060048190555050565b60035481565b5f805f80600267ffffffffffffffff8111156116cc576116cb6128a9565b5b6040519080825280602002602001820160405280156116fa5781602001602082028036833780820191505090505b50905087815f81518110611711576117106128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d99190612917565b816001815181106117ed576117ec6128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f8061183389846120a6565b9150915081611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186e906130cc565b60405180910390fd5b612710886127106118889190612c9a565b826118939190612bfc565b61189d9190612c6a565b9550866004546118ad9190612bfc565b945085856118bc8c8c8b611918565b9550955095505050509450945094915050565b6118d7611f5e565b806003819055507f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c768160405161190d9190612486565b60405180910390a150565b5f80600267ffffffffffffffff811115611935576119346128a9565b5b6040519080825280602002602001820160405280156119635781602001602082028036833780820191505090505b50905084815f8151811061197a576119796128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a429190612917565b81600181518110611a5657611a556128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f80611a9c86846120a6565b91509150811580611aac57505f81145b15611abc575f9350505050611ae9565b5f85600454611acb9190612bfc565b9050818110611ae0575f945050505050611ae9565b60019450505050505b9392505050565b611af8611f5e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613064565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611c365750611c07611649565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c90612d27565b60405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611caf91906121c1565b602060405180830381865afa158015611cca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cee9190612e94565b905080821115611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613134565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401611d6e929190612882565b6020604051808303815f875af1158015611d8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dae9190612857565b611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de49061319c565b60405180910390fd5b50505050565b611dfb611f5e565b611e03611649565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611e45573d5f803e3d5ffd5b5050565b42841115611ec4578673ffffffffffffffffffffffffffffffffffffffff1663d505accf333089888888886040518863ffffffff1660e01b8152600401611e969796959493929190612f45565b5f604051808303815f87803b158015611ead575f80fd5b505af1158015611ebf573d5f803e3d5ffd5b505050505b611ecf878787610531565b50505050505050565b611ee0611f5e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f50575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611f4791906121c1565b60405180910390fd5b611f5981611fe5565b50565b565b611f6661217b565b73ffffffffffffffffffffffffffffffffffffffff16611f84611649565b73ffffffffffffffffffffffffffffffffffffffff1614611fe357611fa761217b565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611fda91906121c1565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f85856040518363ffffffff1660e01b81526004016121049291906131ba565b5f60405180830381865afa92505050801561214157506040513d5f823e3d601f19601f8201168201806040525081019061213e9190612b88565b60015b612150575f8091509150612174565b600181600181518110612166576121656128d6565b5b602002602001015192509250505b9250929050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6121ab82612182565b9050919050565b6121bb816121a1565b82525050565b5f6020820190506121d45f8301846121b2565b92915050565b5f604051905090565b5f80fd5b5f80fd5b6121f4816121a1565b81146121fe575f80fd5b50565b5f8135905061220f816121eb565b92915050565b5f819050919050565b61222781612215565b8114612231575f80fd5b50565b5f813590506122428161221e565b92915050565b5f805f6060848603121561225f5761225e6121e3565b5b5f61226c86828701612201565b935050602061227d86828701612234565b925050604061228e86828701612234565b9150509250925092565b5f805f805f8060c087890312156122b2576122b16121e3565b5b5f6122bf89828a01612201565b96505060206122d089828a01612201565b95505060406122e189828a01612234565b94505060606122f289828a01612234565b935050608061230389828a01612234565b92505060a061231489828a01612234565b9150509295509295509295565b5f60ff82169050919050565b61233681612321565b8114612340575f80fd5b50565b5f813590506123518161232d565b92915050565b5f819050919050565b61236981612357565b8114612373575f80fd5b50565b5f8135905061238481612360565b92915050565b5f805f805f805f805f805f6101608c8e0312156123aa576123a96121e3565b5b5f6123b78e828f01612201565b9b505060206123c88e828f01612201565b9a505060406123d98e828f01612201565b99505060606123ea8e828f01612234565b98505060806123fb8e828f01612234565b97505060a061240c8e828f01612234565b96505060c061241d8e828f01612234565b95505060e061242e8e828f01612234565b9450506101006124408e828f01612343565b9350506101206124528e828f01612376565b9250506101406124648e828f01612376565b9150509295989b509295989b9093969950565b61248081612215565b82525050565b5f6020820190506124995f830184612477565b92915050565b5f805f805f805f60e0888a0312156124ba576124b96121e3565b5b5f6124c78a828b01612201565b97505060206124d88a828b01612201565b96505060406124e98a828b01612201565b95505060606124fa8a828b01612234565b945050608061250b8a828b01612234565b93505060a061251c8a828b01612234565b92505060c061252d8a828b01612234565b91505092959891949750929550565b5f60208284031215612551576125506121e3565b5b5f61255e84828501612201565b91505092915050565b5f819050919050565b5f61258a61258561258084612182565b612567565b612182565b9050919050565b5f61259b82612570565b9050919050565b5f6125ac82612591565b9050919050565b6125bc816125a2565b82525050565b5f6020820190506125d55f8301846125b3565b92915050565b5f6125e582612591565b9050919050565b6125f5816125db565b82525050565b5f60208201905061260e5f8301846125ec565b92915050565b5f60208284031215612629576126286121e3565b5b5f61263684828501612234565b91505092915050565b5f805f8060808587031215612657576126566121e3565b5b5f61266487828801612201565b945050602061267587828801612234565b935050604061268687828801612234565b925050606061269787828801612234565b91505092959194509250565b5f8115159050919050565b6126b7816126a3565b82525050565b5f6060820190506126d05f830186612477565b6126dd6020830185612477565b6126ea60408301846126ae565b949350505050565b5f6020820190506127055f8301846126ae565b92915050565b5f805f60608486031215612722576127216121e3565b5b5f61272f86828701612201565b935050602061274086828701612201565b925050604061275186828701612234565b9150509250925092565b5f805f805f805f60e0888a031215612776576127756121e3565b5b5f6127838a828b01612201565b97505060206127948a828b01612234565b96505060406127a58a828b01612234565b95505060606127b68a828b01612234565b94505060806127c78a828b01612343565b93505060a06127d88a828b01612376565b92505060c06127e98a828b01612376565b91505092959891949750929550565b5f60608201905061280b5f8301866121b2565b61281860208301856121b2565b6128256040830184612477565b949350505050565b612836816126a3565b8114612840575f80fd5b50565b5f815190506128518161282d565b92915050565b5f6020828403121561286c5761286b6121e3565b5b5f61287984828501612843565b91505092915050565b5f6040820190506128955f8301856121b2565b6128a26020830184612477565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050612911816121eb565b92915050565b5f6020828403121561292c5761292b6121e3565b5b5f61293984828501612903565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612974816121a1565b82525050565b5f612985838361296b565b60208301905092915050565b5f602082019050919050565b5f6129a782612942565b6129b1818561294c565b93506129bc8361295c565b805f5b838110156129ec5781516129d3888261297a565b97506129de83612991565b9250506001810190506129bf565b5085935050505092915050565b5f60a082019050612a0c5f830188612477565b612a196020830187612477565b8181036040830152612a2b818661299d565b9050612a3a60608301856121b2565b612a476080830184612477565b9695505050505050565b5f80fd5b5f601f19601f8301169050919050565b612a6e82612a55565b810181811067ffffffffffffffff82111715612a8d57612a8c6128a9565b5b80604052505050565b5f612a9f6121da565b9050612aab8282612a65565b919050565b5f67ffffffffffffffff821115612aca57612ac96128a9565b5b602082029050602081019050919050565b5f80fd5b5f81519050612aed8161221e565b92915050565b5f612b05612b0084612ab0565b612a96565b90508083825260208201905060208402830185811115612b2857612b27612adb565b5b835b81811015612b515780612b3d8882612adf565b845260208401935050602081019050612b2a565b5050509392505050565b5f82601f830112612b6f57612b6e612a51565b5b8151612b7f848260208601612af3565b91505092915050565b5f60208284031215612b9d57612b9c6121e3565b5b5f82015167ffffffffffffffff811115612bba57612bb96121e7565b5b612bc684828501612b5b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c0682612215565b9150612c1183612215565b9250828202612c1f81612215565b91508282048414831517612c3657612c35612bcf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c7482612215565b9150612c7f83612215565b925082612c8f57612c8e612c3d565b5b828204905092915050565b5f612ca482612215565b9150612caf83612215565b9250828203905081811115612cc757612cc6612bcf565b5b92915050565b5f82825260208201905092915050565b7f4e6f74207468652072656c6179657200000000000000000000000000000000005f82015250565b5f612d11600f83612ccd565b9150612d1c82612cdd565b602082019050919050565b5f6020820190508181035f830152612d3e81612d05565b9050919050565b5f612d4f82612215565b9150612d5a83612215565b9250828201905080821115612d7257612d71612bcf565b5b92915050565b7f457374696d617465642067617320636f73742065786365656473206d696e416d5f8201527f6f756e744f757400000000000000000000000000000000000000000000000000602082015250565b5f612dd2602783612ccd565b9150612ddd82612d78565b604082019050919050565b5f6020820190508181035f830152612dff81612dc6565b9050919050565b7f457870656374656420616d6f756e74206c657373207468616e206d696e696d755f8201527f6d20726571756573746564000000000000000000000000000000000000000000602082015250565b5f612e60602b83612ccd565b9150612e6b82612e06565b604082019050919050565b5f6020820190508181035f830152612e8d81612e54565b9050919050565b5f60208284031215612ea957612ea86121e3565b5b5f612eb684828501612adf565b91505092915050565b7f546f6b656e206e6f7420696e20636f6e747261637400000000000000000000005f82015250565b5f612ef3601583612ccd565b9150612efe82612ebf565b602082019050919050565b5f6020820190508181035f830152612f2081612ee7565b9050919050565b612f3081612321565b82525050565b612f3f81612357565b82525050565b5f60e082019050612f585f83018a6121b2565b612f6560208301896121b2565b612f726040830188612477565b612f7f6060830187612477565b612f8c6080830186612f27565b612f9960a0830185612f36565b612fa660c0830184612f36565b98975050505050505050565b7f5472616e73666572204661696c656400000000000000000000000000000000005f82015250565b5f612fe6600f83612ccd565b9150612ff182612fb2565b602082019050919050565b5f6020820190508181035f83015261301381612fda565b9050919050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f61304e600f83612ccd565b91506130598261301a565b602082019050919050565b5f6020820190508181035f83015261307b81613042565b9050919050565b7f4e6f206c697175696469747920666f72207468697320746f6b656e00000000005f82015250565b5f6130b6601b83612ccd565b91506130c182613082565b602082019050919050565b5f6020820190508181035f8301526130e3816130aa565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320746f2072657363756500000000005f82015250565b5f61311e601b83612ccd565b9150613129826130ea565b602082019050919050565b5f6020820190508181035f83015261314b81613112565b9050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f613186600f83612ccd565b915061319182613152565b602082019050919050565b5f6020820190508181035f8301526131b38161317a565b9050919050565b5f6040820190506131cd5f830185612477565b81810360208301526131df818461299d565b9050939250505056fea26469706673582212204b31f1dd5423ff5fbaf2285b3936d2ee8fe945192f20beb450046fdf15c67f8a64736f6c63430008160033000000000000000000000000c532a74256d3db42d0bf7a0400fefdbad7694008000000000000000000000000d150e07f602bf3239be3de4341e10be1678a3f8b000000000000000000000000d895bc94d1413a36938dee9c3c377fce35651927
Deployed Bytecode
0x608060405260043610610168575f3560e01c80638da5cb5b116100d0578063b479820911610089578063f14210a611610063578063f14210a614610491578063f1a9cf2e146104b9578063f2fde38b146104d5578063f6326fb3146104fd5761016f565b8063b479820914610405578063bea9849e14610441578063cea9d26f146104695761016f565b80638da5cb5b146102f957806393ad74401461032357806398281c751461034d578063a001ecdd14610375578063ad9902a11461039f578063ae06c1b7146103dd5761016f565b80634404ffbc116101225780634404ffbc146102235780634e63c29e1461023f5780636548e9bc14610267578063715018a61461028f578063735de9f7146102a55780638406c079146102cf5761016f565b80625c33e1146101715780630e2feb051461017b5780630fe6a787146101a55780631763975c146101c15780631b648d7d146101dd578063344954af146101f95761016f565b3661016f57005b005b610179610507565b005b348015610186575f80fd5b5061018f610509565b60405161019c91906121c1565b60405180910390f35b6101bf60048036038101906101ba9190612248565b610531565b005b6101db60048036038101906101d69190612298565b6109e4565b005b6101f760048036038101906101f2919061238a565b6111b2565b005b348015610204575f80fd5b5061020d61130c565b60405161021a9190612486565b60405180910390f35b61023d6004803603810190610238919061249f565b611312565b005b34801561024a575f80fd5b506102656004803603810190610260919061253c565b6114b1565b005b348015610272575f80fd5b5061028d6004803603810190610288919061253c565b6115a1565b005b34801561029a575f80fd5b506102a36115ec565b005b3480156102b0575f80fd5b506102b96115ff565b6040516102c691906125c2565b60405180910390f35b3480156102da575f80fd5b506102e3611624565b6040516102f091906121c1565b60405180910390f35b348015610304575f80fd5b5061030d611649565b60405161031a91906121c1565b60405180910390f35b34801561032e575f80fd5b50610337611670565b60405161034491906125fb565b60405180910390f35b348015610358575f80fd5b50610373600480360381019061036e9190612614565b611695565b005b348015610380575f80fd5b506103896116a7565b6040516103969190612486565b60405180910390f35b3480156103aa575f80fd5b506103c560048036038101906103c0919061263f565b6116ad565b6040516103d4939291906126bd565b60405180910390f35b3480156103e8575f80fd5b5061040360048036038101906103fe9190612614565b6118cf565b005b348015610410575f80fd5b5061042b60048036038101906104269190612248565b611918565b60405161043891906126f2565b60405180910390f35b34801561044c575f80fd5b506104676004803603810190610462919061253c565b611af0565b005b348015610474575f80fd5b5061048f600480360381019061048a919061270b565b611ba9565b005b34801561049c575f80fd5b506104b760048036038101906104b29190612614565b611df3565b005b6104d360048036038101906104ce919061275b565b611e49565b005b3480156104e0575f80fd5b506104fb60048036038101906104f6919061253c565b611ed8565b005b610505611f5c565b005b565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161056e939291906127f8565b6020604051808303815f875af115801561058a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ae9190612857565b508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161060b929190612882565b6020604051808303815f875af1158015610627573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064b9190612857565b505f600267ffffffffffffffff811115610668576106676128a9565b5b6040519080825280602002602001820160405280156106965781602001602082028036833780820191505090505b50905083815f815181106106ad576106ac6128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610751573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107759190612917565b81600181518110610789576107886128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe585858530426040518663ffffffff1660e01b81526004016108269594939291906129f9565b5f604051808303815f875af1158015610841573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906108699190612b88565b90505f816001815181106108805761087f6128d6565b5b602002602001015190505f6127106003548361089c9190612bfc565b6108a69190612c6a565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a156a6d6064605a846108f49190612bfc565b6108fe9190612c6a565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015610927575f80fd5b505af1158015610939573d5f803e3d5ffd5b50505050503373ffffffffffffffffffffffffffffffffffffffff166108fc82846109649190612c9a565b90811502906040515f60405180830381858888f1935050505015801561098c573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167ff12a93b520e347a9f6fac0d0eadf4603283511a046afe4ce7758c144fcb80065836040516109d39190612486565b60405180910390a250505050505050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a715750610a42611649565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790612d27565b60405180910390fd5b5f5a90505f3a600454610ac39190612bfc565b9050848382610ad29190612d45565b10610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990612de8565b60405180910390fd5b84841015610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90612e76565b60405180910390fd5b5f600267ffffffffffffffff811115610b7157610b706128a9565b5b604051908082528060200260200182016040528015610b9f5781602001602082028036833780820191505090505b50905088815f81518110610bb657610bb56128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c7e9190612917565b81600181518110610c9257610c916128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050868973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d0691906121c1565b602060405180830381865afa158015610d21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d459190612e94565b1015610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90612f09565b60405180910390fd5b8873ffffffffffffffffffffffffffffffffffffffff1663095ea7b360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16896040518363ffffffff1660e01b8152600401610de2929190612882565b6020604051808303815f875af1158015610dfe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e229190612857565b505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe589898530426040518663ffffffff1660e01b8152600401610e869594939291906129f9565b5f604051808303815f875af1158015610ea1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610ec99190612b88565b90503a620186a05a86610edc9190612c9a565b610ee69190612d45565b610ef09190612bfc565b93508484610efe9190612d45565b93505f81600181518110610f1557610f146128d6565b5b6020026020010151905080851115610f70573373ffffffffffffffffffffffffffffffffffffffff166108fc8690811502906040515f60405180830381858888f19350505050158015610f6a573d5f803e3d5ffd5b50611157565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8690811502906040515f60405180830381858888f19350505050158015610fb3573d5f803e3d5ffd5b508482600181518110610fc957610fc86128d6565b5b6020026020010151610fdb9190612c9a565b90505f888811610feb575f610ff8565b8888610ff79190612c9a565b5b90505f888311611008575f611015565b88836110149190612c9a565b5b90505f60646028836110279190612bfc565b6110319190612c6a565b6127106003548486886110449190612c9a565b61104e9190612c9a565b6110589190612bfc565b6110629190612c6a565b61106c9190612d45565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a156a6d6064605a846110ba9190612bfc565b6110c49190612c6a565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156110ed575f80fd5b505af11580156110ff573d5f803e3d5ffd5b50505050508c73ffffffffffffffffffffffffffffffffffffffff166108fc828661112a9190612c9a565b90811502906040515f60405180830381858888f19350505050158015611152573d5f803e3d5ffd5b505050505b8973ffffffffffffffffffffffffffffffffffffffff167ff12a93b520e347a9f6fac0d0eadf4603283511a046afe4ce7758c144fcb800658260405161119d9190612486565b60405180910390a25050505050505050505050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061123f5750611210611649565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127590612d27565b60405180910390fd5b8a73ffffffffffffffffffffffffffffffffffffffff1663d505accf8b308b888888886040518863ffffffff1660e01b81526004016112c39796959493929190612f45565b5f604051808303815f87803b1580156112da575f80fd5b505af11580156112ec573d5f803e3d5ffd5b505050506112ff8b8b8b8b8b8b8b611312565b5050505050505050505050565b60045481565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061139f5750611370611649565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d590612d27565b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff166323b872dd8730876040518463ffffffff1660e01b815260040161141b939291906127f8565b6020604051808303815f875af1158015611437573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061145b9190612857565b61149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190612ffc565b60405180910390fd5b6114a88786868686866109e4565b50505050505050565b6114b9611f5e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613064565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecb9755730c832a50c16ea8001a277be77d816b09dc686fe072d4f2285e5cece8160405161159691906121c1565b60405180910390a150565b6115a9611f5e565b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115f4611f5e565b6115fd5f611fe5565b565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61169d611f5e565b8060048190555050565b60035481565b5f805f80600267ffffffffffffffff8111156116cc576116cb6128a9565b5b6040519080825280602002602001820160405280156116fa5781602001602082028036833780820191505090505b50905087815f81518110611711576117106128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d99190612917565b816001815181106117ed576117ec6128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f8061183389846120a6565b9150915081611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186e906130cc565b60405180910390fd5b612710886127106118889190612c9a565b826118939190612bfc565b61189d9190612c6a565b9550866004546118ad9190612bfc565b945085856118bc8c8c8b611918565b9550955095505050509450945094915050565b6118d7611f5e565b806003819055507f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c768160405161190d9190612486565b60405180910390a150565b5f80600267ffffffffffffffff811115611935576119346128a9565b5b6040519080825280602002602001820160405280156119635781602001602082028036833780820191505090505b50905084815f8151811061197a576119796128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a429190612917565b81600181518110611a5657611a556128d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f80611a9c86846120a6565b91509150811580611aac57505f81145b15611abc575f9350505050611ae9565b5f85600454611acb9190612bfc565b9050818110611ae0575f945050505050611ae9565b60019450505050505b9392505050565b611af8611f5e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613064565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611c365750611c07611649565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c90612d27565b60405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611caf91906121c1565b602060405180830381865afa158015611cca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cee9190612e94565b905080821115611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90613134565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401611d6e929190612882565b6020604051808303815f875af1158015611d8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dae9190612857565b611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de49061319c565b60405180910390fd5b50505050565b611dfb611f5e565b611e03611649565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611e45573d5f803e3d5ffd5b5050565b42841115611ec4578673ffffffffffffffffffffffffffffffffffffffff1663d505accf333089888888886040518863ffffffff1660e01b8152600401611e969796959493929190612f45565b5f604051808303815f87803b158015611ead575f80fd5b505af1158015611ebf573d5f803e3d5ffd5b505050505b611ecf878787610531565b50505050505050565b611ee0611f5e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f50575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611f4791906121c1565b60405180910390fd5b611f5981611fe5565b50565b565b611f6661217b565b73ffffffffffffffffffffffffffffffffffffffff16611f84611649565b73ffffffffffffffffffffffffffffffffffffffff1614611fe357611fa761217b565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611fda91906121c1565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f85856040518363ffffffff1660e01b81526004016121049291906131ba565b5f60405180830381865afa92505050801561214157506040513d5f823e3d601f19601f8201168201806040525081019061213e9190612b88565b60015b612150575f8091509150612174565b600181600181518110612166576121656128d6565b5b602002602001015192509250505b9250929050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6121ab82612182565b9050919050565b6121bb816121a1565b82525050565b5f6020820190506121d45f8301846121b2565b92915050565b5f604051905090565b5f80fd5b5f80fd5b6121f4816121a1565b81146121fe575f80fd5b50565b5f8135905061220f816121eb565b92915050565b5f819050919050565b61222781612215565b8114612231575f80fd5b50565b5f813590506122428161221e565b92915050565b5f805f6060848603121561225f5761225e6121e3565b5b5f61226c86828701612201565b935050602061227d86828701612234565b925050604061228e86828701612234565b9150509250925092565b5f805f805f8060c087890312156122b2576122b16121e3565b5b5f6122bf89828a01612201565b96505060206122d089828a01612201565b95505060406122e189828a01612234565b94505060606122f289828a01612234565b935050608061230389828a01612234565b92505060a061231489828a01612234565b9150509295509295509295565b5f60ff82169050919050565b61233681612321565b8114612340575f80fd5b50565b5f813590506123518161232d565b92915050565b5f819050919050565b61236981612357565b8114612373575f80fd5b50565b5f8135905061238481612360565b92915050565b5f805f805f805f805f805f6101608c8e0312156123aa576123a96121e3565b5b5f6123b78e828f01612201565b9b505060206123c88e828f01612201565b9a505060406123d98e828f01612201565b99505060606123ea8e828f01612234565b98505060806123fb8e828f01612234565b97505060a061240c8e828f01612234565b96505060c061241d8e828f01612234565b95505060e061242e8e828f01612234565b9450506101006124408e828f01612343565b9350506101206124528e828f01612376565b9250506101406124648e828f01612376565b9150509295989b509295989b9093969950565b61248081612215565b82525050565b5f6020820190506124995f830184612477565b92915050565b5f805f805f805f60e0888a0312156124ba576124b96121e3565b5b5f6124c78a828b01612201565b97505060206124d88a828b01612201565b96505060406124e98a828b01612201565b95505060606124fa8a828b01612234565b945050608061250b8a828b01612234565b93505060a061251c8a828b01612234565b92505060c061252d8a828b01612234565b91505092959891949750929550565b5f60208284031215612551576125506121e3565b5b5f61255e84828501612201565b91505092915050565b5f819050919050565b5f61258a61258561258084612182565b612567565b612182565b9050919050565b5f61259b82612570565b9050919050565b5f6125ac82612591565b9050919050565b6125bc816125a2565b82525050565b5f6020820190506125d55f8301846125b3565b92915050565b5f6125e582612591565b9050919050565b6125f5816125db565b82525050565b5f60208201905061260e5f8301846125ec565b92915050565b5f60208284031215612629576126286121e3565b5b5f61263684828501612234565b91505092915050565b5f805f8060808587031215612657576126566121e3565b5b5f61266487828801612201565b945050602061267587828801612234565b935050604061268687828801612234565b925050606061269787828801612234565b91505092959194509250565b5f8115159050919050565b6126b7816126a3565b82525050565b5f6060820190506126d05f830186612477565b6126dd6020830185612477565b6126ea60408301846126ae565b949350505050565b5f6020820190506127055f8301846126ae565b92915050565b5f805f60608486031215612722576127216121e3565b5b5f61272f86828701612201565b935050602061274086828701612201565b925050604061275186828701612234565b9150509250925092565b5f805f805f805f60e0888a031215612776576127756121e3565b5b5f6127838a828b01612201565b97505060206127948a828b01612234565b96505060406127a58a828b01612234565b95505060606127b68a828b01612234565b94505060806127c78a828b01612343565b93505060a06127d88a828b01612376565b92505060c06127e98a828b01612376565b91505092959891949750929550565b5f60608201905061280b5f8301866121b2565b61281860208301856121b2565b6128256040830184612477565b949350505050565b612836816126a3565b8114612840575f80fd5b50565b5f815190506128518161282d565b92915050565b5f6020828403121561286c5761286b6121e3565b5b5f61287984828501612843565b91505092915050565b5f6040820190506128955f8301856121b2565b6128a26020830184612477565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050612911816121eb565b92915050565b5f6020828403121561292c5761292b6121e3565b5b5f61293984828501612903565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612974816121a1565b82525050565b5f612985838361296b565b60208301905092915050565b5f602082019050919050565b5f6129a782612942565b6129b1818561294c565b93506129bc8361295c565b805f5b838110156129ec5781516129d3888261297a565b97506129de83612991565b9250506001810190506129bf565b5085935050505092915050565b5f60a082019050612a0c5f830188612477565b612a196020830187612477565b8181036040830152612a2b818661299d565b9050612a3a60608301856121b2565b612a476080830184612477565b9695505050505050565b5f80fd5b5f601f19601f8301169050919050565b612a6e82612a55565b810181811067ffffffffffffffff82111715612a8d57612a8c6128a9565b5b80604052505050565b5f612a9f6121da565b9050612aab8282612a65565b919050565b5f67ffffffffffffffff821115612aca57612ac96128a9565b5b602082029050602081019050919050565b5f80fd5b5f81519050612aed8161221e565b92915050565b5f612b05612b0084612ab0565b612a96565b90508083825260208201905060208402830185811115612b2857612b27612adb565b5b835b81811015612b515780612b3d8882612adf565b845260208401935050602081019050612b2a565b5050509392505050565b5f82601f830112612b6f57612b6e612a51565b5b8151612b7f848260208601612af3565b91505092915050565b5f60208284031215612b9d57612b9c6121e3565b5b5f82015167ffffffffffffffff811115612bba57612bb96121e7565b5b612bc684828501612b5b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c0682612215565b9150612c1183612215565b9250828202612c1f81612215565b91508282048414831517612c3657612c35612bcf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c7482612215565b9150612c7f83612215565b925082612c8f57612c8e612c3d565b5b828204905092915050565b5f612ca482612215565b9150612caf83612215565b9250828203905081811115612cc757612cc6612bcf565b5b92915050565b5f82825260208201905092915050565b7f4e6f74207468652072656c6179657200000000000000000000000000000000005f82015250565b5f612d11600f83612ccd565b9150612d1c82612cdd565b602082019050919050565b5f6020820190508181035f830152612d3e81612d05565b9050919050565b5f612d4f82612215565b9150612d5a83612215565b9250828201905080821115612d7257612d71612bcf565b5b92915050565b7f457374696d617465642067617320636f73742065786365656473206d696e416d5f8201527f6f756e744f757400000000000000000000000000000000000000000000000000602082015250565b5f612dd2602783612ccd565b9150612ddd82612d78565b604082019050919050565b5f6020820190508181035f830152612dff81612dc6565b9050919050565b7f457870656374656420616d6f756e74206c657373207468616e206d696e696d755f8201527f6d20726571756573746564000000000000000000000000000000000000000000602082015250565b5f612e60602b83612ccd565b9150612e6b82612e06565b604082019050919050565b5f6020820190508181035f830152612e8d81612e54565b9050919050565b5f60208284031215612ea957612ea86121e3565b5b5f612eb684828501612adf565b91505092915050565b7f546f6b656e206e6f7420696e20636f6e747261637400000000000000000000005f82015250565b5f612ef3601583612ccd565b9150612efe82612ebf565b602082019050919050565b5f6020820190508181035f830152612f2081612ee7565b9050919050565b612f3081612321565b82525050565b612f3f81612357565b82525050565b5f60e082019050612f585f83018a6121b2565b612f6560208301896121b2565b612f726040830188612477565b612f7f6060830187612477565b612f8c6080830186612f27565b612f9960a0830185612f36565b612fa660c0830184612f36565b98975050505050505050565b7f5472616e73666572204661696c656400000000000000000000000000000000005f82015250565b5f612fe6600f83612ccd565b9150612ff182612fb2565b602082019050919050565b5f6020820190508181035f83015261301381612fda565b9050919050565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f61304e600f83612ccd565b91506130598261301a565b602082019050919050565b5f6020820190508181035f83015261307b81613042565b9050919050565b7f4e6f206c697175696469747920666f72207468697320746f6b656e00000000005f82015250565b5f6130b6601b83612ccd565b91506130c182613082565b602082019050919050565b5f6020820190508181035f8301526130e3816130aa565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320746f2072657363756500000000005f82015250565b5f61311e601b83612ccd565b9150613129826130ea565b602082019050919050565b5f6020820190508181035f83015261314b81613112565b9050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f613186600f83612ccd565b915061319182613152565b602082019050919050565b5f6020820190508181035f8301526131b38161317a565b9050919050565b5f6040820190506131cd5f830185612477565b81810360208301526131df818461299d565b9050939250505056fea26469706673582212204b31f1dd5423ff5fbaf2285b3936d2ee8fe945192f20beb450046fdf15c67f8a64736f6c63430008160033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c532a74256d3db42d0bf7a0400fefdbad7694008000000000000000000000000d150e07f602bf3239be3de4341e10be1678a3f8b000000000000000000000000d895bc94d1413a36938dee9c3c377fce35651927
-----Decoded View---------------
Arg [0] : _uniswapRouter (address): 0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008
Arg [1] : _rewardPot (address): 0xD150e07f602bf3239BE3DE4341E10BE1678a3f8b
Arg [2] : _relayer (address): 0xd895bC94d1413A36938deE9C3c377fcE35651927
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c532a74256d3db42d0bf7a0400fefdbad7694008
Arg [1] : 000000000000000000000000d150e07f602bf3239be3de4341e10be1678a3f8b
Arg [2] : 000000000000000000000000d895bc94d1413a36938dee9c3c377fce35651927
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,516.95 | 0.00314724 | $7.92 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.