Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
LiquidityPoolManager
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED /* * * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,@@@@@@@@@@@@@@@@@@@@@@@ %@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@,,,,,,,@@@@@@@@@@@@@ @@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@ * @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@/ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ * @@@@@@@@@@@& @@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@ * @@@@@@@@@@ @@@@@@@@@/ @@@@@@@@@@ @@@@@@@@@ @@@@@@@ * @@@@@@@@@@@@@@ @@@@@@@@@@, @@@@@@@@* (@ @@@@@@@@ @@@@@@@ * @@@@@@@@@@@@@@@ @@@@@@@@@ #@@@@@@@@ @@@@@@ @@@@@@@@ @@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@ @@@@@@@@ @@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@ @@@@@. @@@@@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@@ * @@@@@@@@@@@@@@@@@@ @@@@@@ *@@@@@@@@@@ @@@@@@@@@ #@@@@@@@@@@@ * @@@@@@@@@@@@@@@@ %@@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@ * @@@@@@@@@@@@@@ #@@@@@@@@@@@@@@@@@@@@@@@ &@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@ @@@@@@ &@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@ @@@@@@ @@@@@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@ * @@@@@@@@@@ @@@@@@ @@@@@@& @@@@@@@@@@ @@@@@@@@@@@@@@@@@ * @@@@@@@@@ ,@@@@@@ %@@@ @@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ * @@@@@@@@ @@@@@@@ @@@@@@@@@@@@@ @@@@@@@@ ,@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@, @@@@@@@@@@ @@@@@@@@@@@@@@@, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@/ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@, @@@@@@@@@@@@@# @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@ [email protected]@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * * Web: https://univ.money */ pragma solidity ^0.8.11; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "./interfaces/IJoeRouter.sol"; import "./interfaces/IJoeFactory.sol"; import "./interfaces/IJoePair.sol"; import "./interfaces/ILiquidityPoolManager.sol"; import "./helpers/OwnerRecovery.sol"; import "../implementations/output/UniverseImplementationPointer.sol"; contract LiquidityPoolManager is Ownable, OwnerRecovery, UniverseImplementationPointer { using SafeERC20 for IERC20; event SwapAndLiquify( uint256 indexed half, uint256 indexed initialBalance, uint256 indexed newRightBalance ); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); bool private liquifyEnabled = false; bool private isSwapping = false; uint256 public swapTokensToLiquidityThreshold; // Initial liquidity split settings address[] public feeAddresses = [ address(0x20e5D2308F560060C7eC1a8454774209D9Bf1F31), // Treasury investments (30%) address(0x070b2b1F138FdEC6D6Cb3c47d8A74D5715c26Abf), // Dev (30%) address(0x747218E40fF47bE6869d7Ea3BDc74ae879dac7c4), // Marketing (30%) address(0x1acC825C922BBC9c6e4c03ECD929Bc8f73F9e363) // Donations (10%) ]; uint8[] public feePercentages = [30, 30, 30]; uint256 public pairLiquidityTotalSupply; IJoeRouter02 private router; IJoePair private pair; IERC20 private leftSide; IERC20 private rightSide; uint256 private constant MAX_UINT256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; constructor( address _router, address[2] memory path, uint256 _swapTokensToLiquidityThreshold ) { require( _router != address(0), "LiquidityPoolManager: Router cannot be undefined" ); router = IJoeRouter02(_router); pair = createPairWith(path); leftSide = IERC20(path[0]); rightSide = IERC20(path[1]); pairLiquidityTotalSupply = pair.totalSupply(); updateSwapTokensToLiquidityThreshold(_swapTokensToLiquidityThreshold); // Left side should be main contract changeUniverseImplementation(address(leftSide)); shouldLiquify(true); } function afterTokenTransfer(address sender) external onlyUniverse returns (bool) { uint256 leftSideBalance = leftSide.balanceOf(address(this)); bool shouldSwap = leftSideBalance >= swapTokensToLiquidityThreshold; if ( shouldSwap && liquifyEnabled && pair.totalSupply() > 0 && !isSwapping && !isPair(sender) && !isRouter(sender) ) { // This prevents inside calls from triggering this function again (infinite loop) // It's ok for this function to be reentrant since it's protected by this check isSwapping = true; // To prevent bigger sell impact we only sell in batches with the threshold as a limit uint256 totalLP = swapAndLiquify(swapTokensToLiquidityThreshold); uint256 totalLPRemaining = totalLP; for (uint256 i = 0; i < feeAddresses.length; i++) { if ((feeAddresses.length - 1) == i) { // Send remaining LP tokens to the last address sendLPTokensTo(feeAddresses[i], totalLPRemaining); } else { uint256 calculatedFee = (totalLP * feePercentages[i]) / 100; totalLPRemaining -= calculatedFee; sendLPTokensTo(feeAddresses[i], calculatedFee); } } // Keep it healthy pair.sync(); // This prevents inside calls from triggering this function again (infinite loop) isSwapping = false; } // Always update liquidity total supply pairLiquidityTotalSupply = pair.totalSupply(); return true; } function isLiquidityAdded() external view returns (bool) { return pairLiquidityTotalSupply < pair.totalSupply(); } function isLiquidityRemoved() external view returns (bool) { return pairLiquidityTotalSupply > pair.totalSupply(); } // Magical function that adds liquidity effortlessly function swapAndLiquify(uint256 tokens) private returns (uint256) { uint256 half = tokens / 2; uint256 initialRightBalance = rightSide.balanceOf(address(this)); swapLeftSideForRightSide(half); uint256 newRightBalance = rightSide.balanceOf(address(this)) - initialRightBalance; addLiquidityToken(half, newRightBalance); emit SwapAndLiquify(half, initialRightBalance, newRightBalance); // Return the number of LP tokens this contract have return pair.balanceOf(address(this)); } // Transfer LP tokens conveniently function sendLPTokensTo(address to, uint256 tokens) private { pair.transfer(to, tokens); } function createPairWith(address[2] memory path) private returns (IJoePair) { IJoeFactory factory = IJoeFactory(router.factory()); address _pair; address _currentPair = factory.getPair(path[0], path[1]); if (_currentPair != address(0)) { _pair = _currentPair; } else { _pair = factory.createPair(path[0], path[1]); } return IJoePair(_pair); } function swapLeftSideForRightSide(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(leftSide); path[1] = address(rightSide); router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // Accept any amount path, address(this), block.timestamp ); } function addLiquidityToken(uint256 leftAmount, uint256 rightAmount) private { router.addLiquidity( address(leftSide), address(rightSide), leftAmount, rightAmount, 0, // Slippage is unavoidable 0, // Slippage is unavoidable address(this), block.timestamp ); } // Views function getRouter() external view returns (address) { return address(router); } function getPair() external view returns (address) { return address(pair); } function getLeftSide() external view returns (address) { // Should be UNIV return address(leftSide); } function getRightSide() external view returns (address) { // Should be MIM return address(rightSide); } function isPair(address _pair) public view returns (bool) { return _pair == address(pair); } function isFeeReceiver(address _receiver) external view returns (bool) { for (uint256 i = 0; i < feeAddresses.length; i++) { if (feeAddresses[i] == _receiver) { return true; } } return false; } function isRouter(address _router) public view returns (bool) { return _router == address(router); } function getFeeAddresses() external view returns (address[] memory) { return feeAddresses; } function getFeePercentages() external view returns (uint8[] memory) { return feePercentages; } // Owner functions function setAllowance(bool active) public onlyOwner { // Gas optimization - Approval // There is no risk in giving unlimited allowance to the router // As long as it's a trusted one leftSide.safeApprove(address(router), (active ? MAX_UINT256 : 0)); rightSide.safeApprove(address(router), (active ? MAX_UINT256 : 0)); } function shouldLiquify(bool _liquifyEnabled) public onlyOwner { liquifyEnabled = _liquifyEnabled; setAllowance(_liquifyEnabled); } function updateSwapTokensToLiquidityThreshold( uint256 _swapTokensToLiquidityThreshold ) public onlyOwner { require( _swapTokensToLiquidityThreshold > 0, "LiquidityPoolManager: Number of coins to swap to liquidity must be defined" ); swapTokensToLiquidityThreshold = _swapTokensToLiquidityThreshold; } function feesForwarder( address[] memory _feeAddresses, uint8[] memory _feePercentages ) public onlyOwner { require( _feeAddresses.length > 0, "LiquidityPoolManager: Addresses array length must be greater than zero" ); require( _feeAddresses.length == _feePercentages.length + 1, "LiquidityPoolManager: Addresses arrays length mismatch. Remember last address receive the remains." ); feeAddresses = _feeAddresses; feePercentages = _feePercentages; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.11; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "../../contracts/interfaces/IUniverse.sol"; abstract contract UniverseImplementationPointer is Ownable { IUniverse internal universe; event UpdateUniverse( address indexed oldImplementation, address indexed newImplementation ); modifier onlyUniverse() { require( address(universe) != address(0), "Implementations: Universe is not set" ); address sender = _msgSender(); require( sender == address(universe), "Implementations: Not Universe" ); _; } function getUniverseImplementation() public view returns (address) { return address(universe); } function changeUniverseImplementation(address newImplementation) public virtual onlyOwner { address oldImplementation = address(universe); require( Address.isContract(newImplementation) || newImplementation == address(0), "Universe: You can only set 0x0 or a contract address as a new implementation" ); universe = IUniverse(newImplementation); emit UpdateUniverse(oldImplementation, newImplementation); } uint256[49] private __gap; }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.11; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IUniverse is IERC20 { function owner() external view returns (address); function accountBurn(address account, uint256 amount) external; function accountReward(address account, uint256 amount) external; function liquidityReward(uint256 amount) external; }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.11; interface ILiquidityPoolManager { function owner() external view returns (address); function getRouter() external view returns (address); function getPair() external view returns (address); function getLeftSide() external view returns (address); function getRightSide() external view returns (address); function isPair(address _pair) external view returns (bool); function isRouter(address _router) external view returns (bool); function isFeeReceiver(address _receiver) external view returns (bool); function isLiquidityIntact() external view returns (bool); function isLiquidityAdded() external view returns (bool); function afterTokenTransfer(address sender) external returns (bool); }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.11; interface IJoeRouter01 { function factory() external pure returns (address); function WAVAX() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityAVAX( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountAVAX, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityAVAX( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountAVAX); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityAVAXWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountAVAX); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactAVAXForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactAVAX( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForAVAX( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapAVAXForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IJoeRouter02 is IJoeRouter01 { function removeLiquidityAVAXSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external returns (uint256 amountAVAX); function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountAVAX); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactAVAXForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForAVAXSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.11; interface IJoePair { 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; }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.11; interface IJoeFactory { 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: UNLICENSED pragma solidity ^0.8.11; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; abstract contract OwnerRecovery is Ownable { function recoverLostAVAX() external onlyOwner { payable(owner()).transfer(address(this).balance); } function recoverLostTokens( address _token, address _to, uint256 _amount ) external onlyOwner { IERC20(_token).transfer(_to, _amount); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; import "../../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "london", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address[2]","name":"path","type":"address[2]"},{"internalType":"uint256","name":"_swapTokensToLiquidityThreshold","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"half","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"initialBalance","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newRightBalance","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":true,"internalType":"address","name":"newImplementation","type":"address"}],"name":"UpdateUniverse","type":"event"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"afterTokenTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"changeUniverseImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feePercentages","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_feeAddresses","type":"address[]"},{"internalType":"uint8[]","name":"_feePercentages","type":"uint8[]"}],"name":"feesForwarder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFeeAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeePercentages","outputs":[{"internalType":"uint8[]","name":"","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLeftSide","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRightSide","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniverseImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"isFeeReceiver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityRemoved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"isRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairLiquidityTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverLostAVAX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverLostTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_liquifyEnabled","type":"bool"}],"name":"shouldLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensToLiquidityThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTokensToLiquidityThreshold","type":"uint256"}],"name":"updateSwapTokensToLiquidityThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6033805461ffff191690556101006040527320e5d2308f560060c7ec1a8454774209d9bf1f31608090815273070b2b1f138fdec6d6cb3c47d8a74d5715c26abf60a05273747218e40ff47be6869d7ea3bdc74ae879dac7c460c052731acc825c922bbc9c6e4c03ecd929bc8f73f9e36360e0526200008290603590600462000b89565b5060408051606081018252601e8082526020820181905291810191909152620000b090603690600362000bf3565b50348015620000be57600080fd5b5060405162002d2238038062002d22833981016040819052620000e19162000ce0565b620000ec3362000266565b6001600160a01b038316620001615760405162461bcd60e51b815260206004820152603060248201527f4c6971756964697479506f6f6c4d616e616765723a20526f757465722063616e60448201526f1b9bdd081899481d5b9919599a5b995960821b60648201526084015b60405180910390fd5b603880546001600160a01b0319166001600160a01b0385161790556200018782620002b6565b603980546001600160a01b03199081166001600160a01b039384169081179092558451603a80548316918516919091179055602080860151603b80549093169416939093179055604080516318160ddd60e01b8152905191926318160ddd926004808401938290030181865afa15801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c919062000d87565b6037556200023a816200045c565b603a5462000251906001600160a01b031662000537565b6200025d600162000692565b50505062000e69565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080603860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200030d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000333919062000da1565b8351602085015160405163e6a4390560e01b81526001600160a01b0392831660048201529082166024820152919250600091829184169063e6a4390590604401602060405180830381865afa15801562000391573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b7919062000da1565b90506001600160a01b03811615620003d25780915062000454565b845160208601516040516364e329cb60e11b81526001600160a01b03928316600482015290821660248201529084169063c9c65396906044016020604051808303816000875af11580156200042b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000451919062000da1565b91505b509392505050565b6000546001600160a01b03163314620004a75760405162461bcd60e51b8152602060048201819052602482015260008051602062002d02833981519152604482015260640162000158565b60008111620005325760405162461bcd60e51b815260206004820152604a60248201527f4c6971756964697479506f6f6c4d616e616765723a204e756d626572206f662060448201527f636f696e7320746f207377617020746f206c6971756964697479206d757374206064820152691899481919599a5b995960b21b608482015260a40162000158565b603455565b6000546001600160a01b03163314620005825760405162461bcd60e51b8152602060048201819052602482015260008051602062002d02833981519152604482015260640162000158565b6001546001600160a01b0316620005a582620006f9602090811b6200109a17901c565b80620005b857506001600160a01b038216155b620006415760405162461bcd60e51b815260206004820152604c60248201527f556e6976657273653a20596f752063616e206f6e6c792073657420307830206f60448201527f72206120636f6e747261637420616464726573732061732061206e657720696d60648201526b383632b6b2b73a30ba34b7b760a11b608482015260a40162000158565b600180546001600160a01b0319166001600160a01b0384811691821790925560405190918316907ff4146d7b1dd40aca6b1e9333e0c48610f28d34d428a7ba4bd09b925d75ae12f590600090a35050565b6000546001600160a01b03163314620006dd5760405162461bcd60e51b8152602060048201819052602482015260008051602062002d02833981519152604482015260640162000158565b6033805460ff1916821515179055620006f681620006ff565b50565b3b151590565b6000546001600160a01b031633146200074a5760405162461bcd60e51b8152602060048201819052602482015260008051602062002d02833981519152604482015260640162000158565b6038546200078d906001600160a01b031682620007695760006200076d565b6000195b603a546001600160a01b03169190620007d0602090811b620010a017901c565b603854620006f6906001600160a01b031682620007ac576000620007b0565b6000195b603b546001600160a01b03169190620007d0602090811b620010a017901c565b8015806200084e5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000826573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200084c919062000d87565b155b620008c25760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000158565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091526200091a9185916200091f16565b505050565b60006200097b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620009fd60201b620011d7179092919060201c565b8051909150156200091a57808060200190518101906200099c919062000dbf565b6200091a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000158565b606062000a0e848460008562000a18565b90505b9392505050565b60608247101562000a7b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000158565b843b62000acb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000158565b600080866001600160a01b0316858760405162000ae9919062000e16565b60006040518083038185875af1925050503d806000811462000b28576040519150601f19603f3d011682016040523d82523d6000602084013e62000b2d565b606091505b50909250905062000b4082828662000b4b565b979650505050505050565b6060831562000b5c57508162000a11565b82511562000b6d5782518084602001fd5b8160405162461bcd60e51b815260040162000158919062000e34565b82805482825590600052602060002090810192821562000be1579160200282015b8281111562000be157825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000baa565b5062000bef92915062000c96565b5090565b82805482825590600052602060002090601f0160209004810192821562000be15791602002820160005b8382111562000c5d57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030262000c1d565b801562000c8c5782816101000a81549060ff021916905560010160208160000104928301926001030262000c5d565b505062000bef9291505b5b8082111562000bef576000815560010162000c97565b80516001600160a01b038116811462000cc557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060006080848603121562000cf657600080fd5b62000d018462000cad565b9250602085603f86011262000d1557600080fd5b604080519081016001600160401b038111828210171562000d3a5762000d3a62000cca565b60405280606087018881111562000d5057600080fd5b8388015b8181101562000d765762000d688162000cad565b835291840191840162000d54565b505195989197509495509350505050565b60006020828403121562000d9a57600080fd5b5051919050565b60006020828403121562000db457600080fd5b62000a118262000cad565b60006020828403121562000dd257600080fd5b8151801515811462000a1157600080fd5b60005b8381101562000e0057818101518382015260200162000de6565b8381111562000e10576000848401525b50505050565b6000825162000e2a81846020870162000de3565b9190910192915050565b602081526000825180602084015262000e5581604085016020870162000de3565b601f01601f19169190910160400192915050565b611e898062000e796000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063c1f1b1b511610097578063e9fca96011610071578063e9fca96014610383578063f2fde38b14610396578063f3d7d282146103a9578063fac4fcc8146103cb57600080fd5b8063c1f1b1b51461033f578063c225751e14610350578063e5e31b131461036157600080fd5b8063ac43b099116100d3578063ac43b099146102f1578063b0f479a114610306578063b278110f14610317578063b579f5391461032a57600080fd5b8063715018a6146102d05780638da5cb5b146102d8578063a647c9ff146102e957600080fd5b80631e17ba391161016657806351c383a51161014057806351c383a51461028857806361dec3541461029b5780636334b724146102ae5780636c221a72146102bf57600080fd5b80631e17ba391461025a5780632c5ecd4f146102625780634cb084661461027557600080fd5b806305cc9d6c146101ae5780630f3988ce146101cb5780631297ac4f146101de57806315151c4b1461020957806319cfbcd41461022e5780631d4f3d4f14610243575b600080fd5b6101b66103d4565b60405190151581526020015b60405180910390f35b6101b66101d936600461196d565b61044b565b6101f16101ec366004611988565b610870565b6040516001600160a01b0390911681526020016101c2565b61021c610217366004611988565b61089a565b60405160ff90911681526020016101c2565b61024161023c3660046119af565b6108ce565b005b61024c60345481565b6040519081526020016101c2565b6101b6610961565b610241610270366004611988565b6109d8565b610241610283366004611ab2565b610a90565b61024161029636600461196d565b610c1f565b6102416102a9366004611b72565b610d43565b6001546001600160a01b03166101f1565b603a546001600160a01b03166101f1565b610241610de6565b6000546001600160a01b03166101f1565b610241610e1c565b6102f9610e80565b6040516101c29190611bae565b6038546001600160a01b03166101f1565b6101b661032536600461196d565b610ef6565b610332610f60565b6040516101c29190611c39565b6039546001600160a01b03166101f1565b603b546001600160a01b03166101f1565b6101b661036f36600461196d565b6039546001600160a01b0391821691161490565b6102416103913660046119af565b610fc1565b6102416103a436600461196d565b611002565b6101b66103b736600461196d565b6038546001600160a01b0391821691161490565b61024c60375481565b603954604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa15801561041e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104429190611c4c565b60375411905090565b6001546000906001600160a01b03166104b75760405162461bcd60e51b8152602060048201526024808201527f496d706c656d656e746174696f6e733a20556e697665727365206973206e6f74604482015263081cd95d60e21b60648201526084015b60405180910390fd5b60015433906001600160a01b031681146105135760405162461bcd60e51b815260206004820152601d60248201527f496d706c656d656e746174696f6e733a204e6f7420556e69766572736500000060448201526064016104ae565b603a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561055c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105809190611c4c565b60345490915081108015908190610599575060335460ff165b80156106105750603954604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa1580156105ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060e9190611c4c565b115b80156106245750603354610100900460ff16155b801561063e57506039546001600160a01b03868116911614155b801561065857506038546001600160a01b03868116911614155b156107eb576033805461ff00191661010017905560345460009061067b906111f0565b90508060005b60355481101561077457603554819061069c90600190611c7b565b14156106d8576106d3603582815481106106b8576106b8611c92565b6000918252602090912001546001600160a01b0316836113a6565b610762565b60006064603683815481106106ef576106ef611c92565b60009182526020918290209181049091015461071791601f166101000a900460ff1686611ca8565b6107219190611cc7565b905061072d8184611c7b565b92506107606035838154811061074557610745611c92565b6000918252602090912001546001600160a01b0316826113a6565b505b8061076c81611ce9565b915050610681565b50603960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b50506033805461ff0019169055505050505b603960009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561083e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108629190611c4c565b603755506001949350505050565b6035818154811061088057600080fd5b6000918252602090912001546001600160a01b0316905081565b603681815481106108aa57600080fd5b9060005260206000209060209182820401919006915054906101000a900460ff1681565b6000546001600160a01b031633146108f85760405162461bcd60e51b81526004016104ae90611d04565b60385461092b906001600160a01b031682610914576000610918565b6000195b603a546001600160a01b031691906110a0565b60385461095e906001600160a01b03168261094757600061094b565b6000195b603b546001600160a01b031691906110a0565b50565b603954604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa1580156109ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cf9190611c4c565b60375410905090565b6000546001600160a01b03163314610a025760405162461bcd60e51b81526004016104ae90611d04565b60008111610a8b5760405162461bcd60e51b815260206004820152604a60248201527f4c6971756964697479506f6f6c4d616e616765723a204e756d626572206f662060448201527f636f696e7320746f207377617020746f206c6971756964697479206d757374206064820152691899481919599a5b995960b21b608482015260a4016104ae565b603455565b6000546001600160a01b03163314610aba5760405162461bcd60e51b81526004016104ae90611d04565b6000825111610b405760405162461bcd60e51b815260206004820152604660248201527f4c6971756964697479506f6f6c4d616e616765723a204164647265737365732060448201527f6172726179206c656e677468206d7573742062652067726561746572207468616064820152656e207a65726f60d01b608482015260a4016104ae565b8051610b4d906001611d39565b825114610bf35760405162461bcd60e51b815260206004820152606260248201527f4c6971756964697479506f6f6c4d616e616765723a204164647265737365732060448201527f617272617973206c656e677468206d69736d617463682e2052656d656d62657260648201527f206c61737420616464726573732072656365697665207468652072656d61696e608482015261399760f11b60a482015260c4016104ae565b8151610c0690603590602085019061183a565b508051610c1a90603690602084019061189f565b505050565b6000546001600160a01b03163314610c495760405162461bcd60e51b81526004016104ae90611d04565b6001546001600160a01b0316813b151580610c6b57506001600160a01b038216155b610cf25760405162461bcd60e51b815260206004820152604c60248201527f556e6976657273653a20596f752063616e206f6e6c792073657420307830206f60448201527f72206120636f6e747261637420616464726573732061732061206e657720696d60648201526b383632b6b2b73a30ba34b7b760a11b608482015260a4016104ae565b600180546001600160a01b0319166001600160a01b0384811691821790925560405190918316907ff4146d7b1dd40aca6b1e9333e0c48610f28d34d428a7ba4bd09b925d75ae12f590600090a35050565b6000546001600160a01b03163314610d6d5760405162461bcd60e51b81526004016104ae90611d04565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de09190611d51565b50505050565b6000546001600160a01b03163314610e105760405162461bcd60e51b81526004016104ae90611d04565b610e1a600061141d565b565b6000546001600160a01b03163314610e465760405162461bcd60e51b81526004016104ae90611d04565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561095e573d6000803e3d6000fd5b60606036805480602002602001604051908101604052809291908181526020018280548015610eec57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610ebd5790505b5050505050905090565b6000805b603554811015610f5757826001600160a01b031660358281548110610f2157610f21611c92565b6000918252602090912001546001600160a01b03161415610f455750600192915050565b80610f4f81611ce9565b915050610efa565b50600092915050565b60606035805480602002602001604051908101604052809291908181526020018280548015610eec57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f9a575050505050905090565b6000546001600160a01b03163314610feb5760405162461bcd60e51b81526004016104ae90611d04565b6033805460ff191682151517905561095e816108ce565b6000546001600160a01b0316331461102c5760405162461bcd60e51b81526004016104ae90611d04565b6001600160a01b0381166110915760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ae565b61095e8161141d565b3b151590565b80158061111a5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190611c4c565b155b6111855760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016104ae565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610c1a90849061146d565b60606111e6848460008561153f565b90505b9392505050565b6000806111fe600284611cc7565b603b546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561124c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112709190611c4c565b905061127b82611667565b603b546040516370a0823160e01b815230600482015260009183916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156112c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec9190611c4c565b6112f69190611c7b565b90506113028382611755565b8082847f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56160405160405180910390a46039546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139d9190611c4c565b95945050505050565b60395460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156113f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190611d51565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006114c2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111d79092919063ffffffff16565b805190915015610c1a57808060200190518101906114e09190611d51565b610c1a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104ae565b6060824710156115a05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104ae565b843b6115ee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104ae565b600080866001600160a01b0316858760405161160a9190611d9a565b60006040518083038185875af1925050503d8060008114611647576040519150601f19603f3d011682016040523d82523d6000602084013e61164c565b606091505b509150915061165c828286611801565b979650505050505050565b6040805160028082526060820183526000926020830190803683375050603a5482519293506001600160a01b0316918391506000906116a8576116a8611c92565b6001600160a01b039283166020918202929092010152603b548251911690829060019081106116d9576116d9611c92565b6001600160a01b039283166020918202929092010152603854604051635c11d79560e01b8152911690635c11d7959061171f908590600090869030904290600401611db6565b600060405180830381600087803b15801561173957600080fd5b505af115801561174d573d6000803e3d6000fd5b505050505050565b603854603a54603b5460405162e8e33760e81b81526001600160a01b0392831660048201529082166024820152604481018590526064810184905260006084820181905260a48201523060c48201524260e482015291169063e8e3370090610104016060604051808303816000875af11580156117d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fa9190611df2565b5050505050565b606083156118105750816111e9565b8251156118205782518084602001fd5b8160405162461bcd60e51b81526004016104ae9190611e20565b82805482825590600052602060002090810192821561188f579160200282015b8281111561188f57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061185a565b5061189b92915061193c565b5090565b82805482825590600052602060002090601f0160209004810192821561188f5791602002820160005b8382111561190657835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026118c8565b80156119335782816101000a81549060ff0219169055600101602081600001049283019260010302611906565b505061189b9291505b5b8082111561189b576000815560010161193d565b80356001600160a01b038116811461196857600080fd5b919050565b60006020828403121561197f57600080fd5b6111e982611951565b60006020828403121561199a57600080fd5b5035919050565b801515811461095e57600080fd5b6000602082840312156119c157600080fd5b81356111e9816119a1565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a0b57611a0b6119cc565b604052919050565b600067ffffffffffffffff821115611a2d57611a2d6119cc565b5060051b60200190565b600082601f830112611a4857600080fd5b81356020611a5d611a5883611a13565b6119e2565b82815260059290921b84018101918181019086841115611a7c57600080fd5b8286015b84811015611aa757803560ff81168114611a9a5760008081fd5b8352918301918301611a80565b509695505050505050565b60008060408385031215611ac557600080fd5b823567ffffffffffffffff80821115611add57600080fd5b818501915085601f830112611af157600080fd5b81356020611b01611a5883611a13565b82815260059290921b84018101918181019089841115611b2057600080fd5b948201945b83861015611b4557611b3686611951565b82529482019490820190611b25565b96505086013592505080821115611b5b57600080fd5b50611b6885828601611a37565b9150509250929050565b600080600060608486031215611b8757600080fd5b611b9084611951565b9250611b9e60208501611951565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b81811015611be957835160ff1683529284019291840191600101611bca565b50909695505050505050565b600081518084526020808501945080840160005b83811015611c2e5781516001600160a01b031687529582019590820190600101611c09565b509495945050505050565b6020815260006111e96020830184611bf5565b600060208284031215611c5e57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611c8d57611c8d611c65565b500390565b634e487b7160e01b600052603260045260246000fd5b6000816000190483118215151615611cc257611cc2611c65565b500290565b600082611ce457634e487b7160e01b600052601260045260246000fd5b500490565b6000600019821415611cfd57611cfd611c65565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611d4c57611d4c611c65565b500190565b600060208284031215611d6357600080fd5b81516111e9816119a1565b60005b83811015611d89578181015183820152602001611d71565b83811115610de05750506000910152565b60008251611dac818460208701611d6e565b9190910192915050565b85815284602082015260a060408201526000611dd560a0830186611bf5565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215611e0757600080fd5b8351925060208401519150604084015190509250925092565b6020815260008251806020840152611e3f816040850160208701611d6e565b601f01601f1916919091016040019291505056fea2646970667358221220f0ee890461195d1cca9bc9d3114584e41ec49a9b89c3b3a88d729b591985ec1464736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4000000000000000000000000959b88966fc5b261df8359961357d34f4ee27b4a000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d000000000000000000000000000000000000000000adb53acfa41aee12000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4000000000000000000000000959b88966fc5b261df8359961357d34f4ee27b4a000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d000000000000000000000000000000000000000000adb53acfa41aee12000000
-----Decoded View---------------
Arg [0] : _router (address): 0x60ae616a2155ee3d9a68541ba4544862310933d4
Arg [1] : path (address[2]): 0x959b88966fc5b261df8359961357d34f4ee27b4a,0x130966628846bfd36ff31a822705796e8cb8c18d
Arg [2] : _swapTokensToLiquidityThreshold (uint256): 210000000000000000000000000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4
Arg [1] : 000000000000000000000000959b88966fc5b261df8359961357d34f4ee27b4a
Arg [2] : 000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d
Arg [3] : 000000000000000000000000000000000000000000adb53acfa41aee12000000
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.