Source Code
Overview
XDC Balance
XDC Value
$0.00Latest 25 from a total of 4,080 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Liquidity ET... | 90992123 | 4 hrs ago | IN | 11.60915331 XDC | 0.00274755 | ||||
Swap Exact Token... | 90992112 | 4 hrs ago | IN | 0 XDC | 0.0019107 | ||||
Swap Exact Token... | 90992103 | 4 hrs ago | IN | 0 XDC | 0.00146045 | ||||
Swap Exact Token... | 90967011 | 19 hrs ago | IN | 0 XDC | 0.0015511 | ||||
Swap Exact Token... | 90966361 | 20 hrs ago | IN | 0 XDC | 0.00156176 | ||||
Add Liquidity ET... | 90961897 | 22 hrs ago | IN | 0.52345707 XDC | 0.00262828 | ||||
Swap Exact ETH F... | 90961856 | 22 hrs ago | IN | 0.525 XDC | 0.0014932 | ||||
Add Liquidity ET... | 90961791 | 23 hrs ago | IN | 2.99104185 XDC | 0.00259658 | ||||
Swap Exact ETH F... | 90961772 | 23 hrs ago | IN | 3 XDC | 0.00184552 | ||||
Add Liquidity ET... | 90961721 | 23 hrs ago | IN | 7.03714974 XDC | 0.00249857 | ||||
Swap Exact ETH F... | 90961696 | 23 hrs ago | IN | 5 XDC | 0.00149025 | ||||
Swap Exact Token... | 90961654 | 23 hrs ago | IN | 0 XDC | 0.00208823 | ||||
Swap Exact ETH F... | 90961615 | 23 hrs ago | IN | 1 XDC | 0.0014932 | ||||
Swap Exact ETH F... | 90961551 | 23 hrs ago | IN | 1 XDC | 0.0014932 | ||||
Swap Exact Token... | 90949209 | 30 hrs ago | IN | 0 XDC | 0.00170709 | ||||
Swap Exact Token... | 90938130 | 37 hrs ago | IN | 0 XDC | 0.00156176 | ||||
Swap Exact Token... | 90936012 | 38 hrs ago | IN | 0 XDC | 0.00156176 | ||||
Swap Exact Token... | 90936005 | 38 hrs ago | IN | 0 XDC | 0.00156176 | ||||
Add Liquidity ET... | 90928000 | 43 hrs ago | IN | 30.22315576 XDC | 0.00249617 | ||||
Swap Exact Token... | 90909805 | 2 days ago | IN | 0 XDC | 0.00170533 | ||||
Add Liquidity ET... | 90895543 | 2 days ago | IN | 3.47635517 XDC | 0.00274755 | ||||
Swap Exact Token... | 90895533 | 2 days ago | IN | 0 XDC | 0.00191158 | ||||
Swap Exact Token... | 90895525 | 2 days ago | IN | 0 XDC | 0.00146045 | ||||
Add Liquidity ET... | 90895507 | 2 days ago | IN | 26.61823556 XDC | 0.00274931 | ||||
Swap Exact Token... | 90895494 | 2 days ago | IN | 0 XDC | 0.00191246 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
90992123 | 4 hrs ago | 11.60915331 XDC | ||||
90992112 | 4 hrs ago | 11.57495349 XDC | ||||
90992112 | 4 hrs ago | 11.57495349 XDC | ||||
90967011 | 19 hrs ago | 491.84779962 XDC | ||||
90967011 | 19 hrs ago | 491.84779962 XDC | ||||
90961897 | 22 hrs ago | 0.52345707 XDC | ||||
90961856 | 22 hrs ago | 0.525 XDC | ||||
90961791 | 23 hrs ago | 0.0002703 XDC | ||||
90961791 | 23 hrs ago | 2.99077154 XDC | ||||
90961772 | 23 hrs ago | 3 XDC | ||||
90961721 | 23 hrs ago | 7.03714974 XDC | ||||
90961696 | 23 hrs ago | 5 XDC | ||||
90961615 | 23 hrs ago | 1 XDC | ||||
90961551 | 23 hrs ago | 1 XDC | ||||
90949209 | 30 hrs ago | 144.31555039 XDC | ||||
90949209 | 30 hrs ago | 144.31555039 XDC | ||||
90928000 | 43 hrs ago | 30.22315576 XDC | ||||
90909805 | 2 days ago | 490.69829551 XDC | ||||
90909805 | 2 days ago | 490.69829551 XDC | ||||
90895543 | 2 days ago | 3.47635517 XDC | ||||
90895533 | 2 days ago | 3.46598156 XDC | ||||
90895533 | 2 days ago | 3.46598156 XDC | ||||
90895507 | 2 days ago | 26.61823556 XDC | ||||
90895494 | 2 days ago | 26.54163267 XDC | ||||
90895494 | 2 days ago | 26.54163267 XDC |
Loading...
Loading
Contract Name:
NexusRouter
Compiler Version
v0.8.12+commit.f00d7308
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; import "./NexusSwap/Interfaces/INexusSwapRouter02.sol"; import "./NexusSwap/Interfaces/INexusSwapFactory.sol"; import "./Mocks/IWETH.sol"; import "./Uniswap/Interfaces/IERC20Uniswap.sol"; import "./Libraries/SafeMathUniswap.sol"; import "./Libraries/NexusSwapLibrary.sol"; import "./Libraries/TransferHelper.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; contract NexusRouter is INexusSwapRouter02 { using SafeMathUniswap for uint; address public immutable factory; address public immutable WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, "NexusRouter: EXPIRED"); _; } constructor(address _factory, address _WETH) { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (INexusSwapFactory(factory).getPair(tokenA, tokenB) == address(0)) { INexusSwapFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = NexusSwapLibrary.getReserves( factory, tokenA, tokenB ); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = NexusSwapLibrary.quote( amountADesired, reserveA, reserveB ); if (amountBOptimal <= amountBDesired) { require( amountBOptimal >= amountBMin, "NexusRouter: INSUFFICIENT_B_AMOUNT" ); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = NexusSwapLibrary.quote( amountBDesired, reserveB, reserveA ); assert(amountAOptimal <= amountADesired); require( amountAOptimal >= amountAMin, "NexusRouter: INSUFFICIENT_A_AMOUNT" ); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity( tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin ); address pair = NexusSwapLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = INexusSwapPair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = NexusSwapLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = INexusSwapPair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = NexusSwapLibrary.pairFor(factory, tokenA, tokenB); INexusSwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = INexusSwapPair(pair).burn(to); (address token0, ) = NexusSwapLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, "NexusRouter: INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "NexusRouter: INSUFFICIENT_B_AMOUNT"); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, 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 virtual override returns (uint amountA, uint amountB) { address pair = NexusSwapLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? type(uint).max : liquidity; INexusSwapPair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); (amountA, amountB) = removeLiquidity( tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline ); } function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = NexusSwapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? type(uint).max : liquidity; INexusSwapPair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); (amountToken, amountETH) = removeLiquidityETH( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer( token, to, IERC20Uniswap(token).balanceOf(address(this)) ); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = NexusSwapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? type(uint).max : liquidity; INexusSwapPair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap( uint[] memory amounts, address[] memory path, address _to ) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = NexusSwapLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? NexusSwapLibrary.pairFor(factory, output, path[i + 2]) : _to; INexusSwapPair(NexusSwapLibrary.pairFor(factory, input, output)) .swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = NexusSwapLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "NexusRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, NexusSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = NexusSwapLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "NexusRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, NexusSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, "NexusRouter: INVALID_PATH"); amounts = NexusSwapLibrary.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "NexusRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( NexusSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); } function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, "NexusRouter: INVALID_PATH"); amounts = NexusSwapLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "NexusRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, NexusSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, "NexusRouter: INVALID_PATH"); amounts = NexusSwapLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "NexusRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, NexusSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, "NexusRouter: INVALID_PATH"); amounts = NexusSwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, "NexusRouter: EXCESSIVE_INPUT_AMOUNT"); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( NexusSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens( address[] memory path, address _to ) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = NexusSwapLibrary.sortTokens(input, output); INexusSwapPair pair = INexusSwapPair( NexusSwapLibrary.pairFor(factory, input, output) ); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1, ) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20Uniswap(input).balanceOf(address(pair)).sub( reserveInput ); amountOutput = NexusSwapLibrary.getAmountOut( amountInput, reserveInput, reserveOutput ); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? NexusSwapLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, NexusSwapLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint balanceBefore = IERC20Uniswap(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20Uniswap(path[path.length - 1]).balanceOf(to).sub( balanceBefore ) >= amountOutMin, "NexusRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) { require(path[0] == WETH, "NexusRouter: INVALID_PATH"); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert( IWETH(WETH).transfer( NexusSwapLibrary.pairFor(factory, path[0], path[1]), amountIn ) ); uint balanceBefore = IERC20Uniswap(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20Uniswap(path[path.length - 1]).balanceOf(to).sub( balanceBefore ) >= amountOutMin, "NexusRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, "NexusRouter: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, NexusSwapLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20Uniswap(WETH).balanceOf(address(this)); require( amountOut >= amountOutMin, "NexusRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint amountA, uint reserveA, uint reserveB ) public pure virtual override returns (uint amountB) { return NexusSwapLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) public pure virtual override returns (uint amountOut) { return NexusSwapLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) public pure virtual override returns (uint amountIn) { return NexusSwapLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut( uint amountIn, address[] memory path ) public view virtual override returns (uint[] memory amounts) { return NexusSwapLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn( uint amountOut, address[] memory path ) public view virtual override returns (uint[] memory amounts) { return NexusSwapLibrary.getAmountsIn(factory, amountOut, path); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; import "./SafeMathUniswap.sol"; import "../NexusSwap/Interfaces/INexusSwapPair.sol"; library NexusSwapLibrary { using SafeMathUniswap for uint; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens( address tokenA, address tokenB ) internal pure returns (address token0, address token1) { require(tokenA != tokenB, "NexusLibrary: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "NexusLibrary: ZERO_ADDRESS"); } // calculates the CREATE2 address for a pair without making any external calls function pairFor( address factory, address tokenA, address tokenB ) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address( uint160( uint256( keccak256( abi.encodePacked( hex"ff", factory, keccak256(abi.encodePacked(token0, token1)), hex"69f87219435c6fe01b08d421b51fe0866c422f9b32e9e714e1f24068c99274fd" // init code hash ) ) ) ) ); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint reserveA, uint reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1, ) = INexusSwapPair( pairFor(factory, tokenA, tokenB) ).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote( uint amountA, uint reserveA, uint reserveB ) internal pure returns (uint amountB) { require(amountA > 0, "NexusLibrary: INSUFFICIENT_AMOUNT"); require( reserveA > 0 && reserveB > 0, "NexusLibrary: INSUFFICIENT_LIQUIDITY" ); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) internal pure returns (uint amountOut) { require(amountIn > 0, "NexusLibrary: INSUFFICIENT_INPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "NexusLibrary: INSUFFICIENT_LIQUIDITY" ); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) internal pure returns (uint amountIn) { require(amountOut > 0, "NexusLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "NexusLibrary: INSUFFICIENT_LIQUIDITY" ); uint numerator = reserveIn.mul(amountOut).mul(1000); uint denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint amountIn, address[] memory path ) internal view returns (uint[] memory amounts) { require(path.length >= 2, "NexusLibrary: INVALID_PATH"); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves( factory, path[i], path[i + 1] ); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn( address factory, uint amountOut, address[] memory path ) internal view returns (uint[] memory amounts) { require(path.length >= 2, "NexusLibrary: INVALID_PATH"); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves( factory, path[i - 1], path[i] ); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; library SafeMathUniswap { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; import "../../Uniswap/Interfaces/IUniswapV2Factory.sol"; interface INexusSwapFactory is IUniswapV2Factory {}
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; import "../../Uniswap/Interfaces/IUniswapV2Pair.sol"; interface INexusSwapPair is IUniswapV2Pair {}
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; interface INexusSwapRouter01 { function factory() external view returns (address); function WETH() external view 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 pragma solidity ^0.8.12; import "./INexusSwapRouter01.sol"; interface INexusSwapRouter02 is INexusSwapRouter01 { 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 pragma solidity ^0.8.12; interface IERC20Uniswap { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance( address owner, address spender ) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom( address from, address to, uint value ) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setMigrator(address) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn( address to ) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b506040516200432438038062004324833981016040819052620000349162000069565b6001600160a01b039182166080521660a052620000a1565b80516001600160a01b03811681146200006457600080fd5b919050565b600080604083850312156200007d57600080fd5b62000088836200004c565b915062000098602084016200004c565b90509250929050565b60805160a0516140f1620002336000396000818161015f0152818161036d01528181610522015281816105710152818161062d0152818161085001528181610b8901528181610cc401528181611014015281816110f7015281816111a20152818161123501528181611353015281816113e101528181611629015281816116e101528181611772015281816117ef0152818161186301528181611caa01528181611e9b01528181611ef101528181611f2501528181611fba015281816120f301528181612205015261229301526000818161042c015281816106a90152818161077b015281816109360152818161096f01528181610a6601528181610c0501528181610ca201528181610dd9015281816112b0015281816114130152818161155e0152818161189501528181611ab401528181611c5801528181611c8801528181611db101528181611ecf0152818161216e015281816122c501528181612b5701528181612ba701528181612e7201528181612fda0152818161337f01528181613422015261349901526140f16000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a01551461041a578063d06ca61f1461044e578063ded9382a1461046e578063e8e337001461048e578063f305d719146104c9578063fb3bdb41146104dc57600080fd5b80638803dbee1461033b578063ad5c46481461035b578063ad615dec146103a7578063af2979eb146103c7578063b6f9de95146103e7578063baa2abde146103fa57600080fd5b80634a25d94a116101085780634a25d94a146102885780635b0d5984146102a85780635c11d795146102c8578063791ac947146102e85780637ff36ab51461030857806385f8c2591461031b57600080fd5b806302751cec14610193578063054d50d4146101cd57806318cbafe5146101fb5780631f00ca74146102285780632195995c1461024857806338ed17391461026857600080fd5b3661018e57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018c5761018c6136fc565b005b600080fd5b34801561019f57600080fd5b506101b36101ae36600461373a565b6104ef565b604080519283526020830191909152015b60405180910390f35b3480156101d957600080fd5b506101ed6101e8366004613798565b6105eb565b6040519081526020016101c4565b34801561020757600080fd5b5061021b610216366004613809565b610600565b6040516101c4919061387c565b34801561023457600080fd5b5061021b6102433660046138d6565b61092f565b34801561025457600080fd5b506101b36102633660046139c6565b610965565b34801561027457600080fd5b5061021b610283366004613809565b610a3e565b34801561029457600080fd5b5061021b6102a3366004613809565b610b5c565b3480156102b457600080fd5b506101ed6102c3366004613a70565b610c9a565b3480156102d457600080fd5b5061018c6102e3366004613809565b610d87565b3480156102f457600080fd5b5061018c610303366004613809565b610fe9565b61021b610316366004613b06565b611210565b34801561032757600080fd5b506101ed610336366004613798565b611529565b34801561034757600080fd5b5061021b610356366004613809565b611536565b34801561036757600080fd5b5061038f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c4565b3480156103b357600080fd5b506101ed6103c2366004613798565b6115f3565b3480156103d357600080fd5b506101ed6103e236600461373a565b611600565b61018c6103f5366004613b06565b61174f565b34801561040657600080fd5b506101b3610415366004613b6d565b611a89565b34801561042657600080fd5b5061038f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561045a57600080fd5b5061021b6104693660046138d6565b611c51565b34801561047a57600080fd5b506101b3610489366004613a70565b611c7e565b34801561049a57600080fd5b506104ae6104a9366004613bdf565b611d71565b604080519384526020840192909252908201526060016101c4565b6104ae6104d736600461373a565b611e6f565b61021b6104ea366004613b06565b6120ce565b600080824281101561051c5760405162461bcd60e51b815260040161051390613c5b565b60405180910390fd5b61054b897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a611a89565b909350915061055b89868561241d565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156105bd57600080fd5b505af11580156105d1573d6000803e3d6000fd5b505050506105df8583612538565b50965096945050505050565b60006105f8848484612606565b949350505050565b606081428110156106235760405162461bcd60e51b815260040161051390613c5b565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868661065a600182613c9f565b81811061066957610669613cb6565b905060200201602081019061067e9190613ccc565b6001600160a01b0316146106a45760405162461bcd60e51b815260040161051390613cf0565b6107027f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126e092505050565b91508682600184516107149190613c9f565b8151811061072457610724613cb6565b6020026020010151101561074a5760405162461bcd60e51b815260040161051390613d27565b61080f8686600081811061076057610760613cb6565b90506020020160208101906107759190613ccc565b336107ef7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106107ad576107ad613cb6565b90506020020160208101906107c29190613ccc565b8b8b60018181106107d5576107d5613cb6565b90506020020160208101906107ea9190613ccc565b61286b565b8560008151811061080257610802613cb6565b6020026020010151612944565b61084e82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612a74915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855161088c9190613c9f565b8151811061089c5761089c613cb6565b60200260200101516040518263ffffffff1660e01b81526004016108c291815260200190565b600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109248483600185516109079190613c9f565b8151811061091757610917613cb6565b6020026020010151612538565b509695505050505050565b606061095c7f00000000000000000000000000000000000000000000000000000000000000008484612c7c565b90505b92915050565b60008060006109957f00000000000000000000000000000000000000000000000000000000000000008f8f61286b565b90506000876109a4578c6109a8565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf906109e3903390309086908f908e908e908e90600401613d6e565b600060405180830381600087803b1580156109fd57600080fd5b505af1158015610a11573d6000803e3d6000fd5b50505050610a248f8f8f8f8f8f8f611a89565b809450819550505050509b509b9950505050505050505050565b60608142811015610a615760405162461bcd60e51b815260040161051390613c5b565b610abf7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126e092505050565b9150868260018451610ad19190613c9f565b81518110610ae157610ae1613cb6565b60200260200101511015610b075760405162461bcd60e51b815260040161051390613d27565b610b1d8686600081811061076057610760613cb6565b61092482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612a74915050565b60608142811015610b7f5760405162461bcd60e51b815260040161051390613c5b565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686610bb6600182613c9f565b818110610bc557610bc5613cb6565b9050602002016020810190610bda9190613ccc565b6001600160a01b031614610c005760405162461bcd60e51b815260040161051390613cf0565b610c5e7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c7c92505050565b91508682600081518110610c7457610c74613cb6565b6020026020010151111561074a5760405162461bcd60e51b815260040161051390613daf565b600080610ce87f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061286b565b9050600086610cf7578b610cfb565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610d36903390309086908e908d908d908d90600401613d6e565b600060405180830381600087803b158015610d5057600080fd5b505af1158015610d64573d6000803e3d6000fd5b50505050610d768d8d8d8d8d8d611600565b9d9c50505050505050505050505050565b8042811015610da85760405162461bcd60e51b815260040161051390613c5b565b610e3985856000818110610dbe57610dbe613cb6565b9050602002016020810190610dd39190613ccc565b33610e337f000000000000000000000000000000000000000000000000000000000000000089896000818110610e0b57610e0b613cb6565b9050602002016020810190610e209190613ccc565b8a8a60018181106107d5576107d5613cb6565b8a612944565b60008585610e48600182613c9f565b818110610e5757610e57613cb6565b9050602002016020810190610e6c9190613ccc565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a0823190602401602060405180830381865afa158015610eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed89190613df2565b9050610f18868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612dfd915050565b86610fc1828888610f2a600182613c9f565b818110610f3957610f39613cb6565b9050602002016020810190610f4e9190613ccc565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a08231906024015b602060405180830381865afa158015610f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbb9190613df2565b90613096565b1015610fdf5760405162461bcd60e51b815260040161051390613d27565b5050505050505050565b804281101561100a5760405162461bcd60e51b815260040161051390613c5b565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585611041600182613c9f565b81811061105057611050613cb6565b90506020020160208101906110659190613ccc565b6001600160a01b03161461108b5760405162461bcd60e51b815260040161051390613cf0565b6110a185856000818110610dbe57610dbe613cb6565b6110df858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612dfd915050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190613df2565b90508681101561118c5760405162461bcd60e51b815260040161051390613d27565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156111ee57600080fd5b505af1158015611202573d6000803e3d6000fd5b50505050610fdf8482612538565b606081428110156112335760405162461bcd60e51b815260040161051390613c5b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061127057611270613cb6565b90506020020160208101906112859190613ccc565b6001600160a01b0316146112ab5760405162461bcd60e51b815260040161051390613cf0565b6113097f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126e092505050565b915086826001845161131b9190613c9f565b8151811061132b5761132b613cb6565b602002602001015110156113515760405162461bcd60e51b815260040161051390613d27565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061139357611393613cb6565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113c657600080fd5b505af11580156113da573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6114457f000000000000000000000000000000000000000000000000000000000000000089896000818110610e0b57610e0b613cb6565b8460008151811061145857611458613cb6565b60200260200101516040518363ffffffff1660e01b81526004016114919291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af11580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190613e0b565b6114e0576114e06136fc565b61151f82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612a74915050565b5095945050505050565b60006105f88484846130ec565b606081428110156115595760405162461bcd60e51b815260040161051390613c5b565b6115b77f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c7c92505050565b915086826000815181106115cd576115cd613cb6565b60200260200101511115610b075760405162461bcd60e51b815260040161051390613daf565b60006105f88484846131c1565b600081428110156116235760405162461bcd60e51b815260040161051390613c5b565b611652887f00000000000000000000000000000000000000000000000000000000000000008989893089611a89565b6040516370a0823160e01b81523060048201529093506116cb9150899086906001600160a01b038316906370a0823190602401602060405180830381865afa1580156116a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c69190613df2565b61241d565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561172d57600080fd5b505af1158015611741573d6000803e3d6000fd5b505050506109248483612538565b80428110156117705760405162461bcd60e51b815260040161051390613c5b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106117ad576117ad613cb6565b90506020020160208101906117c29190613ccc565b6001600160a01b0316146117e85760405162461bcd60e51b815260040161051390613cf0565b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6118c77f000000000000000000000000000000000000000000000000000000000000000089896000818110610e0b57610e0b613cb6565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119389190613e0b565b611944576119446136fc565b60008686611953600182613c9f565b81811061196257611962613cb6565b90506020020160208101906119779190613ccc565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a0823190602401602060405180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e39190613df2565b9050611a23878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612dfd915050565b87610fc1828989611a35600182613c9f565b818110611a4457611a44613cb6565b9050602002016020810190611a599190613ccc565b6040516370a0823160e01b81526001600160a01b038a8116600483015291909116906370a0823190602401610f7a565b6000808242811015611aad5760405162461bcd60e51b815260040161051390613c5b565b6000611ada7f00000000000000000000000000000000000000000000000000000000000000008c8c61286b565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd906064016020604051808303816000875af1158015611b30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b549190613e0b565b5060405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb449060240160408051808303816000875af1158015611ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc59190613e28565b915091506000611bd58e8e61325d565b509050806001600160a01b03168e6001600160a01b031614611bf8578183611bfb565b82825b90975095508a871015611c205760405162461bcd60e51b815260040161051390613e4c565b89861015611c405760405162461bcd60e51b815260040161051390613e8e565b505050505097509795505050505050565b606061095c7f000000000000000000000000000000000000000000000000000000000000000084846126e0565b6000806000611cce7f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061286b565b9050600087611cdd578c611ce1565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611d1c903390309086908f908e908e908e90600401613d6e565b600060405180830381600087803b158015611d3657600080fd5b505af1158015611d4a573d6000803e3d6000fd5b50505050611d5c8e8e8e8e8e8e6104ef565b909f909e509c50505050505050505050505050565b60008060008342811015611d975760405162461bcd60e51b815260040161051390613c5b565b611da58c8c8c8c8c8c613351565b90945092506000611dd77f00000000000000000000000000000000000000000000000000000000000000008e8e61286b565b9050611de58d338388612944565b611df18c338387612944565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015611e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5d9190613df2565b92505050985098509895505050505050565b60008060008342811015611e955760405162461bcd60e51b815260040161051390613c5b565b611ec38a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613351565b90945092506000611f157f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061286b565b9050611f238b338388612944565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f7e57600080fd5b505af1158015611f92573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af1158015612007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202b9190613e0b565b612037576120376136fc565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af115801561207f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a39190613df2565b9250833411156120c0576120c0336120bb8634613c9f565b612538565b505096509650969350505050565b606081428110156120f15760405162461bcd60e51b815260040161051390613c5b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061212e5761212e613cb6565b90506020020160208101906121439190613ccc565b6001600160a01b0316146121695760405162461bcd60e51b815260040161051390613cf0565b6121c77f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c7c92505050565b915034826000815181106121dd576121dd613cb6565b602002602001015111156122035760405162461bcd60e51b815260040161051390613daf565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061224557612245613cb6565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561227857600080fd5b505af115801561228c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122f77f000000000000000000000000000000000000000000000000000000000000000089896000818110610e0b57610e0b613cb6565b8460008151811061230a5761230a613cb6565b60200260200101516040518363ffffffff1660e01b81526004016123439291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015612362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123869190613e0b565b612392576123926136fc565b6123d182878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612a74915050565b816000815181106123e4576123e4613cb6565b602002602001015134111561151f5761151f338360008151811061240a5761240a613cb6565b6020026020010151346120bb9190613c9f565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916124799190613efc565b6000604051808303816000865af19150503d80600081146124b6576040519150601f19603f3d011682016040523d82523d6000602084013e6124bb565b606091505b50915091508180156124e55750805115806124e55750808060200190518101906124e59190613e0b565b6125315760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610513565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516125629190613efc565b60006040518083038185875af1925050503d806000811461259f576040519150601f19603f3d011682016040523d82523d6000602084013e6125a4565b606091505b50509050806126015760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610513565b505050565b60008084116126675760405162461bcd60e51b815260206004820152602760248201527f4e657875734c6962726172793a20494e53554646494349454e545f494e50555460448201526617d05353d5539560ca1b6064820152608401610513565b6000831180156126775750600082115b6126935760405162461bcd60e51b815260040161051390613f18565b60006126a1856103e5613576565b905060006126af8285613576565b905060006126c9836126c3886103e8613576565b906135dd565b90506126d58183613f5c565b979650505050505050565b60606002825110156127345760405162461bcd60e51b815260206004820152601a60248201527f4e657875734c6962726172793a20494e56414c49445f504154480000000000006044820152606401610513565b815167ffffffffffffffff81111561274e5761274e6138c0565b604051908082528060200260200182016040528015612777578160200160208202803683370190505b509050828160008151811061278e5761278e613cb6565b60200260200101818152505060005b600183516127ab9190613c9f565b811015612863576000806127fe878685815181106127cb576127cb613cb6565b6020026020010151878660016127e19190613f7e565b815181106127f1576127f1613cb6565b6020026020010151613632565b9150915061282684848151811061281757612817613cb6565b60200260200101518383612606565b84612832856001613f7e565b8151811061284257612842613cb6565b6020026020010181815250505050808061285b90613f96565b91505061279d565b509392505050565b600080600061287a858561325d565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016129229291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f69f87219435c6fe01b08d421b51fe0866c422f9b32e9e714e1f24068c99274fd603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916129a89190613efc565b6000604051808303816000865af19150503d80600081146129e5576040519150601f19603f3d011682016040523d82523d6000602084013e6129ea565b606091505b5091509150818015612a14575080511580612a14575080806020019051810190612a149190613e0b565b612a6c5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610513565b505050505050565b60005b60018351612a859190613c9f565b811015612c7657600080848381518110612aa157612aa1613cb6565b602002602001015185846001612ab79190613f7e565b81518110612ac757612ac7613cb6565b6020026020010151915091506000612adf838361325d565b509050600087612af0866001613f7e565b81518110612b0057612b00613cb6565b60200260200101519050600080836001600160a01b0316866001600160a01b031614612b2e57826000612b32565b6000835b91509150600060028a51612b469190613c9f565b8810612b525788612ba0565b612ba07f0000000000000000000000000000000000000000000000000000000000000000878c612b838c6002613f7e565b81518110612b9357612b93613cb6565b602002602001015161286b565b9050612bcd7f0000000000000000000000000000000000000000000000000000000000000000888861286b565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612c0a576020820181803683370190505b506040518563ffffffff1660e01b8152600401612c2a9493929190613fb1565b600060405180830381600087803b158015612c4457600080fd5b505af1158015612c58573d6000803e3d6000fd5b50505050505050505050508080612c6e90613f96565b915050612a77565b50505050565b6060600282511015612cd05760405162461bcd60e51b815260206004820152601a60248201527f4e657875734c6962726172793a20494e56414c49445f504154480000000000006044820152606401610513565b815167ffffffffffffffff811115612cea57612cea6138c0565b604051908082528060200260200182016040528015612d13578160200160208202803683370190505b509050828160018351612d269190613c9f565b81518110612d3657612d36613cb6565b602002602001018181525050600060018351612d529190613c9f565b90505b801561286357600080612d988786612d6e600187613c9f565b81518110612d7e57612d7e613cb6565b60200260200101518786815181106127f1576127f1613cb6565b91509150612dc0848481518110612db157612db1613cb6565b602002602001015183836130ec565b84612dcc600186613c9f565b81518110612ddc57612ddc613cb6565b60200260200101818152505050508080612df590614001565b915050612d55565b60005b60018351612e0e9190613c9f565b81101561260157600080848381518110612e2a57612e2a613cb6565b602002602001015185846001612e409190613f7e565b81518110612e5057612e50613cb6565b6020026020010151915091506000612e68838361325d565b5090506000612e987f0000000000000000000000000000000000000000000000000000000000000000858561286b565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f02919061402f565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b031614612f3c578284612f3f565b83835b6040516370a0823160e01b81526001600160a01b038a81166004830152929450909250612f7a918491908d16906370a0823190602401610f7a565b9550612f87868383612606565b945050505050600080856001600160a01b0316886001600160a01b031614612fb157826000612fb5565b6000835b91509150600060028c51612fc99190613c9f565b8a10612fd5578a613006565b6130067f0000000000000000000000000000000000000000000000000000000000000000898e612b838e6002613f7e565b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f906130489086908690869060248101613fb1565b600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b50505050505050505050505050808061308e90613f96565b915050612e00565b6000826130a38382613c9f565b915081111561095f5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610513565b600080841161314e5760405162461bcd60e51b815260206004820152602860248201527f4e657875734c6962726172793a20494e53554646494349454e545f4f555450556044820152671517d05353d5539560c21b6064820152608401610513565b60008311801561315e5750600082115b61317a5760405162461bcd60e51b815260040161051390613f18565b60006131926103e861318c8688613576565b90613576565b905060006131a66103e561318c8689613096565b90506131b760016126c38385613f5c565b9695505050505050565b600080841161321c5760405162461bcd60e51b815260206004820152602160248201527f4e657875734c6962726172793a20494e53554646494349454e545f414d4f554e6044820152601560fa1b6064820152608401610513565b60008311801561322c5750600082115b6132485760405162461bcd60e51b815260040161051390613f18565b826132538584613576565b6105f89190613f5c565b600080826001600160a01b0316846001600160a01b031614156132cc5760405162461bcd60e51b815260206004820152602160248201527f4e657875734c6962726172793a204944454e544943414c5f41444452455353456044820152605360f81b6064820152608401610513565b826001600160a01b0316846001600160a01b0316106132ec5782846132ef565b83835b90925090506001600160a01b03821661334a5760405162461bcd60e51b815260206004820152601a60248201527f4e657875734c6962726172793a205a45524f5f414444524553530000000000006044820152606401610513565b9250929050565b60405163e6a4390560e01b81526001600160a01b0387811660048301528681166024830152600091829182917f00000000000000000000000000000000000000000000000000000000000000009091169063e6a4390590604401602060405180830381865afa1580156133c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ec919061407f565b6001600160a01b03161415613491576040516364e329cb60e11b81526001600160a01b03898116600483015288811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063c9c65396906044016020604051808303816000875af115801561346b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348f919061407f565b505b6000806134bf7f00000000000000000000000000000000000000000000000000000000000000008b8b613632565b915091508160001480156134d1575080155b156134e157879350869250613569565b60006134ee8984846131c1565b905087811161352257858110156135175760405162461bcd60e51b815260040161051390613e8e565b889450925082613567565b600061352f8984866131c1565b905089811115613541576135416136fc565b878110156135615760405162461bcd60e51b815260040161051390613e4c565b94508793505b505b5050965096945050505050565b600081158061359a5750828261358c818361409c565b92506135989083613f5c565b145b61095f5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610513565b6000826135ea8382613f7e565b915081101561095f5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b6044820152606401610513565b6000806000613641858561325d565b50905060008061365288888861286b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561368f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b3919061402f565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146136ea5780826136ed565b81815b90999098509650505050505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b038116811461372757600080fd5b50565b803561373581613712565b919050565b60008060008060008060c0878903121561375357600080fd5b863561375e81613712565b9550602087013594506040870135935060608701359250608087013561378381613712565b8092505060a087013590509295509295509295565b6000806000606084860312156137ad57600080fd5b505081359360208301359350604090920135919050565b60008083601f8401126137d657600080fd5b50813567ffffffffffffffff8111156137ee57600080fd5b6020830191508360208260051b850101111561334a57600080fd5b60008060008060008060a0878903121561382257600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561384757600080fd5b61385389828a016137c4565b909550935050606087013561386781613712565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156138b457835183529284019291840191600101613898565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156138e957600080fd5b8235915060208084013567ffffffffffffffff8082111561390957600080fd5b818601915086601f83011261391d57600080fd5b81358181111561392f5761392f6138c0565b8060051b604051601f19603f83011681018181108582111715613954576139546138c0565b60405291825284820192508381018501918983111561397257600080fd5b938501935b82851015613997576139888561372a565b84529385019392850192613977565b8096505050505050509250929050565b801515811461372757600080fd5b803560ff8116811461373557600080fd5b60008060008060008060008060008060006101608c8e0312156139e857600080fd5b8b356139f381613712565b9a5060208c0135613a0381613712565b995060408c0135985060608c0135975060808c0135965060a08c0135613a2881613712565b955060c08c0135945060e08c0135613a3f816139a7565b9350613a4e6101008d016139b5565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215613a9057600080fd5b8a35613a9b81613712565b995060208b0135985060408b0135975060608b0135965060808b0135613ac081613712565b955060a08b0135945060c08b0135613ad7816139a7565b9350613ae560e08c016139b5565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215613b1e57600080fd5b85359450602086013567ffffffffffffffff811115613b3c57600080fd5b613b48888289016137c4565b9095509350506040860135613b5c81613712565b949793965091946060013592915050565b600080600080600080600060e0888a031215613b8857600080fd5b8735613b9381613712565b96506020880135613ba381613712565b955060408801359450606088013593506080880135925060a0880135613bc881613712565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215613bfc57600080fd5b8835613c0781613712565b97506020890135613c1781613712565b965060408901359550606089013594506080890135935060a0890135925060c0890135613c4381613712565b8092505060e089013590509295985092959890939650565b60208082526014908201527313995e1d5cd49bdd5d195c8e881156141254915160621b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613cb157613cb1613c89565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613cde57600080fd5b8135613ce981613712565b9392505050565b60208082526019908201527f4e65787573526f757465723a20494e56414c49445f5041544800000000000000604082015260600190565b60208082526027908201527f4e65787573526f757465723a20494e53554646494349454e545f4f555450555460408201526617d05353d5539560ca1b606082015260800190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60208082526023908201527f4e65787573526f757465723a204558434553534956455f494e5055545f414d4f60408201526215539560ea1b606082015260800190565b600060208284031215613e0457600080fd5b5051919050565b600060208284031215613e1d57600080fd5b8151613ce9816139a7565b60008060408385031215613e3b57600080fd5b505080516020909101519092909150565b60208082526022908201527f4e65787573526f757465723a20494e53554646494349454e545f415f414d4f55604082015261139560f21b606082015260800190565b60208082526022908201527f4e65787573526f757465723a20494e53554646494349454e545f425f414d4f55604082015261139560f21b606082015260800190565b60005b83811015613eeb578181015183820152602001613ed3565b83811115612c765750506000910152565b60008251613f0e818460208701613ed0565b9190910192915050565b60208082526024908201527f4e657875734c6962726172793a20494e53554646494349454e545f4c495155496040820152634449545960e01b606082015260800190565b600082613f7957634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613f9157613f91613c89565b500190565b6000600019821415613faa57613faa613c89565b5060010190565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152613fea8160a0850160208701613ed0565b601f01601f19169190910160a00195945050505050565b60008161401057614010613c89565b506000190190565b80516001600160701b038116811461373557600080fd5b60008060006060848603121561404457600080fd5b61404d84614018565b925061405b60208501614018565b9150604084015163ffffffff8116811461407457600080fd5b809150509250925092565b60006020828403121561409157600080fd5b8151613ce981613712565b60008160001904831182151516156140b6576140b6613c89565b50029056fea2646970667358221220b0ca4cbfbbff696540c2820cfffb79e88507d596d3d374328c52c3ab9f8f2ccc64736f6c634300080c0033000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd31000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c42
Deployed Bytecode
0x60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a01551461041a578063d06ca61f1461044e578063ded9382a1461046e578063e8e337001461048e578063f305d719146104c9578063fb3bdb41146104dc57600080fd5b80638803dbee1461033b578063ad5c46481461035b578063ad615dec146103a7578063af2979eb146103c7578063b6f9de95146103e7578063baa2abde146103fa57600080fd5b80634a25d94a116101085780634a25d94a146102885780635b0d5984146102a85780635c11d795146102c8578063791ac947146102e85780637ff36ab51461030857806385f8c2591461031b57600080fd5b806302751cec14610193578063054d50d4146101cd57806318cbafe5146101fb5780631f00ca74146102285780632195995c1461024857806338ed17391461026857600080fd5b3661018e57336001600160a01b037f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c42161461018c5761018c6136fc565b005b600080fd5b34801561019f57600080fd5b506101b36101ae36600461373a565b6104ef565b604080519283526020830191909152015b60405180910390f35b3480156101d957600080fd5b506101ed6101e8366004613798565b6105eb565b6040519081526020016101c4565b34801561020757600080fd5b5061021b610216366004613809565b610600565b6040516101c4919061387c565b34801561023457600080fd5b5061021b6102433660046138d6565b61092f565b34801561025457600080fd5b506101b36102633660046139c6565b610965565b34801561027457600080fd5b5061021b610283366004613809565b610a3e565b34801561029457600080fd5b5061021b6102a3366004613809565b610b5c565b3480156102b457600080fd5b506101ed6102c3366004613a70565b610c9a565b3480156102d457600080fd5b5061018c6102e3366004613809565b610d87565b3480156102f457600080fd5b5061018c610303366004613809565b610fe9565b61021b610316366004613b06565b611210565b34801561032757600080fd5b506101ed610336366004613798565b611529565b34801561034757600080fd5b5061021b610356366004613809565b611536565b34801561036757600080fd5b5061038f7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c4281565b6040516001600160a01b0390911681526020016101c4565b3480156103b357600080fd5b506101ed6103c2366004613798565b6115f3565b3480156103d357600080fd5b506101ed6103e236600461373a565b611600565b61018c6103f5366004613b06565b61174f565b34801561040657600080fd5b506101b3610415366004613b6d565b611a89565b34801561042657600080fd5b5061038f7f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd3181565b34801561045a57600080fd5b5061021b6104693660046138d6565b611c51565b34801561047a57600080fd5b506101b3610489366004613a70565b611c7e565b34801561049a57600080fd5b506104ae6104a9366004613bdf565b611d71565b604080519384526020840192909252908201526060016101c4565b6104ae6104d736600461373a565b611e6f565b61021b6104ea366004613b06565b6120ce565b600080824281101561051c5760405162461bcd60e51b815260040161051390613c5b565b60405180910390fd5b61054b897f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c428a8a8a308a611a89565b909350915061055b89868561241d565b604051632e1a7d4d60e01b8152600481018390527f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156105bd57600080fd5b505af11580156105d1573d6000803e3d6000fd5b505050506105df8583612538565b50965096945050505050565b60006105f8848484612606565b949350505050565b606081428110156106235760405162461bcd60e51b815260040161051390613c5b565b6001600160a01b037f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c4216868661065a600182613c9f565b81811061066957610669613cb6565b905060200201602081019061067e9190613ccc565b6001600160a01b0316146106a45760405162461bcd60e51b815260040161051390613cf0565b6107027f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd31898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126e092505050565b91508682600184516107149190613c9f565b8151811061072457610724613cb6565b6020026020010151101561074a5760405162461bcd60e51b815260040161051390613d27565b61080f8686600081811061076057610760613cb6565b90506020020160208101906107759190613ccc565b336107ef7f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd318a8a60008181106107ad576107ad613cb6565b90506020020160208101906107c29190613ccc565b8b8b60018181106107d5576107d5613cb6565b90506020020160208101906107ea9190613ccc565b61286b565b8560008151811061080257610802613cb6565b6020026020010151612944565b61084e82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612a74915050565b7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b0316632e1a7d4d836001855161088c9190613c9f565b8151811061089c5761089c613cb6565b60200260200101516040518263ffffffff1660e01b81526004016108c291815260200190565b600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109248483600185516109079190613c9f565b8151811061091757610917613cb6565b6020026020010151612538565b509695505050505050565b606061095c7f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd318484612c7c565b90505b92915050565b60008060006109957f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd318f8f61286b565b90506000876109a4578c6109a8565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf906109e3903390309086908f908e908e908e90600401613d6e565b600060405180830381600087803b1580156109fd57600080fd5b505af1158015610a11573d6000803e3d6000fd5b50505050610a248f8f8f8f8f8f8f611a89565b809450819550505050509b509b9950505050505050505050565b60608142811015610a615760405162461bcd60e51b815260040161051390613c5b565b610abf7f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd31898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126e092505050565b9150868260018451610ad19190613c9f565b81518110610ae157610ae1613cb6565b60200260200101511015610b075760405162461bcd60e51b815260040161051390613d27565b610b1d8686600081811061076057610760613cb6565b61092482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612a74915050565b60608142811015610b7f5760405162461bcd60e51b815260040161051390613c5b565b6001600160a01b037f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c42168686610bb6600182613c9f565b818110610bc557610bc5613cb6565b9050602002016020810190610bda9190613ccc565b6001600160a01b031614610c005760405162461bcd60e51b815260040161051390613cf0565b610c5e7f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd3189888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c7c92505050565b91508682600081518110610c7457610c74613cb6565b6020026020010151111561074a5760405162461bcd60e51b815260040161051390613daf565b600080610ce87f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd318d7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c4261286b565b9050600086610cf7578b610cfb565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610d36903390309086908e908d908d908d90600401613d6e565b600060405180830381600087803b158015610d5057600080fd5b505af1158015610d64573d6000803e3d6000fd5b50505050610d768d8d8d8d8d8d611600565b9d9c50505050505050505050505050565b8042811015610da85760405162461bcd60e51b815260040161051390613c5b565b610e3985856000818110610dbe57610dbe613cb6565b9050602002016020810190610dd39190613ccc565b33610e337f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd3189896000818110610e0b57610e0b613cb6565b9050602002016020810190610e209190613ccc565b8a8a60018181106107d5576107d5613cb6565b8a612944565b60008585610e48600182613c9f565b818110610e5757610e57613cb6565b9050602002016020810190610e6c9190613ccc565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a0823190602401602060405180830381865afa158015610eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed89190613df2565b9050610f18868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612dfd915050565b86610fc1828888610f2a600182613c9f565b818110610f3957610f39613cb6565b9050602002016020810190610f4e9190613ccc565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a08231906024015b602060405180830381865afa158015610f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbb9190613df2565b90613096565b1015610fdf5760405162461bcd60e51b815260040161051390613d27565b5050505050505050565b804281101561100a5760405162461bcd60e51b815260040161051390613c5b565b6001600160a01b037f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c42168585611041600182613c9f565b81811061105057611050613cb6565b90506020020160208101906110659190613ccc565b6001600160a01b03161461108b5760405162461bcd60e51b815260040161051390613cf0565b6110a185856000818110610dbe57610dbe613cb6565b6110df858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612dfd915050565b6040516370a0823160e01b81523060048201526000907f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b0316906370a0823190602401602060405180830381865afa158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190613df2565b90508681101561118c5760405162461bcd60e51b815260040161051390613d27565b604051632e1a7d4d60e01b8152600481018290527f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156111ee57600080fd5b505af1158015611202573d6000803e3d6000fd5b50505050610fdf8482612538565b606081428110156112335760405162461bcd60e51b815260040161051390613c5b565b7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b03168686600081811061127057611270613cb6565b90506020020160208101906112859190613ccc565b6001600160a01b0316146112ab5760405162461bcd60e51b815260040161051390613cf0565b6113097f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd31348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126e092505050565b915086826001845161131b9190613c9f565b8151811061132b5761132b613cb6565b602002602001015110156113515760405162461bcd60e51b815260040161051390613d27565b7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b031663d0e30db08360008151811061139357611393613cb6565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113c657600080fd5b505af11580156113da573d6000803e3d6000fd5b50505050507f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b031663a9059cbb6114457f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd3189896000818110610e0b57610e0b613cb6565b8460008151811061145857611458613cb6565b60200260200101516040518363ffffffff1660e01b81526004016114919291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af11580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190613e0b565b6114e0576114e06136fc565b61151f82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612a74915050565b5095945050505050565b60006105f88484846130ec565b606081428110156115595760405162461bcd60e51b815260040161051390613c5b565b6115b77f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd3189888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c7c92505050565b915086826000815181106115cd576115cd613cb6565b60200260200101511115610b075760405162461bcd60e51b815260040161051390613daf565b60006105f88484846131c1565b600081428110156116235760405162461bcd60e51b815260040161051390613c5b565b611652887f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c428989893089611a89565b6040516370a0823160e01b81523060048201529093506116cb9150899086906001600160a01b038316906370a0823190602401602060405180830381865afa1580156116a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c69190613df2565b61241d565b604051632e1a7d4d60e01b8152600481018390527f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561172d57600080fd5b505af1158015611741573d6000803e3d6000fd5b505050506109248483612538565b80428110156117705760405162461bcd60e51b815260040161051390613c5b565b7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b0316858560008181106117ad576117ad613cb6565b90506020020160208101906117c29190613ccc565b6001600160a01b0316146117e85760405162461bcd60e51b815260040161051390613cf0565b60003490507f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050507f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b031663a9059cbb6118c77f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd3189896000818110610e0b57610e0b613cb6565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119389190613e0b565b611944576119446136fc565b60008686611953600182613c9f565b81811061196257611962613cb6565b90506020020160208101906119779190613ccc565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a0823190602401602060405180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e39190613df2565b9050611a23878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612dfd915050565b87610fc1828989611a35600182613c9f565b818110611a4457611a44613cb6565b9050602002016020810190611a599190613ccc565b6040516370a0823160e01b81526001600160a01b038a8116600483015291909116906370a0823190602401610f7a565b6000808242811015611aad5760405162461bcd60e51b815260040161051390613c5b565b6000611ada7f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd318c8c61286b565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd906064016020604051808303816000875af1158015611b30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b549190613e0b565b5060405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb449060240160408051808303816000875af1158015611ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc59190613e28565b915091506000611bd58e8e61325d565b509050806001600160a01b03168e6001600160a01b031614611bf8578183611bfb565b82825b90975095508a871015611c205760405162461bcd60e51b815260040161051390613e4c565b89861015611c405760405162461bcd60e51b815260040161051390613e8e565b505050505097509795505050505050565b606061095c7f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd3184846126e0565b6000806000611cce7f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd318e7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c4261286b565b9050600087611cdd578c611ce1565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611d1c903390309086908f908e908e908e90600401613d6e565b600060405180830381600087803b158015611d3657600080fd5b505af1158015611d4a573d6000803e3d6000fd5b50505050611d5c8e8e8e8e8e8e6104ef565b909f909e509c50505050505050505050505050565b60008060008342811015611d975760405162461bcd60e51b815260040161051390613c5b565b611da58c8c8c8c8c8c613351565b90945092506000611dd77f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd318e8e61286b565b9050611de58d338388612944565b611df18c338387612944565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015611e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5d9190613df2565b92505050985098509895505050505050565b60008060008342811015611e955760405162461bcd60e51b815260040161051390613c5b565b611ec38a7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c428b348c8c613351565b90945092506000611f157f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd318c7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c4261286b565b9050611f238b338388612944565b7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f7e57600080fd5b505af1158015611f92573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018990527f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c4216935063a9059cbb925060440190506020604051808303816000875af1158015612007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202b9190613e0b565b612037576120376136fc565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af115801561207f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a39190613df2565b9250833411156120c0576120c0336120bb8634613c9f565b612538565b505096509650969350505050565b606081428110156120f15760405162461bcd60e51b815260040161051390613c5b565b7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b03168686600081811061212e5761212e613cb6565b90506020020160208101906121439190613ccc565b6001600160a01b0316146121695760405162461bcd60e51b815260040161051390613cf0565b6121c77f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd3188888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612c7c92505050565b915034826000815181106121dd576121dd613cb6565b602002602001015111156122035760405162461bcd60e51b815260040161051390613daf565b7f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b031663d0e30db08360008151811061224557612245613cb6565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561227857600080fd5b505af115801561228c573d6000803e3d6000fd5b50505050507f000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c426001600160a01b031663a9059cbb6122f77f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd3189896000818110610e0b57610e0b613cb6565b8460008151811061230a5761230a613cb6565b60200260200101516040518363ffffffff1660e01b81526004016123439291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015612362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123869190613e0b565b612392576123926136fc565b6123d182878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612a74915050565b816000815181106123e4576123e4613cb6565b602002602001015134111561151f5761151f338360008151811061240a5761240a613cb6565b6020026020010151346120bb9190613c9f565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916124799190613efc565b6000604051808303816000865af19150503d80600081146124b6576040519150601f19603f3d011682016040523d82523d6000602084013e6124bb565b606091505b50915091508180156124e55750805115806124e55750808060200190518101906124e59190613e0b565b6125315760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610513565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516125629190613efc565b60006040518083038185875af1925050503d806000811461259f576040519150601f19603f3d011682016040523d82523d6000602084013e6125a4565b606091505b50509050806126015760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610513565b505050565b60008084116126675760405162461bcd60e51b815260206004820152602760248201527f4e657875734c6962726172793a20494e53554646494349454e545f494e50555460448201526617d05353d5539560ca1b6064820152608401610513565b6000831180156126775750600082115b6126935760405162461bcd60e51b815260040161051390613f18565b60006126a1856103e5613576565b905060006126af8285613576565b905060006126c9836126c3886103e8613576565b906135dd565b90506126d58183613f5c565b979650505050505050565b60606002825110156127345760405162461bcd60e51b815260206004820152601a60248201527f4e657875734c6962726172793a20494e56414c49445f504154480000000000006044820152606401610513565b815167ffffffffffffffff81111561274e5761274e6138c0565b604051908082528060200260200182016040528015612777578160200160208202803683370190505b509050828160008151811061278e5761278e613cb6565b60200260200101818152505060005b600183516127ab9190613c9f565b811015612863576000806127fe878685815181106127cb576127cb613cb6565b6020026020010151878660016127e19190613f7e565b815181106127f1576127f1613cb6565b6020026020010151613632565b9150915061282684848151811061281757612817613cb6565b60200260200101518383612606565b84612832856001613f7e565b8151811061284257612842613cb6565b6020026020010181815250505050808061285b90613f96565b91505061279d565b509392505050565b600080600061287a858561325d565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016129229291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f69f87219435c6fe01b08d421b51fe0866c422f9b32e9e714e1f24068c99274fd603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916129a89190613efc565b6000604051808303816000865af19150503d80600081146129e5576040519150601f19603f3d011682016040523d82523d6000602084013e6129ea565b606091505b5091509150818015612a14575080511580612a14575080806020019051810190612a149190613e0b565b612a6c5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610513565b505050505050565b60005b60018351612a859190613c9f565b811015612c7657600080848381518110612aa157612aa1613cb6565b602002602001015185846001612ab79190613f7e565b81518110612ac757612ac7613cb6565b6020026020010151915091506000612adf838361325d565b509050600087612af0866001613f7e565b81518110612b0057612b00613cb6565b60200260200101519050600080836001600160a01b0316866001600160a01b031614612b2e57826000612b32565b6000835b91509150600060028a51612b469190613c9f565b8810612b525788612ba0565b612ba07f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd31878c612b838c6002613f7e565b81518110612b9357612b93613cb6565b602002602001015161286b565b9050612bcd7f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd31888861286b565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612c0a576020820181803683370190505b506040518563ffffffff1660e01b8152600401612c2a9493929190613fb1565b600060405180830381600087803b158015612c4457600080fd5b505af1158015612c58573d6000803e3d6000fd5b50505050505050505050508080612c6e90613f96565b915050612a77565b50505050565b6060600282511015612cd05760405162461bcd60e51b815260206004820152601a60248201527f4e657875734c6962726172793a20494e56414c49445f504154480000000000006044820152606401610513565b815167ffffffffffffffff811115612cea57612cea6138c0565b604051908082528060200260200182016040528015612d13578160200160208202803683370190505b509050828160018351612d269190613c9f565b81518110612d3657612d36613cb6565b602002602001018181525050600060018351612d529190613c9f565b90505b801561286357600080612d988786612d6e600187613c9f565b81518110612d7e57612d7e613cb6565b60200260200101518786815181106127f1576127f1613cb6565b91509150612dc0848481518110612db157612db1613cb6565b602002602001015183836130ec565b84612dcc600186613c9f565b81518110612ddc57612ddc613cb6565b60200260200101818152505050508080612df590614001565b915050612d55565b60005b60018351612e0e9190613c9f565b81101561260157600080848381518110612e2a57612e2a613cb6565b602002602001015185846001612e409190613f7e565b81518110612e5057612e50613cb6565b6020026020010151915091506000612e68838361325d565b5090506000612e987f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd31858561286b565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f02919061402f565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b031614612f3c578284612f3f565b83835b6040516370a0823160e01b81526001600160a01b038a81166004830152929450909250612f7a918491908d16906370a0823190602401610f7a565b9550612f87868383612606565b945050505050600080856001600160a01b0316886001600160a01b031614612fb157826000612fb5565b6000835b91509150600060028c51612fc99190613c9f565b8a10612fd5578a613006565b6130067f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd31898e612b838e6002613f7e565b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f906130489086908690869060248101613fb1565b600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b50505050505050505050505050808061308e90613f96565b915050612e00565b6000826130a38382613c9f565b915081111561095f5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610513565b600080841161314e5760405162461bcd60e51b815260206004820152602860248201527f4e657875734c6962726172793a20494e53554646494349454e545f4f555450556044820152671517d05353d5539560c21b6064820152608401610513565b60008311801561315e5750600082115b61317a5760405162461bcd60e51b815260040161051390613f18565b60006131926103e861318c8688613576565b90613576565b905060006131a66103e561318c8689613096565b90506131b760016126c38385613f5c565b9695505050505050565b600080841161321c5760405162461bcd60e51b815260206004820152602160248201527f4e657875734c6962726172793a20494e53554646494349454e545f414d4f554e6044820152601560fa1b6064820152608401610513565b60008311801561322c5750600082115b6132485760405162461bcd60e51b815260040161051390613f18565b826132538584613576565b6105f89190613f5c565b600080826001600160a01b0316846001600160a01b031614156132cc5760405162461bcd60e51b815260206004820152602160248201527f4e657875734c6962726172793a204944454e544943414c5f41444452455353456044820152605360f81b6064820152608401610513565b826001600160a01b0316846001600160a01b0316106132ec5782846132ef565b83835b90925090506001600160a01b03821661334a5760405162461bcd60e51b815260206004820152601a60248201527f4e657875734c6962726172793a205a45524f5f414444524553530000000000006044820152606401610513565b9250929050565b60405163e6a4390560e01b81526001600160a01b0387811660048301528681166024830152600091829182917f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd319091169063e6a4390590604401602060405180830381865afa1580156133c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ec919061407f565b6001600160a01b03161415613491576040516364e329cb60e11b81526001600160a01b03898116600483015288811660248301527f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd31169063c9c65396906044016020604051808303816000875af115801561346b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348f919061407f565b505b6000806134bf7f000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd318b8b613632565b915091508160001480156134d1575080155b156134e157879350869250613569565b60006134ee8984846131c1565b905087811161352257858110156135175760405162461bcd60e51b815260040161051390613e8e565b889450925082613567565b600061352f8984866131c1565b905089811115613541576135416136fc565b878110156135615760405162461bcd60e51b815260040161051390613e4c565b94508793505b505b5050965096945050505050565b600081158061359a5750828261358c818361409c565b92506135989083613f5c565b145b61095f5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610513565b6000826135ea8382613f7e565b915081101561095f5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b6044820152606401610513565b6000806000613641858561325d565b50905060008061365288888861286b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561368f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b3919061402f565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146136ea5780826136ed565b81815b90999098509650505050505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b038116811461372757600080fd5b50565b803561373581613712565b919050565b60008060008060008060c0878903121561375357600080fd5b863561375e81613712565b9550602087013594506040870135935060608701359250608087013561378381613712565b8092505060a087013590509295509295509295565b6000806000606084860312156137ad57600080fd5b505081359360208301359350604090920135919050565b60008083601f8401126137d657600080fd5b50813567ffffffffffffffff8111156137ee57600080fd5b6020830191508360208260051b850101111561334a57600080fd5b60008060008060008060a0878903121561382257600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561384757600080fd5b61385389828a016137c4565b909550935050606087013561386781613712565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156138b457835183529284019291840191600101613898565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156138e957600080fd5b8235915060208084013567ffffffffffffffff8082111561390957600080fd5b818601915086601f83011261391d57600080fd5b81358181111561392f5761392f6138c0565b8060051b604051601f19603f83011681018181108582111715613954576139546138c0565b60405291825284820192508381018501918983111561397257600080fd5b938501935b82851015613997576139888561372a565b84529385019392850192613977565b8096505050505050509250929050565b801515811461372757600080fd5b803560ff8116811461373557600080fd5b60008060008060008060008060008060006101608c8e0312156139e857600080fd5b8b356139f381613712565b9a5060208c0135613a0381613712565b995060408c0135985060608c0135975060808c0135965060a08c0135613a2881613712565b955060c08c0135945060e08c0135613a3f816139a7565b9350613a4e6101008d016139b5565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215613a9057600080fd5b8a35613a9b81613712565b995060208b0135985060408b0135975060608b0135965060808b0135613ac081613712565b955060a08b0135945060c08b0135613ad7816139a7565b9350613ae560e08c016139b5565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215613b1e57600080fd5b85359450602086013567ffffffffffffffff811115613b3c57600080fd5b613b48888289016137c4565b9095509350506040860135613b5c81613712565b949793965091946060013592915050565b600080600080600080600060e0888a031215613b8857600080fd5b8735613b9381613712565b96506020880135613ba381613712565b955060408801359450606088013593506080880135925060a0880135613bc881613712565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215613bfc57600080fd5b8835613c0781613712565b97506020890135613c1781613712565b965060408901359550606089013594506080890135935060a0890135925060c0890135613c4381613712565b8092505060e089013590509295985092959890939650565b60208082526014908201527313995e1d5cd49bdd5d195c8e881156141254915160621b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613cb157613cb1613c89565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613cde57600080fd5b8135613ce981613712565b9392505050565b60208082526019908201527f4e65787573526f757465723a20494e56414c49445f5041544800000000000000604082015260600190565b60208082526027908201527f4e65787573526f757465723a20494e53554646494349454e545f4f555450555460408201526617d05353d5539560ca1b606082015260800190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60208082526023908201527f4e65787573526f757465723a204558434553534956455f494e5055545f414d4f60408201526215539560ea1b606082015260800190565b600060208284031215613e0457600080fd5b5051919050565b600060208284031215613e1d57600080fd5b8151613ce9816139a7565b60008060408385031215613e3b57600080fd5b505080516020909101519092909150565b60208082526022908201527f4e65787573526f757465723a20494e53554646494349454e545f415f414d4f55604082015261139560f21b606082015260800190565b60208082526022908201527f4e65787573526f757465723a20494e53554646494349454e545f425f414d4f55604082015261139560f21b606082015260800190565b60005b83811015613eeb578181015183820152602001613ed3565b83811115612c765750506000910152565b60008251613f0e818460208701613ed0565b9190910192915050565b60208082526024908201527f4e657875734c6962726172793a20494e53554646494349454e545f4c495155496040820152634449545960e01b606082015260800190565b600082613f7957634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613f9157613f91613c89565b500190565b6000600019821415613faa57613faa613c89565b5060010190565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152613fea8160a0850160208701613ed0565b601f01601f19169190910160a00195945050505050565b60008161401057614010613c89565b506000190190565b80516001600160701b038116811461373557600080fd5b60008060006060848603121561404457600080fd5b61404d84614018565b925061405b60208501614018565b9150604084015163ffffffff8116811461407457600080fd5b809150509250925092565b60006020828403121561409157600080fd5b8151613ce981613712565b60008160001904831182151516156140b6576140b6613c89565b50029056fea2646970667358221220b0ca4cbfbbff696540c2820cfffb79e88507d596d3d374328c52c3ab9f8f2ccc64736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd31000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c42
-----Decoded View---------------
Arg [0] : _factory (address): 0xAf2977827a72e3CfE18104b0EDAF61Dd0689cd31
Arg [1] : _WETH (address): 0x951857744785E80e2De051c32EE7b25f9c458C42
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000af2977827a72e3cfe18104b0edaf61dd0689cd31
Arg [1] : 000000000000000000000000951857744785e80e2de051c32ee7b25f9c458c42
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.