ERC-20
Overview
Max Total Supply
877,659,912.300060790740955907 ASAP_RewardTracker
Holders
887
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
359,250.899944658362390623 ASAP_RewardTrackerValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RewardTracker
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-08 */ /* Token Name : ASAP - Auto discord dex sniper BOT SYMBOL : ASAP The fastest discord DEX (uniswap, pancakeswap ) sniper bot , Be the first to buy the next 1000X tokens. Buy/sell Tax 4/4: Treasury : 2% liquidity Pool : 1% Holders reward (paid in ether) : 1% website : https://asapbot.xyz/ twitter : https://twitter.com/MyAsapBot Telegram :https://t.me/myasapbot Features New Token listing Manual Buy/Sell Auto-Buying Degen Vault Hold & Earn */ // SPDX-License-Identifier: MIT pragma solidity 0.8.10; /** * @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 `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); /** * @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 ); } // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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; } } /** * @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); } } // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() 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 addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, 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 removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); 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 removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); 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 swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( 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 IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } 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 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; } 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; } contract ASAP is Pausable, Ownable, IERC20 { address constant UNISWAPROUTER = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address constant DEAD = 0x000000000000000000000000000000000000dEaD; address constant ZERO = 0x0000000000000000000000000000000000000000; string private constant _name = "Asap Sniper Bot"; string private constant _symbol = "ASAP"; uint256 public buyTreasuryFeeBPS = 200; uint256 public buyLiquidityFeeBPS = 100; uint256 public buyRewardFeeBPS = 100; uint256 public buyTotalFeeBPS = 400; uint256 public sellTreasuryFeeBPS = 200; uint256 public sellLiquidityFeeBPS = 100; uint256 public sellRewardFeeBPS = 100; uint256 public sellTotalFeeBPS = 400; uint256 public tokensForTreasury; uint256 public tokensForLiquidity; uint256 public tokensForRewards; uint256 public swapTokensAtAmount = 100000 * (10**18); uint256 public lastSwapTime; bool swapAllToken = true; bool public swapEnabled = true; bool public taxEnabled = true; bool public transferTaxEnabled = false; bool public compoundingEnabled = true; uint256 private _totalSupply; bool private swapping; bool private isCompounding; address treasuryWallet; address liquidityWallet; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public automatedMarketMakerPairs; mapping(address => bool) private _whiteList; mapping(address => bool) isBlacklisted; event SwapAndAddLiquidity( uint256 tokensSwapped, uint256 nativeReceived, uint256 tokensIntoLiquidity ); event SendRewards(uint256 tokensSwapped, uint256 amount); event SendTreasury(uint256 tokensSwapped, uint256 amount); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event SwapEnabled(bool enabled); event TaxEnabled(bool enabled); event TransferTaxEnabled(bool enabled); event CompoundingEnabled(bool enabled); event BlacklistEnabled(bool enabled); event SellFeeUpdated(uint256 treasury, uint256 liquidity, uint256 reward); event BuyFeeUpdated(uint256 treasury, uint256 liquidity, uint256 reward); event WalletUpdated(address treasury, address liquidity); event TradingEnabled(); event UniswapV2RouterUpdated(); event RewardSettingsUpdated( bool swapEnabled, uint256 swapTokensAtAmount, bool swapAllToken ); event AccountExcludedFromMaxTx(address account); event AccountExcludedFromMaxWallet(address account); event MaxWalletBPSUpdated(uint256 bps); event TokenRescued(address token, uint256 amount); event ETHRescued(uint256 amount); event AccountBlacklisted(address account); event AccountWhitelisted(address account); event LogErrorString(string message); RewardTracker public immutable rewardTracker; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; uint256 public maxTxBPS = 50; uint256 public maxWalletBPS = 250; bool isOpen = false; mapping(address => bool) private _isExcludedFromMaxTx; mapping(address => bool) private _isExcludedFromMaxWallet; constructor() { treasuryWallet = owner(); liquidityWallet = owner(); rewardTracker = new RewardTracker(address(this), UNISWAPROUTER); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(UNISWAPROUTER); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); rewardTracker.excludeFromRewards(address(rewardTracker), true); rewardTracker.excludeFromRewards(address(this), true); rewardTracker.excludeFromRewards(owner(), true); rewardTracker.excludeFromRewards(address(_uniswapV2Router), true); excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(rewardTracker), true); excludeFromMaxTx(owner(), true); excludeFromMaxTx(address(this), true); excludeFromMaxTx(address(rewardTracker), true); excludeFromMaxWallet(owner(), true); excludeFromMaxWallet(address(this), true); excludeFromMaxWallet(address(rewardTracker), true); _mint(owner(), 1000000000 * (10**18)); } receive() external payable {} function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ASAP: decreased allowance below zero" ); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ASAP: transfer amount exceeds allowance" ); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function openTrading() external onlyOwner { isOpen = true; emit TradingEnabled(); } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function _transfer( address sender, address recipient, uint256 amount ) internal { require( isOpen || sender == owner() || recipient == owner() || _whiteList[sender] || _whiteList[recipient], "Not Open" ); require(!isBlacklisted[sender], "ASAP: Sender is blacklisted"); require(!isBlacklisted[recipient], "ASAP: Recipient is blacklisted"); require(sender != address(0), "ASAP: transfer from the zero address"); require(recipient != address(0), "ASAP: transfer to the zero address"); uint256 _maxTxAmount = (totalSupply() * maxTxBPS) / 10000; uint256 _maxWallet = (totalSupply() * maxWalletBPS) / 10000; require( amount <= _maxTxAmount || _isExcludedFromMaxTx[sender], "TX Limit Exceeded" ); if ( sender != owner() && recipient != address(this) && recipient != address(DEAD) && recipient != uniswapV2Pair ) { uint256 currentBalance = balanceOf(recipient); require( _isExcludedFromMaxWallet[recipient] || (currentBalance + amount <= _maxWallet), "Wallet hold too large amount of token" ); } uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ASAP: transfer amount exceeds balance" ); uint256 contractTokenBalance = balanceOf(address(this)); uint256 contractNativeBalance = address(this).balance; bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( swapEnabled && // True canSwap && // true !swapping && // swapping=false !false true !automatedMarketMakerPairs[sender] && // no swap on remove liquidity step 1 or DEX buy sender != address(uniswapV2Router) && // no swap on remove liquidity step 2 sender != owner() && recipient != owner() ) { swapping = true; if (!swapAllToken) { contractTokenBalance = swapTokensAtAmount; } _executeSwap(contractTokenBalance, contractNativeBalance); lastSwapTime = block.timestamp; swapping = false; } bool takeFee; if ( sender == address(uniswapV2Pair) || recipient == address(uniswapV2Pair) || automatedMarketMakerPairs[recipient] || automatedMarketMakerPairs[sender] || transferTaxEnabled ) { takeFee = true; } if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) { takeFee = false; } if (swapping || isCompounding || !taxEnabled) { takeFee = false; } if (takeFee) { uint256 fees; // selling if (automatedMarketMakerPairs[recipient] && sellTotalFeeBPS > 0) { fees = (amount * sellTotalFeeBPS) / 10000; tokensForTreasury += (fees * sellTreasuryFeeBPS) / sellTotalFeeBPS; tokensForRewards += (fees * sellRewardFeeBPS) / sellTotalFeeBPS; tokensForLiquidity += (fees * sellLiquidityFeeBPS) / sellTotalFeeBPS; } else if ( automatedMarketMakerPairs[sender] && buyTotalFeeBPS > 0 ) { // buying fees = (amount * buyTotalFeeBPS) / 10000; tokensForTreasury += (fees * buyTreasuryFeeBPS) / buyTotalFeeBPS; tokensForRewards += (fees * buyRewardFeeBPS) / buyTotalFeeBPS; tokensForLiquidity += (fees * buyLiquidityFeeBPS) / buyTotalFeeBPS; } amount -= fees; _executeTransfer(sender, address(this), fees); } _executeTransfer(sender, recipient, amount); rewardTracker.setBalance(payable(sender), balanceOf(sender)); rewardTracker.setBalance(payable(recipient), balanceOf(recipient)); } function _executeTransfer( address sender, address recipient, uint256 amount ) private { require(sender != address(0), "ASAP: transfer from the zero address"); require(recipient != address(0), "ASAP: transfer to the zero address"); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ASAP: transfer amount exceeds balance" ); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ASAP: approve from the zero address"); require(spender != address(0), "ASAP: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _mint(address account, uint256 amount) private { require(account != address(0), "ASAP: mint to the zero address"); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) private { require(account != address(0), "ASAP: burn from the zero address"); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ASAP: burn amount exceeds balance"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); } function swapTokensForNative(uint256 tokens) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokens); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokens, 0, // accept any amount of native path, address(this), block.timestamp ); } function addLiquidity(uint256 tokens, uint256 native) private { _approve(address(this), address(uniswapV2Router), tokens); uniswapV2Router.addLiquidityETH{value: native}( address(this), tokens, 0, // slippage unavoidable 0, // slippage unavoidable liquidityWallet, block.timestamp ); } function includeToWhiteList(address[] memory _users) private { for (uint8 i = 0; i < _users.length; i++) { _whiteList[_users[i]] = true; } } function _executeSwap(uint256 tokens, uint256 native) private { if (tokens <= 0) { return; } uint256 swapTokensTreasury; if (address(treasuryWallet) != address(0)) { swapTokensTreasury = tokensForTreasury; } uint256 swapTokensRewards; if (rewardTracker.totalSupply() > 0) { swapTokensRewards = tokensForRewards; } uint256 swapTokensLiquidity = tokensForLiquidity / 2; uint256 addTokensLiquidity = tokensForLiquidity - swapTokensLiquidity; uint256 swapTokensTotal = swapTokensRewards + swapTokensTreasury + swapTokensLiquidity; uint256 initNativeBal = address(this).balance; swapTokensForNative(swapTokensTotal); uint256 nativeSwapped = (address(this).balance - initNativeBal) + native; tokensForTreasury = 0; tokensForRewards = 0; tokensForLiquidity = 0; uint256 nativeTreasury = (nativeSwapped * swapTokensTreasury) / swapTokensTotal; uint256 nativeRewards = (nativeSwapped * swapTokensRewards) / swapTokensTotal; uint256 nativeLiquidity = nativeSwapped - nativeTreasury - nativeRewards; if (nativeTreasury > 0) { (bool success, ) = payable(treasuryWallet).call{ value: nativeTreasury }(""); if (success) { emit SendTreasury(swapTokensTreasury, nativeTreasury); } else { emit LogErrorString("Wallet failed to receive treasury tokens"); } } addLiquidity(addTokensLiquidity, nativeLiquidity); emit SwapAndAddLiquidity( swapTokensLiquidity, nativeLiquidity, addTokensLiquidity ); if (nativeRewards > 0) { (bool success, ) = address(rewardTracker).call{ value: nativeRewards }(""); if (success) { emit SendRewards(swapTokensRewards, nativeRewards); } else { emit LogErrorString("Tracker failed to receive tokens"); } } } function excludeFromFees(address account, bool excluded) public onlyOwner { require( _isExcludedFromFees[account] != excluded, "ASAP: account is already set to requested state" ); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function manualSendReward(uint256 amount, address holder) external onlyOwner { rewardTracker.manualSendReward(amount, holder); } function excludeFromRewards(address account, bool excluded) public onlyOwner { rewardTracker.excludeFromRewards(account, excluded); } function isExcludedFromRewards(address account) public view returns (bool) { return rewardTracker.isExcludedFromRewards(account); } function setWallet( address payable _treasuryWallet, address payable _liquidityWallet ) external onlyOwner { require( _liquidityWallet != address(0), "_liquidityWallet can not be zero address!" ); require( _treasuryWallet != address(0), "_treasuryWallet can not be zero address!" ); treasuryWallet = _treasuryWallet; liquidityWallet = _liquidityWallet; emit WalletUpdated(treasuryWallet, liquidityWallet); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "ASAP: DEX pair can not be removed"); _setAutomatedMarketMakerPair(pair, value); } function setBuyFee( uint256 _treasuryFee, uint256 _liquidityFee, uint256 _rewardFee ) external onlyOwner { buyTreasuryFeeBPS = _treasuryFee; buyLiquidityFeeBPS = _liquidityFee; buyRewardFeeBPS = _rewardFee; buyTotalFeeBPS = _treasuryFee + _liquidityFee + _rewardFee; require(buyTotalFeeBPS <= 5000, "Total buy fee is too large"); emit BuyFeeUpdated(_treasuryFee, _liquidityFee, _rewardFee); } function setSellFee( uint256 _treasuryFee, uint256 _liquidityFee, uint256 _rewardFee ) external onlyOwner { sellTreasuryFeeBPS = _treasuryFee; sellLiquidityFeeBPS = _liquidityFee; sellRewardFeeBPS = _rewardFee; sellTotalFeeBPS = _treasuryFee + _liquidityFee + _rewardFee; require(sellTotalFeeBPS <= 5000, "Total sell fee is too large"); emit SellFeeUpdated(_treasuryFee, _liquidityFee, _rewardFee); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "ASAP: automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; if (value) { rewardTracker.excludeFromRewards(pair, true); } emit SetAutomatedMarketMakerPair(pair, value); } function updateUniswapV2Router(address newAddress) public onlyOwner { require( newAddress != address(0), "uniswapV2Router can not be zero address!" ); require( newAddress != address(uniswapV2Router), "ASAP: the router is already set to the new address" ); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()) .createPair(address(this), uniswapV2Router.WETH()); uniswapV2Pair = _uniswapV2Pair; emit UniswapV2RouterUpdated(); } function claim() public { rewardTracker.processAccount(payable(_msgSender())); } function compound() public { require(compoundingEnabled, "ASAP: compounding is not enabled"); isCompounding = true; rewardTracker.compoundAccount(payable(_msgSender())); isCompounding = false; } function withdrawableRewardOf(address account) public view returns (uint256) { return rewardTracker.withdrawableRewardOf(account); } function withdrawnRewardOf(address account) public view returns (uint256) { return rewardTracker.withdrawnRewardOf(account); } function accumulativeRewardOf(address account) public view returns (uint256) { return rewardTracker.accumulativeRewardOf(account); } function getAccountInfo(address account) public view returns ( address, uint256, uint256, uint256, uint256 ) { return rewardTracker.getAccountInfo(account); } function getLastClaimTime(address account) public view returns (uint256) { return rewardTracker.getLastClaimTime(account); } function setSwapEnabled(bool _enabled) external onlyOwner { swapEnabled = _enabled; emit SwapEnabled(_enabled); } function setTaxEnabled(bool _enabled) external onlyOwner { taxEnabled = _enabled; emit TaxEnabled(_enabled); } function setTransferTaxEnabled(bool _enabled) external onlyOwner { transferTaxEnabled = _enabled; emit TransferTaxEnabled(_enabled); } function setCompoundingEnabled(bool _enabled) external onlyOwner { compoundingEnabled = _enabled; emit CompoundingEnabled(_enabled); } function updateRewardSettings( bool _swapEnabled, uint256 _swapTokensAtAmount, bool _swapAllToken ) external onlyOwner { swapEnabled = _swapEnabled; swapTokensAtAmount = _swapTokensAtAmount; swapAllToken = _swapAllToken; emit RewardSettingsUpdated( swapEnabled, swapTokensAtAmount, swapAllToken ); } function setMaxTxBPS(uint256 bps) external onlyOwner { require(bps >= 75 && bps <= 10000, "BPS must be between 75 and 10000"); maxTxBPS = bps; } function excludeFromMaxTx(address account, bool excluded) public onlyOwner { _isExcludedFromMaxTx[account] = excluded; emit AccountExcludedFromMaxTx(account); } function isExcludedFromMaxTx(address account) public view returns (bool) { return _isExcludedFromMaxTx[account]; } function setMaxWalletBPS(uint256 bps) external onlyOwner { require( bps >= 175 && bps <= 10000, "BPS must be between 175 and 10000" ); maxWalletBPS = bps; emit MaxWalletBPSUpdated(bps); } function excludeFromMaxWallet(address account, bool excluded) public onlyOwner { _isExcludedFromMaxWallet[account] = excluded; emit AccountExcludedFromMaxWallet(account); } function isExcludedFromMaxWallet(address account) public view returns (bool) { return _isExcludedFromMaxWallet[account]; } function rescueToken(address _token, uint256 _amount) external onlyOwner { IERC20(_token).transfer(msg.sender, _amount); emit TokenRescued(_token, _amount); } function rescueETH(uint256 _amount) external onlyOwner { (bool success, ) = payable(msg.sender).call{value: _amount}(""); require(success, "ETH rescue failed."); emit ETHRescued(_amount); } function blackList(address _user) public onlyOwner { require(!isBlacklisted[_user], "user already blacklisted"); isBlacklisted[_user] = true; emit AccountBlacklisted(_user); } function removeFromBlacklist(address _user) public onlyOwner { require(isBlacklisted[_user], "user already whitelisted"); isBlacklisted[_user] = false; emit AccountWhitelisted(_user); } function blackListMany(address[] memory _users) public onlyOwner { for (uint8 i = 0; i < _users.length; i++) { blackList(_users[i]); } } function unBlackListMany(address[] memory _users) public onlyOwner { for (uint8 i = 0; i < _users.length; i++) { removeFromBlacklist(_users[i]); } } } contract RewardTracker is Ownable, IERC20 { address immutable UNISWAPROUTER; string private constant _name = "ASAP_RewardTracker"; string private constant _symbol = "ASAP_RewardTracker"; uint256 public lastProcessedIndex; uint256 private _totalSupply; mapping(address => uint256) private _balances; uint256 private constant magnitude = 2**128; uint256 public immutable minTokenBalanceForRewards; uint256 private magnifiedRewardPerShare; uint256 public totalRewardsDistributed; uint256 public totalRewardsWithdrawn; address public immutable tokenAddress; mapping(address => bool) public excludedFromRewards; mapping(address => int256) private magnifiedRewardCorrections; mapping(address => uint256) private withdrawnRewards; mapping(address => uint256) private lastClaimTimes; event RewardsDistributed(address indexed from, uint256 weiAmount); event RewardWithdrawn(address indexed to, uint256 weiAmount); event ExcludeFromRewards(address indexed account, bool excluded); event Claim(address indexed account, uint256 amount); event Compound(address indexed account, uint256 amount, uint256 tokens); event LogErrorString(string message); struct AccountInfo { address account; uint256 withdrawableRewards; uint256 totalRewards; uint256 lastClaimTime; } constructor(address _tokenAddress, address _uniswapRouter) { minTokenBalanceForRewards = 1 * (10**18); tokenAddress = _tokenAddress; UNISWAPROUTER = _uniswapRouter; } receive() external payable { distributeRewards(); } function distributeRewards() public payable { require(_totalSupply > 0, "Total supply invalid"); if (msg.value > 0) { magnifiedRewardPerShare = magnifiedRewardPerShare + ((msg.value * magnitude) / _totalSupply); emit RewardsDistributed(msg.sender, msg.value); totalRewardsDistributed += msg.value; } } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if (excludedFromRewards[account]) { return; } if (newBalance >= minTokenBalanceForRewards) { _setBalance(account, newBalance); } else { _setBalance(account, 0); } } function excludeFromRewards(address account, bool excluded) external onlyOwner { require( excludedFromRewards[account] != excluded, "ASAP_RewardTracker: account already set to requested state" ); excludedFromRewards[account] = excluded; if (excluded) { _setBalance(account, 0); } else { uint256 newBalance = IERC20(tokenAddress).balanceOf(account); if (newBalance >= minTokenBalanceForRewards) { _setBalance(account, newBalance); } else { _setBalance(account, 0); } } emit ExcludeFromRewards(account, excluded); } function isExcludedFromRewards(address account) public view returns (bool) { return excludedFromRewards[account]; } function manualSendReward(uint256 amount, address holder) external onlyOwner { uint256 contractETHBalance = address(this).balance; (bool success, ) = payable(holder).call{ value: amount > 0 ? amount : contractETHBalance }(""); require(success, "Manual send failed."); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = _balances[account]; if (newBalance > currentBalance) { uint256 addAmount = newBalance - currentBalance; _mint(account, addAmount); } else if (newBalance < currentBalance) { uint256 subAmount = currentBalance - newBalance; _burn(account, subAmount); } } function _mint(address account, uint256 amount) private { require( account != address(0), "ASAP_RewardTracker: mint to the zero address" ); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); magnifiedRewardCorrections[account] = magnifiedRewardCorrections[account] - int256(magnifiedRewardPerShare * amount); } function _burn(address account, uint256 amount) private { require( account != address(0), "ASAP_RewardTracker: burn from the zero address" ); uint256 accountBalance = _balances[account]; require( accountBalance >= amount, "ASAP_RewardTracker: burn amount exceeds balance" ); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); magnifiedRewardCorrections[account] = magnifiedRewardCorrections[account] + int256(magnifiedRewardPerShare * amount); } function processAccount(address payable account) public onlyOwner returns (bool) { uint256 amount = _withdrawRewardOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount); return true; } return false; } function _withdrawRewardOfUser(address payable account) private returns (uint256) { uint256 _withdrawableReward = withdrawableRewardOf(account); if (_withdrawableReward > 0) { withdrawnRewards[account] += _withdrawableReward; totalRewardsWithdrawn += _withdrawableReward; (bool success, ) = account.call{value: _withdrawableReward}(""); if (!success) { withdrawnRewards[account] -= _withdrawableReward; totalRewardsWithdrawn -= _withdrawableReward; emit LogErrorString("Withdraw failed"); return 0; } emit RewardWithdrawn(account, _withdrawableReward); return _withdrawableReward; } return 0; } function compoundAccount(address payable account) public onlyOwner returns (bool) { (uint256 amount, uint256 tokens) = _compoundRewardOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; emit Compound(account, amount, tokens); return true; } return false; } function _compoundRewardOfUser(address payable account) private returns (uint256, uint256) { uint256 _withdrawableReward = withdrawableRewardOf(account); if (_withdrawableReward > 0) { withdrawnRewards[account] += _withdrawableReward; totalRewardsWithdrawn += _withdrawableReward; IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02( UNISWAPROUTER ); address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(tokenAddress); bool success; uint256 tokens; uint256 initTokenBal = IERC20(tokenAddress).balanceOf(account); try uniswapV2Router .swapExactETHForTokensSupportingFeeOnTransferTokens{ value: _withdrawableReward }(0, path, address(account), block.timestamp) { success = true; tokens = IERC20(tokenAddress).balanceOf(account) - initTokenBal; } catch Error( string memory /*err*/ ) { success = false; } if (!success) { withdrawnRewards[account] -= _withdrawableReward; totalRewardsWithdrawn -= _withdrawableReward; emit LogErrorString("Withdraw failed"); return (0, 0); } emit RewardWithdrawn(account, _withdrawableReward); return (_withdrawableReward, tokens); } return (0, 0); } function withdrawableRewardOf(address account) public view returns (uint256) { return accumulativeRewardOf(account) - withdrawnRewards[account]; } function withdrawnRewardOf(address account) public view returns (uint256) { return withdrawnRewards[account]; } function accumulativeRewardOf(address account) public view returns (uint256) { int256 a = int256(magnifiedRewardPerShare * balanceOf(account)); int256 b = magnifiedRewardCorrections[account]; // this is an explicit int256 (signed) return uint256(a + b) / magnitude; } function getAccountInfo(address account) public view returns ( address, uint256, uint256, uint256, uint256 ) { AccountInfo memory info; info.account = account; info.withdrawableRewards = withdrawableRewardOf(account); info.totalRewards = accumulativeRewardOf(account); info.lastClaimTime = lastClaimTimes[account]; return ( info.account, info.withdrawableRewards, info.totalRewards, info.lastClaimTime, totalRewardsWithdrawn ); } function getLastClaimTime(address account) public view returns (uint256) { return lastClaimTimes[account]; } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return 18; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address, uint256) public pure override returns (bool) { revert("ASAP_RewardTracker: method not implemented"); } function allowance(address, address) public pure override returns (uint256) { revert("ASAP_RewardTracker: method not implemented"); } function approve(address, uint256) public pure override returns (bool) { revert("ASAP_RewardTracker: method not implemented"); } function transferFrom( address, address, uint256 ) public pure override returns (bool) { revert("ASAP_RewardTracker: method not implemented"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_uniswapRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Compound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"ExcludeFromRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"LogErrorString","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"RewardWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"RewardsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"accumulativeRewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"compoundAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributeRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLastClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"holder","type":"address"}],"name":"manualSendReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minTokenBalanceForRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"processAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"setBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardsWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableRewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawnRewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040523480156200001157600080fd5b5060405162001dd238038062001dd28339810160408190526200003491620000d0565b6200003f3362000063565b670de0b6b3a764000060a0526001600160a01b0391821660c0521660805262000108565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000cb57600080fd5b919050565b60008060408385031215620000e457600080fd5b620000ef83620000b3565b9150620000ff60208401620000b3565b90509250929050565b60805160a05160c051611c7062000162600039600081816104ad0152818161090601528181610fbf01528181611025015261115801526000818161054d015281816109770152610d5001526000610ef40152611c706000f3fe6080604052600436106101d15760003560e01c8063807ab4f7116100f7578063ad76d68611610095578063eb53e21411610064578063eb53e214146105aa578063ee172546146105c0578063f2fde38b146105d6578063f82f235f146105f657600080fd5b8063ad76d68614610505578063c25907091461053b578063dd62ed3e1461056f578063e30443bc1461058a57600080fd5b806395d89b41116100d157806395d89b41146102185780639d76ea581461049b578063a680e0bc146104cf578063a9059cbb1461025957600080fd5b8063807ab4f7146104295780638357d0bb146104495780638da5cb5b1461046957600080fd5b80632ad4cab71161016f5780636f4a2cd01161013e5780636f4a2cd01461038457806370a082311461038c578063715018a6146103c25780637b510fe8146103d757600080fd5b80632ad4cab7146103125780633009a60914610332578063313ce567146103485780636de1a5a91461036457600080fd5b80630c70754e116101ab5780630c70754e146102895780630e832273146102a957806318160ddd146102e257806323b872dd146102f757600080fd5b806305b3ccb4146101e557806306fdde0314610218578063095ea7b31461025957600080fd5b366101e0576101de610626565b005b600080fd5b3480156101f157600080fd5b506102056102003660046117f1565b6106f4565b6040519081526020015b60405180910390f35b34801561022457600080fd5b50604080518082018252601281527120a9a0a82fa932bbb0b9322a3930b1b5b2b960711b6020820152905161020f9190611815565b34801561026557600080fd5b5061027961027436600461186a565b610758565b604051901515815260200161020f565b34801561029557600080fd5b506102056102a43660046117f1565b6107b6565b3480156102b557600080fd5b506102796102c43660046117f1565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156102ee57600080fd5b50600254610205565b34801561030357600080fd5b50610279610274366004611896565b34801561031e57600080fd5b506101de61032d3660046118d7565b6107e8565b34801561033e57600080fd5b5061020560015481565b34801561035457600080fd5b506040516012815260200161020f565b34801561037057600080fd5b5061027961037f3660046117f1565b610a01565b6101de610626565b34801561039857600080fd5b506102056103a73660046117f1565b6001600160a01b031660009081526003602052604090205490565b3480156103ce57600080fd5b506101de610aac565b3480156103e357600080fd5b506103f76103f23660046117f1565b610ae0565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161020f565b34801561043557600080fd5b506102796104443660046117f1565b610b88565b34801561045557600080fd5b506101de610464366004611915565b610c2d565b34801561047557600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161020f565b3480156104a757600080fd5b506104837f000000000000000000000000000000000000000000000000000000000000000081565b3480156104db57600080fd5b506102056104ea3660046117f1565b6001600160a01b03166000908152600a602052604090205490565b34801561051157600080fd5b506102056105203660046117f1565b6001600160a01b031660009081526009602052604090205490565b34801561054757600080fd5b506102057f000000000000000000000000000000000000000000000000000000000000000081565b34801561057b57600080fd5b5061020561027436600461193a565b34801561059657600080fd5b506101de6105a536600461186a565b610cff565b3480156105b657600080fd5b5061020560065481565b3480156105cc57600080fd5b5061020560055481565b3480156105e257600080fd5b506101de6105f13660046117f1565b610d8e565b34801561060257600080fd5b506102796106113660046117f1565b60076020526000908152604090205460ff1681565b6000600254116106745760405162461bcd60e51b8152602060048201526014602482015273151bdd185b081cdd5c1c1b1e481a5b9d985b1a5960621b60448201526064015b60405180910390fd5b34156106f25760025461068b600160801b3461197e565b610695919061199d565b6004546106a291906119bf565b60045560405134815233907fdf29796aad820e4bb192f3a8d631b76519bcd2cbe77cc85af20e9df53cece0869060200160405180910390a234600560008282546106ec91906119bf565b90915550505b565b6001600160a01b038116600090815260036020526040812054600454829161071b9161197e565b6001600160a01b038416600090815260086020526040902054909150600160801b61074682846119d7565b610750919061199d565b949350505050565b60405162461bcd60e51b815260206004820152602a60248201527f415341505f526577617264547261636b65723a206d6574686f64206e6f7420696044820152691b5c1b195b595b9d195960b21b606482015260009060840161066b565b6001600160a01b0381166000908152600960205260408120546107d8836106f4565b6107e29190611a18565b92915050565b6000546001600160a01b031633146108125760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b03821660009081526007602052604090205460ff16151581151514156108a75760405162461bcd60e51b815260206004820152603a60248201527f415341505f526577617264547261636b65723a206163636f756e7420616c726560448201527f6164792073657420746f20726571756573746564207374617465000000000000606482015260840161066b565b6001600160a01b0382166000908152600760205260409020805460ff191682158015919091179091556108e4576108df826000610e29565b6109b8565b6040516370a0823160e01b81526001600160a01b0383811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190611a64565b90507f000000000000000000000000000000000000000000000000000000000000000081106109ab576109a68382610e29565b6109b6565b6109b6836000610e29565b505b816001600160a01b03167facf40045c9516ed93201cbb27e9656cc33f8636b026b0e20b4f6ddcfccf404aa826040516109f5911515815260200190565b60405180910390a25050565b600080546001600160a01b03163314610a2c5760405162461bcd60e51b815260040161066b90611a2f565b600080610a3884610e87565b90925090508115610aa2576001600160a01b0384166000818152600a602090815260409182902042905581518581529081018490527f0e311a2c6dbfb0153ec3a8a5bdca09070b3e5f60768fdc10a20453f38d186873910160405180910390a25060019392505050565b5060009392505050565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161066b90611a2f565b6106f260006112e6565b6000806000806000610b1c604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b6001600160a01b0387168152610b31876107b6565b6020820152610b3f876106f4565b60408281019182526001600160a01b03989098166000908152600a6020908152989020546060830181905282519890920151905160065498999198909750919550909350915050565b600080546001600160a01b03163314610bb35760405162461bcd60e51b815260040161066b90611a2f565b6000610bbe83611336565b90508015610c24576001600160a01b0383166000818152600a602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d490610c139084815260200190565b60405180910390a250600192915050565b50600092915050565b6000546001600160a01b03163314610c575760405162461bcd60e51b815260040161066b90611a2f565b4760006001600160a01b03831684610c6f5782610c71565b845b604051600081818185875af1925050503d8060008114610cad576040519150601f19603f3d011682016040523d82523d6000602084013e610cb2565b606091505b5050905080610cf95760405162461bcd60e51b815260206004820152601360248201527226b0b73ab0b61039b2b732103330b4b632b21760691b604482015260640161066b565b50505050565b6000546001600160a01b03163314610d295760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b03821660009081526007602052604090205460ff1615610d4e575050565b7f00000000000000000000000000000000000000000000000000000000000000008110610d8357610d7f8282610e29565b5050565b610d7f826000610e29565b6000546001600160a01b03163314610db85760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b038116610e1d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161066b565b610e26816112e6565b50565b6001600160a01b03821660009081526003602052604090205480821115610e62576000610e568284611a18565b9050610cf984826114dd565b80821015610e82576000610e768383611a18565b9050610cf9848261161e565b505050565b6000806000610e95846107b6565b905080156112da576001600160a01b03841660009081526009602052604081208054839290610ec59084906119bf565b925050819055508060066000828254610ede91906119bf565b90915550506040805160028082526060820183527f0000000000000000000000000000000000000000000000000000000000000000926000929190602083019080368337019050509050816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a9190611a7d565b81600081518110610f9d57610f9d611a9a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110610ff157610ff1611a9a565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81528782166004820152600091829182917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561106c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110909190611a64565b9050846001600160a01b031663b6f9de95876000878d426040518663ffffffff1660e01b81526004016110c69493929190611ab0565b6000604051808303818588803b1580156110df57600080fd5b505af1935050505080156110f1575060015b611133576110fd611b1a565b806308c379a014156111275750611112611b71565b8061111d5750611129565b60009350506111d2565b505b3d6000803e3d6000fd5b6040516370a0823160e01b81526001600160a01b038a811660048301526001945082917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c59190611a64565b6111cf9190611a18565b91505b82611288576001600160a01b038916600090815260096020526040812080548892906111ff908490611a18565b9250508190555085600660008282546112189190611a18565b90915550506040517f551303dd5f39cbfe6daba6b3e27754b8a7d72f519756a2cde2b92c2bbde159a79061126f906020808252600f908201526e15da5d1a191c985dc819985a5b1959608a1b604082015260600190565b60405180910390a1506000988998509650505050505050565b886001600160a01b03167f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337876040516112c391815260200190565b60405180910390a250939793965092945050505050565b50600093849350915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080611342836107b6565b90508015610c24576001600160a01b038316600090815260096020526040812080548392906113729084906119bf565b92505081905550806006600082825461138b91906119bf565b90915550506040516000906001600160a01b0385169083908381818185875af1925050503d80600081146113db576040519150601f19603f3d011682016040523d82523d6000602084013e6113e0565b606091505b5050905080611493576001600160a01b03841660009081526009602052604081208054849290611411908490611a18565b92505081905550816006600082825461142a9190611a18565b90915550506040517f551303dd5f39cbfe6daba6b3e27754b8a7d72f519756a2cde2b92c2bbde159a790611481906020808252600f908201526e15da5d1a191c985dc819985a5b1959608a1b604082015260600190565b60405180910390a15060009392505050565b836001600160a01b03167f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337836040516114ce91815260200190565b60405180910390a25092915050565b6001600160a01b0382166115485760405162461bcd60e51b815260206004820152602c60248201527f415341505f526577617264547261636b65723a206d696e7420746f207468652060448201526b7a65726f206164647265737360a01b606482015260840161066b565b806002600082825461155a91906119bf565b90915550506001600160a01b038216600090815260036020526040812080548392906115879084906119bf565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3806004546115db919061197e565b6001600160a01b0383166000908152600860205260409020546115fe9190611bfb565b6001600160a01b0390921660009081526008602052604090209190915550565b6001600160a01b03821661168b5760405162461bcd60e51b815260206004820152602e60248201527f415341505f526577617264547261636b65723a206275726e2066726f6d20746860448201526d65207a65726f206164647265737360901b606482015260840161066b565b6001600160a01b0382166000908152600360205260409020548181101561170c5760405162461bcd60e51b815260206004820152602f60248201527f415341505f526577617264547261636b65723a206275726e20616d6f756e742060448201526e657863656564732062616c616e636560881b606482015260840161066b565b6117168282611a18565b6001600160a01b03841660009081526003602052604081209190915560028054849290611744908490611a18565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a381600454611798919061197e565b6001600160a01b0384166000908152600860205260409020546117bb91906119d7565b6001600160a01b039093166000908152600860205260409020929092555050565b6001600160a01b0381168114610e2657600080fd5b60006020828403121561180357600080fd5b813561180e816117dc565b9392505050565b600060208083528351808285015260005b8181101561184257858101830151858201604001528201611826565b81811115611854576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561187d57600080fd5b8235611888816117dc565b946020939093013593505050565b6000806000606084860312156118ab57600080fd5b83356118b6816117dc565b925060208401356118c6816117dc565b929592945050506040919091013590565b600080604083850312156118ea57600080fd5b82356118f5816117dc565b91506020830135801515811461190a57600080fd5b809150509250929050565b6000806040838503121561192857600080fd5b82359150602083013561190a816117dc565b6000806040838503121561194d57600080fd5b8235611958816117dc565b9150602083013561190a816117dc565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561199857611998611968565b500290565b6000826119ba57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156119d2576119d2611968565b500190565b600080821280156001600160ff1b03849003851316156119f9576119f9611968565b600160ff1b8390038412811615611a1257611a12611968565b50500190565b600082821015611a2a57611a2a611968565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611a7657600080fd5b5051919050565b600060208284031215611a8f57600080fd5b815161180e816117dc565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015611afa5784516001600160a01b031683529383019391830191600101611ad5565b50506001600160a01b039690961660408501525050506060015292915050565b600060033d1115611b335760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715611b6a57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015611b7f5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611baf57505050505090565b8285019150815181811115611bc75750505050505090565b843d8701016020828501011115611be15750505050505090565b611bf060208286010187611b36565b509095945050505050565b60008083128015600160ff1b850184121615611c1957611c19611968565b6001600160ff1b0384018313811615611c3457611c34611968565b5050039056fea2646970667358221220a18b13526ddf22c13a701dfc008abbc31ee9150a5c7f87e507f2ff8c0c7a052f64736f6c634300080a0033000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d450000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x6080604052600436106101d15760003560e01c8063807ab4f7116100f7578063ad76d68611610095578063eb53e21411610064578063eb53e214146105aa578063ee172546146105c0578063f2fde38b146105d6578063f82f235f146105f657600080fd5b8063ad76d68614610505578063c25907091461053b578063dd62ed3e1461056f578063e30443bc1461058a57600080fd5b806395d89b41116100d157806395d89b41146102185780639d76ea581461049b578063a680e0bc146104cf578063a9059cbb1461025957600080fd5b8063807ab4f7146104295780638357d0bb146104495780638da5cb5b1461046957600080fd5b80632ad4cab71161016f5780636f4a2cd01161013e5780636f4a2cd01461038457806370a082311461038c578063715018a6146103c25780637b510fe8146103d757600080fd5b80632ad4cab7146103125780633009a60914610332578063313ce567146103485780636de1a5a91461036457600080fd5b80630c70754e116101ab5780630c70754e146102895780630e832273146102a957806318160ddd146102e257806323b872dd146102f757600080fd5b806305b3ccb4146101e557806306fdde0314610218578063095ea7b31461025957600080fd5b366101e0576101de610626565b005b600080fd5b3480156101f157600080fd5b506102056102003660046117f1565b6106f4565b6040519081526020015b60405180910390f35b34801561022457600080fd5b50604080518082018252601281527120a9a0a82fa932bbb0b9322a3930b1b5b2b960711b6020820152905161020f9190611815565b34801561026557600080fd5b5061027961027436600461186a565b610758565b604051901515815260200161020f565b34801561029557600080fd5b506102056102a43660046117f1565b6107b6565b3480156102b557600080fd5b506102796102c43660046117f1565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156102ee57600080fd5b50600254610205565b34801561030357600080fd5b50610279610274366004611896565b34801561031e57600080fd5b506101de61032d3660046118d7565b6107e8565b34801561033e57600080fd5b5061020560015481565b34801561035457600080fd5b506040516012815260200161020f565b34801561037057600080fd5b5061027961037f3660046117f1565b610a01565b6101de610626565b34801561039857600080fd5b506102056103a73660046117f1565b6001600160a01b031660009081526003602052604090205490565b3480156103ce57600080fd5b506101de610aac565b3480156103e357600080fd5b506103f76103f23660046117f1565b610ae0565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00161020f565b34801561043557600080fd5b506102796104443660046117f1565b610b88565b34801561045557600080fd5b506101de610464366004611915565b610c2d565b34801561047557600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161020f565b3480156104a757600080fd5b506104837f000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d4581565b3480156104db57600080fd5b506102056104ea3660046117f1565b6001600160a01b03166000908152600a602052604090205490565b34801561051157600080fd5b506102056105203660046117f1565b6001600160a01b031660009081526009602052604090205490565b34801561054757600080fd5b506102057f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b34801561057b57600080fd5b5061020561027436600461193a565b34801561059657600080fd5b506101de6105a536600461186a565b610cff565b3480156105b657600080fd5b5061020560065481565b3480156105cc57600080fd5b5061020560055481565b3480156105e257600080fd5b506101de6105f13660046117f1565b610d8e565b34801561060257600080fd5b506102796106113660046117f1565b60076020526000908152604090205460ff1681565b6000600254116106745760405162461bcd60e51b8152602060048201526014602482015273151bdd185b081cdd5c1c1b1e481a5b9d985b1a5960621b60448201526064015b60405180910390fd5b34156106f25760025461068b600160801b3461197e565b610695919061199d565b6004546106a291906119bf565b60045560405134815233907fdf29796aad820e4bb192f3a8d631b76519bcd2cbe77cc85af20e9df53cece0869060200160405180910390a234600560008282546106ec91906119bf565b90915550505b565b6001600160a01b038116600090815260036020526040812054600454829161071b9161197e565b6001600160a01b038416600090815260086020526040902054909150600160801b61074682846119d7565b610750919061199d565b949350505050565b60405162461bcd60e51b815260206004820152602a60248201527f415341505f526577617264547261636b65723a206d6574686f64206e6f7420696044820152691b5c1b195b595b9d195960b21b606482015260009060840161066b565b6001600160a01b0381166000908152600960205260408120546107d8836106f4565b6107e29190611a18565b92915050565b6000546001600160a01b031633146108125760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b03821660009081526007602052604090205460ff16151581151514156108a75760405162461bcd60e51b815260206004820152603a60248201527f415341505f526577617264547261636b65723a206163636f756e7420616c726560448201527f6164792073657420746f20726571756573746564207374617465000000000000606482015260840161066b565b6001600160a01b0382166000908152600760205260409020805460ff191682158015919091179091556108e4576108df826000610e29565b6109b8565b6040516370a0823160e01b81526001600160a01b0383811660048301526000917f000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d45909116906370a0823190602401602060405180830381865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190611a64565b90507f0000000000000000000000000000000000000000000000000de0b6b3a764000081106109ab576109a68382610e29565b6109b6565b6109b6836000610e29565b505b816001600160a01b03167facf40045c9516ed93201cbb27e9656cc33f8636b026b0e20b4f6ddcfccf404aa826040516109f5911515815260200190565b60405180910390a25050565b600080546001600160a01b03163314610a2c5760405162461bcd60e51b815260040161066b90611a2f565b600080610a3884610e87565b90925090508115610aa2576001600160a01b0384166000818152600a602090815260409182902042905581518581529081018490527f0e311a2c6dbfb0153ec3a8a5bdca09070b3e5f60768fdc10a20453f38d186873910160405180910390a25060019392505050565b5060009392505050565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161066b90611a2f565b6106f260006112e6565b6000806000806000610b1c604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b6001600160a01b0387168152610b31876107b6565b6020820152610b3f876106f4565b60408281019182526001600160a01b03989098166000908152600a6020908152989020546060830181905282519890920151905160065498999198909750919550909350915050565b600080546001600160a01b03163314610bb35760405162461bcd60e51b815260040161066b90611a2f565b6000610bbe83611336565b90508015610c24576001600160a01b0383166000818152600a602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d490610c139084815260200190565b60405180910390a250600192915050565b50600092915050565b6000546001600160a01b03163314610c575760405162461bcd60e51b815260040161066b90611a2f565b4760006001600160a01b03831684610c6f5782610c71565b845b604051600081818185875af1925050503d8060008114610cad576040519150601f19603f3d011682016040523d82523d6000602084013e610cb2565b606091505b5050905080610cf95760405162461bcd60e51b815260206004820152601360248201527226b0b73ab0b61039b2b732103330b4b632b21760691b604482015260640161066b565b50505050565b6000546001600160a01b03163314610d295760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b03821660009081526007602052604090205460ff1615610d4e575050565b7f0000000000000000000000000000000000000000000000000de0b6b3a76400008110610d8357610d7f8282610e29565b5050565b610d7f826000610e29565b6000546001600160a01b03163314610db85760405162461bcd60e51b815260040161066b90611a2f565b6001600160a01b038116610e1d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161066b565b610e26816112e6565b50565b6001600160a01b03821660009081526003602052604090205480821115610e62576000610e568284611a18565b9050610cf984826114dd565b80821015610e82576000610e768383611a18565b9050610cf9848261161e565b505050565b6000806000610e95846107b6565b905080156112da576001600160a01b03841660009081526009602052604081208054839290610ec59084906119bf565b925050819055508060066000828254610ede91906119bf565b90915550506040805160028082526060820183527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d926000929190602083019080368337019050509050816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a9190611a7d565b81600081518110610f9d57610f9d611a9a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d4581600181518110610ff157610ff1611a9a565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81528782166004820152600091829182917f000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d4516906370a0823190602401602060405180830381865afa15801561106c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110909190611a64565b9050846001600160a01b031663b6f9de95876000878d426040518663ffffffff1660e01b81526004016110c69493929190611ab0565b6000604051808303818588803b1580156110df57600080fd5b505af1935050505080156110f1575060015b611133576110fd611b1a565b806308c379a014156111275750611112611b71565b8061111d5750611129565b60009350506111d2565b505b3d6000803e3d6000fd5b6040516370a0823160e01b81526001600160a01b038a811660048301526001945082917f000000000000000000000000c36ad98e62598ae24d4487d8012209f687c30d45909116906370a0823190602401602060405180830381865afa1580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c59190611a64565b6111cf9190611a18565b91505b82611288576001600160a01b038916600090815260096020526040812080548892906111ff908490611a18565b9250508190555085600660008282546112189190611a18565b90915550506040517f551303dd5f39cbfe6daba6b3e27754b8a7d72f519756a2cde2b92c2bbde159a79061126f906020808252600f908201526e15da5d1a191c985dc819985a5b1959608a1b604082015260600190565b60405180910390a1506000988998509650505050505050565b886001600160a01b03167f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337876040516112c391815260200190565b60405180910390a250939793965092945050505050565b50600093849350915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080611342836107b6565b90508015610c24576001600160a01b038316600090815260096020526040812080548392906113729084906119bf565b92505081905550806006600082825461138b91906119bf565b90915550506040516000906001600160a01b0385169083908381818185875af1925050503d80600081146113db576040519150601f19603f3d011682016040523d82523d6000602084013e6113e0565b606091505b5050905080611493576001600160a01b03841660009081526009602052604081208054849290611411908490611a18565b92505081905550816006600082825461142a9190611a18565b90915550506040517f551303dd5f39cbfe6daba6b3e27754b8a7d72f519756a2cde2b92c2bbde159a790611481906020808252600f908201526e15da5d1a191c985dc819985a5b1959608a1b604082015260600190565b60405180910390a15060009392505050565b836001600160a01b03167f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337836040516114ce91815260200190565b60405180910390a25092915050565b6001600160a01b0382166115485760405162461bcd60e51b815260206004820152602c60248201527f415341505f526577617264547261636b65723a206d696e7420746f207468652060448201526b7a65726f206164647265737360a01b606482015260840161066b565b806002600082825461155a91906119bf565b90915550506001600160a01b038216600090815260036020526040812080548392906115879084906119bf565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3806004546115db919061197e565b6001600160a01b0383166000908152600860205260409020546115fe9190611bfb565b6001600160a01b0390921660009081526008602052604090209190915550565b6001600160a01b03821661168b5760405162461bcd60e51b815260206004820152602e60248201527f415341505f526577617264547261636b65723a206275726e2066726f6d20746860448201526d65207a65726f206164647265737360901b606482015260840161066b565b6001600160a01b0382166000908152600360205260409020548181101561170c5760405162461bcd60e51b815260206004820152602f60248201527f415341505f526577617264547261636b65723a206275726e20616d6f756e742060448201526e657863656564732062616c616e636560881b606482015260840161066b565b6117168282611a18565b6001600160a01b03841660009081526003602052604081209190915560028054849290611744908490611a18565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a381600454611798919061197e565b6001600160a01b0384166000908152600860205260409020546117bb91906119d7565b6001600160a01b039093166000908152600860205260409020929092555050565b6001600160a01b0381168114610e2657600080fd5b60006020828403121561180357600080fd5b813561180e816117dc565b9392505050565b600060208083528351808285015260005b8181101561184257858101830151858201604001528201611826565b81811115611854576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561187d57600080fd5b8235611888816117dc565b946020939093013593505050565b6000806000606084860312156118ab57600080fd5b83356118b6816117dc565b925060208401356118c6816117dc565b929592945050506040919091013590565b600080604083850312156118ea57600080fd5b82356118f5816117dc565b91506020830135801515811461190a57600080fd5b809150509250929050565b6000806040838503121561192857600080fd5b82359150602083013561190a816117dc565b6000806040838503121561194d57600080fd5b8235611958816117dc565b9150602083013561190a816117dc565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561199857611998611968565b500290565b6000826119ba57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156119d2576119d2611968565b500190565b600080821280156001600160ff1b03849003851316156119f9576119f9611968565b600160ff1b8390038412811615611a1257611a12611968565b50500190565b600082821015611a2a57611a2a611968565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611a7657600080fd5b5051919050565b600060208284031215611a8f57600080fd5b815161180e816117dc565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015611afa5784516001600160a01b031683529383019391830191600101611ad5565b50506001600160a01b039690961660408501525050506060015292915050565b600060033d1115611b335760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715611b6a57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015611b7f5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611baf57505050505090565b8285019150815181811115611bc75750505050505090565b843d8701016020828501011115611be15750505050505090565b611bf060208286010187611b36565b509095945050505050565b60008083128015600160ff1b850184121615611c1957611c19611968565b6001600160ff1b0384018313811615611c3457611c34611968565b5050039056fea2646970667358221220a18b13526ddf22c13a701dfc008abbc31ee9150a5c7f87e507f2ff8c0c7a052f64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000C36AD98E62598Ae24d4487d8012209f687c30D450000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0xC36AD98E62598Ae24d4487d8012209f687c30D45
Arg [1] : _uniswapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000C36AD98E62598Ae24d4487d8012209f687c30D45
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode Sourcemap
44092:11279:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45765:19;:17;:19::i;:::-;44092:11279;;;;;53031:331;;;;;;;;;;-1:-1:-1;53031:331:0;;;;;:::i;:::-;;:::i;:::-;;;548:25:1;;;536:2;521:18;53031:331:0;;;;;;;;54176:83;;;;;;;;;;-1:-1:-1;54246:5:0;;;;;;;;;;;-1:-1:-1;;;54246:5:0;;;;54176:83;;;;54246:5;54176:83;:::i;55028:142::-;;;;;;;;;;-1:-1:-1;55028:142:0;;;;;:::i;:::-;;:::i;:::-;;;1671:14:1;;1664:22;1646:41;;1634:2;1619:18;55028:142:0;1506:187:1;52698:192:0;;;;;;;;;;-1:-1:-1;52698:192:0;;;;;:::i;:::-;;:::i;47321:129::-;;;;;;;;;;-1:-1:-1;47321:129:0;;;;;:::i;:::-;-1:-1:-1;;;;;47414:28:0;47390:4;47414:28;;;:19;:28;;;;;;;;;47321:129;54446:100;;;;;;;;;;-1:-1:-1;54526:12:0;;54446:100;;55178:190;;;;;;;;;;-1:-1:-1;55178:190:0;;;;;:::i;46584:729::-;;;;;;;;;;-1:-1:-1;46584:729:0;;;;;:::i;:::-;;:::i;44303:33::-;;;;;;;;;;;;;;;;54362:76;;;;;;;;;;-1:-1:-1;54362:76:0;;54428:2;2722:36:1;;2710:2;2695:18;54362:76:0;2580:184:1;50612:394:0;;;;;;;;;;-1:-1:-1;50612:394:0;;;;;:::i;:::-;;:::i;45800:406::-;;;:::i;54554:119::-;;;;;;;;;;-1:-1:-1;54554:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;54647:18:0;54620:7;54647:18;;;:9;:18;;;;;;;54554:119;5765:103;;;;;;;;;;;;;:::i;53370:668::-;;;;;;;;;;-1:-1:-1;53370:668:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3306:32:1;;;3288:51;;3370:2;3355:18;;3348:34;;;;3398:18;;;3391:34;;;;3456:2;3441:18;;3434:34;3499:3;3484:19;;3477:35;3275:3;3260:19;53370:668:0;3029:489:1;49415:364:0;;;;;;;;;;-1:-1:-1;49415:364:0;;;;;:::i;:::-;;:::i;47458:346::-;;;;;;;;;;-1:-1:-1;47458:346:0;;;;;:::i;:::-;;:::i;5114:87::-;;;;;;;;;;-1:-1:-1;5160:7:0;5187:6;-1:-1:-1;;;;;5187:6:0;5114:87;;;-1:-1:-1;;;;;4007:32:1;;;3989:51;;3977:2;3962:18;5114:87:0;3843:203:1;44677:37:0;;;;;;;;;;;;;;;54046:122;;;;;;;;;;-1:-1:-1;54046:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;54137:23:0;54110:7;54137:23;;;:14;:23;;;;;;;54046:122;52898:125;;;;;;;;;;-1:-1:-1;52898:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;52990:25:0;52963:7;52990:25;;;:16;:25;;;;;;;52898:125;44484:50;;;;;;;;;;;;;;;54832:188;;;;;;;;;;-1:-1:-1;54832:188:0;;;;;:::i;46214:362::-;;;;;;;;;;-1:-1:-1;46214:362:0;;;;;:::i;:::-;;:::i;44632:36::-;;;;;;;;;;;;;;;;44587:38;;;;;;;;;;;;;;;;6023:238;;;;;;;;;;-1:-1:-1;6023:238:0;;;;;:::i;:::-;;:::i;44723:51::-;;;;;;;;;;-1:-1:-1;44723:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45800:406;45878:1;45863:12;;:16;45855:49;;;;-1:-1:-1;;;45855:49:0;;4974:2:1;45855:49:0;;;4956:21:1;5013:2;4993:18;;;4986:30;-1:-1:-1;;;5032:18:1;;;5025:50;5092:18;;45855:49:0;;;;;;;;;45919:9;:13;45915:284;;46062:12;;46037:21;-1:-1:-1;;;46037:9:0;:21;:::i;:::-;46036:38;;;;:::i;:::-;45992:23;;:83;;;;:::i;:::-;45949:23;:126;46095:41;;46126:9;548:25:1;;46114:10:0;;46095:41;;536:2:1;521:18;46095:41:0;;;;;;;46178:9;46151:23;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;45915:284:0;45800:406::o;53031:331::-;-1:-1:-1;;;;;54647:18:0;;53126:7;54647:18;;;:9;:18;;;;;;53169:23;;53126:7;;53169:44;;;:::i;:::-;-1:-1:-1;;;;;53236:35:0;;53225:8;53236:35;;;:26;:35;;;;;;53151:63;;-1:-1:-1;;;;53336:5:0;53236:35;53151:63;53336:5;:::i;:::-;53328:26;;;;:::i;:::-;53321:33;53031:331;-1:-1:-1;;;;53031:331:0:o;55028:142::-;55110:52;;-1:-1:-1;;;55110:52:0;;6253:2:1;55110:52:0;;;6235:21:1;6292:2;6272:18;;;6265:30;6331:34;6311:18;;;6304:62;-1:-1:-1;;;6382:18:1;;;6375:40;55093:4:0;;6432:19:1;;55110:52:0;6051:406:1;52698:192:0;-1:-1:-1;;;;;52857:25:0;;52793:7;52857:25;;;:16;:25;;;;;;52825:29;52874:7;52825:20;:29::i;:::-;:57;;;;:::i;:::-;52818:64;52698:192;-1:-1:-1;;52698:192:0:o;46584:729::-;5160:7;5187:6;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46719:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;46697:148;;;::::0;-1:-1:-1;;;46697:148:0;;7155:2:1;46697:148:0::1;::::0;::::1;7137:21:1::0;7194:2;7174:18;;;7167:30;7233:34;7213:18;;;7206:62;7304:28;7284:18;;;7277:56;7350:19;;46697:148:0::1;6953:422:1::0;46697:148:0::1;-1:-1:-1::0;;;;;46856:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;46856:39:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;46906:347:::1;;46935:23;46947:7;46956:1;46935:11;:23::i;:::-;46906:347;;;47012:39;::::0;-1:-1:-1;;;47012:39:0;;-1:-1:-1;;;;;4007:32:1;;;47012:39:0::1;::::0;::::1;3989:51:1::0;46991:18:0::1;::::0;47019:12:::1;47012:30:::0;;::::1;::::0;::::1;::::0;3962:18:1;;47012:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46991:60;;47084:25;47070:10;:39;47066:176;;47130:32;47142:7;47151:10;47130:11;:32::i;:::-;47066:176;;;47203:23;47215:7;47224:1;47203:11;:23::i;:::-;46976:277;46906:347;47287:7;-1:-1:-1::0;;;;;47268:37:0::1;;47296:8;47268:37;;;;1671:14:1::0;1664:22;1646:41;;1634:2;1619:18;;1506:187;47268:37:0::1;;;;;;;;46584:729:::0;;:::o;50612:394::-;50715:4;5187:6;;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;50738:14:::1;50754::::0;50772:30:::1;50794:7;50772:21;:30::i;:::-;50737:65:::0;;-1:-1:-1;50737:65:0;-1:-1:-1;50817:10:0;;50813:163:::1;;-1:-1:-1::0;;;;;50844:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;50870:15:::1;50844:41:::0;;50905:33;;7743:25:1;;;7784:18;;;7777:34;;;50905:33:0::1;::::0;7716:18:1;50905:33:0::1;;;;;;;-1:-1:-1::0;50960:4:0::1;::::0;50612:394;-1:-1:-1;;;50612:394:0:o;50813:163::-:1;-1:-1:-1::0;50993:5:0::1;::::0;50612:394;-1:-1:-1;;;50612:394:0:o;5765:103::-;5160:7;5187:6;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;5830:30:::1;5857:1;5830:18;:30::i;53370:668::-:0;53473:7;53495;53517;53539;53561;53596:23;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53596:23:0;-1:-1:-1;;;;;53630:22:0;;;;53690:29;53645:7;53690:20;:29::i;:::-;53663:24;;;:56;53750:29;53771:7;53750:20;:29::i;:::-;53730:17;;;;:49;;;-1:-1:-1;;;;;53811:23:0;;;;;;;;:14;:23;;;;;;;;53790:18;;;:44;;;53867:12;;53894:24;;;;;53933:17;;53998:21;;53867:12;;53894:24;;53933:17;;-1:-1:-1;53811:23:0;;-1:-1:-1;53998:21:0;;-1:-1:-1;53370:668:0;-1:-1:-1;;53370:668:0:o;49415:364::-;49517:4;5187:6;;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;49539:14:::1;49556:30;49578:7;49556:21;:30::i;:::-;49539:47:::0;-1:-1:-1;49601:10:0;;49597:152:::1;;-1:-1:-1::0;;;;;49628:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;49654:15:::1;49628:41:::0;;49689:22;::::1;::::0;::::1;::::0;49704:6;548:25:1;;536:2;521:18;;402:177;49689:22:0::1;;;;;;;;-1:-1:-1::0;49733:4:0::1;::::0;50612:394;-1:-1:-1;;50612:394:0:o;49597:152::-:1;-1:-1:-1::0;49766:5:0::1;::::0;49415:364;-1:-1:-1;;49415:364:0:o;47458:346::-;5160:7;5187:6;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;47598:21:::1;47569:26;-1:-1:-1::0;;;;;47649:20:0;::::1;47691:10:::0;:40:::1;;47713:18;47691:40;;;47704:6;47691:40;47649:97;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47630:116;;;47765:7;47757:39;;;::::0;-1:-1:-1;;;47757:39:0;;8234:2:1;47757:39:0::1;::::0;::::1;8216:21:1::0;8273:2;8253:18;;;8246:30;-1:-1:-1;;;8292:18:1;;;8285:49;8351:18;;47757:39:0::1;8032:343:1::0;47757:39:0::1;47558:246;;47458:346:::0;;:::o;46214:362::-;5160:7;5187:6;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46336:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;46332:67;;;46214:362:::0;;:::o;46332:67::-:1;46427:25;46413:10;:39;46409:160;;46469:32;46481:7;46490:10;46469:11;:32::i;:::-;46214:362:::0;;:::o;46409:160::-:1;46534:23;46546:7;46555:1;46534:11;:23::i;6023:238::-:0;5160:7;5187:6;-1:-1:-1;;;;;5187:6:0;4036:10;5334:23;5326:68;;;;-1:-1:-1;;;5326:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6126:22:0;::::1;6104:110;;;::::0;-1:-1:-1;;;6104:110:0;;8582:2:1;6104:110:0::1;::::0;::::1;8564:21:1::0;8621:2;8601:18;;;8594:30;8660:34;8640:18;;;8633:62;-1:-1:-1;;;8711:18:1;;;8704:36;8757:19;;6104:110:0::1;8380:402:1::0;6104:110:0::1;6225:28;6244:8;6225:18;:28::i;:::-;6023:238:::0;:::o;47812:439::-;-1:-1:-1;;;;;47915:18:0;;47890:22;47915:18;;;:9;:18;;;;;;47948:27;;;47944:300;;;47992:17;48012:27;48025:14;48012:10;:27;:::i;:::-;47992:47;;48054:25;48060:7;48069:9;48054:5;:25::i;47944:300::-;48114:14;48101:10;:27;48097:147;;;48145:17;48165:27;48182:10;48165:14;:27;:::i;:::-;48145:47;;48207:25;48213:7;48222:9;48207:5;:25::i;48097:147::-;47879:372;47812:439;;:::o;51014:1676::-;51105:7;51114;51139:27;51169:29;51190:7;51169:20;:29::i;:::-;51139:59;-1:-1:-1;51213:23:0;;51209:1450;;-1:-1:-1;;;;;51253:25:0;;;;;;:16;:25;;;;;:48;;51282:19;;51253:25;:48;;51282:19;;51253:48;:::i;:::-;;;;;;;;51341:19;51316:21;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;51520:16:0;;;51534:1;51520:16;;;;;;;;51451:13;;51377:34;;51520:16;51534:1;51520:16;;;;;;;;;;-1:-1:-1;51520:16:0;51496:40;;51561:15;-1:-1:-1;;;;;51561:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51551:4;51556:1;51551:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;51551:32:0;;;-1:-1:-1;;;;;51551:32:0;;;;;51616:12;51598:4;51603:1;51598:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51598:31:0;;;:7;;;;;;;;;:31;51727:39;;-1:-1:-1;;;51727:39:0;;4007:32:1;;;51727:39:0;;;3989:51:1;51646:12:0;;;;;;51734;51727:30;;;;3962:18:1;;51727:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51704:62;;51802:15;-1:-1:-1;;;;;51802:88:0;;51920:19;51959:1;51962:4;51976:7;51986:15;51802:200;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51781:484;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;52244:5;52234:15;;52148:117;51781:484;;;;;;;;;;;;;52077:39;;-1:-1:-1;;;52077:39:0;;-1:-1:-1;;;;;4007:32:1;;;52077:39:0;;;3989:51:1;52045:4:0;;-1:-1:-1;52119:12:0;;52084;52077:30;;;;;;3962:18:1;;52077:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;52068:63;;51781:484;52286:7;52281:249;;-1:-1:-1;;;;;52314:25:0;;;;;;:16;:25;;;;;:48;;52343:19;;52314:25;:48;;52343:19;;52314:48;:::i;:::-;;;;;;;;52406:19;52381:21;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;52449:33:0;;;;;;11849:2:1;11831:21;;;11888:2;11868:18;;;11861:30;-1:-1:-1;;;11922:2:1;11907:18;;11900:45;11977:2;11962:18;;11647:339;52449:33:0;;;;;;;;-1:-1:-1;52509:1:0;;;;-1:-1:-1;51014:1676:0;-1:-1:-1;;;;;;;51014:1676:0:o;52281:249::-;52567:7;-1:-1:-1;;;;;52551:45:0;;52576:19;52551:45;;;;548:25:1;;536:2;521:18;;402:177;52551:45:0;;;;;;;;-1:-1:-1;52619:19:0;;52640:6;;-1:-1:-1;51014:1676:0;;-1:-1:-1;;;;;51014:1676:0:o;51209:1450::-;-1:-1:-1;52677:1:0;;;;-1:-1:-1;51014:1676:0;-1:-1:-1;;51014:1676:0:o;6421:191::-;6495:16;6514:6;;-1:-1:-1;;;;;6531:17:0;;;-1:-1:-1;;;;;;6531:17:0;;;;;;6564:40;;6514:6;;;;;;;6564:40;;6495:16;6564:40;6484:128;6421:191;:::o;49787:817::-;49878:7;49903:27;49933:29;49954:7;49933:20;:29::i;:::-;49903:59;-1:-1:-1;49977:23:0;;49973:605;;-1:-1:-1;;;;;50017:25:0;;;;;;:16;:25;;;;;:48;;50046:19;;50017:25;:48;;50046:19;;50017:48;:::i;:::-;;;;;;;;50105:19;50080:21;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;50158:44:0;;50140:12;;-1:-1:-1;;;;;50158:12:0;;;50178:19;;50140:12;50158:44;50140:12;50158:44;50178:19;50158:12;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50139:63;;;50222:7;50217:244;;-1:-1:-1;;;;;50250:25:0;;;;;;:16;:25;;;;;:48;;50279:19;;50250:25;:48;;50279:19;;50250:48;:::i;:::-;;;;;;;;50342:19;50317:21;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;50385:33:0;;;;;;11849:2:1;11831:21;;;11888:2;11868:18;;;11861:30;-1:-1:-1;;;11922:2:1;11907:18;;11900:45;11977:2;11962:18;;11647:339;50385:33:0;;;;;;;;-1:-1:-1;50444:1:0;;49787:817;-1:-1:-1;;;49787:817:0:o;50217:244::-;50496:7;-1:-1:-1;;;;;50480:45:0;;50505:19;50480:45;;;;548:25:1;;536:2;521:18;;402:177;50480:45:0;;;;;;;;-1:-1:-1;50547:19:0;49787:817;-1:-1:-1;;49787:817:0:o;48259:468::-;-1:-1:-1;;;;;48348:21:0;;48326:115;;;;-1:-1:-1;;;48326:115:0;;12193:2:1;48326:115:0;;;12175:21:1;12232:2;12212:18;;;12205:30;12271:34;12251:18;;;12244:62;-1:-1:-1;;;12322:18:1;;;12315:42;12374:19;;48326:115:0;11991:408:1;48326:115:0;48468:6;48452:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;48485:18:0;;;;;;:9;:18;;;;;:28;;48507:6;;48485:18;:28;;48507:6;;48485:28;:::i;:::-;;;;-1:-1:-1;;48529:37:0;;548:25:1;;;-1:-1:-1;;;;;48529:37:0;;;48546:1;;48529:37;;536:2:1;521:18;48529:37:0;;;;;;;48712:6;48686:23;;:32;;;;:::i;:::-;-1:-1:-1;;;;;48628:35:0;;;;;;:26;:35;;;;;;:91;;;;:::i;:::-;-1:-1:-1;;;;;48577:35:0;;;;;;;:26;:35;;;;;:142;;;;-1:-1:-1;48259:468:0:o;48735:672::-;-1:-1:-1;;;;;48824:21:0;;48802:117;;;;-1:-1:-1;;;48802:117:0;;12878:2:1;48802:117:0;;;12860:21:1;12917:2;12897:18;;;12890:30;12956:34;12936:18;;;12929:62;-1:-1:-1;;;13007:18:1;;;13000:44;13061:19;;48802:117:0;12676:410:1;48802:117:0;-1:-1:-1;;;;;48955:18:0;;48930:22;48955:18;;;:9;:18;;;;;;49006:24;;;;48984:121;;;;-1:-1:-1;;;48984:121:0;;13293:2:1;48984:121:0;;;13275:21:1;13332:2;13312:18;;;13305:30;13371:34;13351:18;;;13344:62;-1:-1:-1;;;13422:18:1;;;13415:45;13477:19;;48984:121:0;13091:411:1;48984:121:0;49137:23;49154:6;49137:14;:23;:::i;:::-;-1:-1:-1;;;;;49116:18:0;;;;;;:9;:18;;;;;:44;;;;49171:12;:22;;49187:6;;49116:18;49171:22;;49187:6;;49171:22;:::i;:::-;;;;-1:-1:-1;;49209:37:0;;548:25:1;;;49235:1:0;;-1:-1:-1;;;;;49209:37:0;;;;;536:2:1;521:18;49209:37:0;;;;;;;49392:6;49366:23;;:32;;;;:::i;:::-;-1:-1:-1;;;;;49308:35:0;;;;;;:26;:35;;;;;;:91;;;;:::i;:::-;-1:-1:-1;;;;;49257:35:0;;;;;;;:26;:35;;;;;:142;;;;-1:-1:-1;;48735:672:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;584:597::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;1022:6;1019:1;1016:13;1013:91;;;1092:1;1087:2;1078:6;1067:9;1063:22;1059:31;1052:42;1013:91;-1:-1:-1;1165:2:1;1144:15;-1:-1:-1;;1140:29:1;1125:45;;;;1172:2;1121:54;;584:597;-1:-1:-1;;;584:597:1:o;1186:315::-;1254:6;1262;1315:2;1303:9;1294:7;1290:23;1286:32;1283:52;;;1331:1;1328;1321:12;1283:52;1370:9;1357:23;1389:31;1414:5;1389:31;:::i;:::-;1439:5;1491:2;1476:18;;;;1463:32;;-1:-1:-1;;;1186:315:1:o;1698:456::-;1775:6;1783;1791;1844:2;1832:9;1823:7;1819:23;1815:32;1812:52;;;1860:1;1857;1850:12;1812:52;1899:9;1886:23;1918:31;1943:5;1918:31;:::i;:::-;1968:5;-1:-1:-1;2025:2:1;2010:18;;1997:32;2038:33;1997:32;2038:33;:::i;:::-;1698:456;;2090:7;;-1:-1:-1;;;2144:2:1;2129:18;;;;2116:32;;1698:456::o;2159:416::-;2224:6;2232;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;2340:9;2327:23;2359:31;2384:5;2359:31;:::i;:::-;2409:5;-1:-1:-1;2466:2:1;2451:18;;2438:32;2508:15;;2501:23;2489:36;;2479:64;;2539:1;2536;2529:12;2479:64;2562:7;2552:17;;;2159:416;;;;;:::o;3523:315::-;3591:6;3599;3652:2;3640:9;3631:7;3627:23;3623:32;3620:52;;;3668:1;3665;3658:12;3620:52;3704:9;3691:23;3681:33;;3764:2;3753:9;3749:18;3736:32;3777:31;3802:5;3777:31;:::i;4051:388::-;4119:6;4127;4180:2;4168:9;4159:7;4155:23;4151:32;4148:52;;;4196:1;4193;4186:12;4148:52;4235:9;4222:23;4254:31;4279:5;4254:31;:::i;:::-;4304:5;-1:-1:-1;4361:2:1;4346:18;;4333:32;4374:33;4333:32;4374:33;:::i;5121:127::-;5182:10;5177:3;5173:20;5170:1;5163:31;5213:4;5210:1;5203:15;5237:4;5234:1;5227:15;5253:168;5293:7;5359:1;5355;5351:6;5347:14;5344:1;5341:21;5336:1;5329:9;5322:17;5318:45;5315:71;;;5366:18;;:::i;:::-;-1:-1:-1;5406:9:1;;5253:168::o;5426:217::-;5466:1;5492;5482:132;;5536:10;5531:3;5527:20;5524:1;5517:31;5571:4;5568:1;5561:15;5599:4;5596:1;5589:15;5482:132;-1:-1:-1;5628:9:1;;5426:217::o;5648:128::-;5688:3;5719:1;5715:6;5712:1;5709:13;5706:39;;;5725:18;;:::i;:::-;-1:-1:-1;5761:9:1;;5648:128::o;5781:265::-;5820:3;5848:9;;;5873:10;;-1:-1:-1;;;;;5892:27:1;;;5885:35;;5869:52;5866:78;;;5924:18;;:::i;:::-;-1:-1:-1;;;5971:19:1;;;5964:27;;5956:36;;5953:62;;;5995:18;;:::i;:::-;-1:-1:-1;;6031:9:1;;5781:265::o;6462:125::-;6502:4;6530:1;6527;6524:8;6521:34;;;6535:18;;:::i;:::-;-1:-1:-1;6572:9:1;;6462:125::o;6592:356::-;6794:2;6776:21;;;6813:18;;;6806:30;6872:34;6867:2;6852:18;;6845:62;6939:2;6924:18;;6592:356::o;7380:184::-;7450:6;7503:2;7491:9;7482:7;7478:23;7474:32;7471:52;;;7519:1;7516;7509:12;7471:52;-1:-1:-1;7542:16:1;;7380:184;-1:-1:-1;7380:184:1:o;8919:251::-;8989:6;9042:2;9030:9;9021:7;9017:23;9013:32;9010:52;;;9058:1;9055;9048:12;9010:52;9090:9;9084:16;9109:31;9134:5;9109:31;:::i;9175:127::-;9236:10;9231:3;9227:20;9224:1;9217:31;9267:4;9264:1;9257:15;9291:4;9288:1;9281:15;9523:908;9757:4;9805:3;9794:9;9790:19;9836:6;9825:9;9818:25;9862:2;9900:3;9895:2;9884:9;9880:18;9873:31;9924:6;9959;9953:13;9990:6;9982;9975:22;10028:3;10017:9;10013:19;10006:26;;10067:2;10059:6;10055:15;10041:29;;10088:1;10098:195;10112:6;10109:1;10106:13;10098:195;;;10177:13;;-1:-1:-1;;;;;10173:39:1;10161:52;;10268:15;;;;10233:12;;;;10209:1;10127:9;10098:195;;;-1:-1:-1;;;;;;;10349:32:1;;;;10344:2;10329:18;;10322:60;-1:-1:-1;;;10413:2:1;10398:18;10391:34;10310:3;9523:908;-1:-1:-1;;9523:908:1:o;10436:179::-;10471:3;10513:1;10495:16;10492:23;10489:120;;;10559:1;10556;10553;10538:23;-1:-1:-1;10596:1:1;10590:8;10585:3;10581:18;10489:120;10436:179;:::o;10620:346::-;10730:2;10711:13;;-1:-1:-1;;10707:27:1;10695:40;;10765:18;10750:34;;10786:22;;;10747:62;10744:185;;;10851:10;10846:3;10842:20;10839:1;10832:31;10886:4;10883:1;10876:15;10914:4;10911:1;10904:15;10744:185;10945:2;10938:22;-1:-1:-1;;10620:346:1:o;10971:671::-;11010:3;11052:4;11034:16;11031:26;11028:39;;;10971:671;:::o;11028:39::-;11094:2;11088:9;-1:-1:-1;;11159:16:1;11155:25;;11152:1;11088:9;11131:50;11210:4;11204:11;11234:16;11269:18;11340:2;11333:4;11325:6;11321:17;11318:25;11313:2;11305:6;11302:14;11299:45;11296:58;;;11347:5;;;;;10971:671;:::o;11296:58::-;11384:6;11378:4;11374:17;11363:28;;11420:3;11414:10;11447:2;11439:6;11436:14;11433:27;;;11453:5;;;;;;10971:671;:::o;11433:27::-;11537:2;11518:16;11512:4;11508:27;11504:36;11497:4;11488:6;11483:3;11479:16;11475:27;11472:69;11469:82;;;11544:5;;;;;;10971:671;:::o;11469:82::-;11560:57;11611:4;11602:6;11594;11590:19;11586:30;11580:4;11560:57;:::i;:::-;-1:-1:-1;11633:3:1;;10971:671;-1:-1:-1;;;;;10971:671:1:o;12404:267::-;12443:4;12472:9;;;12497:10;;-1:-1:-1;;;12516:19:1;;12509:27;;12493:44;12490:70;;;12540:18;;:::i;:::-;-1:-1:-1;;;;;12587:27:1;;12580:35;;12572:44;;12569:70;;;12619:18;;:::i;:::-;-1:-1:-1;;12656:9:1;;12404:267::o
Swarm Source
ipfs://a18b13526ddf22c13a701dfc008abbc31ee9150a5c7f87e507f2ff8c0c7a052f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.