ERC-20
Overview
Max Total Supply
691,000,000 MNBASE
Holders
18
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Moonbase
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // File: Moonbase.sol /* ___ ___ ___ ___ ___ ___ ___ ___ /\__\ /\ \ /\ \ /\__\ /\ \ /\ \ /\ \ /\ \ /::| | /::\ \ /::\ \ /::| | /::\ \ /::\ \ /::\ \ /::\ \ /:|:| | /:/\:\ \ /:/\:\ \ /:|:| | /:/\:\ \ /:/\:\ \ /:/\ \ \ /:/\:\ \ /:/|:|__|__ /:/ \:\ \ /:/ \:\ \ /:/|:| |__ /::\~\:\__\ /::\~\:\ \ _\:\~\ \ \ /::\~\:\ \ /:/ |::::\__\ /:/__/ \:\__\ /:/__/ \:\__\ /:/ |:| /\__\ /:/\:\ \:|__| /:/\:\ \:\__\ /\ \:\ \ \__\ /:/\:\ \:\__\ \/__/~~/:/ / \:\ \ /:/ / \:\ \ /:/ / \/__|:|/:/ / \:\~\:\/:/ / \/__\:\/:/ / \:\ \:\ \/__/ \:\~\:\ \/__/ /:/ / \:\ /:/ / \:\ /:/ / |:/:/ / \:\ \::/ / \::/ / \:\ \:\__\ \:\ \:\__\ /:/ / \:\/:/ / \:\/:/ / |::/ / \:\/:/ / /:/ / \:\/:/ / \:\ \/__/ /:/ / \::/ / \::/ / /:/ / \::/__/ /:/ / \::/ / \:\__\ \/__/ \/__/ \/__/ \/__/ ~~ \/__/ \/__/ \/__/ */ pragma solidity 0.8.15; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _decimals = 9; } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 9; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } 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); } function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } interface IDividendPayingToken { function dividendOf(address _owner) external view returns(uint256); function withdrawDividend() external; event DividendsDistributed( address indexed from, uint256 weiAmount ); event DividendWithdrawn( address indexed to, uint256 weiAmount ); } interface IDividendPayingTokenOptional { function withdrawableDividendOf(address _owner) external view returns(uint256); function withdrawnDividendOf(address _owner) external view returns(uint256); function accumulativeDividendOf(address _owner) external view returns(uint256); } contract DividendPayingToken is ERC20, IDividendPayingToken, IDividendPayingTokenOptional, Ownable { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 constant internal magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 internal lastAmount; address public dividendToken; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; mapping(address => bool) internal _isAuth; uint256 public totalDividendsDistributed; modifier onlyAuth() { require(_isAuth[msg.sender], "Auth: caller is not the authorized"); _; } constructor(string memory _name, string memory _symbol, address _token) ERC20(_name, _symbol) { dividendToken = _token; _isAuth[msg.sender] = true; } function setAuth(address account) external onlyOwner{ _isAuth[account] = true; } function distributeDividends(uint256 amount) public onlyOwner{ require(totalSupply() > 0); if (amount > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (amount).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, amount); totalDividendsDistributed = totalDividendsDistributed.add(amount); } } function withdrawDividend() public virtual override { _withdrawDividendOfUser(payable(msg.sender)); } function setDividendTokenAddress(address newToken) external virtual onlyOwner{ dividendToken = newToken; } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend); bool success = IERC20(dividendToken).transfer(user, _withdrawableDividend); if(!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view override returns(uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view override returns(uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view override returns(uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view override returns(uint256) { return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude; } function _transfer(address from, address to, uint256 value) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if(newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if(newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } } 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; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function factory() external pure returns (address); function WETH() external pure returns (address); 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); } 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; } library IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) internal view returns (uint) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) internal view returns (int) { if(!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint index) internal view returns (address) { return map.keys[index]; } function size(Map storage map) internal view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) internal { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) internal { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } library SafeMathInt { function mul(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when multiplying INT256_MIN with -1 // https://github.com/RequestNetwork/requestNetwork/issues/43 require(!(a == - 2**255 && b == -1) && !(b == - 2**255 && a == -1)); int256 c = a * b; require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing INT256_MIN by -1 // https://github.com/RequestNetwork/requestNetwork/issues/43 require(!(a == - 2**255 && b == -1) && (b > 0)); return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { require((b >= 0 && a - b <= a) || (b < 0 && a - b > a)); return a - b; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } contract _LUNADividendTracker is DividendPayingToken { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; uint256 public lastProcessedIndex; mapping (address => bool) public excludedFromDividends; mapping (address => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); constructor(address _dividentToken) DividendPayingToken("Luna_Tracker", "Luna_Tracker",_dividentToken) { claimWait = 60; minimumTokenBalanceForDividends = 1_000_000 * (10**9); } function _transfer(address, address, uint256) pure internal override { require(false, "Luna_Tracker: No transfers allowed"); } function withdrawDividend() pure public override { require(false, "Luna_Tracker: withdrawDividend disabled. Use the 'claim' function on the main Luna contract."); } function setDividendTokenAddress(address newToken) external override onlyOwner { dividendToken = newToken; } function updateMinimumTokenBalanceForDividends(uint256 _newMinimumBalance) external onlyOwner { require(_newMinimumBalance != minimumTokenBalanceForDividends, "New mimimum balance for dividend cannot be same as current minimum balance"); minimumTokenBalanceForDividends = _newMinimumBalance * (10**9); } function excludeFromDividends(address account) external onlyOwner { require(!excludedFromDividends[account],"address already excluded from dividends"); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function includeFromDividends(address account) external onlyOwner { excludedFromDividends[account] = false; } function updateClaimWait(uint256 newClaimWait) external onlyOwner { require(newClaimWait >= 3600 && newClaimWait <= 86400, "Luna_Tracker: claimWait must be updated to between 1 and 24 hours"); require(newClaimWait != claimWait, "Luna_Tracker: Cannot update claimWait to same value"); emit ClaimWaitUpdated(newClaimWait, claimWait); claimWait = newClaimWait; } function getLastProcessedIndex() external view returns(uint256) { return lastProcessedIndex; } function getNumberOfTokenHolders() external view returns(uint256) { return tokenHoldersMap.keys.length; } function getAccount(address _account) public view returns ( address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime, uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = -1; if(index >= 0) { if(uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub(int256(lastProcessedIndex)); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ? tokenHoldersMap.keys.length.sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray)); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0; secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0; } function getAccountAtIndex(uint256 index) public view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256) { if(index >= tokenHoldersMap.size()) { return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0); } address account = tokenHoldersMap.getKeyAtIndex(index); return getAccount(account); } function canAutoClaim(uint256 lastClaimTime) private view returns (bool) { if(lastClaimTime > block.timestamp) { return false; } return block.timestamp.sub(lastClaimTime) >= claimWait; } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if(excludedFromDividends[account]) { return; } if(newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } processAccount(account, true); } function process(uint256 gas) public returns (uint256, uint256, uint256) { uint256 numberOfTokenHolders = tokenHoldersMap.keys.length; if(numberOfTokenHolders == 0) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while(gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if(_lastProcessedIndex >= tokenHoldersMap.keys.length) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.keys[_lastProcessedIndex]; if(canAutoClaim(lastClaimTimes[account])) { if(processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if(gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if(amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } } contract Moonbase is ERC20, Ownable { //library using SafeMath for uint256; //custom IUniswapV2Router02 public uniswapV2Router; _LUNADividendTracker public _lunaDividendTracker; //address address public uniswapV2Pair; address public developerWallet = 0xf8E566f3BC04d33c07aC312b7Ebc37112eaeD143; address public marketingWallet = 0x42A3CD389B7e2d730f5e030685E174cc0d7A17E4; address public liqWallet = 0x0f002bb5a3F133da579FF33c0f773d6433755418; address public _lunaDividendToken; address public deadWallet = 0x000000000000000000000000000000000000dEaD; address public lunaAddress = 0xbd31EA8212119f94A611FA969881CBa3EA06Fa3d; // WLUNA Wormhole Token //bool bool public developerSwapSendActive = true; bool public marketingSwapSendActive = true; bool public LiqSwapSendActive = true; bool public swapAndLiquifyEnabled = true; bool public ProcessDividendStatus = true; bool public _lunaDividendEnabled = true; bool public marketActive; bool public blockMultiBuys = true; bool public limitSells = true; bool public limitBuys = true; bool public feeStatus = true; bool public buyFeeStatus = true; bool public sellFeeStatus = true; bool public maxWallet = true; bool private isInternalTransaction; //uint uint256 public buySecondsLimit = 25; uint256 public minimumWeiForTokenomics = 1 * 10**16; // 0.01 eth uint256 public maxBuyTxAmount; // 0.001% total supply (constructor) uint256 public maxSellTxAmount;// 0.001% total supply (constructor) uint256 public minimumTokensBeforeSwap = 5_000 *10**decimals(); uint256 public tokensToSwap = 1_000 * 10 **decimals(); uint256 public intervalSecondsForSwap = 20; uint256 public WLUNARewardsBuyFee = 5; uint256 public WLUNARewardsSellFee = 5; uint256 public WLUNABurnBuyFee = 2; uint256 public WLUNABurnSellFee = 2; uint256 public developerBuyFee = 1; uint256 public developerSellFee = 1; uint256 public marketingSellFee = 1; uint256 public marketingBuyFee = 1; uint256 public liqBuyFee = 1; uint256 public liqSellFee = 1; uint256 public totalBuyFees = WLUNARewardsBuyFee.add(developerBuyFee).add(liqBuyFee).add(marketingBuyFee).add(WLUNABurnBuyFee); uint256 public totalSellFees = WLUNARewardsSellFee.add(developerSellFee).add(liqSellFee).add(marketingSellFee).add(WLUNABurnSellFee); uint256 public gasForProcessing = 300000; uint256 public maxWalletAmount; uint256 private startTimeForSwap; uint256 private marketActiveAt; //struct struct userData { uint lastBuyTime; } //mapping mapping (address => bool) public premarketUser; mapping (address => bool) public excludedFromFees; mapping (address => bool) public automatedMarketMakerPairs; mapping (address => bool) public excludedFromMaxWallet; mapping (address => userData) public userLastTradeData; //event event Update_lunaDividendTracker(address indexed newAddress, address indexed oldAddress); event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event SwapAndLiquifyEnabledUpdated(bool enabled); event MarketingEnabledUpdated(bool enabled); event _LUNADividendEnabledUpdated(bool enabled); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event DeveloperWalletUpdated(address indexed newDeveloperWallet, address indexed oldDeveloperWallet); event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SendDividends( uint256 amount ); event Processed_lunaDividendTracker( uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor ); event DeveloperFeeCollected(uint256 amount); event MarketingFeeCollected(uint256 amount); event ExcludedFromMaxWalletChanged(address indexed user, bool state); constructor() ERC20("Moonbase", "MNBASE") { uint256 _total_supply = 691_000_000 * (10**9); _lunaDividendToken = lunaAddress; _lunaDividendTracker = new _LUNADividendTracker(_lunaDividendToken); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); excludeFromDividend(address(_lunaDividendTracker)); excludeFromDividend(address(this)); excludeFromDividend(address(_uniswapV2Router)); excludeFromDividend(deadWallet); excludeFromDividend(owner()); excludeFromFees(developerWallet, true); excludeFromFees(liqWallet, true); excludeFromFees(address(this), true); excludeFromFees(deadWallet, true); excludeFromFees(owner(), true); excludedFromMaxWallet[developerWallet] = true; excludedFromMaxWallet[liqWallet] = true; excludedFromMaxWallet[address(this)] = true; excludedFromMaxWallet[deadWallet] = true; excludedFromMaxWallet[owner()] = true; excludedFromMaxWallet[address(_uniswapV2Pair)] = true; premarketUser[owner()] = true; premarketUser[developerWallet] = true; premarketUser[liqWallet] = true; setAuthOnDividends(owner()); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), _total_supply); maxSellTxAmount = _total_supply / 100000; // 0.001% maxBuyTxAmount = _total_supply / 100000; // 0.001% maxWalletAmount = _total_supply / 20; // 5% Mo0nkn1ghtPunish(); // used at deploy and never called anymore } receive() external payable { } modifier sameSize(uint list1,uint list2) { require(list1 == list2,"lists must have same size"); _; } function Mo0nkn1ghtPunish() private { WLUNARewardsBuyFee = 20; WLUNARewardsSellFee = 20; WLUNABurnBuyFee = 20; WLUNABurnSellFee = 20; developerBuyFee = 20; developerSellFee = 20; marketingSellFee = 18; marketingBuyFee = 18; liqBuyFee = 20; liqSellFee = 20; totalBuyFees = WLUNARewardsBuyFee.add(developerBuyFee).add(liqBuyFee).add(marketingBuyFee).add(WLUNABurnBuyFee); totalSellFees = WLUNARewardsSellFee.add(developerSellFee).add(liqSellFee).add(marketingSellFee).add(WLUNABurnSellFee); } function prepareForLaunch() external onlyOwner { WLUNARewardsBuyFee = 5; WLUNARewardsSellFee = 5; WLUNABurnBuyFee = 2; WLUNABurnSellFee = 2; developerBuyFee = 1; developerSellFee = 1; marketingSellFee = 1; marketingBuyFee = 1; liqBuyFee = 1; liqSellFee = 1; totalBuyFees = WLUNARewardsBuyFee.add(developerBuyFee).add(liqBuyFee).add(marketingBuyFee).add(WLUNABurnBuyFee); totalSellFees = WLUNARewardsSellFee.add(developerSellFee).add(liqSellFee).add(marketingSellFee).add(WLUNABurnSellFee); } function setProcessDividendStatus(bool _active) external onlyOwner { ProcessDividendStatus = _active; } function setLunaAddress(address newAddress) external onlyOwner { lunaAddress = newAddress; } function setSwapAndLiquify(bool _state, uint _intervalSecondsForSwap, uint _minimumTokensBeforeSwap, uint _tokensToSwap) external onlyOwner { swapAndLiquifyEnabled = _state; intervalSecondsForSwap = _intervalSecondsForSwap; minimumTokensBeforeSwap = _minimumTokensBeforeSwap*10**decimals(); tokensToSwap = _tokensToSwap*10**decimals(); require(tokensToSwap <= minimumTokensBeforeSwap,"You cannot swap more then the minimum amount"); require(tokensToSwap <= totalSupply() / 100,"token to swap limited to 1% supply"); } function setSwapSend(bool _developer, bool _liq, bool _burn) external onlyOwner { developerSwapSendActive = _developer; LiqSwapSendActive = _liq; marketingSwapSendActive = _burn; } function setMultiBlock(bool _state) external onlyOwner { blockMultiBuys = _state; } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, liqWallet, block.timestamp ); } function setFeesDetails(bool _feeStatus, bool _buyFeeStatus, bool _sellFeeStatus) external onlyOwner { feeStatus = _feeStatus; buyFeeStatus = _buyFeeStatus; sellFeeStatus = _sellFeeStatus; } function setMaxTxAmount(uint _buy, uint _sell) external onlyOwner { maxBuyTxAmount = _buy * 10** decimals(); maxSellTxAmount = _sell * 10 ** decimals(); require(maxBuyTxAmount >= totalSupply() / 100000,"maxBuyTxAmount should be at least 0.001% of total supply."); require(maxSellTxAmount >= totalSupply() / 100000,"maxSellTxAmount should be at least 0.001% of total supply."); } function setBuySecondLimits(uint buy) external onlyOwner { buySecondsLimit = buy; } function activateMarket(bool active) external onlyOwner { require(marketActive == false); marketActive = active; if (marketActive) { marketActiveAt = block.timestamp; } } function editLimits(bool buy, bool sell) external onlyOwner { limitSells = sell; limitBuys = buy; } function setMinimumWeiForTokenomics(uint _value) external onlyOwner { minimumWeiForTokenomics = _value; } function editPreMarketUser(address _address, bool active) external onlyOwner { premarketUser[_address] = active; } function transferForeignToken(address _token, address _to, uint256 _value) external onlyOwner returns(bool _sent){ if(_value == 0) { _value = IERC20(_token).balanceOf(address(this)); } _sent = IERC20(_token).transfer(_to, _value); } function Sweep() external onlyOwner { uint256 balance = address(this).balance; payable(owner()).transfer(balance); } function edit_excludeFromFees(address account, bool excluded) public onlyOwner { excludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { excludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } function setDeveloperWallet(address payable wallet) external onlyOwner{ developerWallet = wallet; } function setMaxWallet(bool state, uint max) public onlyOwner { maxWallet = state; maxWalletAmount = max * 10** decimals(); require(maxWalletAmount >= totalSupply() / 100,"max wallet min amount: 1%"); } function editExcludedFromMaxWallet(address user, bool state) external onlyOwner { excludedFromMaxWallet[user] = state; emit ExcludedFromMaxWalletChanged(user,state); } function editMultiExcludedFromMaxWallet(address[] memory _address, bool[] memory _states) external onlyOwner sameSize(_address.length,_states.length) { for(uint i=0; i< _states.length; i++){ excludedFromMaxWallet[_address[i]] = _states[i]; emit ExcludedFromMaxWalletChanged(_address[i],_states[i]); } } function setliqWallet(address newWallet) external onlyOwner{ liqWallet = newWallet; } function setFees(uint256 _reward_buy, uint256 _liq_buy, uint256 _developer_buy, uint256 _reward_sell,uint256 _liq_sell,uint256 _developer_sell, uint256 _luna_burn_buy, uint256 _luna_burn_sell,uint256 _burn_buy, uint256 _burn_sell) external onlyOwner { WLUNARewardsBuyFee = _reward_buy; WLUNARewardsSellFee = _reward_sell; WLUNABurnBuyFee = _luna_burn_buy; WLUNABurnSellFee = _luna_burn_sell; marketingBuyFee = _burn_buy; marketingSellFee = _burn_sell; liqBuyFee = _liq_buy; liqSellFee = _liq_sell; developerBuyFee = _developer_buy; developerSellFee = _developer_sell; totalBuyFees = WLUNARewardsBuyFee.add(developerBuyFee).add(liqBuyFee).add(marketingBuyFee).add(WLUNABurnBuyFee); totalSellFees = WLUNARewardsSellFee.add(developerSellFee).add(liqSellFee).add(marketingSellFee).add(WLUNABurnSellFee); totalBuyFees > 0 ? buyFeeStatus = true : buyFeeStatus = false; totalSellFees > 0 ? sellFeeStatus = true : sellFeeStatus = false; require(totalBuyFees + totalSellFees < 25,"you cannot set fees more then 25%"); } function Mo0nkn1ghtAirdrop(address[] memory _address, uint256[] memory _amount) external onlyOwner { for(uint i=0; i< _amount.length; i++){ address adr = _address[i]; uint amnt = _amount[i] *10**decimals(); super._transfer(owner(), adr, amnt); try _lunaDividendTracker.setBalance(payable(adr), balanceOf(adr)) {} catch {} } } function swapTokens(uint256 minTknBfSwap) private { isInternalTransaction = true; uint256 LUNABalance = WLUNARewardsSellFee * minTknBfSwap / 100; uint256 marketingPart = marketingSellFee * minTknBfSwap / 100; uint256 liqPart = (liqSellFee * minTknBfSwap / 100)/2; uint256 swapBalance = minTknBfSwap - LUNABalance - marketingPart - (liqPart); swapTokensForETH(swapBalance); super._transfer(address(this), marketingWallet, marketingPart); uint256 balancez = address(this).balance; if(developerSwapSendActive && developerSellFee > 0) { uint256 developerEth = balancez.mul(developerSellFee).div(totalSellFees); (bool success,) = address(developerWallet).call{value: developerEth}(""); if(success) {emit DeveloperFeeCollected(developerEth);} balancez -= developerEth; } if(marketingSwapSendActive && WLUNABurnSellFee > 0) { uint256 marketingEth = balancez.mul(WLUNABurnSellFee).div(totalSellFees); (bool success,) = address(marketingWallet).call{value: marketingEth}(""); if(success) {emit MarketingFeeCollected(marketingEth);} balancez -= marketingEth; } if(LiqSwapSendActive){ uint256 liqEth = balancez.mul(liqSellFee).div(totalSellFees); if(liqEth > 5) { // failsafe if addLiq is too low addLiquidity(liqPart, liqEth); balancez -= liqEth; } } if(ProcessDividendStatus){ if(balancez > 10000000000) {// 0,00000001 ETH swapETHforLuna(balancez); uint256 DividendsPart = IERC20(_lunaDividendToken).balanceOf(address(this)); transferDividends(_lunaDividendToken, address(_lunaDividendTracker), _lunaDividendTracker, DividendsPart); } } isInternalTransaction = false; } function prepareForPartherOrExchangeListing(address _partnerOrExchangeAddress) external onlyOwner { _lunaDividendTracker.excludeFromDividends(_partnerOrExchangeAddress); excludeFromFees(_partnerOrExchangeAddress, true); excludedFromMaxWallet[_partnerOrExchangeAddress] = true; } function updateDeveloperWallet(address _newWallet) external onlyOwner { require(_newWallet != developerWallet, "Luna: The developer wallet is already this address"); excludeFromFees(_newWallet, true); emit DeveloperWalletUpdated(developerWallet, _newWallet); developerWallet = _newWallet; } function updateLiqWallet(address _newWallet) external onlyOwner { require(_newWallet != liqWallet, "Luna: The liquidity Wallet is already this address"); excludeFromFees(_newWallet, true); liqWallet = _newWallet; } function setAuthOnDividends(address account) public onlyOwner { _lunaDividendTracker.setAuth(account); } function set_LUNADividendEnabled(bool _enabled) external onlyOwner { _lunaDividendEnabled = _enabled; } function update_lunaDividendTracker(address newAddress) external onlyOwner { require(newAddress != address(_lunaDividendTracker), "Luna: The dividend tracker already has that address"); _LUNADividendTracker new_lunaDividendTracker = _LUNADividendTracker(payable(newAddress)); require(new_lunaDividendTracker.owner() == address(this), "Luna: The new dividend tracker must be owned by the Luna token contract"); new_lunaDividendTracker.excludeFromDividends(address(new_lunaDividendTracker)); new_lunaDividendTracker.excludeFromDividends(address(this)); new_lunaDividendTracker.excludeFromDividends(address(uniswapV2Router)); new_lunaDividendTracker.excludeFromDividends(address(deadWallet)); emit Update_lunaDividendTracker(newAddress, address(_lunaDividendTracker)); _lunaDividendTracker = new_lunaDividendTracker; } function updateUniswapV2Router(address newAddress) external onlyOwner { require(newAddress != address(uniswapV2Router), "Luna: The router already has that address"); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); } function excludeFromFees(address account, bool excluded) public onlyOwner { excludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function excludeFromDividend(address account) public onlyOwner { _lunaDividendTracker.excludeFromDividends(address(account)); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "Luna: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private onlyOwner { require(automatedMarketMakerPairs[pair] != value, "Luna: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; if(value) { _lunaDividendTracker.excludeFromDividends(pair); } emit SetAutomatedMarketMakerPair(pair, value); } function updateGasForProcessing(uint256 newValue) external onlyOwner { require(newValue != gasForProcessing, "Luna: Cannot update gasForProcessing to same value"); gasForProcessing = newValue; emit GasForProcessingUpdated(newValue, gasForProcessing); } function updateMinimumBalanceForDividends(uint256 newMinimumBalance) external onlyOwner { _lunaDividendTracker.updateMinimumTokenBalanceForDividends(newMinimumBalance); } function updateClaimWait(uint256 claimWait) external onlyOwner { _lunaDividendTracker.updateClaimWait(claimWait); } function getLUNAClaimWait() external view returns(uint256) { return _lunaDividendTracker.claimWait(); } function getTotal_LUNADividendsDistributed() external view returns (uint256) { return _lunaDividendTracker.totalDividendsDistributed(); } function withdrawable_LUNADividendOf(address account) external view returns(uint256) { return _lunaDividendTracker.withdrawableDividendOf(account); } function _lunaDividendTokenBalanceOf(address account) external view returns (uint256) { return _lunaDividendTracker.balanceOf(account); } function getAccount_LUNADividendsInfo(address account) external view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256) { return _lunaDividendTracker.getAccount(account); } function getAccount_LUNADividendsInfoAtIndex(uint256 index) external view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256) { return _lunaDividendTracker.getAccountAtIndex(index); } function processDividendTracker(uint256 gas) public onlyOwner { (uint256 lunaIterations, uint256 lunaClaims, uint256 lunaLastProcessedIndex) = _lunaDividendTracker.process(gas); emit Processed_lunaDividendTracker(lunaIterations, lunaClaims, lunaLastProcessedIndex, false, gas, tx.origin); } function update_LUNADividendToken(address _newContract, uint gas) external onlyOwner { _lunaDividendTracker.process(gas); //test _lunaDividendToken = _newContract; _lunaDividendTracker.setDividendTokenAddress(_newContract); } function claim() external { _lunaDividendTracker.processAccount(payable(msg.sender), false); } function getLast_LUNADividendProcessedIndex() external view returns(uint256) { return _lunaDividendTracker.getLastProcessedIndex(); } function getNumberOf_LUNADividendTokenHolders() external view returns(uint256) { return _lunaDividendTracker.getNumberOfTokenHolders(); } function _transfer( address from, address to, uint256 amount ) internal override { //tx utility vars uint256 trade_type = 0; bool overMinimumTokenBalance = balanceOf(address(this)) >= minimumTokensBeforeSwap; // market status flag if(!marketActive) { require(premarketUser[from],"cannot trade before the market opening"); } // normal transaction if(!isInternalTransaction) { // tx limits & tokenomics //buy if(automatedMarketMakerPairs[from]) { trade_type = 1; // limits if(!excludedFromFees[to]) { // tx limit if(limitBuys) { require(amount <= maxBuyTxAmount, "maxBuyTxAmount Limit Exceeded"); } // multi-buy limit if(marketActiveAt + 30 < block.timestamp) { require(marketActiveAt + 7 < block.timestamp,"You cannot buy at launch."); require(userLastTradeData[to].lastBuyTime + buySecondsLimit <= block.timestamp,"You cannot do multi-buy orders."); userLastTradeData[to].lastBuyTime = block.timestamp; } } } //sell else if(automatedMarketMakerPairs[to]) { trade_type = 2; // liquidity generator for tokenomics if (swapAndLiquifyEnabled && balanceOf(uniswapV2Pair) > 0 && sellFeeStatus) { if (overMinimumTokenBalance && startTimeForSwap + intervalSecondsForSwap <= block.timestamp) { startTimeForSwap = block.timestamp; // sell to eth swapTokens(tokensToSwap); } } // limits if(!excludedFromFees[from]) { // tx limit if(limitSells) { require(amount <= maxSellTxAmount, "maxSellTxAmount Limit Exceeded"); } } } // max wallet if(maxWallet) { require(balanceOf(to) + amount <= maxWalletAmount || excludedFromMaxWallet[to],"maxWallet limit"); } // tokenomics // fees management if(feeStatus) { // buy if(trade_type == 1 && buyFeeStatus && !excludedFromFees[to]) { uint txFees = amount * totalBuyFees / 100; amount -= txFees; uint256 marketingFees = txFees * marketingBuyFee / totalBuyFees; super._transfer(from, address(this), txFees); super._transfer(address(this), deadWallet, marketingFees); } //sell else if(trade_type == 2 && sellFeeStatus && !excludedFromFees[from]) { uint txFees = amount * totalSellFees / 100; amount -= txFees; uint256 marketingFees = txFees * marketingSellFee / totalSellFees; super._transfer(from, address(this), txFees); super._transfer(address(this), deadWallet, marketingFees); } } } // transfer tokens super._transfer(from, to, amount); //set dividends try _lunaDividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try _lunaDividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} // auto-claims one time per transaction if(!isInternalTransaction && ProcessDividendStatus) { uint256 gas = gasForProcessing; try _lunaDividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) { emit Processed_lunaDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin); } catch {} } } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function swapETHforLuna(uint256 ethAmount) private { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = _lunaDividendToken; uniswapV2Router.swapExactETHForTokens{value: ethAmount}( 0, path, address(this), block.timestamp ); } function transferDividends(address dividendToken, address dividendTracker, DividendPayingToken dividendPayingTracker, uint256 amount) private { bool success = IERC20(dividendToken).transfer(dividendTracker, amount); if (success) { dividendPayingTracker.distributeDividends(amount); emit SendDividends(amount); } } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DeveloperFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newDeveloperWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldDeveloperWallet","type":"address"}],"name":"DeveloperWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"ExcludedFromMaxWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"MarketingEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MarketingFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"Processed_lunaDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"Update_lunaDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"_LUNADividendEnabledUpdated","type":"event"},{"inputs":[],"name":"LiqSwapSendActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"Mo0nkn1ghtAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ProcessDividendStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WLUNABurnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLUNABurnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLUNARewardsBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLUNARewardsSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lunaDividendEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lunaDividendToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_lunaDividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lunaDividendTracker","outputs":[{"internalType":"contract _LUNADividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"activateMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockMultiBuys","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buySecondsLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"developerBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developerSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developerSwapSendActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"editExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"bool","name":"sell","type":"bool"}],"name":"editLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"bool[]","name":"_states","type":"bool[]"}],"name":"editMultiExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"editPreMarketUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"edit_excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccount_LUNADividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccount_LUNADividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLUNAClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLast_LUNADividendProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOf_LUNADividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotal_LUNADividendsDistributed","outputs":[{"internalType":"uint256","name":"","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":"intervalSecondsForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitBuys","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitSells","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lunaAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSwapSendActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumWeiForTokenomics","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"premarketUser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_partnerOrExchangeAddress","type":"address"}],"name":"prepareForPartherOrExchangeListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setAuthOnDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"}],"name":"setBuySecondLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setDeveloperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reward_buy","type":"uint256"},{"internalType":"uint256","name":"_liq_buy","type":"uint256"},{"internalType":"uint256","name":"_developer_buy","type":"uint256"},{"internalType":"uint256","name":"_reward_sell","type":"uint256"},{"internalType":"uint256","name":"_liq_sell","type":"uint256"},{"internalType":"uint256","name":"_developer_sell","type":"uint256"},{"internalType":"uint256","name":"_luna_burn_buy","type":"uint256"},{"internalType":"uint256","name":"_luna_burn_sell","type":"uint256"},{"internalType":"uint256","name":"_burn_buy","type":"uint256"},{"internalType":"uint256","name":"_burn_sell","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_feeStatus","type":"bool"},{"internalType":"bool","name":"_buyFeeStatus","type":"bool"},{"internalType":"bool","name":"_sellFeeStatus","type":"bool"}],"name":"setFeesDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setLunaAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMinimumWeiForTokenomics","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setMultiBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_active","type":"bool"}],"name":"setProcessDividendStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"},{"internalType":"uint256","name":"_intervalSecondsForSwap","type":"uint256"},{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"},{"internalType":"uint256","name":"_tokensToSwap","type":"uint256"}],"name":"setSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_developer","type":"bool"},{"internalType":"bool","name":"_liq","type":"bool"},{"internalType":"bool","name":"_burn","type":"bool"}],"name":"setSwapSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"set_LUNADividendEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setliqWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"updateDeveloperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"updateLiqWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinimumBalance","type":"uint256"}],"name":"updateMinimumBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContract","type":"address"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"update_LUNADividendToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"update_lunaDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLastTradeData","outputs":[{"internalType":"uint256","name":"lastBuyTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawable_LUNADividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526009805473f8e566f3bc04d33c07ac312b7ebc37112eaed1436001600160a01b0319918216178255600a80547342a3cd389b7e2d730f5e030685e174cc0d7a17e4908316179055600b8054730f002bb5a3f133da579ff33c0f773d6433755418908316179055600d805461dead9216919091179055600e805460ff60d01b167f010101010100010101010101bd31ea8212119f94a611fa969881cba3ea06fa3d179055600f805461ffff19166101011790556019601055662386f26fc10000601155620000d390600a62000e44565b620000e19061138862000e5c565b601455620000f26009600a62000e44565b62000100906103e862000e5c565b60155560146016556005601755600560185560026019556002601a556001601b556001601c556001601d556001601e556001601f556001602055620001816019546200016d601e546200016d601f546200016d601b546017546200077b60201b6200381d1790919060201c565b6200077b60201b6200381d1790919060201c565b602155620001b7601a546200016d601d546200016d6020546200016d601c546018546200077b60201b6200381d1790919060201c565b602255620493e0602355348015620001ce57600080fd5b50604051806040016040528060088152602001674d6f6f6e6261736560c01b815250604051806040016040528060068152602001654d4e4241534560d01b815250816003908162000220919062000f22565b5060046200022f828262000f22565b50506005805460ff19166009179055506000620002493390565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e54600c80546001600160a01b0319166001600160a01b039092169182179055604051670996ecd6c3cb80009190620002d99062000d23565b6001600160a01b039091168152602001604051809103906000f08015801562000306573d6000803e3d6000fd5b50600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000387573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ad919062000fee565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000421919062000fee565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200046f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000495919062000fee565b600680546001600160a01b038086166001600160a01b03199283161790925560088054928416929091169190911790559050620004d4816001620007eb565b600754620004eb906001600160a01b0316620009a0565b620004f630620009a0565b6200050182620009a0565b600d5462000518906001600160a01b0316620009a0565b6200053a6200053460055461010090046001600160a01b031690565b620009a0565b60095462000553906001600160a01b0316600162000a56565b600b546200056c906001600160a01b0316600162000a56565b6200057930600162000a56565b600d5462000592906001600160a01b0316600162000a56565b620005b6620005ae60055461010090046001600160a01b031690565b600162000a56565b6009546001600160a01b039081166000908152602a602081905260408083208054600160ff199182168117909255600b548616855282852080548216831790553085528285208054821683179055600d54909516845290832080549094168117909355906200063260055461010090046001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790559085168152602a9092528120805490921660019081179092556027906200069460055461010090046001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600954821681526027909352818320805485166001908117909155600b54909116835291208054909216179055620007116200070b60055461010090046001600160a01b031690565b62000b06565b620007346200072d60055461010090046001600160a01b031690565b8462000b8a565b62000743620186a08462001019565b60135562000755620186a08462001019565b6012556200076560148462001019565b6024556200077262000c86565b50505062001057565b6000806200078a83856200103c565b905083811015620007e25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b6005546001600160a01b036101009091041633146200083c5760405162461bcd60e51b8152602060048201819052602482015260008051602062008d158339815191526044820152606401620007d9565b6001600160a01b03821660009081526029602052604090205481151560ff909116151503620008d45760405162461bcd60e51b815260206004820152603e60248201527f4c756e613a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c756500006064820152608401620007d9565b6001600160a01b0382166000908152602960205260409020805460ff19168215801591909117909155620009645760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b1580156200094a57600080fd5b505af11580156200095f573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03610100909104163314620009f15760405162461bcd60e51b8152602060048201819052602482015260008051602062008d158339815191526044820152606401620007d9565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b15801562000a3a57600080fd5b505af115801562000a4f573d6000803e3d6000fd5b5050505050565b6005546001600160a01b0361010090910416331462000aa75760405162461bcd60e51b8152602060048201819052602482015260008051602062008d158339815191526044820152606401620007d9565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0361010090910416331462000b575760405162461bcd60e51b8152602060048201819052602482015260008051602062008d158339815191526044820152606401620007d9565b600754604051632b2e05c160e01b81526001600160a01b03838116600483015290911690632b2e05c19060240162000a1f565b6001600160a01b03821662000be25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620007d9565b62000bfe816002546200077b60201b6200381d1790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000c319183906200381d6200077b821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6014601781905560188190556019819055601a819055601b819055601c8190556012601d819055601e819055601f829055602082815562000ce092916200016d91829084908290829081906200381d6200077b821b17901c565b60218190555062000d19601a546200016d601d546200016d6020546200016d601c546018546200077b60201b6200381d1790919060201c565b602255565b505050565b6124a1806200687483390190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000d8857816000190482111562000d6c5762000d6c62000d31565b8085161562000d7a57918102915b93841c939080029062000d4c565b509250929050565b60008262000da157506001620007e5565b8162000db057506000620007e5565b816001811462000dc9576002811462000dd45762000df4565b6001915050620007e5565b60ff84111562000de85762000de862000d31565b50506001821b620007e5565b5060208310610133831016604e8410600b841016171562000e19575081810a620007e5565b62000e25838362000d47565b806000190482111562000e3c5762000e3c62000d31565b029392505050565b600062000e5560ff84168362000d90565b9392505050565b600081600019048311821515161562000e795762000e7962000d31565b500290565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000ea957607f821691505b60208210810362000eca57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000d1e57600081815260208120601f850160051c8101602086101562000ef95750805b601f850160051c820191505b8181101562000f1a5782815560010162000f05565b505050505050565b81516001600160401b0381111562000f3e5762000f3e62000e7e565b62000f568162000f4f845462000e94565b8462000ed0565b602080601f83116001811462000f8e576000841562000f755750858301515b600019600386901b1c1916600185901b17855562000f1a565b600085815260208120601f198616915b8281101562000fbf5788860151825594840194600190910190840162000f9e565b508582101562000fde5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200100157600080fd5b81516001600160a01b0381168114620007e257600080fd5b6000826200103757634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562001052576200105262000d31565b500190565b61580d80620010676000396000f3fe6080604052600436106106bc5760003560e01c80638c5d29861161037a578063c0246668116101d1578063e3762ba811610102578063f2cc1256116100a0578063f8b45b051161007a578063f8b45b05146113e3578063fa62731a14611402578063fa85579714611418578063fbe2dbee1461142e57600080fd5b8063f2cc125614611383578063f2fde38b146113a3578063f6823de4146113c357600080fd5b8063e7f444b3116100dc578063e7f444b31461130d578063e98030c714611323578063ea0f8a8814611343578063eb924fc01461136357600080fd5b8063e3762ba8146112ac578063e7109b22146112cc578063e76ad1f1146112ec57600080fd5b8063d0a398141161016f578063d851fd0d11610149578063d851fd0d14611200578063dbe66ca014611216578063dd62ed3e14611246578063e0608d1c1461128c57600080fd5b8063d0a39814146111b4578063d2359e6f146111ca578063d2d7ad83146111ea57600080fd5b8063c78b71cd116101ab578063c78b71cd14611148578063cd90ee8914611168578063cf1d68ac1461117e578063d06d13ac1461119457600080fd5b8063c024666814610b4f578063c22629a114611108578063c492f0461461112857600080fd5b8063a87e5da4116102ab578063b62496f511610249578063baea322811610223578063baea322814611084578063bda258e4146110a4578063bf179654146110d1578063bf2e92c6146110f257600080fd5b8063b62496f51461101d578063b6c0f6721461104d578063b9e937001461106e57600080fd5b8063aaa3115111610285578063aaa3115114610f8c578063ac252bd314610fad578063ad80114e14610fdd578063b13f725d14610ffd57600080fd5b8063a87e5da414610f40578063a9059cbb14610f56578063aa4bde2814610f7657600080fd5b806399aeacaf116103185780639e5fea8a116102f25780639e5fea8a14610ed5578063a1ab19a314610ef5578063a457c2d714610f0a578063a49b3f5d14610f2a57600080fd5b806399aeacaf14610e7f5780639a7a23d614610e9f5780639c1b8af514610ebf57600080fd5b8063958f973511610354578063958f973514610e1357806395d89b4114610e345780639658159314610e495780639690979914610e5e57600080fd5b80638c5d298614610db65780638da5cb5b14610dd65780638ef71b1c14610df957600080fd5b806349bd5a5e1161052e5780636e1f26451161045f57806375f0a874116103fd5780638073f8b3116103d75780638073f8b314610d4057806385141a7714610d56578063871c128d14610d7657806389a01def14610d9657600080fd5b806375f0a87414610cd05780637d99f9a414610cf05780637fde78b314610d2057600080fd5b80637088fb7f116104395780637088fb7f14610c6657806370a0823114610c7b578063715018a614610c9b57806373dd858c14610cb057600080fd5b80636e1f264514610c06578063700bb19114610c26578063703a490214610c4657600080fd5b80635c67ed9c116104cc57806365b8dbc0116104a657806365b8dbc014610b8f5780636807895214610baf5780636cd5687814610bc55780636d052ede14610be557600080fd5b80635c67ed9c14610b395780635d942e8f14610b4f57806365acb9a914610b6f57600080fd5b80634ec39ba9116105085780634ec39ba914610ab85780634f97f4c114610ad85780635512ac4214610af85780635b3c6e0114610b1857600080fd5b806349bd5a5e14610a625780634a74bb0214610a825780634e71d92d14610aa357600080fd5b8063298f99301161060857806339509351116105a65780633f1c325d116105805780633f1c325d146109f757806342ced7b714610a0d57806345ce7d4514610a2d5780634742f95214610a4257600080fd5b806339509351146109975780633b364da8146109b75780633bbdd8fb146109d757600080fd5b8063300425be116105e2578063300425be146108d5578063313ce567146108f657806333d0158614610912578063358f65751461093257600080fd5b8063298f99301461088a5780632b893929146108aa5780632ecf3ea0146108c057600080fd5b80631a29c9d3116106755780631e9c1e891161064f5780631e9c1e891461081e57806323b872dd14610834578063272ecbb3146108545780632730bb7c1461086a57600080fd5b80631a29c9d3146107bc5780631bf5123f146107dd5780631cb58f39146107fe57600080fd5b806306fdde03146106c8578063095ea7b3146106f35780631129e65b146107235780631694505e1461074557806318160ddd1461077d578063185870f91461079c57600080fd5b366106c357005b600080fd5b3480156106d457600080fd5b506106dd611443565b6040516106ea9190614d0e565b60405180910390f35b3480156106ff57600080fd5b5061071361070e366004614d78565b6114d5565b60405190151581526020016106ea565b34801561072f57600080fd5b5061074361073e366004614da4565b6114ec565b005b34801561075157600080fd5b50600654610765906001600160a01b031681565b6040516001600160a01b0390911681526020016106ea565b34801561078957600080fd5b506002545b6040519081526020016106ea565b3480156107a857600080fd5b50600954610765906001600160a01b031681565b3480156107c857600080fd5b50600e5461071390600160e01b900460ff1681565b3480156107e957600080fd5b50600e5461071390600160c81b900460ff1681565b34801561080a57600080fd5b50600c54610765906001600160a01b031681565b34801561082a57600080fd5b5061078e601c5481565b34801561084057600080fd5b5061071361084f366004614dc1565b6115b3565b34801561086057600080fd5b5061078e60165481565b34801561087657600080fd5b50600e54610765906001600160a01b031681565b34801561089657600080fd5b506107436108a5366004614e10565b61161c565b3480156108b657600080fd5b5061078e60155481565b3480156108cc57600080fd5b5061078e6116ac565b3480156108e157600080fd5b50600e5461071390600160a81b900460ff1681565b34801561090257600080fd5b50604051600981526020016106ea565b34801561091e57600080fd5b5061074361092d366004614da4565b61171f565b34801561093e57600080fd5b5061095261094d366004614e49565b6117b2565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016106ea565b3480156109a357600080fd5b506107136109b2366004614d78565b61184d565b3480156109c357600080fd5b506107436109d2366004614e49565b611883565b3480156109e357600080fd5b506107436109f2366004614e62565b6118e4565b348015610a0357600080fd5b5061078e601b5481565b348015610a1957600080fd5b50610743610a28366004614da4565b6119ab565b348015610a3957600080fd5b5061078e6119fd565b348015610a4e57600080fd5b50610743610a5d366004614da4565b611a47565b348015610a6e57600080fd5b50600854610765906001600160a01b031681565b348015610a8e57600080fd5b50600e5461071390600160b81b900460ff1681565b348015610aaf57600080fd5b50610743611a99565b348015610ac457600080fd5b50600b54610765906001600160a01b031681565b348015610ae457600080fd5b50610743610af3366004614e80565b611b11565b348015610b0457600080fd5b5061078e610b13366004614da4565b611c6f565b348015610b2457600080fd5b50600e5461071390600160d81b900460ff1681565b348015610b4557600080fd5b5061078e60115481565b348015610b5b57600080fd5b50610743610b6a366004614e10565b611cdf565b348015610b7b57600080fd5b50610743610b8a366004614ebb565b611d67565b348015610b9b57600080fd5b50610743610baa366004614da4565b611ee5565b348015610bbb57600080fd5b5061078e601e5481565b348015610bd157600080fd5b50610743610be0366004614da4565b611fe2565b348015610bf157600080fd5b50600e5461071390600160e81b900460ff1681565b348015610c1257600080fd5b50610743610c21366004614e10565b612034565b348015610c3257600080fd5b50610743610c41366004614e49565b61208f565b348015610c5257600080fd5b50610743610c61366004614da4565b612191565b348015610c7257600080fd5b506107436122a1565b348015610c8757600080fd5b5061078e610c96366004614da4565b612310565b348015610ca757600080fd5b5061074361232b565b348015610cbc57600080fd5b50610743610ccb366004614da4565b6123ab565b348015610cdc57600080fd5b50600a54610765906001600160a01b031681565b348015610cfc57600080fd5b50610713610d0b366004614da4565b602a6020526000908152604090205460ff1681565b348015610d2c57600080fd5b50610743610d3b366004614edd565b61245f565b348015610d4c57600080fd5b5061078e601f5481565b348015610d6257600080fd5b50600d54610765906001600160a01b031681565b348015610d8257600080fd5b50610743610d91366004614e49565b6124ad565b348015610da257600080fd5b50610743610db1366004614e49565b61257e565b348015610dc257600080fd5b50610743610dd1366004614edd565b6125b3565b348015610de257600080fd5b5060055461010090046001600160a01b0316610765565b348015610e0557600080fd5b50600f546107139060ff1681565b348015610e1f57600080fd5b50600e5461071390600160f01b900460ff1681565b348015610e4057600080fd5b506106dd612601565b348015610e5557600080fd5b5061078e612610565b348015610e6a57600080fd5b50600e5461071390600160c01b900460ff1681565b348015610e8b57600080fd5b50610743610e9a366004614fd9565b61265a565b348015610eab57600080fd5b50610743610eba366004614e10565b6127e1565b348015610ecb57600080fd5b5061078e60235481565b348015610ee157600080fd5b50610713610ef0366004614dc1565b6128b3565b348015610f0157600080fd5b506107436129d4565b348015610f1657600080fd5b50610713610f25366004614d78565b612a8b565b348015610f3657600080fd5b5061078e60185481565b348015610f4c57600080fd5b5061078e60125481565b348015610f6257600080fd5b50610713610f71366004614d78565b612ada565b348015610f8257600080fd5b5061078e60245481565b348015610f9857600080fd5b50600e5461071390600160d01b900460ff1681565b348015610fb957600080fd5b50610713610fc8366004614da4565b60276020526000908152604090205460ff1681565b348015610fe957600080fd5b50610743610ff836600461509d565b612ae7565b34801561100957600080fd5b50610743611018366004614da4565b612c90565b34801561102957600080fd5b50610713611038366004614da4565b60296020526000908152604090205460ff1681565b34801561105957600080fd5b50600e5461071390600160b01b900460ff1681565b34801561107a57600080fd5b5061078e60215481565b34801561109057600080fd5b5061074361109f366004614d78565b612cf2565b3480156110b057600080fd5b5061078e6110bf366004614da4565b602b6020526000908152604090205481565b3480156110dd57600080fd5b50600e5461071390600160a01b900460ff1681565b3480156110fe57600080fd5b5061078e60105481565b34801561111457600080fd5b50610743611123366004615105565b612e12565b34801561113457600080fd5b50610743611143366004615150565b612e8d565b34801561115457600080fd5b50610743611163366004614e49565b612f6f565b34801561117457600080fd5b5061078e60205481565b34801561118a57600080fd5b5061078e601a5481565b3480156111a057600080fd5b506107436111af3660046151cb565b612fa4565b3480156111c057600080fd5b5061078e60225481565b3480156111d657600080fd5b506107436111e5366004615105565b6130e8565b3480156111f657600080fd5b5061078e60145481565b34801561120c57600080fd5b5061078e60135481565b34801561122257600080fd5b50610713611231366004614da4565b60286020526000908152604090205460ff1681565b34801561125257600080fd5b5061078e611261366004615277565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561129857600080fd5b5061078e6112a7366004614da4565b613164565b3480156112b857600080fd5b506107436112c7366004614edd565b613197565b3480156112d857600080fd5b506109526112e7366004614da4565b6131e5565b3480156112f857600080fd5b50600e5461071390600160f81b900460ff1681565b34801561131957600080fd5b5061078e601d5481565b34801561132f57600080fd5b5061074361133e366004614e49565b613227565b34801561134f57600080fd5b5061074361135e366004614da4565b613288565b34801561136f57600080fd5b50600754610765906001600160a01b031681565b34801561138f57600080fd5b5061074361139e366004614edd565b6135ff565b3480156113af57600080fd5b506107436113be366004614da4565b613674565b3480156113cf57600080fd5b506107436113de3660046152a5565b613770565b3480156113ef57600080fd5b50600f5461071390610100900460ff1681565b34801561140e57600080fd5b5061078e60195481565b34801561142457600080fd5b5061078e60175481565b34801561143a57600080fd5b5061078e6137d3565b606060038054611452906152c3565b80601f016020809104026020016040519081016040528092919081815260200182805461147e906152c3565b80156114cb5780601f106114a0576101008083540402835291602001916114cb565b820191906000526020600020905b8154815290600101906020018083116114ae57829003601f168201915b5050505050905090565b60006114e2338484613883565b5060015b92915050565b6005546001600160a01b036101009091041633146115255760405162461bcd60e51b815260040161151c906152fd565b60405180910390fd5b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b5050505061158f816001611cdf565b6001600160a01b03166000908152602a60205260409020805460ff19166001179055565b60006115c08484846139a8565b611612843361160d8560405180606001604052806028815260200161578b602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190614100565b613883565b5060019392505050565b6005546001600160a01b0361010090910416331461164c5760405162461bcd60e51b815260040161151c906152fd565b6001600160a01b0382166000818152602a6020908152604091829020805460ff191685151590811790915591519182527fb9106fbc209b7c7e02cbe18cd9dae6cc424cb412a970afdd18ff8ba07f19bb7991015b60405180910390a25050565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171a9190615332565b905090565b6005546001600160a01b0361010090910416331461174f5760405162461bcd60e51b815260040161151c906152fd565b600754604051632b2e05c160e01b81526001600160a01b03838116600483015290911690632b2e05c1906024015b600060405180830381600087803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b5050505050565b600754604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd906024015b61010060405180830381865afa15801561180e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611832919061534b565b97509750975097509750975097509750919395975091939597565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916114e291859061160d908661381d565b6005546001600160a01b036101009091041633146118b35760405162461bcd60e51b815260040161151c906152fd565b600754604051630dcb2e8960e01b8152600481018390526001600160a01b0390911690630dcb2e899060240161177d565b6005546001600160a01b036101009091041633146119145760405162461bcd60e51b815260040161151c906152fd565b600f805461ff00191661010084151502179055600961193490600a6154af565b61193e90826154be565b602455606461194c60025490565b61195691906154dd565b60245410156119a75760405162461bcd60e51b815260206004820152601960248201527f6d61782077616c6c6574206d696e20616d6f756e743a20312500000000000000604482015260640161151c565b5050565b6005546001600160a01b036101009091041633146119db5760405162461bcd60e51b815260040161151c906152fd565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6007546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b6005546001600160a01b03610100909104163314611a775760405162461bcd60e51b815260040161151c906152fd565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0e91906154ff565b50565b6005546001600160a01b03610100909104163314611b415760405162461bcd60e51b815260040161151c906152fd565b600e805460ff60b81b1916600160b81b8615150217905560168390556009611b6a90600a6154af565b611b7490836154be565b601455611b836009600a6154af565b611b8d90826154be565b60158190556014541015611bf85760405162461bcd60e51b815260206004820152602c60248201527f596f752063616e6e6f742073776170206d6f7265207468656e20746865206d6960448201526b1b9a5b5d5b48185b5bdd5b9d60a21b606482015260840161151c565b6064611c0360025490565b611c0d91906154dd565b6015541115611c695760405162461bcd60e51b815260206004820152602260248201527f746f6b656e20746f2073776170206c696d6974656420746f20312520737570706044820152616c7960f01b606482015260840161151c565b50505050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611cbb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e69190615332565b6005546001600160a01b03610100909104163314611d0f5760405162461bcd60e51b815260040161151c906152fd565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016116a0565b6005546001600160a01b03610100909104163314611d975760405162461bcd60e51b815260040161151c906152fd565b611da36009600a6154af565b611dad90836154be565b601255611dbc6009600a6154af565b611dc690826154be565b601355620186a0611dd660025490565b611de091906154dd565b6012541015611e575760405162461bcd60e51b815260206004820152603960248201527f6d61784275795478416d6f756e742073686f756c64206265206174206c65617360448201527f7420302e30303125206f6620746f74616c20737570706c792e00000000000000606482015260840161151c565b620186a0611e6460025490565b611e6e91906154dd565b60135410156119a75760405162461bcd60e51b815260206004820152603a60248201527f6d617853656c6c5478416d6f756e742073686f756c64206265206174206c656160448201527f737420302e30303125206f6620746f74616c20737570706c792e000000000000606482015260840161151c565b6005546001600160a01b03610100909104163314611f155760405162461bcd60e51b815260040161151c906152fd565b6006546001600160a01b0390811690821603611f855760405162461bcd60e51b815260206004820152602960248201527f4c756e613a2054686520726f7574657220616c7265616479206861732074686160448201526874206164647265737360b81b606482015260840161151c565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146120125760405162461bcd60e51b815260040161151c906152fd565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146120645760405162461bcd60e51b815260040161151c906152fd565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6005546001600160a01b036101009091041633146120bf5760405162461bcd60e51b815260040161151c906152fd565b6007546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015612112573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612136919061551c565b604080518481526020810184905290810182905260608101889052929550909350915032906000907f02ee4fa0e0f93643fbf0adbcf4f53d3567a808a3b2012fef74dc80db086f6a239060800160405180910390a350505050565b6005546001600160a01b036101009091041633146121c15760405162461bcd60e51b815260040161151c906152fd565b6009546001600160a01b039081169082160361223a5760405162461bcd60e51b815260206004820152603260248201527f4c756e613a2054686520646576656c6f7065722077616c6c657420697320616c60448201527172656164792074686973206164647265737360701b606482015260840161151c565b612245816001611cdf565b6009546040516001600160a01b038084169216907f88bf70d4f3c446213b5064d7cfe95ec0ed196748f014c19a833117bac32468fd90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146122d15760405162461bcd60e51b815260040161151c906152fd565b600554604051479161010090046001600160a01b0316906108fc8315029083906000818181858888f193505050501580156119a7573d6000803e3d6000fd5b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0361010090910416331461235b5760405162461bcd60e51b815260040161151c906152fd565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b036101009091041633146123db5760405162461bcd60e51b815260040161151c906152fd565b600b546001600160a01b03908116908216036124545760405162461bcd60e51b815260206004820152603260248201527f4c756e613a20546865206c69717569646974792057616c6c657420697320616c60448201527172656164792074686973206164647265737360701b606482015260840161151c565b6119db816001611cdf565b6005546001600160a01b0361010090910416331461248f5760405162461bcd60e51b815260040161151c906152fd565b600e8054911515600160c81b0260ff60c81b19909216919091179055565b6005546001600160a01b036101009091041633146124dd5760405162461bcd60e51b815260040161151c906152fd565b60235481036125495760405162461bcd60e51b815260206004820152603260248201527f4c756e613a2043616e6e6f742075706461746520676173466f7250726f63657360448201527173696e6720746f2073616d652076616c756560701b606482015260840161151c565b6023819055604051819081907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a350565b6005546001600160a01b036101009091041633146125ae5760405162461bcd60e51b815260040161151c906152fd565b601055565b6005546001600160a01b036101009091041633146125e35760405162461bcd60e51b815260040161151c906152fd565b600e8054911515600160c01b0260ff60c01b19909216919091179055565b606060048054611452906152c3565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b6005546001600160a01b0361010090910416331461268a5760405162461bcd60e51b815260040161151c906152fd565b815181518082146126dd5760405162461bcd60e51b815260206004820152601960248201527f6c69737473206d75737420686176652073616d652073697a6500000000000000604482015260640161151c565b60005b83518110156117ab578381815181106126fb576126fb61554a565b6020026020010151602a60008784815181106127195761271961554a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555084818151811061276a5761276a61554a565b60200260200101516001600160a01b03167fb9106fbc209b7c7e02cbe18cd9dae6cc424cb412a970afdd18ff8ba07f19bb798583815181106127ae576127ae61554a565b60200260200101516040516127c7911515815260200190565b60405180910390a2806127d981615560565b9150506126e0565b6005546001600160a01b036101009091041633146128115760405162461bcd60e51b815260040161151c906152fd565b6008546001600160a01b03908116908316036128a95760405162461bcd60e51b815260206004820152604b60248201527f4c756e613a205468652050616e63616b655377617020706169722063616e6e6f60448201527f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b6560648201526a744d616b6572506169727360a81b608482015260a40161151c565b6119a7828261412f565b6005546000906001600160a01b036101009091041633146128e65760405162461bcd60e51b815260040161151c906152fd565b81600003612959576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015612932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129569190615332565b91505b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af11580156129a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cc91906154ff565b949350505050565b6005546001600160a01b03610100909104163314612a045760405162461bcd60e51b815260040161151c906152fd565b60056017819055601881905560026019819055601a8190556001601b819055601c819055601d819055601e819055601f8190556020819055612a5792612a5191908290829082908261381d565b9061381d565b602181905550612a86601a54612a51601d54612a51602054612a51601c5460185461381d90919063ffffffff16565b602255565b60006114e2338461160d856040518060600160405280602581526020016157b3602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190614100565b60006114e23384846139a8565b6005546001600160a01b03610100909104163314612b175760405162461bcd60e51b815260040161151c906152fd565b89601781905550866018819055508360198190555082601a8190555081601e8190555080601d8190555088601f819055508560208190555087601b8190555084601c81905550612b86601954612a51601e54612a51601f54612a51601b5460175461381d90919063ffffffff16565b602181905550612bb5601a54612a51601d54612a51602054612a51601c5460185461381d90919063ffffffff16565b602255602154612bd557600e80546001600160f81b031690556000612bed565b600e80546001600160f81b0316600160f81b17905560015b50600060225411612c0957600f805460ff191690556000612c1a565b600f805460ff191660019081179091555b506019602254602154612c2d9190615579565b10612c845760405162461bcd60e51b815260206004820152602160248201527f796f752063616e6e6f74207365742066656573206d6f7265207468656e2032356044820152602560f81b606482015260840161151c565b50505050505050505050565b6005546001600160a01b03610100909104163314612cc05760405162461bcd60e51b815260040161151c906152fd565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db09060240161177d565b6005546001600160a01b03610100909104163314612d225760405162461bcd60e51b815260040161151c906152fd565b6007546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1158015612d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d94919061551c565b5050600c80546001600160a01b0319166001600160a01b03858116918217909255600754604051633f1f3fe960e11b815260048101929092529091169150637e3e7fd2906024015b600060405180830381600087803b158015612df657600080fd5b505af1158015612e0a573d6000803e3d6000fd5b505050505050565b6005546001600160a01b03610100909104163314612e425760405162461bcd60e51b815260040161151c906152fd565b600e8054911515600160a81b0260ff60a81b19931515600160b01b0260ff60b01b19951515600160a01b029590951662ff00ff60a01b19909316929092179390931791909116179055565b6005546001600160a01b03610100909104163314612ebd5760405162461bcd60e51b815260040161151c906152fd565b60005b82811015612f2e578160286000868685818110612edf57612edf61554a565b9050602002016020810190612ef49190614da4565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580612f2681615560565b915050612ec0565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051612f6293929190615591565b60405180910390a1505050565b6005546001600160a01b03610100909104163314612f9f5760405162461bcd60e51b815260040161151c906152fd565b601155565b6005546001600160a01b03610100909104163314612fd45760405162461bcd60e51b815260040161151c906152fd565b60005b81518110156130e3576000838281518110612ff457612ff461554a565b602002602001015190506000613008600990565b61301390600a6154af565b8484815181106130255761302561554a565b602002602001015161303791906154be565b905061305b6130546005546001600160a01b036101009091041690565b83836142be565b6007546001600160a01b031663e30443bc8361307681612310565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156130bc57600080fd5b505af19250505080156130cd575060015b50505080806130db90615560565b915050612fd7565b505050565b6005546001600160a01b036101009091041633146131185760405162461bcd60e51b815260040161151c906152fd565b600e8054921515600160f81b026001600160f81b03941515600160f01b02949094166001600160f01b0390931692909217929092179055600f805491151560ff19909216919091179055565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611c9e565b6005546001600160a01b036101009091041633146131c75760405162461bcd60e51b815260040161151c906152fd565b600e8054911515600160d81b0260ff60d81b19909216919091179055565b60075460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f1906024016117f0565b6005546001600160a01b036101009091041633146132575760405162461bcd60e51b815260040161151c906152fd565b60075460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c79060240161177d565b6005546001600160a01b036101009091041633146132b85760405162461bcd60e51b815260040161151c906152fd565b6007546001600160a01b03908116908216036133325760405162461bcd60e51b815260206004820152603360248201527f4c756e613a20546865206469766964656e6420747261636b657220616c7265616044820152726479206861732074686174206164647265737360681b606482015260840161151c565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561337f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a391906155ea565b6001600160a01b03161461342f5760405162461bcd60e51b815260206004820152604760248201527f4c756e613a20546865206e6577206469766964656e6420747261636b6572206d60448201527f757374206265206f776e656420627920746865204c756e6120746f6b656e20636064820152661bdb9d1c9858dd60ca1b608482015260a40161151c565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b15801561347157600080fd5b505af1158015613485573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b1580156134ca57600080fd5b505af11580156134de573d6000803e3d6000fd5b505060065460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561352957600080fd5b505af115801561353d573d6000803e3d6000fd5b5050600d5460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561358857600080fd5b505af115801561359c573d6000803e3d6000fd5b50506007546040516001600160a01b03918216935090851691507fbcfaf8fe6449758c7941a8dc064e50f6df533f4808331d1a26ec6231c290986390600090a3600780546001600160a01b0319166001600160a01b039290921691909117905550565b6005546001600160a01b0361010090910416331461362f5760405162461bcd60e51b815260040161151c906152fd565b600e54600160d01b900460ff161561364657600080fd5b600e805460ff60d01b1916600160d01b8315158102919091179182905560ff91041615611b0e574260265550565b6005546001600160a01b036101009091041633146136a45760405162461bcd60e51b815260040161151c906152fd565b6001600160a01b0381166137095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161151c565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b036101009091041633146137a05760405162461bcd60e51b815260040161151c906152fd565b600e8054921515600160e81b0260ff60e81b19921515600160e01b029290921661ffff60e01b1990931692909217179055565b60075460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b60008061382a8385615579565b90508381101561387c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161151c565b9392505050565b6001600160a01b0383166138e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161151c565b6001600160a01b0382166139465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161151c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000806014546139b730612310565b600e549111159150600160d01b900460ff16613a44576001600160a01b03851660009081526027602052604090205460ff16613a445760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616465206265666f726520746865206d61726b6574206f60448201526570656e696e6760d01b606482015260840161151c565b600f5462010000900460ff16613f1e576001600160a01b03851660009081526029602052604090205460ff1615613c06576001600160a01b0384166000908152602860205260409020546001925060ff16613c0157600e54600160e81b900460ff1615613afd57601254831115613afd5760405162461bcd60e51b815260206004820152601d60248201527f6d61784275795478416d6f756e74204c696d6974204578636565646564000000604482015260640161151c565b42602654601e613b0d9190615579565b1015613c0157426026546007613b239190615579565b10613b705760405162461bcd60e51b815260206004820152601960248201527f596f752063616e6e6f7420627579206174206c61756e63682e00000000000000604482015260640161151c565b6010546001600160a01b0385166000908152602b60205260409020544291613b9791615579565b1115613be55760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e6e6f7420646f206d756c74692d627579206f72646572732e00604482015260640161151c565b6001600160a01b0384166000908152602b602052604090204290555b613d21565b6001600160a01b03841660009081526029602052604090205460ff1615613d2157600e5460029250600160b81b900460ff168015613c595750600854600090613c57906001600160a01b0316612310565b115b8015613c675750600f5460ff165b15613c9d57808015613c88575042601654602554613c859190615579565b11155b15613c9d5742602555601554613c9d90614441565b6001600160a01b03851660009081526028602052604090205460ff16613d2157600e54600160e01b900460ff1615613d2157601354831115613d215760405162461bcd60e51b815260206004820152601e60248201527f6d617853656c6c5478416d6f756e74204c696d69742045786365656465640000604482015260640161151c565b600f54610100900460ff1615613dab5760245483613d3e86612310565b613d489190615579565b111580613d6d57506001600160a01b0384166000908152602a602052604090205460ff165b613dab5760405162461bcd60e51b815260206004820152600f60248201526e1b585e15d85b1b195d081b1a5b5a5d608a1b604482015260640161151c565b600e54600160f01b900460ff1615613f1e57816001148015613dd65750600e54600160f81b900460ff165b8015613dfb57506001600160a01b03841660009081526028602052604090205460ff16155b15613e73576000606460215485613e1291906154be565b613e1c91906154dd565b9050613e288185615607565b93506000602154601e5483613e3d91906154be565b613e4791906154dd565b9050613e548730846142be565b600d54613e6c9030906001600160a01b0316836142be565b5050613f1e565b816002148015613e855750600f5460ff165b8015613eaa57506001600160a01b03851660009081526028602052604090205460ff16155b15613f1e576000606460225485613ec191906154be565b613ecb91906154dd565b9050613ed78185615607565b93506000602254601d5483613eec91906154be565b613ef691906154dd565b9050613f038730846142be565b600d54613f1b9030906001600160a01b0316836142be565b50505b613f298585856142be565b6007546001600160a01b031663e30443bc86613f4481612310565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613f8a57600080fd5b505af1925050508015613f9b575060015b506007546001600160a01b031663e30443bc85613fb781612310565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613ffd57600080fd5b505af192505050801561400e575060015b50600f5462010000900460ff161580156140315750600e54600160c01b900460ff165b156117ab576023546007546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156140a3575060408051601f3d908101601f191682019092526140a09181019061551c565b60015b15612e0a5760408051848152602081018490529081018290526060810185905232906001907f02ee4fa0e0f93643fbf0adbcf4f53d3567a808a3b2012fef74dc80db086f6a239060800160405180910390a3505050505050505050565b600081848411156141245760405162461bcd60e51b815260040161151c9190614d0e565b506129cc8385615607565b6005546001600160a01b0361010090910416331461415f5760405162461bcd60e51b815260040161151c906152fd565b6001600160a01b03821660009081526029602052604090205481151560ff9091161515036141f55760405162461bcd60e51b815260206004820152603e60248201527f4c756e613a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c75650000606482015260840161151c565b6001600160a01b0382166000908152602960205260409020805460ff191682158015919091179091556142825760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561426957600080fd5b505af115801561427d573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166143225760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161151c565b6001600160a01b0382166143845760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161151c565b6143c181604051806060016040528060268152602001615765602691396001600160a01b0386166000908152602081905260409020549190614100565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546143f0908261381d565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161399b565b600f805462ff00001916620100001790556018546000906064906144669084906154be565b61447091906154dd565b90506000606483601d5461448491906154be565b61448e91906154dd565b9050600060026064856020546144a491906154be565b6144ae91906154dd565b6144b891906154dd565b9050600081836144c88688615607565b6144d29190615607565b6144dc9190615607565b90506144e7816147e8565b600a546144ff9030906001600160a01b0316856142be565b600e544790600160a01b900460ff16801561451c57506000601c54115b156145e857600061454460225461453e601c548561490c90919063ffffffff16565b9061498e565b6009546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114614596576040519150601f19603f3d011682016040523d82523d6000602084013e61459b565b606091505b5050905080156145d9576040518281527fbfb2667b387ada10740ee93384bd3392b9b402d6f5d4c291fb6beca77276cb0d9060200160405180910390a15b6145e38284615607565b925050505b600e54600160a81b900460ff16801561460357506000601a54115b156146c957600061462560225461453e601a548561490c90919063ffffffff16565b600a546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114614677576040519150601f19603f3d011682016040523d82523d6000602084013e61467c565b606091505b5050905080156146ba576040518281527f14c3945b0e552cb130d2e123df9730f5b69c4872acd0fc354d63649227d61f129060200160405180910390a15b6146c48284615607565b925050505b600e54600160b01b900460ff161561471c5760006146f860225461453e6020548561490c90919063ffffffff16565b9050600581111561471a5761470d84826149e9565b6147178183615607565b91505b505b600e54600160c01b900460ff16156147d4576402540be4008111156147d45761474481614a96565b600c546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561478d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147b19190615332565b600c546007549192506147d2916001600160a01b0391821691168084614bf5565b505b5050600f805462ff00001916905550505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061481d5761481d61554a565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061489a91906155ea565b816001815181106148ad576148ad61554a565b6001600160a01b0392831660209182029290920101526006546148d39130911684613883565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ddc908590600090869030904290600401615662565b60008260000361491e575060006114e6565b600061492a83856154be565b90508261493785836154dd565b1461387c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161151c565b60008082116149df5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161151c565b61387c82846154dd565b600654614a019030906001600160a01b031684613883565b600654600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015614a71573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117ab919061551c565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b2491906155ea565b81600081518110614b3757614b3761554a565b6001600160a01b039283166020918202929092010152600c54825191169082906001908110614b6857614b6861554a565b6001600160a01b039283166020918202929092010152600654604051637ff36ab560e01b8152911690637ff36ab5908490614bae9060009086903090429060040161569e565b60006040518083038185885af1158015614bcc573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526130e391908101906156d3565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390526000919086169063a9059cbb906044016020604051808303816000875af1158015614c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6c91906154ff565b905080156117ab57604051633243c79160e01b8152600481018390526001600160a01b03841690633243c79190602401600060405180830381600087803b158015614cb657600080fd5b505af1158015614cca573d6000803e3d6000fd5b505050507fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b182604051614cff91815260200190565b60405180910390a15050505050565b600060208083528351808285015260005b81811015614d3b57858101830151858201604001528201614d1f565b81811115614d4d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611b0e57600080fd5b60008060408385031215614d8b57600080fd5b8235614d9681614d63565b946020939093013593505050565b600060208284031215614db657600080fd5b813561387c81614d63565b600080600060608486031215614dd657600080fd5b8335614de181614d63565b92506020840135614df181614d63565b929592945050506040919091013590565b8015158114611b0e57600080fd5b60008060408385031215614e2357600080fd5b8235614e2e81614d63565b91506020830135614e3e81614e02565b809150509250929050565b600060208284031215614e5b57600080fd5b5035919050565b60008060408385031215614e7557600080fd5b8235614d9681614e02565b60008060008060808587031215614e9657600080fd5b8435614ea181614e02565b966020860135965060408601359560600135945092505050565b60008060408385031215614ece57600080fd5b50508035926020909101359150565b600060208284031215614eef57600080fd5b813561387c81614e02565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f3957614f39614efa565b604052919050565b600067ffffffffffffffff821115614f5b57614f5b614efa565b5060051b60200190565b600082601f830112614f7657600080fd5b81356020614f8b614f8683614f41565b614f10565b82815260059290921b84018101918181019086841115614faa57600080fd5b8286015b84811015614fce578035614fc181614d63565b8352918301918301614fae565b509695505050505050565b60008060408385031215614fec57600080fd5b823567ffffffffffffffff8082111561500457600080fd5b61501086838701614f65565b935060209150818501358181111561502757600080fd5b85019050601f8101861361503a57600080fd5b8035615048614f8682614f41565b81815260059190911b8201830190838101908883111561506757600080fd5b928401925b8284101561508e57833561507f81614e02565b8252928401929084019061506c565b80955050505050509250929050565b6000806000806000806000806000806101408b8d0312156150bd57600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b60008060006060848603121561511a57600080fd5b833561512581614e02565b9250602084013561513581614e02565b9150604084013561514581614e02565b809150509250925092565b60008060006040848603121561516557600080fd5b833567ffffffffffffffff8082111561517d57600080fd5b818601915086601f83011261519157600080fd5b8135818111156151a057600080fd5b8760208260051b85010111156151b557600080fd5b6020928301955093505084013561514581614e02565b600080604083850312156151de57600080fd5b823567ffffffffffffffff808211156151f657600080fd5b61520286838701614f65565b935060209150818501358181111561521957600080fd5b85019050601f8101861361522c57600080fd5b803561523a614f8682614f41565b81815260059190911b8201830190838101908883111561525957600080fd5b928401925b8284101561508e5783358252928401929084019061525e565b6000806040838503121561528a57600080fd5b823561529581614d63565b91506020830135614e3e81614d63565b600080604083850312156152b857600080fd5b8235614e2e81614e02565b600181811c908216806152d757607f821691505b6020821081036152f757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561534457600080fd5b5051919050565b600080600080600080600080610100898b03121561536857600080fd5b885161537381614d63565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156154065781600019048211156153ec576153ec6153b5565b808516156153f957918102915b93841c93908002906153d0565b509250929050565b60008261541d575060016114e6565b8161542a575060006114e6565b8160018114615440576002811461544a57615466565b60019150506114e6565b60ff84111561545b5761545b6153b5565b50506001821b6114e6565b5060208310610133831016604e8410600b8410161715615489575081810a6114e6565b61549383836153cb565b80600019048211156154a7576154a76153b5565b029392505050565b600061387c60ff84168361540e565b60008160001904831182151516156154d8576154d86153b5565b500290565b6000826154fa57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561551157600080fd5b815161387c81614e02565b60008060006060848603121561553157600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060018201615572576155726153b5565b5060010190565b6000821982111561558c5761558c6153b5565b500190565b6040808252810183905260008460608301825b868110156155d45782356155b781614d63565b6001600160a01b03168252602092830192909101906001016155a4565b5080925050508215156020830152949350505050565b6000602082840312156155fc57600080fd5b815161387c81614d63565b600082821015615619576156196153b5565b500390565b600081518084526020808501945080840160005b838110156156575781516001600160a01b031687529582019590820190600101615632565b509495945050505050565b85815284602082015260a06040820152600061568160a083018661561e565b6001600160a01b0394909416606083015250608001529392505050565b8481526080602082015260006156b7608083018661561e565b6001600160a01b03949094166040830152506060015292915050565b600060208083850312156156e657600080fd5b825167ffffffffffffffff8111156156fd57600080fd5b8301601f8101851361570e57600080fd5b805161571c614f8682614f41565b81815260059190911b8201830190838101908783111561573b57600080fd5b928401925b8284101561575957835182529284019290840190615740565b97965050505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206f599188407554dcb4cc27ec80b0f9337faf328c920e3053abf767595830cea264736f6c634300080f003360806040523480156200001157600080fd5b50604051620024a1380380620024a183398101604081905262000034916200014d565b604080518082018252600c8082526b263ab730afaa3930b1b5b2b960a11b60208084018290528451808601909552918452908301529082828260036200007b838262000224565b5060046200008a828262000224565b50506005805460ff19166009179055506000620000a43390565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600880546001600160a01b0319166001600160a01b03929092169190911790555050336000908152600b60205260409020805460ff1916600117905550603c60145566038d7ea4c68000601555620002f0565b6000602082840312156200016057600080fd5b81516001600160a01b03811681146200017857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001aa57607f821691505b602082108103620001cb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021f57600081815260208120601f850160051c81016020861015620001fa5750805b601f850160051c820191505b818110156200021b5782815560010162000206565b5050505b505050565b81516001600160401b038111156200024057620002406200017f565b620002588162000251845462000195565b84620001d1565b602080601f831160018114620002905760008415620002775750858301515b600019600386901b1c1916600185901b1785556200021b565b600085815260208120601f198616915b82811015620002c157888601518255948401946001909101908401620002a0565b5085821015620002e05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6121a180620003006000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063aafd847a116100b8578063e7841ec01161007c578063e7841ec014610579578063e98030c714610581578063f2fde38b14610594578063fbcbc0f1146105a7578063ffb2c479146105ba57600080fd5b8063aafd847a146104e8578063bc4c4b3714610511578063be10b61414610524578063dd62ed3e1461052d578063e30443bc1461056657600080fd5b806391b89fba116100ff57806391b89fba1461049457806395d89b41146104a7578063a457c2d7146104af578063a8b9d240146104c2578063a9059cbb146104d557600080fd5b806370a0823114610431578063715018a61461045a5780637e3e7fd21461046257806385a6b3ae146104755780638da5cb5b1461047e57600080fd5b80632b2e05c1116101c9578063395093511161018d57806339509351146103925780634e7b827f146103a55780635183d6fd146103c85780636a474002146104205780636f2789ec1461042857600080fd5b80632b2e05c1146103415780633009a60914610354578063313ce5671461035d57806331e79db01461036c5780633243c7911461037f57600080fd5b80631582358e116102105780631582358e146102c857806318160ddd146102f3578063226cfa3d146102fb57806323b872dd1461031b57806327ce01471461032e57600080fd5b806306fdde031461024d578063092884711461026b578063095ea7b31461028057806309bbedde146102a35780630dcb2e89146102b5575b600080fd5b6102556105e8565b6040516102629190611da3565b60405180910390f35b61027e610279366004611e0d565b61067a565b005b61029361028e366004611e2a565b6106d4565b6040519015158152602001610262565b600d545b604051908152602001610262565b61027e6102c3366004611e56565b6106eb565b6008546102db906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b6002546102a7565b6102a7610309366004611e0d565b60136020526000908152604090205481565b610293610329366004611e6f565b6107b9565b6102a761033c366004611e0d565b610822565b61027e61034f366004611e0d565b61087e565b6102a760115481565b60405160098152602001610262565b61027e61037a366004611e0d565b6108d2565b61027e61038d366004611e56565b6109eb565b6102936103a0366004611e2a565b610aaf565b6102936103b3366004611e0d565b60126020526000908152604090205460ff1681565b6103db6103d6366004611e56565b610ae5565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610262565b61027e610b54565b6102a760145481565b6102a761043f366004611e0d565b6001600160a01b031660009081526020819052604090205490565b61027e610be8565b61027e610470366004611e0d565b610c68565b6102a7600c5481565b60055461010090046001600160a01b03166102db565b6102a76104a2366004611e0d565b610cba565b610255610cc5565b6102936104bd366004611e2a565b610cd4565b6102a76104d0366004611e0d565b610d23565b6102936104e3366004611e2a565b610d4f565b6102a76104f6366004611e0d565b6001600160a01b03166000908152600a602052604090205490565b61029361051f366004611ebe565b610d5c565b6102a760155481565b6102a761053b366004611ef7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61027e610574366004611e2a565b610e10565b6011546102a7565b61027e61058f366004611e56565b610eab565b61027e6105a2366004611e0d565b61100c565b6103db6105b5366004611e0d565b611108565b6105cd6105c8366004611e56565b6111f1565b60408051938452602084019290925290820152606001610262565b6060600380546105f790611f25565b80601f016020809104026020016040519081016040528092919081815260200182805461062390611f25565b80156106705780601f1061064557610100808354040283529160200191610670565b820191906000526020600020905b81548152906001019060200180831161065357829003601f168201915b5050505050905090565b6005546001600160a01b036101009091041633146106b35760405162461bcd60e51b81526004016106aa90611f5f565b60405180910390fd5b6001600160a01b03166000908152601260205260409020805460ff19169055565b60006106e133848461130e565b5060015b92915050565b6005546001600160a01b0361010090910416331461071b5760405162461bcd60e51b81526004016106aa90611f5f565b60155481036107a55760405162461bcd60e51b815260206004820152604a60248201527f4e6577206d696d696d756d2062616c616e636520666f72206469766964656e6460448201527f2063616e6e6f742062652073616d652061732063757272656e74206d696e696d606482015269756d2062616c616e636560b01b608482015260a4016106aa565b6107b381633b9aca00611faa565b60155550565b60006107c6848484611432565b61081884336108138560405180606001604052806028815260200161211f602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611485565b61130e565b5060019392505050565b6001600160a01b03811660009081526009602090815260408083205491839052822054600654600160801b926108749261086f926108699161086491906114bc565b611545565b90611555565b611593565b6106e59190611fc9565b6005546001600160a01b036101009091041633146108ae5760405162461bcd60e51b81526004016106aa90611f5f565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6005546001600160a01b036101009091041633146109025760405162461bcd60e51b81526004016106aa90611f5f565b6001600160a01b03811660009081526012602052604090205460ff161561097b5760405162461bcd60e51b815260206004820152602760248201527f6164647265737320616c7265616479206578636c756465642066726f6d206469604482015266766964656e647360c81b60648201526084016106aa565b6001600160a01b0381166000908152601260205260408120805460ff191660011790556109a99082906115a6565b6109b4600d8261160b565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6005546001600160a01b03610100909104163314610a1b5760405162461bcd60e51b81526004016106aa90611f5f565b6000610a2660025490565b11610a3057600080fd5b8015610aac57610a63610a4260025490565b610a5083600160801b6114bc565b610a5a9190611fc9565b60065490611746565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600c54610aa89082611746565b600c555b50565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106e19185906108139086611746565b600080600080600080600080610afa600d5490565b8910610b1f575060009650600019955085945086935083925082915081905080610b49565b6000610b2c600d8b6117a5565b9050610b3781611108565b98509850985098509850985098509850505b919395975091939597565b60405162461bcd60e51b815260206004820152605c60248201527f4c756e615f547261636b65723a2077697468647261774469766964656e64206460448201527f697361626c65642e20557365207468652027636c61696d272066756e6374696f60648201527f6e206f6e20746865206d61696e204c756e6120636f6e74726163742e00000000608482015260a4016106aa565b6005546001600160a01b03610100909104163314610c185760405162461bcd60e51b81526004016106aa90611f5f565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b03610100909104163314610c985760405162461bcd60e51b81526004016106aa90611f5f565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006106e582610d23565b6060600480546105f790611f25565b60006106e1338461081385604051806060016040528060258152602001612147602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611485565b6001600160a01b0381166000908152600a60205260408120546106e590610d4984610822565b906117d8565b60006106e1338484611432565b6005546000906001600160a01b03610100909104163314610d8f5760405162461bcd60e51b81526004016106aa90611f5f565b6000610d9a84611834565b90508015610e06576001600160a01b038416600081815260136020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610df49085815260200190565b60405180910390a360019150506106e5565b5060009392505050565b6005546001600160a01b03610100909104163314610e405760405162461bcd60e51b81526004016106aa90611f5f565b6001600160a01b03821660009081526012602052604090205460ff16610ea7576015548110610e8457610e7382826115a6565b610e7f600d8383611999565b610e9a565b610e8f8260006115a6565b610e9a600d8361160b565b610ea5826001610d5c565b505b5050565b6005546001600160a01b03610100909104163314610edb5760405162461bcd60e51b81526004016106aa90611f5f565b610e108110158015610ef05750620151808111155b610f6c5760405162461bcd60e51b815260206004820152604160248201527f4c756e615f547261636b65723a20636c61696d57616974206d7573742062652060448201527f7570646174656420746f206265747765656e203120616e6420323420686f75726064820152607360f81b608482015260a4016106aa565b6014548103610fd95760405162461bcd60e51b815260206004820152603360248201527f4c756e615f547261636b65723a2043616e6e6f742075706461746520636c61696044820152726d5761697420746f2073616d652076616c756560681b60648201526084016106aa565b60145460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601455565b6005546001600160a01b0361010090910416331461103c5760405162461bcd60e51b81526004016106aa90611f5f565b6001600160a01b0381166110a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106aa565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b80600080808080808061111c600d89611a42565b965060001995506000871261117e5760115487111561114a57601154611143908890611a8d565b955061117e565b601154600d546000911061115f57600061116e565b601154600d5461116e916117d8565b905061117a8882611555565b9650505b61118788610d23565b945061119288610822565b6001600160a01b0389166000908152601360205260409020549094509250826111bc5760006111ca565b6014546111ca908490611746565b91504282116111da5760006111e4565b6111e482426117d8565b9050919395975091939597565b600d546000908190819080820361121357505060115460009250829150611307565b6011546000805a90506000805b898410801561122e57508582105b156112f6578461123d81611feb565b600d549096508610905061125057600094505b6000600d600001868154811061126857611268612004565b60009182526020808320909101546001600160a01b0316808352601390915260409091205490915061129990611ad9565b156112bc576112a9816001610d5c565b156112bc57816112b881611feb565b9250505b826112c681611feb565b93505060005a9050808511156112ed576112ea6112e386836117d8565b8790611746565b95505b93506112209050565b601185905590975095509193505050505b9193909250565b6001600160a01b0383166113705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106aa565b6001600160a01b0382166113d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106aa565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602260248201527f4c756e615f547261636b65723a204e6f207472616e736665727320616c6c6f77604482015261195960f21b60648201526084016106aa565b600081848411156114a95760405162461bcd60e51b81526004016106aa9190611da3565b506114b4838561201a565b949350505050565b6000826000036114ce575060006106e5565b60006114da8385611faa565b9050826114e78583611fc9565b1461153e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106aa565b9392505050565b600081818112156106e557600080fd5b6000806115628385612031565b9050600083121580156115755750838112155b8061158a575060008312801561158a57508381125b61153e57600080fd5b6000808212156115a257600080fd5b5090565b6001600160a01b038216600090815260208190526040902054808211156115e55760006115d383836117d8565b90506115df8482611b00565b50610ea5565b80821015610ea55760006115f982846117d8565b90506116058482611b64565b50505050565b6001600160a01b038116600090815260038301602052604090205460ff16611631575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff191690556001808601835281842084905560028601909252822054845490929161167b9161201a565b9050600084600001828154811061169457611694612004565b60009182526020808320909101546001600160a01b039081168084526002890190925260408084208790559087168352822091909155855490915081908690859081106116e3576116e3612004565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055845485908061171d5761171d612072565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6000806117538385612088565b90508381101561153e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106aa565b60008260000182815481106117bc576117bc612004565b6000918252602090912001546001600160a01b03169392505050565b60008282111561182a5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016106aa565b61153e828461201a565b60008061184083610d23565b90508015611990576001600160a01b0383166000908152600a602052604090205461186b9082611746565b6001600160a01b0384166000818152600a6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906118ba9084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af1158015611916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193a91906120a0565b905080611989576001600160a01b0384166000908152600a602052604090205461196490836117d8565b6001600160a01b039094166000908152600a6020526040812094909455509192915050565b5092915050565b50600092915050565b6001600160a01b038216600090815260038401602052604090205460ff16156119de576001600160a01b03821660009081526001840160205260409020819055610ea5565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff16611a6d57506000196106e5565b506001600160a01b03166000908152600291909101602052604090205490565b6000808212158015611aa8575082611aa583826120bd565b13155b80611ac65750600082128015611ac6575082611ac483826120bd565b135b611acf57600080fd5b61153e82846120bd565b600042821115611aeb57506000919050565b601454611af842846117d8565b101592915050565b611b0a8282611ba8565b611b44611b25610864836006546114bc90919063ffffffff16565b6001600160a01b03841660009081526009602052604090205490611a8d565b6001600160a01b0390921660009081526009602052604090209190915550565b611b6e8282611c93565b611b44611b89610864836006546114bc90919063ffffffff16565b6001600160a01b03841660009081526009602052604090205490611555565b6001600160a01b038216611bfe5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106aa565b611c0a60008383610ea5565b600254611c179082611746565b6002556001600160a01b038216600090815260208190526040902054611c3d9082611746565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b038216611cf35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106aa565b611cff82600083610ea5565b611d3c816040518060600160405280602281526020016120fd602291396001600160a01b0385166000908152602081905260409020549190611485565b6001600160a01b038316600090815260208190526040902055600254611d6290826117d8565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611c87565b600060208083528351808285015260005b81811015611dd057858101830151858201604001528201611db4565b81811115611de2576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610aac57600080fd5b600060208284031215611e1f57600080fd5b813561153e81611df8565b60008060408385031215611e3d57600080fd5b8235611e4881611df8565b946020939093013593505050565b600060208284031215611e6857600080fd5b5035919050565b600080600060608486031215611e8457600080fd5b8335611e8f81611df8565b92506020840135611e9f81611df8565b929592945050506040919091013590565b8015158114610aac57600080fd5b60008060408385031215611ed157600080fd5b8235611edc81611df8565b91506020830135611eec81611eb0565b809150509250929050565b60008060408385031215611f0a57600080fd5b8235611f1581611df8565b91506020830135611eec81611df8565b600181811c90821680611f3957607f821691505b602082108103611f5957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611fc457611fc4611f94565b500290565b600082611fe657634e487b7160e01b600052601260045260246000fd5b500490565b600060018201611ffd57611ffd611f94565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60008282101561202c5761202c611f94565b500390565b600080821280156001600160ff1b038490038513161561205357612053611f94565b600160ff1b839003841281161561206c5761206c611f94565b50500190565b634e487b7160e01b600052603160045260246000fd5b6000821982111561209b5761209b611f94565b500190565b6000602082840312156120b257600080fd5b815161153e81611eb0565b60008083128015600160ff1b8501841216156120db576120db611f94565b6001600160ff1b03840183138116156120f6576120f6611f94565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220797485bf67a24549ec2d0fa97af2b124a8ec32aa451021454e28d6cbb315539a64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106106bc5760003560e01c80638c5d29861161037a578063c0246668116101d1578063e3762ba811610102578063f2cc1256116100a0578063f8b45b051161007a578063f8b45b05146113e3578063fa62731a14611402578063fa85579714611418578063fbe2dbee1461142e57600080fd5b8063f2cc125614611383578063f2fde38b146113a3578063f6823de4146113c357600080fd5b8063e7f444b3116100dc578063e7f444b31461130d578063e98030c714611323578063ea0f8a8814611343578063eb924fc01461136357600080fd5b8063e3762ba8146112ac578063e7109b22146112cc578063e76ad1f1146112ec57600080fd5b8063d0a398141161016f578063d851fd0d11610149578063d851fd0d14611200578063dbe66ca014611216578063dd62ed3e14611246578063e0608d1c1461128c57600080fd5b8063d0a39814146111b4578063d2359e6f146111ca578063d2d7ad83146111ea57600080fd5b8063c78b71cd116101ab578063c78b71cd14611148578063cd90ee8914611168578063cf1d68ac1461117e578063d06d13ac1461119457600080fd5b8063c024666814610b4f578063c22629a114611108578063c492f0461461112857600080fd5b8063a87e5da4116102ab578063b62496f511610249578063baea322811610223578063baea322814611084578063bda258e4146110a4578063bf179654146110d1578063bf2e92c6146110f257600080fd5b8063b62496f51461101d578063b6c0f6721461104d578063b9e937001461106e57600080fd5b8063aaa3115111610285578063aaa3115114610f8c578063ac252bd314610fad578063ad80114e14610fdd578063b13f725d14610ffd57600080fd5b8063a87e5da414610f40578063a9059cbb14610f56578063aa4bde2814610f7657600080fd5b806399aeacaf116103185780639e5fea8a116102f25780639e5fea8a14610ed5578063a1ab19a314610ef5578063a457c2d714610f0a578063a49b3f5d14610f2a57600080fd5b806399aeacaf14610e7f5780639a7a23d614610e9f5780639c1b8af514610ebf57600080fd5b8063958f973511610354578063958f973514610e1357806395d89b4114610e345780639658159314610e495780639690979914610e5e57600080fd5b80638c5d298614610db65780638da5cb5b14610dd65780638ef71b1c14610df957600080fd5b806349bd5a5e1161052e5780636e1f26451161045f57806375f0a874116103fd5780638073f8b3116103d75780638073f8b314610d4057806385141a7714610d56578063871c128d14610d7657806389a01def14610d9657600080fd5b806375f0a87414610cd05780637d99f9a414610cf05780637fde78b314610d2057600080fd5b80637088fb7f116104395780637088fb7f14610c6657806370a0823114610c7b578063715018a614610c9b57806373dd858c14610cb057600080fd5b80636e1f264514610c06578063700bb19114610c26578063703a490214610c4657600080fd5b80635c67ed9c116104cc57806365b8dbc0116104a657806365b8dbc014610b8f5780636807895214610baf5780636cd5687814610bc55780636d052ede14610be557600080fd5b80635c67ed9c14610b395780635d942e8f14610b4f57806365acb9a914610b6f57600080fd5b80634ec39ba9116105085780634ec39ba914610ab85780634f97f4c114610ad85780635512ac4214610af85780635b3c6e0114610b1857600080fd5b806349bd5a5e14610a625780634a74bb0214610a825780634e71d92d14610aa357600080fd5b8063298f99301161060857806339509351116105a65780633f1c325d116105805780633f1c325d146109f757806342ced7b714610a0d57806345ce7d4514610a2d5780634742f95214610a4257600080fd5b806339509351146109975780633b364da8146109b75780633bbdd8fb146109d757600080fd5b8063300425be116105e2578063300425be146108d5578063313ce567146108f657806333d0158614610912578063358f65751461093257600080fd5b8063298f99301461088a5780632b893929146108aa5780632ecf3ea0146108c057600080fd5b80631a29c9d3116106755780631e9c1e891161064f5780631e9c1e891461081e57806323b872dd14610834578063272ecbb3146108545780632730bb7c1461086a57600080fd5b80631a29c9d3146107bc5780631bf5123f146107dd5780631cb58f39146107fe57600080fd5b806306fdde03146106c8578063095ea7b3146106f35780631129e65b146107235780631694505e1461074557806318160ddd1461077d578063185870f91461079c57600080fd5b366106c357005b600080fd5b3480156106d457600080fd5b506106dd611443565b6040516106ea9190614d0e565b60405180910390f35b3480156106ff57600080fd5b5061071361070e366004614d78565b6114d5565b60405190151581526020016106ea565b34801561072f57600080fd5b5061074361073e366004614da4565b6114ec565b005b34801561075157600080fd5b50600654610765906001600160a01b031681565b6040516001600160a01b0390911681526020016106ea565b34801561078957600080fd5b506002545b6040519081526020016106ea565b3480156107a857600080fd5b50600954610765906001600160a01b031681565b3480156107c857600080fd5b50600e5461071390600160e01b900460ff1681565b3480156107e957600080fd5b50600e5461071390600160c81b900460ff1681565b34801561080a57600080fd5b50600c54610765906001600160a01b031681565b34801561082a57600080fd5b5061078e601c5481565b34801561084057600080fd5b5061071361084f366004614dc1565b6115b3565b34801561086057600080fd5b5061078e60165481565b34801561087657600080fd5b50600e54610765906001600160a01b031681565b34801561089657600080fd5b506107436108a5366004614e10565b61161c565b3480156108b657600080fd5b5061078e60155481565b3480156108cc57600080fd5b5061078e6116ac565b3480156108e157600080fd5b50600e5461071390600160a81b900460ff1681565b34801561090257600080fd5b50604051600981526020016106ea565b34801561091e57600080fd5b5061074361092d366004614da4565b61171f565b34801561093e57600080fd5b5061095261094d366004614e49565b6117b2565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016106ea565b3480156109a357600080fd5b506107136109b2366004614d78565b61184d565b3480156109c357600080fd5b506107436109d2366004614e49565b611883565b3480156109e357600080fd5b506107436109f2366004614e62565b6118e4565b348015610a0357600080fd5b5061078e601b5481565b348015610a1957600080fd5b50610743610a28366004614da4565b6119ab565b348015610a3957600080fd5b5061078e6119fd565b348015610a4e57600080fd5b50610743610a5d366004614da4565b611a47565b348015610a6e57600080fd5b50600854610765906001600160a01b031681565b348015610a8e57600080fd5b50600e5461071390600160b81b900460ff1681565b348015610aaf57600080fd5b50610743611a99565b348015610ac457600080fd5b50600b54610765906001600160a01b031681565b348015610ae457600080fd5b50610743610af3366004614e80565b611b11565b348015610b0457600080fd5b5061078e610b13366004614da4565b611c6f565b348015610b2457600080fd5b50600e5461071390600160d81b900460ff1681565b348015610b4557600080fd5b5061078e60115481565b348015610b5b57600080fd5b50610743610b6a366004614e10565b611cdf565b348015610b7b57600080fd5b50610743610b8a366004614ebb565b611d67565b348015610b9b57600080fd5b50610743610baa366004614da4565b611ee5565b348015610bbb57600080fd5b5061078e601e5481565b348015610bd157600080fd5b50610743610be0366004614da4565b611fe2565b348015610bf157600080fd5b50600e5461071390600160e81b900460ff1681565b348015610c1257600080fd5b50610743610c21366004614e10565b612034565b348015610c3257600080fd5b50610743610c41366004614e49565b61208f565b348015610c5257600080fd5b50610743610c61366004614da4565b612191565b348015610c7257600080fd5b506107436122a1565b348015610c8757600080fd5b5061078e610c96366004614da4565b612310565b348015610ca757600080fd5b5061074361232b565b348015610cbc57600080fd5b50610743610ccb366004614da4565b6123ab565b348015610cdc57600080fd5b50600a54610765906001600160a01b031681565b348015610cfc57600080fd5b50610713610d0b366004614da4565b602a6020526000908152604090205460ff1681565b348015610d2c57600080fd5b50610743610d3b366004614edd565b61245f565b348015610d4c57600080fd5b5061078e601f5481565b348015610d6257600080fd5b50600d54610765906001600160a01b031681565b348015610d8257600080fd5b50610743610d91366004614e49565b6124ad565b348015610da257600080fd5b50610743610db1366004614e49565b61257e565b348015610dc257600080fd5b50610743610dd1366004614edd565b6125b3565b348015610de257600080fd5b5060055461010090046001600160a01b0316610765565b348015610e0557600080fd5b50600f546107139060ff1681565b348015610e1f57600080fd5b50600e5461071390600160f01b900460ff1681565b348015610e4057600080fd5b506106dd612601565b348015610e5557600080fd5b5061078e612610565b348015610e6a57600080fd5b50600e5461071390600160c01b900460ff1681565b348015610e8b57600080fd5b50610743610e9a366004614fd9565b61265a565b348015610eab57600080fd5b50610743610eba366004614e10565b6127e1565b348015610ecb57600080fd5b5061078e60235481565b348015610ee157600080fd5b50610713610ef0366004614dc1565b6128b3565b348015610f0157600080fd5b506107436129d4565b348015610f1657600080fd5b50610713610f25366004614d78565b612a8b565b348015610f3657600080fd5b5061078e60185481565b348015610f4c57600080fd5b5061078e60125481565b348015610f6257600080fd5b50610713610f71366004614d78565b612ada565b348015610f8257600080fd5b5061078e60245481565b348015610f9857600080fd5b50600e5461071390600160d01b900460ff1681565b348015610fb957600080fd5b50610713610fc8366004614da4565b60276020526000908152604090205460ff1681565b348015610fe957600080fd5b50610743610ff836600461509d565b612ae7565b34801561100957600080fd5b50610743611018366004614da4565b612c90565b34801561102957600080fd5b50610713611038366004614da4565b60296020526000908152604090205460ff1681565b34801561105957600080fd5b50600e5461071390600160b01b900460ff1681565b34801561107a57600080fd5b5061078e60215481565b34801561109057600080fd5b5061074361109f366004614d78565b612cf2565b3480156110b057600080fd5b5061078e6110bf366004614da4565b602b6020526000908152604090205481565b3480156110dd57600080fd5b50600e5461071390600160a01b900460ff1681565b3480156110fe57600080fd5b5061078e60105481565b34801561111457600080fd5b50610743611123366004615105565b612e12565b34801561113457600080fd5b50610743611143366004615150565b612e8d565b34801561115457600080fd5b50610743611163366004614e49565b612f6f565b34801561117457600080fd5b5061078e60205481565b34801561118a57600080fd5b5061078e601a5481565b3480156111a057600080fd5b506107436111af3660046151cb565b612fa4565b3480156111c057600080fd5b5061078e60225481565b3480156111d657600080fd5b506107436111e5366004615105565b6130e8565b3480156111f657600080fd5b5061078e60145481565b34801561120c57600080fd5b5061078e60135481565b34801561122257600080fd5b50610713611231366004614da4565b60286020526000908152604090205460ff1681565b34801561125257600080fd5b5061078e611261366004615277565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561129857600080fd5b5061078e6112a7366004614da4565b613164565b3480156112b857600080fd5b506107436112c7366004614edd565b613197565b3480156112d857600080fd5b506109526112e7366004614da4565b6131e5565b3480156112f857600080fd5b50600e5461071390600160f81b900460ff1681565b34801561131957600080fd5b5061078e601d5481565b34801561132f57600080fd5b5061074361133e366004614e49565b613227565b34801561134f57600080fd5b5061074361135e366004614da4565b613288565b34801561136f57600080fd5b50600754610765906001600160a01b031681565b34801561138f57600080fd5b5061074361139e366004614edd565b6135ff565b3480156113af57600080fd5b506107436113be366004614da4565b613674565b3480156113cf57600080fd5b506107436113de3660046152a5565b613770565b3480156113ef57600080fd5b50600f5461071390610100900460ff1681565b34801561140e57600080fd5b5061078e60195481565b34801561142457600080fd5b5061078e60175481565b34801561143a57600080fd5b5061078e6137d3565b606060038054611452906152c3565b80601f016020809104026020016040519081016040528092919081815260200182805461147e906152c3565b80156114cb5780601f106114a0576101008083540402835291602001916114cb565b820191906000526020600020905b8154815290600101906020018083116114ae57829003601f168201915b5050505050905090565b60006114e2338484613883565b5060015b92915050565b6005546001600160a01b036101009091041633146115255760405162461bcd60e51b815260040161151c906152fd565b60405180910390fd5b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b5050505061158f816001611cdf565b6001600160a01b03166000908152602a60205260409020805460ff19166001179055565b60006115c08484846139a8565b611612843361160d8560405180606001604052806028815260200161578b602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190614100565b613883565b5060019392505050565b6005546001600160a01b0361010090910416331461164c5760405162461bcd60e51b815260040161151c906152fd565b6001600160a01b0382166000818152602a6020908152604091829020805460ff191685151590811790915591519182527fb9106fbc209b7c7e02cbe18cd9dae6cc424cb412a970afdd18ff8ba07f19bb7991015b60405180910390a25050565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171a9190615332565b905090565b6005546001600160a01b0361010090910416331461174f5760405162461bcd60e51b815260040161151c906152fd565b600754604051632b2e05c160e01b81526001600160a01b03838116600483015290911690632b2e05c1906024015b600060405180830381600087803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b5050505050565b600754604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd906024015b61010060405180830381865afa15801561180e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611832919061534b565b97509750975097509750975097509750919395975091939597565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916114e291859061160d908661381d565b6005546001600160a01b036101009091041633146118b35760405162461bcd60e51b815260040161151c906152fd565b600754604051630dcb2e8960e01b8152600481018390526001600160a01b0390911690630dcb2e899060240161177d565b6005546001600160a01b036101009091041633146119145760405162461bcd60e51b815260040161151c906152fd565b600f805461ff00191661010084151502179055600961193490600a6154af565b61193e90826154be565b602455606461194c60025490565b61195691906154dd565b60245410156119a75760405162461bcd60e51b815260206004820152601960248201527f6d61782077616c6c6574206d696e20616d6f756e743a20312500000000000000604482015260640161151c565b5050565b6005546001600160a01b036101009091041633146119db5760405162461bcd60e51b815260040161151c906152fd565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6007546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b6005546001600160a01b03610100909104163314611a775760405162461bcd60e51b815260040161151c906152fd565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0e91906154ff565b50565b6005546001600160a01b03610100909104163314611b415760405162461bcd60e51b815260040161151c906152fd565b600e805460ff60b81b1916600160b81b8615150217905560168390556009611b6a90600a6154af565b611b7490836154be565b601455611b836009600a6154af565b611b8d90826154be565b60158190556014541015611bf85760405162461bcd60e51b815260206004820152602c60248201527f596f752063616e6e6f742073776170206d6f7265207468656e20746865206d6960448201526b1b9a5b5d5b48185b5bdd5b9d60a21b606482015260840161151c565b6064611c0360025490565b611c0d91906154dd565b6015541115611c695760405162461bcd60e51b815260206004820152602260248201527f746f6b656e20746f2073776170206c696d6974656420746f20312520737570706044820152616c7960f01b606482015260840161151c565b50505050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611cbb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e69190615332565b6005546001600160a01b03610100909104163314611d0f5760405162461bcd60e51b815260040161151c906152fd565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016116a0565b6005546001600160a01b03610100909104163314611d975760405162461bcd60e51b815260040161151c906152fd565b611da36009600a6154af565b611dad90836154be565b601255611dbc6009600a6154af565b611dc690826154be565b601355620186a0611dd660025490565b611de091906154dd565b6012541015611e575760405162461bcd60e51b815260206004820152603960248201527f6d61784275795478416d6f756e742073686f756c64206265206174206c65617360448201527f7420302e30303125206f6620746f74616c20737570706c792e00000000000000606482015260840161151c565b620186a0611e6460025490565b611e6e91906154dd565b60135410156119a75760405162461bcd60e51b815260206004820152603a60248201527f6d617853656c6c5478416d6f756e742073686f756c64206265206174206c656160448201527f737420302e30303125206f6620746f74616c20737570706c792e000000000000606482015260840161151c565b6005546001600160a01b03610100909104163314611f155760405162461bcd60e51b815260040161151c906152fd565b6006546001600160a01b0390811690821603611f855760405162461bcd60e51b815260206004820152602960248201527f4c756e613a2054686520726f7574657220616c7265616479206861732074686160448201526874206164647265737360b81b606482015260840161151c565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146120125760405162461bcd60e51b815260040161151c906152fd565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146120645760405162461bcd60e51b815260040161151c906152fd565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6005546001600160a01b036101009091041633146120bf5760405162461bcd60e51b815260040161151c906152fd565b6007546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015612112573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612136919061551c565b604080518481526020810184905290810182905260608101889052929550909350915032906000907f02ee4fa0e0f93643fbf0adbcf4f53d3567a808a3b2012fef74dc80db086f6a239060800160405180910390a350505050565b6005546001600160a01b036101009091041633146121c15760405162461bcd60e51b815260040161151c906152fd565b6009546001600160a01b039081169082160361223a5760405162461bcd60e51b815260206004820152603260248201527f4c756e613a2054686520646576656c6f7065722077616c6c657420697320616c60448201527172656164792074686973206164647265737360701b606482015260840161151c565b612245816001611cdf565b6009546040516001600160a01b038084169216907f88bf70d4f3c446213b5064d7cfe95ec0ed196748f014c19a833117bac32468fd90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146122d15760405162461bcd60e51b815260040161151c906152fd565b600554604051479161010090046001600160a01b0316906108fc8315029083906000818181858888f193505050501580156119a7573d6000803e3d6000fd5b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0361010090910416331461235b5760405162461bcd60e51b815260040161151c906152fd565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b036101009091041633146123db5760405162461bcd60e51b815260040161151c906152fd565b600b546001600160a01b03908116908216036124545760405162461bcd60e51b815260206004820152603260248201527f4c756e613a20546865206c69717569646974792057616c6c657420697320616c60448201527172656164792074686973206164647265737360701b606482015260840161151c565b6119db816001611cdf565b6005546001600160a01b0361010090910416331461248f5760405162461bcd60e51b815260040161151c906152fd565b600e8054911515600160c81b0260ff60c81b19909216919091179055565b6005546001600160a01b036101009091041633146124dd5760405162461bcd60e51b815260040161151c906152fd565b60235481036125495760405162461bcd60e51b815260206004820152603260248201527f4c756e613a2043616e6e6f742075706461746520676173466f7250726f63657360448201527173696e6720746f2073616d652076616c756560701b606482015260840161151c565b6023819055604051819081907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a350565b6005546001600160a01b036101009091041633146125ae5760405162461bcd60e51b815260040161151c906152fd565b601055565b6005546001600160a01b036101009091041633146125e35760405162461bcd60e51b815260040161151c906152fd565b600e8054911515600160c01b0260ff60c01b19909216919091179055565b606060048054611452906152c3565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b6005546001600160a01b0361010090910416331461268a5760405162461bcd60e51b815260040161151c906152fd565b815181518082146126dd5760405162461bcd60e51b815260206004820152601960248201527f6c69737473206d75737420686176652073616d652073697a6500000000000000604482015260640161151c565b60005b83518110156117ab578381815181106126fb576126fb61554a565b6020026020010151602a60008784815181106127195761271961554a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555084818151811061276a5761276a61554a565b60200260200101516001600160a01b03167fb9106fbc209b7c7e02cbe18cd9dae6cc424cb412a970afdd18ff8ba07f19bb798583815181106127ae576127ae61554a565b60200260200101516040516127c7911515815260200190565b60405180910390a2806127d981615560565b9150506126e0565b6005546001600160a01b036101009091041633146128115760405162461bcd60e51b815260040161151c906152fd565b6008546001600160a01b03908116908316036128a95760405162461bcd60e51b815260206004820152604b60248201527f4c756e613a205468652050616e63616b655377617020706169722063616e6e6f60448201527f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b6560648201526a744d616b6572506169727360a81b608482015260a40161151c565b6119a7828261412f565b6005546000906001600160a01b036101009091041633146128e65760405162461bcd60e51b815260040161151c906152fd565b81600003612959576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015612932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129569190615332565b91505b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af11580156129a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cc91906154ff565b949350505050565b6005546001600160a01b03610100909104163314612a045760405162461bcd60e51b815260040161151c906152fd565b60056017819055601881905560026019819055601a8190556001601b819055601c819055601d819055601e819055601f8190556020819055612a5792612a5191908290829082908261381d565b9061381d565b602181905550612a86601a54612a51601d54612a51602054612a51601c5460185461381d90919063ffffffff16565b602255565b60006114e2338461160d856040518060600160405280602581526020016157b3602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190614100565b60006114e23384846139a8565b6005546001600160a01b03610100909104163314612b175760405162461bcd60e51b815260040161151c906152fd565b89601781905550866018819055508360198190555082601a8190555081601e8190555080601d8190555088601f819055508560208190555087601b8190555084601c81905550612b86601954612a51601e54612a51601f54612a51601b5460175461381d90919063ffffffff16565b602181905550612bb5601a54612a51601d54612a51602054612a51601c5460185461381d90919063ffffffff16565b602255602154612bd557600e80546001600160f81b031690556000612bed565b600e80546001600160f81b0316600160f81b17905560015b50600060225411612c0957600f805460ff191690556000612c1a565b600f805460ff191660019081179091555b506019602254602154612c2d9190615579565b10612c845760405162461bcd60e51b815260206004820152602160248201527f796f752063616e6e6f74207365742066656573206d6f7265207468656e2032356044820152602560f81b606482015260840161151c565b50505050505050505050565b6005546001600160a01b03610100909104163314612cc05760405162461bcd60e51b815260040161151c906152fd565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db09060240161177d565b6005546001600160a01b03610100909104163314612d225760405162461bcd60e51b815260040161151c906152fd565b6007546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1158015612d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d94919061551c565b5050600c80546001600160a01b0319166001600160a01b03858116918217909255600754604051633f1f3fe960e11b815260048101929092529091169150637e3e7fd2906024015b600060405180830381600087803b158015612df657600080fd5b505af1158015612e0a573d6000803e3d6000fd5b505050505050565b6005546001600160a01b03610100909104163314612e425760405162461bcd60e51b815260040161151c906152fd565b600e8054911515600160a81b0260ff60a81b19931515600160b01b0260ff60b01b19951515600160a01b029590951662ff00ff60a01b19909316929092179390931791909116179055565b6005546001600160a01b03610100909104163314612ebd5760405162461bcd60e51b815260040161151c906152fd565b60005b82811015612f2e578160286000868685818110612edf57612edf61554a565b9050602002016020810190612ef49190614da4565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580612f2681615560565b915050612ec0565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051612f6293929190615591565b60405180910390a1505050565b6005546001600160a01b03610100909104163314612f9f5760405162461bcd60e51b815260040161151c906152fd565b601155565b6005546001600160a01b03610100909104163314612fd45760405162461bcd60e51b815260040161151c906152fd565b60005b81518110156130e3576000838281518110612ff457612ff461554a565b602002602001015190506000613008600990565b61301390600a6154af565b8484815181106130255761302561554a565b602002602001015161303791906154be565b905061305b6130546005546001600160a01b036101009091041690565b83836142be565b6007546001600160a01b031663e30443bc8361307681612310565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156130bc57600080fd5b505af19250505080156130cd575060015b50505080806130db90615560565b915050612fd7565b505050565b6005546001600160a01b036101009091041633146131185760405162461bcd60e51b815260040161151c906152fd565b600e8054921515600160f81b026001600160f81b03941515600160f01b02949094166001600160f01b0390931692909217929092179055600f805491151560ff19909216919091179055565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611c9e565b6005546001600160a01b036101009091041633146131c75760405162461bcd60e51b815260040161151c906152fd565b600e8054911515600160d81b0260ff60d81b19909216919091179055565b60075460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f1906024016117f0565b6005546001600160a01b036101009091041633146132575760405162461bcd60e51b815260040161151c906152fd565b60075460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c79060240161177d565b6005546001600160a01b036101009091041633146132b85760405162461bcd60e51b815260040161151c906152fd565b6007546001600160a01b03908116908216036133325760405162461bcd60e51b815260206004820152603360248201527f4c756e613a20546865206469766964656e6420747261636b657220616c7265616044820152726479206861732074686174206164647265737360681b606482015260840161151c565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561337f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a391906155ea565b6001600160a01b03161461342f5760405162461bcd60e51b815260206004820152604760248201527f4c756e613a20546865206e6577206469766964656e6420747261636b6572206d60448201527f757374206265206f776e656420627920746865204c756e6120746f6b656e20636064820152661bdb9d1c9858dd60ca1b608482015260a40161151c565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b15801561347157600080fd5b505af1158015613485573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b1580156134ca57600080fd5b505af11580156134de573d6000803e3d6000fd5b505060065460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561352957600080fd5b505af115801561353d573d6000803e3d6000fd5b5050600d5460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b15801561358857600080fd5b505af115801561359c573d6000803e3d6000fd5b50506007546040516001600160a01b03918216935090851691507fbcfaf8fe6449758c7941a8dc064e50f6df533f4808331d1a26ec6231c290986390600090a3600780546001600160a01b0319166001600160a01b039290921691909117905550565b6005546001600160a01b0361010090910416331461362f5760405162461bcd60e51b815260040161151c906152fd565b600e54600160d01b900460ff161561364657600080fd5b600e805460ff60d01b1916600160d01b8315158102919091179182905560ff91041615611b0e574260265550565b6005546001600160a01b036101009091041633146136a45760405162461bcd60e51b815260040161151c906152fd565b6001600160a01b0381166137095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161151c565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b036101009091041633146137a05760405162461bcd60e51b815260040161151c906152fd565b600e8054921515600160e81b0260ff60e81b19921515600160e01b029290921661ffff60e01b1990931692909217179055565b60075460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b60008061382a8385615579565b90508381101561387c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161151c565b9392505050565b6001600160a01b0383166138e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161151c565b6001600160a01b0382166139465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161151c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000806014546139b730612310565b600e549111159150600160d01b900460ff16613a44576001600160a01b03851660009081526027602052604090205460ff16613a445760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616465206265666f726520746865206d61726b6574206f60448201526570656e696e6760d01b606482015260840161151c565b600f5462010000900460ff16613f1e576001600160a01b03851660009081526029602052604090205460ff1615613c06576001600160a01b0384166000908152602860205260409020546001925060ff16613c0157600e54600160e81b900460ff1615613afd57601254831115613afd5760405162461bcd60e51b815260206004820152601d60248201527f6d61784275795478416d6f756e74204c696d6974204578636565646564000000604482015260640161151c565b42602654601e613b0d9190615579565b1015613c0157426026546007613b239190615579565b10613b705760405162461bcd60e51b815260206004820152601960248201527f596f752063616e6e6f7420627579206174206c61756e63682e00000000000000604482015260640161151c565b6010546001600160a01b0385166000908152602b60205260409020544291613b9791615579565b1115613be55760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e6e6f7420646f206d756c74692d627579206f72646572732e00604482015260640161151c565b6001600160a01b0384166000908152602b602052604090204290555b613d21565b6001600160a01b03841660009081526029602052604090205460ff1615613d2157600e5460029250600160b81b900460ff168015613c595750600854600090613c57906001600160a01b0316612310565b115b8015613c675750600f5460ff165b15613c9d57808015613c88575042601654602554613c859190615579565b11155b15613c9d5742602555601554613c9d90614441565b6001600160a01b03851660009081526028602052604090205460ff16613d2157600e54600160e01b900460ff1615613d2157601354831115613d215760405162461bcd60e51b815260206004820152601e60248201527f6d617853656c6c5478416d6f756e74204c696d69742045786365656465640000604482015260640161151c565b600f54610100900460ff1615613dab5760245483613d3e86612310565b613d489190615579565b111580613d6d57506001600160a01b0384166000908152602a602052604090205460ff165b613dab5760405162461bcd60e51b815260206004820152600f60248201526e1b585e15d85b1b195d081b1a5b5a5d608a1b604482015260640161151c565b600e54600160f01b900460ff1615613f1e57816001148015613dd65750600e54600160f81b900460ff165b8015613dfb57506001600160a01b03841660009081526028602052604090205460ff16155b15613e73576000606460215485613e1291906154be565b613e1c91906154dd565b9050613e288185615607565b93506000602154601e5483613e3d91906154be565b613e4791906154dd565b9050613e548730846142be565b600d54613e6c9030906001600160a01b0316836142be565b5050613f1e565b816002148015613e855750600f5460ff165b8015613eaa57506001600160a01b03851660009081526028602052604090205460ff16155b15613f1e576000606460225485613ec191906154be565b613ecb91906154dd565b9050613ed78185615607565b93506000602254601d5483613eec91906154be565b613ef691906154dd565b9050613f038730846142be565b600d54613f1b9030906001600160a01b0316836142be565b50505b613f298585856142be565b6007546001600160a01b031663e30443bc86613f4481612310565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613f8a57600080fd5b505af1925050508015613f9b575060015b506007546001600160a01b031663e30443bc85613fb781612310565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613ffd57600080fd5b505af192505050801561400e575060015b50600f5462010000900460ff161580156140315750600e54600160c01b900460ff165b156117ab576023546007546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156140a3575060408051601f3d908101601f191682019092526140a09181019061551c565b60015b15612e0a5760408051848152602081018490529081018290526060810185905232906001907f02ee4fa0e0f93643fbf0adbcf4f53d3567a808a3b2012fef74dc80db086f6a239060800160405180910390a3505050505050505050565b600081848411156141245760405162461bcd60e51b815260040161151c9190614d0e565b506129cc8385615607565b6005546001600160a01b0361010090910416331461415f5760405162461bcd60e51b815260040161151c906152fd565b6001600160a01b03821660009081526029602052604090205481151560ff9091161515036141f55760405162461bcd60e51b815260206004820152603e60248201527f4c756e613a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c75650000606482015260840161151c565b6001600160a01b0382166000908152602960205260409020805460ff191682158015919091179091556142825760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561426957600080fd5b505af115801561427d573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166143225760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161151c565b6001600160a01b0382166143845760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161151c565b6143c181604051806060016040528060268152602001615765602691396001600160a01b0386166000908152602081905260409020549190614100565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546143f0908261381d565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161399b565b600f805462ff00001916620100001790556018546000906064906144669084906154be565b61447091906154dd565b90506000606483601d5461448491906154be565b61448e91906154dd565b9050600060026064856020546144a491906154be565b6144ae91906154dd565b6144b891906154dd565b9050600081836144c88688615607565b6144d29190615607565b6144dc9190615607565b90506144e7816147e8565b600a546144ff9030906001600160a01b0316856142be565b600e544790600160a01b900460ff16801561451c57506000601c54115b156145e857600061454460225461453e601c548561490c90919063ffffffff16565b9061498e565b6009546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114614596576040519150601f19603f3d011682016040523d82523d6000602084013e61459b565b606091505b5050905080156145d9576040518281527fbfb2667b387ada10740ee93384bd3392b9b402d6f5d4c291fb6beca77276cb0d9060200160405180910390a15b6145e38284615607565b925050505b600e54600160a81b900460ff16801561460357506000601a54115b156146c957600061462560225461453e601a548561490c90919063ffffffff16565b600a546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114614677576040519150601f19603f3d011682016040523d82523d6000602084013e61467c565b606091505b5050905080156146ba576040518281527f14c3945b0e552cb130d2e123df9730f5b69c4872acd0fc354d63649227d61f129060200160405180910390a15b6146c48284615607565b925050505b600e54600160b01b900460ff161561471c5760006146f860225461453e6020548561490c90919063ffffffff16565b9050600581111561471a5761470d84826149e9565b6147178183615607565b91505b505b600e54600160c01b900460ff16156147d4576402540be4008111156147d45761474481614a96565b600c546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561478d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147b19190615332565b600c546007549192506147d2916001600160a01b0391821691168084614bf5565b505b5050600f805462ff00001916905550505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061481d5761481d61554a565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061489a91906155ea565b816001815181106148ad576148ad61554a565b6001600160a01b0392831660209182029290920101526006546148d39130911684613883565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ddc908590600090869030904290600401615662565b60008260000361491e575060006114e6565b600061492a83856154be565b90508261493785836154dd565b1461387c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161151c565b60008082116149df5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161151c565b61387c82846154dd565b600654614a019030906001600160a01b031684613883565b600654600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015614a71573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117ab919061551c565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b2491906155ea565b81600081518110614b3757614b3761554a565b6001600160a01b039283166020918202929092010152600c54825191169082906001908110614b6857614b6861554a565b6001600160a01b039283166020918202929092010152600654604051637ff36ab560e01b8152911690637ff36ab5908490614bae9060009086903090429060040161569e565b60006040518083038185885af1158015614bcc573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526130e391908101906156d3565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390526000919086169063a9059cbb906044016020604051808303816000875af1158015614c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6c91906154ff565b905080156117ab57604051633243c79160e01b8152600481018390526001600160a01b03841690633243c79190602401600060405180830381600087803b158015614cb657600080fd5b505af1158015614cca573d6000803e3d6000fd5b505050507fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b182604051614cff91815260200190565b60405180910390a15050505050565b600060208083528351808285015260005b81811015614d3b57858101830151858201604001528201614d1f565b81811115614d4d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611b0e57600080fd5b60008060408385031215614d8b57600080fd5b8235614d9681614d63565b946020939093013593505050565b600060208284031215614db657600080fd5b813561387c81614d63565b600080600060608486031215614dd657600080fd5b8335614de181614d63565b92506020840135614df181614d63565b929592945050506040919091013590565b8015158114611b0e57600080fd5b60008060408385031215614e2357600080fd5b8235614e2e81614d63565b91506020830135614e3e81614e02565b809150509250929050565b600060208284031215614e5b57600080fd5b5035919050565b60008060408385031215614e7557600080fd5b8235614d9681614e02565b60008060008060808587031215614e9657600080fd5b8435614ea181614e02565b966020860135965060408601359560600135945092505050565b60008060408385031215614ece57600080fd5b50508035926020909101359150565b600060208284031215614eef57600080fd5b813561387c81614e02565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f3957614f39614efa565b604052919050565b600067ffffffffffffffff821115614f5b57614f5b614efa565b5060051b60200190565b600082601f830112614f7657600080fd5b81356020614f8b614f8683614f41565b614f10565b82815260059290921b84018101918181019086841115614faa57600080fd5b8286015b84811015614fce578035614fc181614d63565b8352918301918301614fae565b509695505050505050565b60008060408385031215614fec57600080fd5b823567ffffffffffffffff8082111561500457600080fd5b61501086838701614f65565b935060209150818501358181111561502757600080fd5b85019050601f8101861361503a57600080fd5b8035615048614f8682614f41565b81815260059190911b8201830190838101908883111561506757600080fd5b928401925b8284101561508e57833561507f81614e02565b8252928401929084019061506c565b80955050505050509250929050565b6000806000806000806000806000806101408b8d0312156150bd57600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b60008060006060848603121561511a57600080fd5b833561512581614e02565b9250602084013561513581614e02565b9150604084013561514581614e02565b809150509250925092565b60008060006040848603121561516557600080fd5b833567ffffffffffffffff8082111561517d57600080fd5b818601915086601f83011261519157600080fd5b8135818111156151a057600080fd5b8760208260051b85010111156151b557600080fd5b6020928301955093505084013561514581614e02565b600080604083850312156151de57600080fd5b823567ffffffffffffffff808211156151f657600080fd5b61520286838701614f65565b935060209150818501358181111561521957600080fd5b85019050601f8101861361522c57600080fd5b803561523a614f8682614f41565b81815260059190911b8201830190838101908883111561525957600080fd5b928401925b8284101561508e5783358252928401929084019061525e565b6000806040838503121561528a57600080fd5b823561529581614d63565b91506020830135614e3e81614d63565b600080604083850312156152b857600080fd5b8235614e2e81614e02565b600181811c908216806152d757607f821691505b6020821081036152f757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561534457600080fd5b5051919050565b600080600080600080600080610100898b03121561536857600080fd5b885161537381614d63565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156154065781600019048211156153ec576153ec6153b5565b808516156153f957918102915b93841c93908002906153d0565b509250929050565b60008261541d575060016114e6565b8161542a575060006114e6565b8160018114615440576002811461544a57615466565b60019150506114e6565b60ff84111561545b5761545b6153b5565b50506001821b6114e6565b5060208310610133831016604e8410600b8410161715615489575081810a6114e6565b61549383836153cb565b80600019048211156154a7576154a76153b5565b029392505050565b600061387c60ff84168361540e565b60008160001904831182151516156154d8576154d86153b5565b500290565b6000826154fa57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561551157600080fd5b815161387c81614e02565b60008060006060848603121561553157600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060018201615572576155726153b5565b5060010190565b6000821982111561558c5761558c6153b5565b500190565b6040808252810183905260008460608301825b868110156155d45782356155b781614d63565b6001600160a01b03168252602092830192909101906001016155a4565b5080925050508215156020830152949350505050565b6000602082840312156155fc57600080fd5b815161387c81614d63565b600082821015615619576156196153b5565b500390565b600081518084526020808501945080840160005b838110156156575781516001600160a01b031687529582019590820190600101615632565b509495945050505050565b85815284602082015260a06040820152600061568160a083018661561e565b6001600160a01b0394909416606083015250608001529392505050565b8481526080602082015260006156b7608083018661561e565b6001600160a01b03949094166040830152506060015292915050565b600060208083850312156156e657600080fd5b825167ffffffffffffffff8111156156fd57600080fd5b8301601f8101851361570e57600080fd5b805161571c614f8682614f41565b81815260059190911b8201830190838101908783111561573b57600080fd5b928401925b8284101561575957835182529284019290840190615740565b97965050505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206f599188407554dcb4cc27ec80b0f9337faf328c920e3053abf767595830cea264736f6c634300080f0033
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.