ERC-20
Overview
Max Total Supply
420,690,000,000,000 lmeow
Holders
205
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,000,000,000 lmeowValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Lmeow
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 2000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol"; import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; import "./ILmeow.sol"; import "./Ownable.sol"; contract Vault is Ownable { IUniswapV2Router02 public immutable router; constructor(IUniswapV2Router02 _router) { router = _router; } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint ethValue ) external onlyOwner returns ( uint amountToken, uint amountETH, uint liquidity ) { (amountToken, amountETH, liquidity) = router.addLiquidityETH{value: ethValue}( token, amountTokenDesired, amountTokenMin, amountETHMin, to, block.timestamp ); } function recover(uint256 amount) external onlyOwner { msg.sender.call{value: amount}(new bytes(0)); } fallback() external payable onlyOwner { (bool success, ) = address(router).call{value: msg.value}(msg.data); require(success, "forward router faild"); } receive() external payable {} } contract Lmeow is ILmeow, Ownable { string public constant override name = "Lmeow Token"; string public constant override symbol = "lmeow"; uint8 public constant override decimals = 18; uint256 public override totalSupply; uint256 public constant initialSupply = 420690000000000 ether; uint256 public constant initialLPSupply = (initialSupply * 75) / 100; // 75% uint256 public constant marketingSupply = (initialSupply * 10) / 100; // 10% uint256 public constant teamSupply = (initialSupply * 10) / 100; // 10% uint256 public constant devSupply = initialSupply - initialLPSupply - marketingSupply - teamSupply; // 5% address public constant marketingAddr = 0x5D98206E4a3E3b87E6d899A47f33DEB579105b96; address public constant teamAddr = 0x50E943A5e3c4078211a7e0226fc1e0f648B867af; address public constant devAddr = 0xbA6489eFB076194EB5551a0799d70648E0149952; uint256 public constant ticketPrice = 3000000000000 ether; uint256 public constant WIN_COUNT = 3; uint256 public constant CYCLE_DURATION = 1 weeks; // limit 100 = 1%, 1=0.01% ,10=0.1% , 1000=10%, 10000=100% uint256 public limitFractional = 100; uint256 public buyTaxFractional = 1000; uint256 public sellTaxFractional = 1000; uint256 public autoLpFractional = 7500; uint256 public constant TEN_THOUSAND = 10000; address public pair; IUniswapV2Router02 public router; Vault public vault; Vault public lpVault; address public weth; address public recoverAddress; uint256 public immutable deployTime; uint256 public lastAddLiquidityTime; uint256 private _seed = 2023; bool _inSwap; bool public autoAddLiquidity = true; bool public autoSwapBack = true; bool public initialLPSupplyAdded; mapping(address => bool) public lockedMap; mapping(address => uint256) public override balanceOf; mapping(address => bool) public withoutLimitMap; mapping(address => mapping(address => uint256)) public override allowance; // allowance[owner][spender] mapping(uint256 => mapping(uint256 => Ticket)) public ticketMap; mapping(uint256 => uint256) public ticketCountMap; mapping(uint256 => RewardCycle) public rewardCycleMap; mapping(uint256 => mapping(address => uint256[])) public ticketUserMap; mapping(uint256 => uint256) public cycleRewardAmountMap; event Lock(address user, uint256 timestamp); event OpenCycle(address user, uint256 cycleId); event Stake(uint256 indexed cycleId, address indexed user, uint256 count); event UnStake(uint256 indexed cycleId, address indexed user, uint256 count); event Reward(uint256 indexed cycleId, address indexed user, uint256 amount); error MaxHolderLimitExceeded(address user); error LengthMismatch(); error AlreadySetUp(); error AccountLocked(address user); error InsufficientAllowance(address owner, address spender, uint256 amount); error ExceedsBalance(address owner); error InvalidAddress(address addr); error InvalidTime(); error IllegalOperation(); error InvalidArgs(); error OnlyHumanCall(); error ZeroBalance(); error TransferETHFailed(address user, uint256 amount); struct Ticket { address user; bool redeemed; } struct TicketDetail { uint256 ticketCycleId; uint256 ticketId; address user; bool redeemed; } struct TicketWinner { uint256 ticketId; uint256 amount; bool claimed; } struct RewardCycle { TicketWinner[] winner; uint256 totalRewardEth; bool opened; } modifier swapping() { _inSwap = true; _; _inSwap = false; } modifier validRecipient(address to) { if (to == address(0)) revert ZeroAddress(); _; } modifier onlyEmergency() { if (msg.sender != recoverAddress) revert InvalidAddress(msg.sender); if (block.timestamp < (deployTime + 300 days)) revert IllegalOperation(); _; } modifier holdThreshold( address sender, address recipient, uint256 amount ) { if (!withoutLimitMap[recipient]) { if (balanceOf[recipient] + amount > (initialSupply / TEN_THOUSAND) * limitFractional) { revert MaxHolderLimitExceeded(recipient); } } _; } modifier onlyHuman() { if (tx.origin != msg.sender) revert OnlyHumanCall(); _; } modifier previousCycle(uint256 cycleId) { if (cycleId >= currentCycleId()) revert InvalidTime(); _; } constructor(IUniswapV2Router02 router_) { deployTime = block.timestamp; router = router_; IUniswapV2Factory factory = IUniswapV2Factory(router.factory()); address weth_ = router.WETH(); weth = weth_; pair = factory.createPair(weth_, address(this)); vault = new Vault(router); lpVault = new Vault(router); address sender = msg.sender; recoverAddress = sender; withoutLimitMap[pair] = true; withoutLimitMap[address(this)] = true; withoutLimitMap[address(vault)] = true; withoutLimitMap[address(lpVault)] = true; totalSupply = initialSupply; allowance[address(this)][address(router_)] = type(uint256).max; allowance[address(vault)][address(router_)] = type(uint256).max; allowance[address(lpVault)][address(router_)] = type(uint256).max; allowance[sender][address(router_)] = type(uint256).max; balanceOf[address(this)] = initialLPSupply; balanceOf[marketingAddr] = marketingSupply; balanceOf[teamAddr] = teamSupply; balanceOf[devAddr] = devSupply; emit Transfer(address(0), marketingAddr, marketingSupply); emit Transfer(address(0), teamAddr, teamSupply); emit Transfer(address(0), devAddr, devSupply); emit Transfer(address(0), address(this), initialLPSupply); } function addInitialLP() external payable onlyOwner swapping { if (initialLPSupplyAdded) revert IllegalOperation(); if (msg.value != 1 ether) revert IllegalOperation(); router.addLiquidityETH{value: 1 ether}(address(this), initialLPSupply, 0, 0, msg.sender, block.timestamp); initialLPSupplyAdded = true; } function setWithoutLimit(address user) external onlyOwner { withoutLimitMap[user] = true; } function setWithLimit(address user) external onlyOwner { withoutLimitMap[user] = false; } function setPair(address pair_) external onlyOwner { pair = pair_; } function setTaxBuyAndSellFractional(uint256 buy, uint256 sell) external onlyOwner { if (buy > TEN_THOUSAND / 10) revert InvalidArgs(); if (sell > TEN_THOUSAND / 10) revert InvalidArgs(); buyTaxFractional = buy; sellTaxFractional = sell; } function setAutoLpFractional(uint256 autoLpFractional_) external onlyOwner { if (autoLpFractional_ > TEN_THOUSAND) revert InvalidArgs(); autoLpFractional = autoLpFractional_; } function setautoAddLiquidity(bool isAuto) external onlyOwner { autoAddLiquidity = isAuto; } function setAutoSwapBack(bool isAuto) external onlyOwner { autoSwapBack = isAuto; } /** * holder limit * @param limit 100 = 1%, 1=0.01% */ function setLimitFractional(uint256 limit) external onlyOwner { if (limit > TEN_THOUSAND) revert InvalidArgs(); limitFractional = limit; } function lockAccount(address[] memory users, bool locked) external onlyOwner { for (uint256 i = 0; i < users.length; i++) { lockedMap[users[i]] = locked; } } function _basicTransfer( address from, address to, uint256 amount ) internal returns (bool) { uint256 bl = balanceOf[from]; if (bl < amount) revert ExceedsBalance(from); unchecked { balanceOf[from] = bl - amount; balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } function _transferFrom( address sender, address recipient, uint256 amount ) internal validRecipient(recipient) holdThreshold(sender, recipient, amount) returns (bool) { if (lockedMap[sender]) revert AccountLocked(sender); if (lockedMap[recipient]) revert AccountLocked(recipient); if (_inSwap) { return _basicTransfer(sender, recipient, amount); } else { if (shouldAddLiquidity()) { addLiquidity(); } if (shouldSwapBack()) { swapBack(); } uint256 taxAmount; if (sender == pair) { // buy if (buyTaxFractional > 0) { // take buy tax taxAmount = (amount / TEN_THOUSAND) * buyTaxFractional; } } else if (recipient == pair) { // sell if (sellTaxFractional > 0) { // take sell tax taxAmount = (amount / TEN_THOUSAND) * sellTaxFractional; } } if (taxAmount > 0) { balanceOf[sender] -= taxAmount; uint256 autoLpAmount = (taxAmount / TEN_THOUSAND) * autoLpFractional; uint256 rewardAmount = taxAmount - autoLpAmount; if (autoLpAmount > 0) { balanceOf[address(lpVault)] += autoLpAmount; emit Transfer(sender, address(lpVault), autoLpAmount); } if (rewardAmount > 0) { balanceOf[address(vault)] += rewardAmount; emit Transfer(sender, address(vault), rewardAmount); } } return _basicTransfer(sender, recipient, amount - taxAmount); } } function transferFrom( address from, address to, uint256 value ) external override returns (bool transferResult) { _spendAllowance(from, msg.sender, value); transferResult = _transferFrom(from, to, value); } function transfer(address to, uint256 value) external override returns (bool) { return _transferFrom(msg.sender, to, value); } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { if (subtractedValue >= allowance[msg.sender][spender]) { allowance[msg.sender][spender] = 0; } else { allowance[msg.sender][spender] -= subtractedValue; } emit Approval(msg.sender, spender, allowance[msg.sender][spender]); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { allowance[msg.sender][spender] += addedValue; emit Approval(msg.sender, spender, allowance[msg.sender][spender]); return true; } function approve(address spender, uint256 value) external override returns (bool) { allowance[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function _burn(address account, uint256 amount) internal virtual { if (account == address(0)) revert ZeroAddress(); uint256 accountBalance = balanceOf[account]; if (accountBalance < amount) revert ExceedsBalance(account); unchecked { balanceOf[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. totalSupply -= amount; } emit Transfer(account, address(0), amount); } function burn(uint256 amount) public virtual { _burn(msg.sender, amount); } function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, msg.sender, amount); _burn(account, amount); } function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance[owner][spender]; if (currentAllowance != type(uint256).max) { if (currentAllowance < amount) revert InsufficientAllowance(owner, spender, amount); unchecked { allowance[owner][spender] = currentAllowance - amount; } } } function swapBack() public swapping { uint256 amountToSwap = balanceOf[address(vault)]; if (amountToSwap < 10000 ether) { return; } address[] memory path = new address[](2); path[0] = address(this); path[1] = weth; IUniswapV2Router02(address(vault)).swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); } function addLiquidity() public swapping { uint256 autoLiquidityAmount = balanceOf[address(lpVault)]; uint256 amountToLiquify = autoLiquidityAmount / 2; uint256 amountToSwap = autoLiquidityAmount - amountToLiquify; if (amountToSwap < 100 ether) { return; } address[] memory path = new address[](2); path[0] = address(this); path[1] = weth; IUniswapV2Router02(address(lpVault)).swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(lpVault), block.timestamp ); uint256 amountToLiquifyEth = address(lpVault).balance; // if (amountToLiquify > 0 && amountToLiquifyEth > 0) { lpVault.addLiquidityETH(address(this), amountToLiquify, 0, 0, address(this), amountToLiquifyEth); } lastAddLiquidityTime = block.timestamp; _seed = random(0, amountToSwap); } function shouldAddLiquidity() public view returns (bool) { return autoAddLiquidity && !_inSwap && msg.sender != pair && block.timestamp >= (lastAddLiquidityTime + 2 hours); } function shouldSwapBack() public view returns (bool) { return autoSwapBack && !_inSwap && msg.sender != pair; } function setRecover(address recover_) external onlyOwner { recoverAddress = recover_; } function emergencyRecover(IERC20 token, uint256 amount) external onlyEmergency { token.transfer(msg.sender, amount); } function emergencyRecoverEth(uint256 amount) external onlyEmergency { transferETH(msg.sender, amount, false); } function emergencyRecoverVault(Vault vault_, uint256 amount) external onlyEmergency { vault_.recover(amount); } function balanceOfEth(address addr) public view returns (uint256) { return addr.balance; } function ticketCycleId(uint256 time) public view returns (uint256) { uint256 dt = deployTime; if (time < dt) revert InvalidArgs(); unchecked { return (time - dt) / CYCLE_DURATION; } } function currentCycleId() public view returns (uint256) { return ticketCycleId(block.timestamp); } function getRandomSeed(address user) internal view returns (uint256) { return uint256( keccak256( abi.encodePacked( user, _seed, block.prevrandao, block.timestamp, blockhash(block.number - 1), gasleft() ) ) ); } function random(uint256 min, uint256 max) internal view returns (uint256) { // inclusive,inclusive (don't use absolute min and max values of uint256) // deterministic based on seed provided uint256 diff = max - min + 1; uint256 randomVar = uint256(keccak256(abi.encodePacked(getRandomSeed(pair)))) % diff; return randomVar + min; } function openLottery(uint256 cycleId) external onlyHuman { if (cycleId >= currentCycleId()) { revert InvalidTime(); } if (ticketUserMap[cycleId][msg.sender].length == 0) { revert IllegalOperation(); } RewardCycle storage cycle_ = rewardCycleMap[cycleId]; if (cycle_.opened) revert IllegalOperation(); uint256 ticketCount = ticketCountMap[cycleId]; if (ticketCount == 0) revert LengthMismatch(); uint256 rewardTotal = cycleRewardAmountMap[cycleId]; if (rewardTotal == 0) revert ZeroBalance(); cycle_.totalRewardEth = rewardTotal; uint256 amount = rewardTotal / WIN_COUNT; if (ticketCount <= WIN_COUNT) { uint256 restReward = rewardTotal; for (uint256 i; i < ticketCount; i++) { cycle_.winner.push(TicketWinner({ticketId: i, amount: amount, claimed: true})); address winer = ticketMap[cycleId][i].user; if (winer == address(0)) revert ZeroAddress(); transferETH(winer, amount, true); emit Reward(cycleId, winer, amount); restReward -= amount; } transferETH(devAddr, restReward, false); } else { uint256[] memory winTicketIdsTmp = new uint256[](WIN_COUNT); for (uint256 i; i < WIN_COUNT; i++) { uint256 lastWinTicketId; if (i == 0) { lastWinTicketId = random(0, ticketCount - 1); _seed += lastWinTicketId; winTicketIdsTmp[i] = lastWinTicketId; } else { while (true) { lastWinTicketId = random(0, ticketCount - 1); _seed += lastWinTicketId; bool duplicate; for (uint256 j; j < winTicketIdsTmp.length; j++) { if (winTicketIdsTmp[j] == lastWinTicketId) { duplicate = true; break; } } if (!duplicate) { winTicketIdsTmp[i] = lastWinTicketId; break; } } } cycle_.winner.push(TicketWinner({ticketId: lastWinTicketId, amount: amount, claimed: true})); address winer = ticketMap[cycleId][lastWinTicketId].user; if (winer == address(0)) revert ZeroAddress(); transferETH(winer, amount, true); emit Reward(cycleId, winer, amount); } } cycle_.opened = true; emit OpenCycle(msg.sender, cycleId); } function stake(uint256 count) external onlyHuman { if (count == 0) revert InvalidArgs(); _basicTransfer(msg.sender, address(this), count * ticketPrice); uint256 cycleId = currentCycleId(); uint256 ticketCount = ticketCountMap[cycleId]; for (uint256 i; i < count; i++) { uint256 currentTicketId = ticketCount + i; ticketMap[cycleId][currentTicketId] = Ticket({user: msg.sender, redeemed: false}); ticketUserMap[cycleId][msg.sender].push(currentTicketId); } ticketCountMap[cycleId] += count; emit Stake(cycleId, msg.sender, count); } function unStake(uint256 cycleId) external onlyHuman previousCycle(cycleId) { uint256[] memory ticketIds = ticketUserMap[cycleId][msg.sender]; if (ticketIds.length == 0) revert LengthMismatch(); RewardCycle storage cycle_ = rewardCycleMap[cycleId]; if (!cycle_.opened) revert IllegalOperation(); for (uint256 i; i < ticketIds.length; i++) { Ticket storage ticket = ticketMap[cycleId][ticketIds[i]]; if (ticket.user != msg.sender) revert IllegalOperation(); if (ticket.redeemed) revert IllegalOperation(); ticket.redeemed = true; } _basicTransfer(address(this), msg.sender, ticketIds.length * ticketPrice); emit UnStake(cycleId, msg.sender, ticketIds.length); } function continueStake(uint256 previousCycleId) external previousCycle(previousCycleId) { uint256 cycleId = currentCycleId(); uint256[] memory ticketIds = ticketUserMap[previousCycleId][msg.sender]; if (ticketIds.length == 0) revert LengthMismatch(); RewardCycle storage cycle_ = rewardCycleMap[previousCycleId]; if (!cycle_.opened) revert IllegalOperation(); for (uint256 i; i < ticketIds.length; i++) { Ticket storage ticket = ticketMap[previousCycleId][ticketIds[i]]; if (ticket.user != msg.sender) revert IllegalOperation(); if (ticket.redeemed) revert IllegalOperation(); ticket.redeemed = true; } emit UnStake(previousCycleId, msg.sender, ticketIds.length); uint256 ticketIdCount = ticketCountMap[cycleId]; for (uint256 i; i < ticketIds.length; i++) { ticketMap[cycleId][ticketIdCount + i] = Ticket({user: msg.sender, redeemed: false}); } ticketCountMap[cycleId] = ticketIdCount + ticketIds.length; emit Stake(cycleId, msg.sender, ticketIds.length); } function getAllTicketsDetail(uint256 cycleId) external view returns (TicketDetail[] memory ticketsDetail) { uint256 ticketCount = ticketCountMap[cycleId]; ticketsDetail = new TicketDetail[](ticketCount); for (uint256 i; i < ticketCount; i++) { Ticket storage ticket = ticketMap[cycleId][i]; ticketsDetail[i] = TicketDetail({ ticketCycleId: cycleId, ticketId: i, user: ticket.user, redeemed: ticket.redeemed }); } } function getUserTicketList(uint256 cycleId, address user) external view returns (uint256[] memory ticketIds) { ticketIds = ticketUserMap[cycleId][user]; } function getLockedMap(address[] calldata users) external view returns (bool[] memory lockedMap_) { lockedMap_ = new bool[](users.length); for (uint256 i; i < users.length; i++) { lockedMap_[i] = lockedMap[users[i]]; } } function chainTime() public view returns (uint256) { return block.timestamp; } function transferETH( address target, uint256 amount, bool isCheck ) internal validRecipient(target) { (bool success, ) = target.call{value: amount}(new bytes(0)); if (isCheck) { if (!success) revert TransferETHFailed(target, amount); } } receive() external payable { cycleRewardAmountMap[currentCycleId()] += msg.value; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; import "../ERC20.sol"; import "../../../utils/Context.sol"; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
pragma solidity ^0.8.0; import {IERC20, IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; interface ILmeow is IERC20, IERC20Metadata {}
pragma solidity ^0.8.0; abstract contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); error OnlyOwnerCancall(address caller); error ZeroAddress(); constructor() { _transferOwnership(msg.sender); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { if (owner != msg.sender) revert OnlyOwnerCancall(msg.sender); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) revert ZeroAddress(); _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); } }
{ "optimizer": { "enabled": true, "runs": 2000 }, "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/permit2/lib/openzeppelin-contracts/", "permit2/=lib/permit2/", "lib/forge-std:ds-test/=lib/forge-std/lib/ds-test/src/", "lib/permit2:ds-test/=lib/permit2/lib/forge-std/lib/ds-test/src/", "lib/permit2:forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/", "lib/permit2:forge-std/=lib/permit2/lib/forge-std/src/", "lib/permit2:openzeppelin-contracts/=lib/permit2/lib/openzeppelin-contracts/", "lib/permit2:solmate/=lib/permit2/lib/solmate/" ], "viaIR": true, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"router_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"AccountLocked","type":"error"},{"inputs":[],"name":"AlreadySetUp","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ExceedsBalance","type":"error"},{"inputs":[],"name":"IllegalOperation","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidArgs","type":"error"},{"inputs":[],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"LengthMismatch","type":"error"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"MaxHolderLimitExceeded","type":"error"},{"inputs":[],"name":"OnlyHumanCall","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"OnlyOwnerCancall","type":"error"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferETHFailed","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroBalance","type":"error"},{"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":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"cycleId","type":"uint256"}],"name":"OpenCycle","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":"uint256","name":"cycleId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"cycleId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"Stake","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"cycleId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"UnStake","type":"event"},{"inputs":[],"name":"CYCLE_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEN_THOUSAND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WIN_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addInitialLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoLpFractional","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoSwapBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"balanceOfEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxFractional","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"previousCycleId","type":"uint256"}],"name":"continueStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentCycleId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cycleRewardAmountMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyRecover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyRecoverEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Vault","name":"vault_","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyRecoverVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cycleId","type":"uint256"}],"name":"getAllTicketsDetail","outputs":[{"components":[{"internalType":"uint256","name":"ticketCycleId","type":"uint256"},{"internalType":"uint256","name":"ticketId","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"redeemed","type":"bool"}],"internalType":"struct Lmeow.TicketDetail[]","name":"ticketsDetail","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"getLockedMap","outputs":[{"internalType":"bool[]","name":"lockedMap_","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cycleId","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserTicketList","outputs":[{"internalType":"uint256[]","name":"ticketIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialLPSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialLPSupplyAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastAddLiquidityTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitFractional","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"bool","name":"locked","type":"bool"}],"name":"lockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lockedMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpVault","outputs":[{"internalType":"contract Vault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cycleId","type":"uint256"}],"name":"openLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardCycleMap","outputs":[{"internalType":"uint256","name":"totalRewardEth","type":"uint256"},{"internalType":"bool","name":"opened","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxFractional","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"autoLpFractional_","type":"uint256"}],"name":"setAutoLpFractional","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isAuto","type":"bool"}],"name":"setAutoSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setLimitFractional","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair_","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recover_","type":"address"}],"name":"setRecover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setTaxBuyAndSellFractional","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"setWithLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"setWithoutLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isAuto","type":"bool"}],"name":"setautoAddLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"shouldSwapBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ticketCountMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"ticketCycleId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ticketMap","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"redeemed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ticketPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ticketUserMap","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"transferResult","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cycleId","type":"uint256"}],"name":"unStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract Vault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"withoutLimitMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604090808252346200047b578062003e4d80380380916200002382856200047f565b83396020928391810103126200047b57516001600160a01b03808216918290036200047b575f80546001600160a01b03198082163390811784558751939593919285167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08780a360646002556103e890816003556004918255611d4c6005556107e7600d556201010062ffff0019600e541617600e55426080528383600754161760075563c45a015560e01b815286818381875afa9081156200042357869162000459575b5087516315ab88c960e31b815287818481885afa9081156200044f57916044878a9381958b916200042d575b50168087600a541617600a55898c5195869485936364e329cb60e11b855289850152306024850152165af190811562000423579085918791620003ef575b501682600654161760065583600754168751906106f18083019260018060401b039381811085821117620003dc57818b916200375c9585878439815203019089f08015620003d25787168560085416176008558660075416918a51948286019486861090861117620003bf57509189939185938439815203019085f08015620003b55783168160095416176009553390600b541617600b55816006541683526011845284832060ff199060018282541617905530845285842060018282541617905582600854168452858420600182825416179055826009541684526001868520918254161790556d14bddab3e51a57cff87a500000006001553083526012845284832081845284525f1991828685205580600854168452601285528584208285528552828685205560095416835260128452848320818452845281858420553383526012845284832090835283528382205530815260108252806d0f8e6406ebd3c1dbfa5bbc000000928385832055735d98206e4a3e3b87e6d899a47f33deb579105b96808352828280886d0212fc453082a26198d908000000948582862055847350e943a5e3c4078211a7e0226fc1e0f648b867af9182825287848320558473ba6489efb076194eb5551a0799d70648e0149952988984526d01097e2298415130cc6c840000009586818620558051938285527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9d8e809b8197a351908152a38951908152a384519384523093a3516132839081620004d982396080518181816104f601528181610cdd015281816110eb0152818161231201526130fa0152f35b86513d86823e3d90fd5b634e487b7160e01b8a5260419052602489fd5b8a513d8a823e3d90fd5b634e487b7160e01b8a526041865260248afd5b620004149150883d8a116200041b575b6200040b81836200047f565b810190620004b7565b5f62000152565b503d620003ff565b88513d88823e3d90fd5b620004489150853d87116200041b576200040b81836200047f565b5f62000114565b89513d89823e3d90fd5b620004749150873d89116200041b576200040b81836200047f565b5f620000e8565b5f80fd5b601f909101601f19168101906001600160401b03821190821017620004a357604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126200047b57516001600160a01b03811681036200047b579056fe608080604052600436101561003d575b50361561001a575f80fd5b610023426130f8565b5f52601760205260405f206100393482546128f9565b9055005b5f90813560e01c90816306fdde03146125a057508063095ea7b3146125285780630d5c6cea1461250d5780631209b1f6146124e5578063142b64f2146124ab57806318160ddd1461248d57806318dd842a1461242b5780631d5274071461240f57806323b872dd146123d45780632c5d59b21461239f5780632cfac6ec146114495780632e67085d146122df5780632f867367146122b8578063313ce5671461229c578063378dc3dc1461227357806339509351146121e25780633bfbbca1146121c35780633c632853146121995780633eb2368d146120715780633fc8cef31461204a5780633ff42b921461201b57806340654e1414611ff657806341c66d0a14611fcd57806342966c6814611faf57806349d62d1414611f685780634a5ff74914611f395780634bc6dd1814611ed65780634bffbd7714611eb8578063572eeb2814611d9f5780635c0bf939146118b15780635d3eea91146117055780636049dfbc1461144e578063624bb58f146114495780636985a4f61461138d5780636ac5eeee146113665780636cbacfb1146113025780636e4a2f01146112e457806370a08231146112ac57806370c156f8146111a8578063715018a61461113f57806379cc67901461110e5780637a40624b146110d35780637c0929fb146110965780637fdeaa9d1461105a5780638187f5161461100b5780638393415014610ea35780638872699614610e5f5780638da5cb5b14610e39578063943c04ed14610e1257806395d89b4114610db85780639639011e14610caa5780639b287e8714610c815780639d12ec0114610c63578063a457c2d714610b99578063a694fc3a1461098a578063a8aa1b3114610963578063a9059cbb1461093a578063aaacdda014610916578063aab1b82d146108d2578063ac582f07146108ac578063ac8231c71461088e578063b283cd2d1461083f578063b77c5e5114610802578063bc6b5631146107d8578063c5a59ceb146107ba578063cd421fbf1461079c578063cd5d179914610776578063ce1aad2314610759578063d37b0868146106fa578063d7a9ea8d146106df578063da09c72c146106b0578063dd62ed3e14610662578063e8078d9414610631578063ee0c53c41461060c578063efd462bb146105e6578063f1b2a53d146104d0578063f2fde38b146103fa578063f887ea40146103d35763fbfa77cf0361000f57346103d057806003193601126103d05760206001600160a01b0360085416604051908152f35b80fd5b50346103d057806003193601126103d05760206001600160a01b0360075416604051908152f35b50346103d05760206003193601126103d057610414612712565b6001600160a01b03908183541633036104a0578116908115610476575f548273ffffffffffffffffffffffffffffffffffffffff198216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a380f35b60046040517fd92e233d000000000000000000000000000000000000000000000000000000008152fd5b60246040517f40a486c4000000000000000000000000000000000000000000000000000000008152336004820152fd5b50346103d05760206003193601126103d0576001600160a01b03600b541633036105b6577f000000000000000000000000000000000000000000000000000000000000000063018b820081018091116105a257421061057857331561047657808080602060405161054081612671565b82815201600435335af1503d15610575573d61055b816126b0565b90610569604051928361268d565b81528160203d92013e80f35b80f35b60046040517f1d5d2c99000000000000000000000000000000000000000000000000000000008152fd5b602482634e487b7160e01b81526011600452fd5b60246040517f8e4c8aa6000000000000000000000000000000000000000000000000000000008152336004820152fd5b50346103d057806003193601126103d057602060ff600e5460081c166040519015158152f35b50346103d057806003193601126103d0576020610627613068565b6040519015158152f35b50346103d057806003193601126103d05760ff19600181600e541617600e55610658612eac565b600e5416600e5580f35b50346103d05760406003193601126103d05761067c612712565b6040610686612728565b926001600160a01b03809316815260126020522091165f52602052602060405f2054604051908152f35b50346103d057806003193601126103d057602060405173ba6489efb076194eb5551a0799d70648e01499528152f35b50346103d057806003193601126103d0576020604051428152f35b50346103d05760206003193601126103d0576004356001600160a01b0382541633036104a057612710811161072f5760055580f35b60046040517fa1ba07ee000000000000000000000000000000000000000000000000000000008152fd5b50346103d057806003193601126103d05760206040516127108152f35b50346103d057806003193601126103d057602060ff600e5460101c166040519015158152f35b50346103d057806003193601126103d057602060405162093a808152f35b50346103d057806003193601126103d0576020600454604051908152f35b50346103d05760206003193601126103d05760406020916004358152601783522054604051908152f35b50346103d05760206003193601126103d05760ff60406020926001600160a01b0361082b612712565b168152601184522054166040519015158152f35b50346103d05760206003193601126103d057610859612712565b6001600160a01b03908183541633036104a0571673ffffffffffffffffffffffffffffffffffffffff19600b541617600b5580f35b50346103d057806003193601126103d0576020600554604051908152f35b50346103d057806003193601126103d057602060ff600e5460181c166040519015158152f35b50346103d05760206003193601126103d0576108ec612712565b6001600160a01b03908183541633036104a05716815260116020526040812060ff19815416905580f35b50346103d057806003193601126103d0576020610932426130f8565b604051908152f35b50346103d05760406003193601126103d0576020610627610959612712565b602435903361285a565b50346103d057806003193601126103d05760206001600160a01b0360065416604051908152f35b50346103d057602080600319360112610b955760043590333203610b6b57811561072f576c25dd85d670d35ec9bec000000082027fffffffffffffffffffffffffffffffffffffffda227a298f2ca136414000000083820401610b57576109f2903033612b88565b506109fc426130f8565b90818452601481526040842054845b848110610a5a5750507f02567b2553aeb44e4ddd5d68462774dc3de158cb0f2c2da1740e729b22086aff908285526014815260408520610a4c8582546128f9565b90556040519384523393a380f35b610a6481836128f9565b610ae8604051610a7381612639565b338152858101898152878a52601387526040808b20858c5288528a209151825491517fffffffffffffffffffffff0000000000000000000000000000000000000000009092166001600160a01b03919091161790151560a01b74ff000000000000000000000000000000000000000016179055565b8487526016845260408720335f52845260405f2080549068010000000000000000821015610b435781610b25916001610b3e9695940181556127bf565b5f19829392549160031b92831b921b191617905561281b565b610a0b565b602489634e487b7160e01b81526041600452fd5b602484634e487b7160e01b81526011600452fd5b60046040517ff41879df000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b50346103d05760406003193601126103d057610bb3612712565b604060243592338152602093601285526001600160a01b03838320941693845f528552825f20548110155f14610c3f575033815260128452818120835f52845280825f20555b3381526012845220815f52825260405f20546040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925833392a360405160018152f35b33825260128552828220845f528552610c5c835f209182546127b2565b9055610bf9565b50346103d057806003193601126103d0576020600c54604051908152f35b50346103d057806003193601126103d05760206040516d0f8e6406ebd3c1dbfa5bbc0000008152f35b50346103d05760406003193601126103d0576004356001600160a01b03808216809203610db457600b541633036105b6577f000000000000000000000000000000000000000000000000000000000000000063018b82008101809111610da0574210610578576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024803590820152906020908290604490829086905af18015610d9557610d61575080f35b6020813d8211610d8d575b81610d796020938361268d565b81010312610b955751801515036103d05780f35b3d9150610d6c565b6040513d84823e3d90fd5b602483634e487b7160e01b81526011600452fd5b8280fd5b50346103d057806003193601126103d057610e0e604051610dd881612639565b600581527f6c6d656f770000000000000000000000000000000000000000000000000000006020820152604051918291826126cc565b0390f35b50346103d057806003193601126103d05760206001600160a01b03600b5416604051908152f35b50346103d057806003193601126103d0576001600160a01b036020915416604051908152f35b50346103d05760408091610e723661273e565b9082526013602052828220908252602052205460ff8251916001600160a01b038116835260a01c1615156020820152f35b50346103d057602080600319360112610b9557600435808352601482526040832054610ece816127e8565b91610edc604051938461268d565b818352601f19610eeb836127e8565b01855b818110610fd7575050845b828110610f68575050506040519180830190808452825180925280604085019301945b828110610f295784840385f35b85518051855280830151858401526040808201516001600160a01b03169086015260609081015115159085015294810194608090930192600101610f1c565b610fcf90828795975260138652604085208186528652604085205460ff60405191610f9283612655565b85835283898401526001600160a01b038116604084015260a01c1615156060820152610fbe8289612846565b52610fc98188612846565b5061281b565b949294610ef9565b8590604097959751610fe881612655565b868152868382015286604082015286606082015282828a01015201959395610eee565b50346103d05760206003193601126103d057611025612712565b6001600160a01b03908183541633036104a0571673ffffffffffffffffffffffffffffffffffffffff19600654161760065580f35b50346103d05760206003193601126103d05760408091600435815260156020522060ff6002600183015492015416825191825215156020820152f35b50346103d05760206003193601126103d05760ff60406020926001600160a01b036110bf612712565b168152600f84522054166040519015158152f35b50346103d057806003193601126103d05760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103d05760406003193601126103d05761057561112b612712565b6024359061113a823383612cc6565b612c2b565b50346103d057806003193601126103d0576001600160a01b038082541633036104a0575f90815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346103d05760406003193601126103d05760043567ffffffffffffffff8111610b955736602382011215610b955780600401356111e5816127e8565b916111f3604051938461268d565b81835260209160248385019160051b830101913683116112a857602401905b82821061128957505050602435908115158203611285576001600160a01b038085541633036104a057845b845181101561128157808261125561127c9388612846565b51168752600f845261127785604089209060ff60ff1983541691151516179055565b61281b565b61123d565b8580f35b5f80fd5b81356001600160a01b0381168103611285578152908301908301611212565b8580fd5b50346103d05760206003193601126103d05760406020916001600160a01b036112d3612712565b168152601083522054604051908152f35b50346103d057806003193601126103d0576020600354604051908152f35b50346103d05760606003193601126103d05761131c612728565b9060443591600435825260166020526001600160a01b036040832091165f5260205260405f209081548310156103d057602061135884846127bf565b90546040519160031b1c8152f35b50346103d057806003193601126103d05760ff19600181600e541617600e55610658612dd2565b50346103d05760406003193601126103d0576113a7612728565b6004358252602090601682526001600160a01b036040842091165f52815260405f2060405192838383549182815201908193835284832090835b81811061143557505050846113f791038561268d565b60405193838594850191818652518092526040850193925b82811061141e57505050500390f35b83518552869550938101939281019260010161140f565b8254845292860192600192830192016113e1565b61278a565b50346103d057602080600319360112610b95576004359161146e426130f8565b8310156116db5761147e426130f8565b908381526016835260408120335f52835260405f20604051808286829454938481520190855286852092855b888282106116c5575050506114c19250038261268d565b80511561169b578482526015845260ff93846002604085200154161561057857825b82518110156115715786845260138252604084206115018285612846565b51855282526040842090815491336001600160a01b0384160361057857878360a01c1661057857740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff61156c941617905561281b565b6114e3565b509350938451906040519182527f04a4cf4c467491198265a0003e5875c0772cef48f1813c5dba7b12da38bd5948853393a3818152601483526040812054815b85518110156116515761164c906112776040516115cd81612639565b33815287810186815287875260138952604087206115eb85886128f9565b88528952604087209151825491517fffffffffffffffffffffff0000000000000000000000000000000000000000009092166001600160a01b03919091161790151560a01b74ff000000000000000000000000000000000000000016179055565b6115b1565b50936116817f02567b2553aeb44e4ddd5d68462774dc3de158cb0f2c2da1740e729b22086aff92958251906128f9565b83865260148552604086205551926040519384523393a380f35b60046040517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b85548452600195860195879550930192016114aa565b60046040517f6f7eac26000000000000000000000000000000000000000000000000000000008152fd5b50346103d057602090816003193601126103d05760043590333203610b6b5761172d426130f8565b8210156116db578181526016835260408120335f52835260405f20604051808286829454938481520190855286852092855b8882821061189b575050506117769250038261268d565b80511561169b578282526015845260ff93846002604085200154161561057857825b82518110156118265784845260138252604084206117b68285612846565b51855282526040842090815491336001600160a01b0384160361057857878360a01c1661057857740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff611821941617905561281b565b611798565b5091929080516c25dd85d670d35ec9bec00000009081810291818304149015171561188757906118787f04a4cf4c467491198265a0003e5875c0772cef48f1813c5dba7b12da38bd5948923330612b88565b5051926040519384523393a380f35b602485634e487b7160e01b81526011600452fd5b855484526001958601958795509301920161175f565b50346103d05760206003193601126103d057333203610b6b576118d3426130f8565b60043510156116db576004358152601660205260408120335f5260205260405f20541561057857600435815260156020526040812060ff60028201541661057857600435825260146020526040822054801561169b576004358352601760205260408320548015611d755760018301819055839160038111611b3e579350809291929383915b818310611a04575050509080808094602060405161197681612671565b838152019073ba6489efb076194eb5551a0799d70648e01499525af1503d156119ff573d6119a3816126b0565b906119b1604051928361268d565b81528260203d92013e5b600201805460ff191660011790556040805133815260043560208201527fd7c7d8ef5518b88460c4eb9fb678cf023cdc50cb2fd9fea0736e18860b717d0f9190a180f35b6119bb565b611a2c604051611a138161261d565b84815260038304602082015260016040820152856131f0565b60043585526013602052604085208386526020526001600160a01b03604086205416958615610476578580806020604051611a6681612671565b82815201600386048b5af13d15611b39573d611a81816126b0565b90611a8f604051928361268d565b81528760203d92013e5b15611af657611ae5611aeb9187986040989798516003860481527f856af197d834c3fc3bb132a02f7e7e760a2ecd78ecc62fc02c35de22c99c5278602060043592a360038404906127b2565b9361281b565b929550939293611959565b6040517f6a6feaff0000000000000000000000000000000000000000000000000000000081526001600160a01b0388166004820152600383046024820152604490fd5b611a99565b9150604051611b4c81612655565b600381526060366020830137845b60038110611b6b57505050506119bb565b80611cd7575f198401848111611cc357611b849061312a565b600d611b918282546128f9565b905580611b9e8385612846565b525b611bc8604051611baf8161261d565b82815260038604602082015260016040820152876131f0565b60043587526013602052604087209087526020526001600160a01b036040872054168015610476578680806020604051611c0181612671565b8281520160038804855af13d15611cbe573d611c1c816126b0565b90611c2a604051928361268d565b81528860203d92013e5b15611c795790611c74916040516003860481527f856af197d834c3fc3bb132a02f7e7e760a2ecd78ecc62fc02c35de22c99c5278602060043592a361281b565b611b5a565b6040517f6a6feaff0000000000000000000000000000000000000000000000000000000081526001600160a01b03919091166004820152600384046024820152604490fd5b611c34565b602487634e487b7160e01b81526011600452fd5b9293905b845f19810111611d6157611cf15f19860161312a565b91600d611cff8482546128f9565b90558695875b8351811015611d575784611d198286612846565b5114611d2d57611d289061281b565b611d05565b50919290955060015b15611d4357509390611cdb565b80611d518685979497612846565b52611ba0565b5091929095611d36565b602486634e487b7160e01b81526011600452fd5b60046040517f669567ea000000000000000000000000000000000000000000000000000000008152fd5b50806003193601126103d0576001600160a01b038082541633036104a05760ff600160ff19600e54161780600e5560181c1661057857670de0b6b3a764000090813403610578576060906007541660c4604051809481937ff305d7190000000000000000000000000000000000000000000000000000000083523060048401526d0f8e6406ebd3c1dbfa5bbc00000060248401525f60448401525f60648401523360848401524260a48401525af18015610d9557611e8a575b5063010000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00600e541617600e5580f35b611eaa9060603d8111611eb1575b611ea2818361268d565b810190612800565b5050611e58565b503d611e98565b50346103d057806003193601126103d0576020600254604051908152f35b50346103d05760206003193601126103d057611ef0612754565b6001600160a01b0382541633036104a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff62ff0000600e5492151560101b16911617600e5580f35b50346103d057806003193601126103d05760206040517350e943a5e3c4078211a7e0226fc1e0f648b867af8152f35b50346103d05760206003193601126103d057611f82612712565b6001600160a01b03908183541633036104a057168152601160205260408120600160ff1982541617905580f35b50346103d05760206003193601126103d05761057560043533612c2b565b50346103d057806003193601126103d05760206040516d01097e2298415130cc6c840000008152f35b50346103d05760206003193601126103d0576020612012612712565b31604051908152f35b50346103d057806003193601126103d0576020604051735d98206e4a3e3b87e6d899a47f33deb579105b968152f35b50346103d057806003193601126103d05760206001600160a01b03600a5416604051908152f35b50346103d057602080600319360112610b955760043567ffffffffffffffff9182821161219557366023830112156121955781600401359283116121955760059260243682861b85018201116112a8578186916120ce87946127e8565b956120dc604051978861268d565b8287526120e8836127e8565b94601f198789019601368737845b84811061214257505050505060405193838594850191818652518092526040850193925b82811061212957505050500390f35b835115158552869550938101939281019260010161211a565b8381839a9899979a1b84010135906001600160a01b03821680920361219157612187918a52600f875260ff60408b20541661217d828a612846565b901515905261281b565b97949695976120f6565b8980fd5b8380fd5b50346103d05760206003193601126103d05760406020916004358152601483522054604051908152f35b50346103d05760206003193601126103d05760206109326004356130f8565b50346103d05760406003193601126103d0576121fc612712565b3382526040602092601284526001600160a01b03828220931692835f528452815f2061222b60243582546128f9565b90553381526012845220815f52825260405f20546040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925833392a360405160018152f35b50346103d057806003193601126103d05760206040516d14bddab3e51a57cff87a500000008152f35b50346103d057806003193601126103d057602060405160128152f35b50346103d057806003193601126103d05760206001600160a01b0360095416604051908152f35b50346103d05760406003193601126103d0576004356001600160a01b03808216809203610db457600b541633036105b6577f000000000000000000000000000000000000000000000000000000000000000063018b82008101809111610da0574210610578578082913b1561239c5781906024604051809481937f0ca35682000000000000000000000000000000000000000000000000000000008352833560048401525af18015610d9557612393575080f35b610575906125f5565b50fd5b50346103d05760206003193601126103d0576004356001600160a01b0382541633036104a057612710811161072f5760025580f35b50346103d05760606003193601126103d05760206106276123f3612712565b6123fb612728565b6044359161240a833383612cc6565b61285a565b50346103d057806003193601126103d057602060405160038152f35b50346103d05760206003193601126103d057612445612754565b6001600160a01b0382541633036104a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff61ff00600e5492151560081b16911617600e5580f35b50346103d057806003193601126103d0576020600154604051908152f35b50346103d0576124ba3661273e565b906001600160a01b0383541633036104a0576103e880821161072f57821161072f5760035560045580f35b50346103d057806003193601126103d05760206040516c25dd85d670d35ec9bec00000008152f35b50346103d057806003193601126103d05760206106276130bf565b50346103d05760406003193601126103d0576040612544612712565b9160243591829133815260126020526001600160a01b0382822095169485825260205220556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b905034610b955781600319360112610b9557806125bf610e0e92612639565b600b81527f4c6d656f7720546f6b656e0000000000000000000000000000000000000000006020820152604051918291826126cc565b67ffffffffffffffff811161260957604052565b634e487b7160e01b5f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761260957604052565b6040810190811067ffffffffffffffff82111761260957604052565b6080810190811067ffffffffffffffff82111761260957604052565b6020810190811067ffffffffffffffff82111761260957604052565b90601f601f19910116810190811067ffffffffffffffff82111761260957604052565b67ffffffffffffffff811161260957601f01601f191660200190565b6020808252825181830181905293925f5b8581106126fe57505050601f19601f845f6040809697860101520116010190565b8181018301518482016040015282016126dd565b600435906001600160a01b038216820361128557565b602435906001600160a01b038216820361128557565b6003196040910112611285576004359060243590565b60043590811515820361128557565b8181029291811591840414171561277657565b634e487b7160e01b5f52601160045260245ffd5b34611285575f6003193601126112855760206040516d0212fc453082a26198d9080000008152f35b9190820391821161277657565b80548210156127d4575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b67ffffffffffffffff81116126095760051b60200190565b90816060910312611285578051916040602083015192015190565b5f1981146127765760010190565b8051156127d45760200190565b8051600110156127d45760400190565b80518210156127d45760209160051b010190565b9291906001600160a01b03811693841561047657845f52601160205260ff60405f20541615612892575b61288f939450612906565b90565b60106020526128a58360405f20546128f9565b600254906b87eea943b6f2460a75000000918083029283040361277657111561288457602485604051907f7fdd11cf0000000000000000000000000000000000000000000000000000000082526004820152fd5b9190820180921161277657565b91906001600160a01b0392838116935f94808652602095600f875260409660ff8883205416612b585783861693848352600f825260ff8984205416612b2857600e805460ff811615612963575050505050505061288f9350612b88565b916129bc979995939161288f9b959361297a613068565b612b0a575b506129886130bf565b612aeb575b5082968160065416908186145f14612ac057505060035480612aa9575b505b866129c2575b50505050506127b2565b91612b88565b838352601082528483206129d78882546127b2565b90556129e96005546127108904612763565b906129f482896127b2565b9180612a59575b5081612a08575b506129b2565b857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef94826008541681526010855220612a428382546128f9565b9055600854169451908152a35f8080808080612a02565b8160095416855260108452868520612a728282546128f9565b9055857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef858460095416938a51908152a35f6129fb565b612ab99197506127108704612763565b955f6129aa565b036129ac5760045480612ad4575b506129ac565b612ae49197506127108704612763565b955f612ace565b60ff19600181835416178255612aff612dd2565b81541690555f61298d565b600160ff19809216178255612b1d612eac565b81541681555f61297f565b6024858a51907f78be06d00000000000000000000000000000000000000000000000000000000082526004820152fd5b6024838951907f78be06d00000000000000000000000000000000000000000000000000000000082526004820152fd5b90916001600160a01b03809216915f9383855260106020526040852054838110612bfa5760209284927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef95604093888a52601087520383892055169586815220818154019055604051908152a3600190565b602485604051907fdd5f35400000000000000000000000000000000000000000000000000000000082526004820152fd5b6001600160a01b031690811561047657815f52601060205260405f2054818110612c955760208284937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef935f968752601084520360408620558060015403600155604051908152a3565b602483604051907fdd5f35400000000000000000000000000000000000000000000000000000000082526004820152fd5b91906001600160a01b03809316905f938285526012602052604085209116908185526020526040842054915f198303612d01575b5050505050565b838310612d2c5790604093929185526012602052838520908552602052039120555f80808080612cfa565b83606492604051927fec153786000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b91909493929460a083019083526020905f8285015260a0604085015282518091528160c085019301915f5b828110612db55750505050906001600160a01b03608092951660608201520152565b83516001600160a01b031685529381019392810192600101612d93565b6001600160a01b039081600854165f908082526010602052604082205469021e19e0c9bab24000008110612ea55760405194612e0d8661261d565b60028652604036602088013730612e2387612829565b52600a5416612e3186612836565b52813b15610db457938291612e7b9495836040518097819582947f791ac9470000000000000000000000000000000000000000000000000000000084524291309160048601612d68565b03925af1908115612e995750612e8e5750565b612e97906125f5565b565b604051903d90823e3d90fd5b5050509050565b600954905f916001600160a01b0380911690818452601060205260408085205491612edb8360011c80946127b2565b9368056bc75e2d63100000851061305f57868351612ef88161261d565b600281528436602083013730612f0d82612829565b5283600a5416612f1c82612836565b52823b15610b955782612f63938389938851968795869485937f791ac947000000000000000000000000000000000000000000000000000000008552429260048601612d68565b03925af1801561305557613042575b50600954169182319080151580613039575b612fa1575b50505050612f9c91925042600c5561312a565b600d55565b9060c460609288855196879485937ff305d71900000000000000000000000000000000000000000000000000000000855230600486015260248501525f60448501525f606485015230608485015260a48401525af19081156130305750612f9c939450613012575b83928180612f89565b6130299060603d8111611eb157611ea2818361268d565b5050613009565b513d86823e3d90fd5b50811515612f84565b61304e909691966125f5565b945f612f72565b83513d89823e3d90fd5b50505050509050565b600e5460ff8160081c1690816130b3575b508061309e575b806130885790565b50600c54611c2081018091116127765742101590565b506001600160a01b0360065416331415613080565b60ff915016155f613079565b600e5460ff8160101c1690816130ec575b50806130d95790565b506001600160a01b036006541633141590565b60ff915016155f6130d0565b7f000000000000000000000000000000000000000000000000000000000000000080821061072f5762093a8091030490565b6001810180911161277657600654600d54905f194301438111612776575a90604051937fffffffffffffffffffffffffffffffffffffffff000000000000000000000000602086019460601b168452603485015244605485015242607485015240609484015260b483015260b4825260e082019082821067ffffffffffffffff831117612609576101009082604052835190209201918252602081526131cf81612639565b51902081156131dc570690565b634e487b7160e01b5f52601260045260245ffd5b9081546801000000000000000081101561260957600181018084558110156127d4576040600291612e97945f52600360205f209102019280518455602081015160018501550151151591019060ff60ff198354169115151617905556fea26469706673582212201e933855cef33d1cdfccd958c7453bb1e86e6f40d16a80d31e188e0c4600566464736f6c6343000815003360a0346100b157601f6106f138819003918201601f19168301916001600160401b038311848410176100b5578084926020946040528339810103126100b157516001600160a01b039081811681036100b1575f543360018060a01b03198216175f55604051923391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a360805261062790816100ca8239608051818181604f0152818161016c015261023d0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604090808252600490813610156100f6575b5036156100f45773ffffffffffffffffffffffffffffffffffffffff805f541633036100dd575f809184513683823780368101848152039134907f0000000000000000000000000000000000000000000000000000000000000000165af16100796105b2565b501561008157005b602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601460248201527f666f727761726420726f75746572206661696c640000000000000000000000006044820152fd5b50602491519063102921b160e21b82523390820152fd5b005b5f90813560e01c9081630ca356821461049157508063715018a6146103f75780638da5cb5b146103c4578063f2fde38b146102f1578063f305d719146101945763f887ea40036100135782346101905781600319360112610190576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b5091346102c25760c06003193601126102c2576101af61053b565b6084359073ffffffffffffffffffffffffffffffffffffffff918281168091036102ed578286541633036102d757829160609360c492865197889586947ff305d719000000000000000000000000000000000000000000000000000000008652169084015260243560248401526044356044840152606435606484015260848301524260a483015260a435907f0000000000000000000000000000000000000000000000000000000000000000165af19081156102ce57839284908593610285575b506060945081519384526020840152820152f35b93505090506060823d82116102c6575b816102a260609383610562565b810103126102c2576060925081519080602084015193015191925f610271565b8280fd5b3d9150610295565b513d84823e3d90fd5b835163102921b160e21b81523381870152602490fd5b8580fd5b509190346102c25760206003193601126102c25761030d61053b565b9083549073ffffffffffffffffffffffffffffffffffffffff808316933385036103ae57169384156103885750507fffffffffffffffffffffffff000000000000000000000000000000000000000016821783557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b517fd92e233d000000000000000000000000000000000000000000000000000000008152fd5b855163102921b160e21b81523381850152602490fd5b50823461019057816003193601126101905773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b50823461019057816003193601126101905781549273ffffffffffffffffffffffffffffffffffffffff84169133830361047a5750507fffffffffffffffffffffffff000000000000000000000000000000000000000082931682557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b60249250519063102921b160e21b82523390820152fd5b849150346102c25760206003193601126102c25773ffffffffffffffffffffffffffffffffffffffff83541633036105275750805190602082019082821067ffffffffffffffff8311176104fb57839484809481948294525235335af1506104f76105b2565b5080f35b6024846041877f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b63102921b160e21b81523384820152602490fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361055e57565b5f80fd5b90601f601f19910116810190811067ffffffffffffffff82111761058557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b3d156105ec573d9067ffffffffffffffff821161058557604051916105e16020601f19601f8401160184610562565b82523d5f602084013e565b60609056fea2646970667358221220f9e710fb355cb11e43a8385cf0a67d431bc414284315b4367fc4b3c08221a1bf64736f6c634300081500330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x608080604052600436101561003d575b50361561001a575f80fd5b610023426130f8565b5f52601760205260405f206100393482546128f9565b9055005b5f90813560e01c90816306fdde03146125a057508063095ea7b3146125285780630d5c6cea1461250d5780631209b1f6146124e5578063142b64f2146124ab57806318160ddd1461248d57806318dd842a1461242b5780631d5274071461240f57806323b872dd146123d45780632c5d59b21461239f5780632cfac6ec146114495780632e67085d146122df5780632f867367146122b8578063313ce5671461229c578063378dc3dc1461227357806339509351146121e25780633bfbbca1146121c35780633c632853146121995780633eb2368d146120715780633fc8cef31461204a5780633ff42b921461201b57806340654e1414611ff657806341c66d0a14611fcd57806342966c6814611faf57806349d62d1414611f685780634a5ff74914611f395780634bc6dd1814611ed65780634bffbd7714611eb8578063572eeb2814611d9f5780635c0bf939146118b15780635d3eea91146117055780636049dfbc1461144e578063624bb58f146114495780636985a4f61461138d5780636ac5eeee146113665780636cbacfb1146113025780636e4a2f01146112e457806370a08231146112ac57806370c156f8146111a8578063715018a61461113f57806379cc67901461110e5780637a40624b146110d35780637c0929fb146110965780637fdeaa9d1461105a5780638187f5161461100b5780638393415014610ea35780638872699614610e5f5780638da5cb5b14610e39578063943c04ed14610e1257806395d89b4114610db85780639639011e14610caa5780639b287e8714610c815780639d12ec0114610c63578063a457c2d714610b99578063a694fc3a1461098a578063a8aa1b3114610963578063a9059cbb1461093a578063aaacdda014610916578063aab1b82d146108d2578063ac582f07146108ac578063ac8231c71461088e578063b283cd2d1461083f578063b77c5e5114610802578063bc6b5631146107d8578063c5a59ceb146107ba578063cd421fbf1461079c578063cd5d179914610776578063ce1aad2314610759578063d37b0868146106fa578063d7a9ea8d146106df578063da09c72c146106b0578063dd62ed3e14610662578063e8078d9414610631578063ee0c53c41461060c578063efd462bb146105e6578063f1b2a53d146104d0578063f2fde38b146103fa578063f887ea40146103d35763fbfa77cf0361000f57346103d057806003193601126103d05760206001600160a01b0360085416604051908152f35b80fd5b50346103d057806003193601126103d05760206001600160a01b0360075416604051908152f35b50346103d05760206003193601126103d057610414612712565b6001600160a01b03908183541633036104a0578116908115610476575f548273ffffffffffffffffffffffffffffffffffffffff198216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a380f35b60046040517fd92e233d000000000000000000000000000000000000000000000000000000008152fd5b60246040517f40a486c4000000000000000000000000000000000000000000000000000000008152336004820152fd5b50346103d05760206003193601126103d0576001600160a01b03600b541633036105b6577f0000000000000000000000000000000000000000000000000000000064d0f69363018b820081018091116105a257421061057857331561047657808080602060405161054081612671565b82815201600435335af1503d15610575573d61055b816126b0565b90610569604051928361268d565b81528160203d92013e80f35b80f35b60046040517f1d5d2c99000000000000000000000000000000000000000000000000000000008152fd5b602482634e487b7160e01b81526011600452fd5b60246040517f8e4c8aa6000000000000000000000000000000000000000000000000000000008152336004820152fd5b50346103d057806003193601126103d057602060ff600e5460081c166040519015158152f35b50346103d057806003193601126103d0576020610627613068565b6040519015158152f35b50346103d057806003193601126103d05760ff19600181600e541617600e55610658612eac565b600e5416600e5580f35b50346103d05760406003193601126103d05761067c612712565b6040610686612728565b926001600160a01b03809316815260126020522091165f52602052602060405f2054604051908152f35b50346103d057806003193601126103d057602060405173ba6489efb076194eb5551a0799d70648e01499528152f35b50346103d057806003193601126103d0576020604051428152f35b50346103d05760206003193601126103d0576004356001600160a01b0382541633036104a057612710811161072f5760055580f35b60046040517fa1ba07ee000000000000000000000000000000000000000000000000000000008152fd5b50346103d057806003193601126103d05760206040516127108152f35b50346103d057806003193601126103d057602060ff600e5460101c166040519015158152f35b50346103d057806003193601126103d057602060405162093a808152f35b50346103d057806003193601126103d0576020600454604051908152f35b50346103d05760206003193601126103d05760406020916004358152601783522054604051908152f35b50346103d05760206003193601126103d05760ff60406020926001600160a01b0361082b612712565b168152601184522054166040519015158152f35b50346103d05760206003193601126103d057610859612712565b6001600160a01b03908183541633036104a0571673ffffffffffffffffffffffffffffffffffffffff19600b541617600b5580f35b50346103d057806003193601126103d0576020600554604051908152f35b50346103d057806003193601126103d057602060ff600e5460181c166040519015158152f35b50346103d05760206003193601126103d0576108ec612712565b6001600160a01b03908183541633036104a05716815260116020526040812060ff19815416905580f35b50346103d057806003193601126103d0576020610932426130f8565b604051908152f35b50346103d05760406003193601126103d0576020610627610959612712565b602435903361285a565b50346103d057806003193601126103d05760206001600160a01b0360065416604051908152f35b50346103d057602080600319360112610b955760043590333203610b6b57811561072f576c25dd85d670d35ec9bec000000082027fffffffffffffffffffffffffffffffffffffffda227a298f2ca136414000000083820401610b57576109f2903033612b88565b506109fc426130f8565b90818452601481526040842054845b848110610a5a5750507f02567b2553aeb44e4ddd5d68462774dc3de158cb0f2c2da1740e729b22086aff908285526014815260408520610a4c8582546128f9565b90556040519384523393a380f35b610a6481836128f9565b610ae8604051610a7381612639565b338152858101898152878a52601387526040808b20858c5288528a209151825491517fffffffffffffffffffffff0000000000000000000000000000000000000000009092166001600160a01b03919091161790151560a01b74ff000000000000000000000000000000000000000016179055565b8487526016845260408720335f52845260405f2080549068010000000000000000821015610b435781610b25916001610b3e9695940181556127bf565b5f19829392549160031b92831b921b191617905561281b565b610a0b565b602489634e487b7160e01b81526041600452fd5b602484634e487b7160e01b81526011600452fd5b60046040517ff41879df000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b50346103d05760406003193601126103d057610bb3612712565b604060243592338152602093601285526001600160a01b03838320941693845f528552825f20548110155f14610c3f575033815260128452818120835f52845280825f20555b3381526012845220815f52825260405f20546040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925833392a360405160018152f35b33825260128552828220845f528552610c5c835f209182546127b2565b9055610bf9565b50346103d057806003193601126103d0576020600c54604051908152f35b50346103d057806003193601126103d05760206040516d0f8e6406ebd3c1dbfa5bbc0000008152f35b50346103d05760406003193601126103d0576004356001600160a01b03808216809203610db457600b541633036105b6577f0000000000000000000000000000000000000000000000000000000064d0f69363018b82008101809111610da0574210610578576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024803590820152906020908290604490829086905af18015610d9557610d61575080f35b6020813d8211610d8d575b81610d796020938361268d565b81010312610b955751801515036103d05780f35b3d9150610d6c565b6040513d84823e3d90fd5b602483634e487b7160e01b81526011600452fd5b8280fd5b50346103d057806003193601126103d057610e0e604051610dd881612639565b600581527f6c6d656f770000000000000000000000000000000000000000000000000000006020820152604051918291826126cc565b0390f35b50346103d057806003193601126103d05760206001600160a01b03600b5416604051908152f35b50346103d057806003193601126103d0576001600160a01b036020915416604051908152f35b50346103d05760408091610e723661273e565b9082526013602052828220908252602052205460ff8251916001600160a01b038116835260a01c1615156020820152f35b50346103d057602080600319360112610b9557600435808352601482526040832054610ece816127e8565b91610edc604051938461268d565b818352601f19610eeb836127e8565b01855b818110610fd7575050845b828110610f68575050506040519180830190808452825180925280604085019301945b828110610f295784840385f35b85518051855280830151858401526040808201516001600160a01b03169086015260609081015115159085015294810194608090930192600101610f1c565b610fcf90828795975260138652604085208186528652604085205460ff60405191610f9283612655565b85835283898401526001600160a01b038116604084015260a01c1615156060820152610fbe8289612846565b52610fc98188612846565b5061281b565b949294610ef9565b8590604097959751610fe881612655565b868152868382015286604082015286606082015282828a01015201959395610eee565b50346103d05760206003193601126103d057611025612712565b6001600160a01b03908183541633036104a0571673ffffffffffffffffffffffffffffffffffffffff19600654161760065580f35b50346103d05760206003193601126103d05760408091600435815260156020522060ff6002600183015492015416825191825215156020820152f35b50346103d05760206003193601126103d05760ff60406020926001600160a01b036110bf612712565b168152600f84522054166040519015158152f35b50346103d057806003193601126103d05760206040517f0000000000000000000000000000000000000000000000000000000064d0f6938152f35b50346103d05760406003193601126103d05761057561112b612712565b6024359061113a823383612cc6565b612c2b565b50346103d057806003193601126103d0576001600160a01b038082541633036104a0575f90815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346103d05760406003193601126103d05760043567ffffffffffffffff8111610b955736602382011215610b955780600401356111e5816127e8565b916111f3604051938461268d565b81835260209160248385019160051b830101913683116112a857602401905b82821061128957505050602435908115158203611285576001600160a01b038085541633036104a057845b845181101561128157808261125561127c9388612846565b51168752600f845261127785604089209060ff60ff1983541691151516179055565b61281b565b61123d565b8580f35b5f80fd5b81356001600160a01b0381168103611285578152908301908301611212565b8580fd5b50346103d05760206003193601126103d05760406020916001600160a01b036112d3612712565b168152601083522054604051908152f35b50346103d057806003193601126103d0576020600354604051908152f35b50346103d05760606003193601126103d05761131c612728565b9060443591600435825260166020526001600160a01b036040832091165f5260205260405f209081548310156103d057602061135884846127bf565b90546040519160031b1c8152f35b50346103d057806003193601126103d05760ff19600181600e541617600e55610658612dd2565b50346103d05760406003193601126103d0576113a7612728565b6004358252602090601682526001600160a01b036040842091165f52815260405f2060405192838383549182815201908193835284832090835b81811061143557505050846113f791038561268d565b60405193838594850191818652518092526040850193925b82811061141e57505050500390f35b83518552869550938101939281019260010161140f565b8254845292860192600192830192016113e1565b61278a565b50346103d057602080600319360112610b95576004359161146e426130f8565b8310156116db5761147e426130f8565b908381526016835260408120335f52835260405f20604051808286829454938481520190855286852092855b888282106116c5575050506114c19250038261268d565b80511561169b578482526015845260ff93846002604085200154161561057857825b82518110156115715786845260138252604084206115018285612846565b51855282526040842090815491336001600160a01b0384160361057857878360a01c1661057857740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff61156c941617905561281b565b6114e3565b509350938451906040519182527f04a4cf4c467491198265a0003e5875c0772cef48f1813c5dba7b12da38bd5948853393a3818152601483526040812054815b85518110156116515761164c906112776040516115cd81612639565b33815287810186815287875260138952604087206115eb85886128f9565b88528952604087209151825491517fffffffffffffffffffffff0000000000000000000000000000000000000000009092166001600160a01b03919091161790151560a01b74ff000000000000000000000000000000000000000016179055565b6115b1565b50936116817f02567b2553aeb44e4ddd5d68462774dc3de158cb0f2c2da1740e729b22086aff92958251906128f9565b83865260148552604086205551926040519384523393a380f35b60046040517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b85548452600195860195879550930192016114aa565b60046040517f6f7eac26000000000000000000000000000000000000000000000000000000008152fd5b50346103d057602090816003193601126103d05760043590333203610b6b5761172d426130f8565b8210156116db578181526016835260408120335f52835260405f20604051808286829454938481520190855286852092855b8882821061189b575050506117769250038261268d565b80511561169b578282526015845260ff93846002604085200154161561057857825b82518110156118265784845260138252604084206117b68285612846565b51855282526040842090815491336001600160a01b0384160361057857878360a01c1661057857740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff611821941617905561281b565b611798565b5091929080516c25dd85d670d35ec9bec00000009081810291818304149015171561188757906118787f04a4cf4c467491198265a0003e5875c0772cef48f1813c5dba7b12da38bd5948923330612b88565b5051926040519384523393a380f35b602485634e487b7160e01b81526011600452fd5b855484526001958601958795509301920161175f565b50346103d05760206003193601126103d057333203610b6b576118d3426130f8565b60043510156116db576004358152601660205260408120335f5260205260405f20541561057857600435815260156020526040812060ff60028201541661057857600435825260146020526040822054801561169b576004358352601760205260408320548015611d755760018301819055839160038111611b3e579350809291929383915b818310611a04575050509080808094602060405161197681612671565b838152019073ba6489efb076194eb5551a0799d70648e01499525af1503d156119ff573d6119a3816126b0565b906119b1604051928361268d565b81528260203d92013e5b600201805460ff191660011790556040805133815260043560208201527fd7c7d8ef5518b88460c4eb9fb678cf023cdc50cb2fd9fea0736e18860b717d0f9190a180f35b6119bb565b611a2c604051611a138161261d565b84815260038304602082015260016040820152856131f0565b60043585526013602052604085208386526020526001600160a01b03604086205416958615610476578580806020604051611a6681612671565b82815201600386048b5af13d15611b39573d611a81816126b0565b90611a8f604051928361268d565b81528760203d92013e5b15611af657611ae5611aeb9187986040989798516003860481527f856af197d834c3fc3bb132a02f7e7e760a2ecd78ecc62fc02c35de22c99c5278602060043592a360038404906127b2565b9361281b565b929550939293611959565b6040517f6a6feaff0000000000000000000000000000000000000000000000000000000081526001600160a01b0388166004820152600383046024820152604490fd5b611a99565b9150604051611b4c81612655565b600381526060366020830137845b60038110611b6b57505050506119bb565b80611cd7575f198401848111611cc357611b849061312a565b600d611b918282546128f9565b905580611b9e8385612846565b525b611bc8604051611baf8161261d565b82815260038604602082015260016040820152876131f0565b60043587526013602052604087209087526020526001600160a01b036040872054168015610476578680806020604051611c0181612671565b8281520160038804855af13d15611cbe573d611c1c816126b0565b90611c2a604051928361268d565b81528860203d92013e5b15611c795790611c74916040516003860481527f856af197d834c3fc3bb132a02f7e7e760a2ecd78ecc62fc02c35de22c99c5278602060043592a361281b565b611b5a565b6040517f6a6feaff0000000000000000000000000000000000000000000000000000000081526001600160a01b03919091166004820152600384046024820152604490fd5b611c34565b602487634e487b7160e01b81526011600452fd5b9293905b845f19810111611d6157611cf15f19860161312a565b91600d611cff8482546128f9565b90558695875b8351811015611d575784611d198286612846565b5114611d2d57611d289061281b565b611d05565b50919290955060015b15611d4357509390611cdb565b80611d518685979497612846565b52611ba0565b5091929095611d36565b602486634e487b7160e01b81526011600452fd5b60046040517f669567ea000000000000000000000000000000000000000000000000000000008152fd5b50806003193601126103d0576001600160a01b038082541633036104a05760ff600160ff19600e54161780600e5560181c1661057857670de0b6b3a764000090813403610578576060906007541660c4604051809481937ff305d7190000000000000000000000000000000000000000000000000000000083523060048401526d0f8e6406ebd3c1dbfa5bbc00000060248401525f60448401525f60648401523360848401524260a48401525af18015610d9557611e8a575b5063010000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00600e541617600e5580f35b611eaa9060603d8111611eb1575b611ea2818361268d565b810190612800565b5050611e58565b503d611e98565b50346103d057806003193601126103d0576020600254604051908152f35b50346103d05760206003193601126103d057611ef0612754565b6001600160a01b0382541633036104a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff62ff0000600e5492151560101b16911617600e5580f35b50346103d057806003193601126103d05760206040517350e943a5e3c4078211a7e0226fc1e0f648b867af8152f35b50346103d05760206003193601126103d057611f82612712565b6001600160a01b03908183541633036104a057168152601160205260408120600160ff1982541617905580f35b50346103d05760206003193601126103d05761057560043533612c2b565b50346103d057806003193601126103d05760206040516d01097e2298415130cc6c840000008152f35b50346103d05760206003193601126103d0576020612012612712565b31604051908152f35b50346103d057806003193601126103d0576020604051735d98206e4a3e3b87e6d899a47f33deb579105b968152f35b50346103d057806003193601126103d05760206001600160a01b03600a5416604051908152f35b50346103d057602080600319360112610b955760043567ffffffffffffffff9182821161219557366023830112156121955781600401359283116121955760059260243682861b85018201116112a8578186916120ce87946127e8565b956120dc604051978861268d565b8287526120e8836127e8565b94601f198789019601368737845b84811061214257505050505060405193838594850191818652518092526040850193925b82811061212957505050500390f35b835115158552869550938101939281019260010161211a565b8381839a9899979a1b84010135906001600160a01b03821680920361219157612187918a52600f875260ff60408b20541661217d828a612846565b901515905261281b565b97949695976120f6565b8980fd5b8380fd5b50346103d05760206003193601126103d05760406020916004358152601483522054604051908152f35b50346103d05760206003193601126103d05760206109326004356130f8565b50346103d05760406003193601126103d0576121fc612712565b3382526040602092601284526001600160a01b03828220931692835f528452815f2061222b60243582546128f9565b90553381526012845220815f52825260405f20546040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925833392a360405160018152f35b50346103d057806003193601126103d05760206040516d14bddab3e51a57cff87a500000008152f35b50346103d057806003193601126103d057602060405160128152f35b50346103d057806003193601126103d05760206001600160a01b0360095416604051908152f35b50346103d05760406003193601126103d0576004356001600160a01b03808216809203610db457600b541633036105b6577f0000000000000000000000000000000000000000000000000000000064d0f69363018b82008101809111610da0574210610578578082913b1561239c5781906024604051809481937f0ca35682000000000000000000000000000000000000000000000000000000008352833560048401525af18015610d9557612393575080f35b610575906125f5565b50fd5b50346103d05760206003193601126103d0576004356001600160a01b0382541633036104a057612710811161072f5760025580f35b50346103d05760606003193601126103d05760206106276123f3612712565b6123fb612728565b6044359161240a833383612cc6565b61285a565b50346103d057806003193601126103d057602060405160038152f35b50346103d05760206003193601126103d057612445612754565b6001600160a01b0382541633036104a0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff61ff00600e5492151560081b16911617600e5580f35b50346103d057806003193601126103d0576020600154604051908152f35b50346103d0576124ba3661273e565b906001600160a01b0383541633036104a0576103e880821161072f57821161072f5760035560045580f35b50346103d057806003193601126103d05760206040516c25dd85d670d35ec9bec00000008152f35b50346103d057806003193601126103d05760206106276130bf565b50346103d05760406003193601126103d0576040612544612712565b9160243591829133815260126020526001600160a01b0382822095169485825260205220556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b905034610b955781600319360112610b9557806125bf610e0e92612639565b600b81527f4c6d656f7720546f6b656e0000000000000000000000000000000000000000006020820152604051918291826126cc565b67ffffffffffffffff811161260957604052565b634e487b7160e01b5f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761260957604052565b6040810190811067ffffffffffffffff82111761260957604052565b6080810190811067ffffffffffffffff82111761260957604052565b6020810190811067ffffffffffffffff82111761260957604052565b90601f601f19910116810190811067ffffffffffffffff82111761260957604052565b67ffffffffffffffff811161260957601f01601f191660200190565b6020808252825181830181905293925f5b8581106126fe57505050601f19601f845f6040809697860101520116010190565b8181018301518482016040015282016126dd565b600435906001600160a01b038216820361128557565b602435906001600160a01b038216820361128557565b6003196040910112611285576004359060243590565b60043590811515820361128557565b8181029291811591840414171561277657565b634e487b7160e01b5f52601160045260245ffd5b34611285575f6003193601126112855760206040516d0212fc453082a26198d9080000008152f35b9190820391821161277657565b80548210156127d4575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b67ffffffffffffffff81116126095760051b60200190565b90816060910312611285578051916040602083015192015190565b5f1981146127765760010190565b8051156127d45760200190565b8051600110156127d45760400190565b80518210156127d45760209160051b010190565b9291906001600160a01b03811693841561047657845f52601160205260ff60405f20541615612892575b61288f939450612906565b90565b60106020526128a58360405f20546128f9565b600254906b87eea943b6f2460a75000000918083029283040361277657111561288457602485604051907f7fdd11cf0000000000000000000000000000000000000000000000000000000082526004820152fd5b9190820180921161277657565b91906001600160a01b0392838116935f94808652602095600f875260409660ff8883205416612b585783861693848352600f825260ff8984205416612b2857600e805460ff811615612963575050505050505061288f9350612b88565b916129bc979995939161288f9b959361297a613068565b612b0a575b506129886130bf565b612aeb575b5082968160065416908186145f14612ac057505060035480612aa9575b505b866129c2575b50505050506127b2565b91612b88565b838352601082528483206129d78882546127b2565b90556129e96005546127108904612763565b906129f482896127b2565b9180612a59575b5081612a08575b506129b2565b857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef94826008541681526010855220612a428382546128f9565b9055600854169451908152a35f8080808080612a02565b8160095416855260108452868520612a728282546128f9565b9055857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef858460095416938a51908152a35f6129fb565b612ab99197506127108704612763565b955f6129aa565b036129ac5760045480612ad4575b506129ac565b612ae49197506127108704612763565b955f612ace565b60ff19600181835416178255612aff612dd2565b81541690555f61298d565b600160ff19809216178255612b1d612eac565b81541681555f61297f565b6024858a51907f78be06d00000000000000000000000000000000000000000000000000000000082526004820152fd5b6024838951907f78be06d00000000000000000000000000000000000000000000000000000000082526004820152fd5b90916001600160a01b03809216915f9383855260106020526040852054838110612bfa5760209284927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef95604093888a52601087520383892055169586815220818154019055604051908152a3600190565b602485604051907fdd5f35400000000000000000000000000000000000000000000000000000000082526004820152fd5b6001600160a01b031690811561047657815f52601060205260405f2054818110612c955760208284937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef935f968752601084520360408620558060015403600155604051908152a3565b602483604051907fdd5f35400000000000000000000000000000000000000000000000000000000082526004820152fd5b91906001600160a01b03809316905f938285526012602052604085209116908185526020526040842054915f198303612d01575b5050505050565b838310612d2c5790604093929185526012602052838520908552602052039120555f80808080612cfa565b83606492604051927fec153786000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b91909493929460a083019083526020905f8285015260a0604085015282518091528160c085019301915f5b828110612db55750505050906001600160a01b03608092951660608201520152565b83516001600160a01b031685529381019392810192600101612d93565b6001600160a01b039081600854165f908082526010602052604082205469021e19e0c9bab24000008110612ea55760405194612e0d8661261d565b60028652604036602088013730612e2387612829565b52600a5416612e3186612836565b52813b15610db457938291612e7b9495836040518097819582947f791ac9470000000000000000000000000000000000000000000000000000000084524291309160048601612d68565b03925af1908115612e995750612e8e5750565b612e97906125f5565b565b604051903d90823e3d90fd5b5050509050565b600954905f916001600160a01b0380911690818452601060205260408085205491612edb8360011c80946127b2565b9368056bc75e2d63100000851061305f57868351612ef88161261d565b600281528436602083013730612f0d82612829565b5283600a5416612f1c82612836565b52823b15610b955782612f63938389938851968795869485937f791ac947000000000000000000000000000000000000000000000000000000008552429260048601612d68565b03925af1801561305557613042575b50600954169182319080151580613039575b612fa1575b50505050612f9c91925042600c5561312a565b600d55565b9060c460609288855196879485937ff305d71900000000000000000000000000000000000000000000000000000000855230600486015260248501525f60448501525f606485015230608485015260a48401525af19081156130305750612f9c939450613012575b83928180612f89565b6130299060603d8111611eb157611ea2818361268d565b5050613009565b513d86823e3d90fd5b50811515612f84565b61304e909691966125f5565b945f612f72565b83513d89823e3d90fd5b50505050509050565b600e5460ff8160081c1690816130b3575b508061309e575b806130885790565b50600c54611c2081018091116127765742101590565b506001600160a01b0360065416331415613080565b60ff915016155f613079565b600e5460ff8160101c1690816130ec575b50806130d95790565b506001600160a01b036006541633141590565b60ff915016155f6130d0565b7f0000000000000000000000000000000000000000000000000000000064d0f69380821061072f5762093a8091030490565b6001810180911161277657600654600d54905f194301438111612776575a90604051937fffffffffffffffffffffffffffffffffffffffff000000000000000000000000602086019460601b168452603485015244605485015242607485015240609484015260b483015260b4825260e082019082821067ffffffffffffffff831117612609576101009082604052835190209201918252602081526131cf81612639565b51902081156131dc570690565b634e487b7160e01b5f52601260045260245ffd5b9081546801000000000000000081101561260957600181018084558110156127d4576040600291612e97945f52600360205f209102019280518455602081015160018501550151151591019060ff60ff198354169115151617905556fea26469706673582212201e933855cef33d1cdfccd958c7453bb1e86e6f40d16a80d31e188e0c4600566464736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
-----Decoded View---------------
Arg [0] : router_ (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
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.