Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 CHEESSE
Holders
52
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
3,727,044.27979196 CHEESSEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CHEESSE
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-20 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function getUnlockTime() public view returns (uint256) { return _lockTime; } function getTime() public view returns (uint256) { return block.timestamp; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Pair { function factory() external view returns (address); } interface IUniswapV2Router { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); 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; } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // solhint-disable contract CHEESSE is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address payable public marketingAddress = payable(0xd65B84C4E919aaD42F956d782d924DeE4bb10092); address payable public devAddress = payable(0xc5Aea1CFB5df024b92808d2A13Bb261759CE18c5); address payable public liquidityAddress = payable(0x3dd7bBaE16C97eCF0EBD1008da1b617560707f32); address payable public treasuryAddress = payable(0xd65B84C4E919aaD42F956d782d924DeE4bb10092); address private _owner; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; // Anti-whale limits bool public limitsInEffect = true; mapping(address => bool) public blacklist; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1_000_000_000 * 1e9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private constant _name = "Cheesse"; string private constant _symbol = "CHEESSE"; uint8 private constant _decimals = 9; // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract. uint256 private _taxFee; uint256 private _previousTaxFee = _taxFee; uint256 private _teamFee; uint256 private _liquidityFee; uint256 private _previousLiquidityFee = _liquidityFee; uint256 private constant BUY = 1; uint256 private constant SELL = 2; uint256 private constant TRANSFER = 3; uint256 private buyOrSellSwitch; // Here is where you set the fee breakdown uint256 public _buyTaxFee = 0; uint256 public _buyLiquidityFee = 2; uint256 public _buyTeamFee = 6; uint256 public _sellTaxFee = 0; uint256 public _sellLiquidityFee = 2; uint256 public _sellTeamFee = 6; // These values are % of team fees to distribute (add extra 0: 333 = 33.3%) // These combined values must be lower than 1000 (aka 100%) // Any leftover goes to marketing address uint256 public _percentTeamFundsToDev = 333; uint256 public _percentTeamFundsToTreasury = 333; uint256 public tradingActiveBlock = 0; // 0 means trading is not active uint256 public _liquidityTokensToSwap; uint256 public _teamTokensToSwap; uint256 public maxTransactionAmount; uint256 public maxWalletAmount; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; uint256 private minimumTokensBeforeSwap; IUniswapV2Router public uniswapV2Router; address public uniswapV2Pair; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; bool public tradingActive = false; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event SwapETHForTokens(uint256 amountIn, address[] path); event SwapTokensForETH(uint256 amountIn, address[] path); event SetAutomatedMarketMakerPair(address pair, bool value); event ExcludeFromReward(address excludedAddress); event IncludeInReward(address includedAddress); event ExcludeFromFee(address excludedAddress); event IncludeInFee(address includedAddress); event SetBuyFee(uint256 teamFee, uint256 liquidityFee, uint256 reflectFee); event SetSellFee(uint256 teamFee, uint256 liquidityFee, uint256 reflectFee); event TransferForeignToken(address token, uint256 amount); event UpdatedTeamAddress(address team); event UpdatedLiquidityAddress(address liquidity); event OwnerForcedSwapBack(uint256 timestamp); event BoughtEarly(address indexed sniper); event RemovedSniper(address indexed notsnipersupposedly); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() payable { _owner = msg.sender; _rOwned[_owner] = (_rTotal / 1000) * 30; _rOwned[address(this)] = (_rTotal / 1000) * 970; maxTransactionAmount = (_tTotal * 5) / 1000; // 0.5% maxTransactionAmountTxn maxWalletAmount = (_tTotal * 10) / 1000; // 1% maxWalletAmount minimumTokensBeforeSwap = (_tTotal * 5) / 10000; // 0.05% swap tokens amount _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromFee[liquidityAddress] = true; _isExcludedFromFee[treasuryAddress] = true; _isExcludedFromFee[devAddress] = true; excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(marketingAddress, true); excludeFromMaxTransaction(liquidityAddress, true); excludeFromMaxTransaction(devAddress, true); excludeFromMaxTransaction(treasuryAddress, true); emit Transfer(address(0), _owner, (_tTotal * 30) / 1000); emit Transfer(address(0), address(this), (_tTotal * 970) / 1000); } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function isExcludedFromReward(address account) external view returns (bool) { return _isExcluded[account]; } function totalFees() external view returns (uint256) { return _tFeeTotal; } // remove limits after token is stable - 30-60 minutes function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // once enabled, can never be turned off function enableTrading() internal onlyOwner { tradingActive = true; swapAndLiquifyEnabled = true; tradingActiveBlock = block.number; } // send tokens and ETH for liquidity to contract directly, then call this (not required, can still use Uniswap to add liquidity manually, but this ensures everything is excluded properly and makes for a great stealth launch) function launch() external onlyOwner returns (bool) { require(!tradingActive, "Trading is already active, cannot relaunch."); enableTrading(); IUniswapV2Router _uniswapV2Router = IUniswapV2Router( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; _approve(address(this), address(uniswapV2Router), _tTotal); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); require( address(this).balance > 0, "Must have ETH on contract to launch" ); addLiquidity(balanceOf(address(this)), address(this).balance); transferOwnership(_owner); return true; } function minimumTokensBeforeSwapAmount() external view returns (uint256) { return minimumTokensBeforeSwap; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; _isExcludedMaxTransactionAmount[pair] = value; if (value) { excludeFromReward(pair); } if (!value) { includeInReward(pair); } } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , , ) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner { require(!_isExcluded[account], "Account is already excluded"); require( _excluded.length + 1 <= 50, "Cannot exclude more than 50 accounts. Include a previously excluded address." ); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) public onlyOwner { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve( address owner, address spender, uint256 amount ) private { 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 _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!blacklist[from], "From address blacklist. Contact admin"); require(!blacklist[to], "To address blacklist. Contact admin"); if (!tradingActive) { require( _isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet." ); } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !inSwapAndLiquify ) { //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } if (!_isExcludedMaxTransactionAmount[to]) { require( balanceOf(to) + amount <= maxWalletAmount, "Max wallet exceeded" ); } } } uint256 totalTokensToSwap = _liquidityTokensToSwap.add( _teamTokensToSwap ); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; // swap and liquify if ( !inSwapAndLiquify && swapAndLiquifyEnabled && balanceOf(uniswapV2Pair) > 0 && totalTokensToSwap > 0 && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && automatedMarketMakerPairs[to] && overMinimumTokenBalance ) { swapBack(); } bool takeFee = true; // If any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; buyOrSellSwitch = TRANSFER; // TRANSFERs do not pay a tax. } else { // Buy if (automatedMarketMakerPairs[from]) { removeAllFee(); buyOrSellSwitch = BUY; if (block.number == tradingActiveBlock) { _taxFee = 0; _liquidityFee = 90; } else if (block.number == tradingActiveBlock + 1) { _taxFee = 0; _liquidityFee = 50; } else { _taxFee = _buyTaxFee; _liquidityFee = _buyLiquidityFee + _buyTeamFee; } } // Sell else if (automatedMarketMakerPairs[to]) { removeAllFee(); buyOrSellSwitch = SELL; // higher tax if bought in the same block as trading active for 72 hours (sniper protect) if (block.number == tradingActiveBlock) { _taxFee = 0; _liquidityFee = 90; } else if (block.number == tradingActiveBlock + 1) { _taxFee = 0; _liquidityFee = 50; } else { _taxFee = _sellTaxFee; _liquidityFee = _sellLiquidityFee + _sellTeamFee; } // Normal transfers do not get taxed } else { removeAllFee(); buyOrSellSwitch = TRANSFER; // TRANSFERs do not pay a tax. } } _tokenTransfer(from, to, amount, takeFee); } function swapBack() private lockTheSwap { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = _liquidityTokensToSwap + _teamTokensToSwap; // Halve the amount of liquidity tokens uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2); uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity); uint256 initialETHBalance = address(this).balance; swapTokensForETH(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(_teamTokensToSwap).div( totalTokensToSwap ); uint256 ethForLiquidity = ethBalance.sub(ethForMarketing); uint256 ethForDev = ethForMarketing.mul(_percentTeamFundsToDev).div( 1000 ); uint256 ethForTreasury = ethForMarketing .mul(_percentTeamFundsToTreasury) .div(1000); ethForMarketing -= ethForDev; ethForMarketing -= ethForTreasury; _liquidityTokensToSwap = 0; _teamTokensToSwap = 0; (bool success, ) = address(marketingAddress).call{ value: ethForMarketing }(""); (success, ) = address(devAddress).call{ value: ethForDev }(""); (success, ) = address(treasuryAddress).call{ value: ethForTreasury }( "" ); addLiquidity(tokensForLiquidity, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); // send leftover to the marketing wallet so it doesn't get stuck on the contract. if (address(this).balance > 1e17) { (success, ) = address(marketingAddress).call{ value: address(this).balance }(""); } } // force Swap back if slippage above 49% for launch. function forceSwapBack() external onlyOwner { uint256 contractBalance = balanceOf(address(this)); require( contractBalance >= _tTotal / 100, "Can only swap back if more than 1% of tokens stuck on contract" ); swapBack(); emit OwnerForcedSwapBack(block.timestamp); } // Add to blacklist function addToBlacklist(address account) external onlyOwner { require(account != address(0), "Cannot blacklist 0 address"); blacklist[account] = true; } // Remove from blacklist function removeFromBlacklist(address account) external onlyOwner { require(account != address(0), "Cannot use 0 address"); blacklist[account] = false; } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{ value: ethAmount }( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityAddress, block.timestamp ); } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, _getRate() ); return ( rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity ); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256 ) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { if (buyOrSellSwitch == BUY) { _liquidityTokensToSwap += (tLiquidity * _buyLiquidityFee) / _liquidityFee; _teamTokensToSwap += (tLiquidity * _buyTeamFee) / _liquidityFee; } else if (buyOrSellSwitch == SELL) { _liquidityTokensToSwap += (tLiquidity * _sellLiquidityFee) / _liquidityFee; _teamTokensToSwap += (tLiquidity * _sellTeamFee) / _liquidityFee; } uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) external view returns (bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; emit ExcludeFromFee(account); } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; emit IncludeInFee(account); } function setMaxTransactionAmount(uint256 newMaxBuy) external onlyOwner { require(newMaxBuy > 0, "Cannot be 0"); maxTransactionAmount = (_tTotal * newMaxBuy) / 1000; } function setMaxWallet(uint256 newMaxWallet) external onlyOwner { require(newMaxWallet > 0, "Cannot be 0"); maxWalletAmount = (_tTotal * newMaxWallet) / 1000; } function setBuyFee( uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyTeamFee ) external onlyOwner { _buyTaxFee = buyTaxFee; _buyLiquidityFee = buyLiquidityFee; _buyTeamFee = buyTeamFee; require( _buyTaxFee + _buyLiquidityFee + _buyTeamFee <= 100, "Must keep buy taxes below 100%" ); emit SetBuyFee(buyTeamFee, buyLiquidityFee, buyTaxFee); } function setSellFee( uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellTeamFee ) external onlyOwner { _sellTaxFee = sellTaxFee; _sellLiquidityFee = sellLiquidityFee; _sellTeamFee = sellTeamFee; require( _sellTaxFee + _sellLiquidityFee + _sellTeamFee <= 100, "Must keep sell taxes below 100%" ); emit SetSellFee(sellTeamFee, sellLiquidityFee, sellTaxFee); } function setTeamSplit(uint256 treasurySplit, uint256 devSplit) external onlyOwner { require(treasurySplit + devSplit < 1000, "Split over 100%"); _percentTeamFundsToTreasury = treasurySplit; _percentTeamFundsToDev = devSplit; } function setMarketingAddress(address _marketingAddress) external onlyOwner { require( _marketingAddress != address(0), "_marketingAddress address cannot be 0" ); _isExcludedFromFee[marketingAddress] = false; marketingAddress = payable(_marketingAddress); _isExcludedFromFee[marketingAddress] = true; emit UpdatedTeamAddress(_marketingAddress); } function setLiquidityAddress(address _liquidityAddress) public onlyOwner { require( _liquidityAddress != address(0), "_liquidityAddress address cannot be 0" ); liquidityAddress = payable(_liquidityAddress); _isExcludedFromFee[liquidityAddress] = true; emit UpdatedLiquidityAddress(_liquidityAddress); } function setDeveloperAddress(address _devAddress) external onlyOwner { require(_devAddress != address(0), "Cannot be 0 address"); devAddress = payable(_devAddress); _isExcludedFromFee[devAddress] = true; } function setTreasuryAddress(address _treasuryAddress) external onlyOwner { require(_treasuryAddress != address(0), "Cannot be 0 address"); treasuryAddress = payable(_treasuryAddress); _isExcludedFromFee[treasuryAddress] = true; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } // To receive ETH from uniswapV2Router when swapping receive() external payable {} function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); require(_token != address(this), "Can't withdraw native tokens"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); emit TransferForeignToken(_token, _contractBalance); } // withdraw ETH if stuck before launch function withdrawStuckETH() external onlyOwner { require(!tradingActive, "Can only withdraw if trading hasn't started"); bool success; (success, ) = address(msg.sender).call{ value: address(this).balance }( "" ); } }
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":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidity","type":"address"}],"name":"UpdatedLiquidityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team","type":"address"}],"name":"UpdatedTeamAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_percentTeamFundsToDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_percentTeamFundsToTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","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":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyTeamFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDeveloperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTeamFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"treasurySplit","type":"uint256"},{"internalType":"uint256","name":"devSplit","type":"uint256"}],"name":"setTeamSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600380546001600160a01b031990811673d65b84c4e919aad42f956d782d924dee4bb1009290811790925560048054821673c5aea1cfb5df024b92808d2a13bb261759ce18c5179055600580548216733dd7bbae16c97ecf0ebd1008da1b617560707f32179055600680549091169091179055600b805460ff191660011790556200009a670de0b6b3a764000060001962000530565b620000a89060001962000516565b60105560125460135560155460165560006018819055600260198190556006601a819055601b839055601c91909155601d5561014d601e819055601f5560208190556029805461ffff60a81b19169055620001026200041e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b0319163317905560105462000170906103e890620004dd565b6200017d90601e620004f4565b6007546001600160a01b0316600090815260086020526040902055601054620001aa906103e890620004dd565b620001b8906103ca620004f4565b306000908152600860205260409020556103e8620001e0670de0b6b3a76400006005620004f4565b620001ec9190620004dd565b6023556103e862000207670de0b6b3a7640000600a620004f4565b620002139190620004dd565b6024556127106200022e670de0b6b3a76400006005620004f4565b6200023a9190620004dd565b6027556001600d60006200024d62000422565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155600354821684528284208054861682179055600554821684528284208054861682179055600654821684528284208054861682179055600454909116835291208054909216179055620002f0620002e862000422565b600162000431565b620002fd30600162000431565b6200030c61dead600162000431565b60035462000325906001600160a01b0316600162000431565b6005546200033e906001600160a01b0316600162000431565b60045462000357906001600160a01b0316600162000431565b60065462000370906001600160a01b0316600162000431565b6007546001600160a01b0316600060008051602062004d058339815191526103e8620003a6670de0b6b3a7640000601e620004f4565b620003b29190620004dd565b604051620003c19190620004d4565b60405180910390a330600060008051602062004d058339815191526103e8620003f5670de0b6b3a76400006103ca620004f4565b620004019190620004dd565b604051620004109190620004d4565b60405180910390a362000573565b3390565b6000546001600160a01b031690565b6200043b6200041e565b6000546001600160a01b03908116911614620004745760405162461bcd60e51b81526004016200046b906200049f565b60405180910390fd5b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b90815260200190565b600082620004ef57620004ef6200055d565b500490565b600081600019048311821515161562000511576200051162000547565b500290565b6000828210156200052b576200052b62000547565b500390565b6000826200054257620005426200055d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61478280620005836000396000f3fe6080604052600436106104095760003560e01c80636605bfda11610213578063aa4bde2811610123578063dc44b6a0116100ab578063ee40166e1161007a578063ee40166e14610b16578063efcc52de14610b2b578063f2fde38b14610b40578063f5648a4f14610b60578063f9f92be414610b7557610410565b8063dc44b6a014610aa1578063dcc345f214610ab6578063dd62ed3e14610ad6578063ea2f0b3714610af657610410565b8063c469b6dd116100f2578063c469b6dd14610a2d578063c49b9a8014610a42578063c5f956af14610a62578063c8c8ebe414610a77578063cab0347114610a8c57610410565b8063aa4bde28146109ce578063b18f50b4146109e3578063b62496f5146109f8578063bbc0c74214610a1857610410565b806388f82020116101a65780639a7a23d6116101755780639a7a23d614610944578063a073d37f14610964578063a457c2d714610979578063a5ece94114610999578063a9059cbb146109ae57610410565b806388f82020146108da5780638da5cb5b146108fa578063906e9dd01461090f57806395d89b411461092f57610410565b8063751039fc116101e2578063751039fc146108705780637571336a146108855780638366e79a146108a557806388790a68146108c557610410565b80636605bfda146108065780636eee65d21461082657806370a082311461083b578063715018a61461085b57610410565b8063395093511161031957806351f205e4116102a1578063537df3b611610270578063537df3b614610787578063557ed1ba146107a75780635d0044ca146107bc578063602bc62b146107dc57806361cd759f146107f157610410565b806351f205e41461071257806352390c0214610727578063525fa81f146107475780635342acb41461076757610410565b806344337ea1116102e857806344337ea1146106935780634549b039146106b357806349bd5a5e146106d35780634a62bb65146106e85780634a74bb02146106fd57610410565b806339509351146106295780633ad10ef6146106495780634047ea3e1461065e578063437823ec1461067357610410565b80631d865c301161039c57806325519cf21161036b57806325519cf2146105925780632d838119146105b2578063313ce567146105d25780633221c93f146105f45780633685d4191461060957610410565b80631d865c301461051d5780631e293c101461053d578063200a692d1461055d57806323b872dd1461057257610410565b8063119c1840116103d8578063119c1840146104a257806313114a9d146104c45780631694505e146104e657806318160ddd1461050857610410565b806301339c211461041557806306fdde0314610440578063095ea7b31461046257806310d5de531461048257610410565b3661041057005b600080fd5b34801561042157600080fd5b5061042a610b95565b6040516104379190613c23565b60405180910390f35b34801561044c57600080fd5b50610455610e4d565b6040516104379190613c2e565b34801561046e57600080fd5b5061042a61047d366004613a6e565b610e6e565b34801561048e57600080fd5b5061042a61049d366004613991565b610e8c565b3480156104ae57600080fd5b506104c26104bd366004613b25565b610ea1565b005b3480156104d057600080fd5b506104d9610f0b565b604051610437919061459d565b3480156104f257600080fd5b506104fb610f11565b6040516104379190613ba1565b34801561051457600080fd5b506104d9610f20565b34801561052957600080fd5b506104c2610538366004613b46565b610f2c565b34801561054957600080fd5b506104c2610558366004613ad1565b610fe5565b34801561056957600080fd5b506104d961105f565b34801561057e57600080fd5b5061042a61058d366004613a01565b611065565b34801561059e57600080fd5b506104c26105ad366004613b46565b6110ec565b3480156105be57600080fd5b506104d96105cd366004613ad1565b611198565b3480156105de57600080fd5b506105e76111db565b604051610437919061462c565b34801561060057600080fd5b506104fb6111e0565b34801561061557600080fd5b506104c2610624366004613991565b6111ef565b34801561063557600080fd5b5061042a610644366004613a6e565b6113ba565b34801561065557600080fd5b506104fb611408565b34801561066a57600080fd5b506104d9611417565b34801561067f57600080fd5b506104c261068e366004613991565b61141d565b34801561069f57600080fd5b506104c26106ae366004613991565b6114b0565b3480156106bf57600080fd5b506104d96106ce366004613b01565b61152f565b3480156106df57600080fd5b506104fb611592565b3480156106f457600080fd5b5061042a6115a1565b34801561070957600080fd5b5061042a6115aa565b34801561071e57600080fd5b506104c26115ba565b34801561073357600080fd5b506104c2610742366004613991565b611665565b34801561075357600080fd5b506104c2610762366004613991565b6117c2565b34801561077357600080fd5b5061042a610782366004613991565b611888565b34801561079357600080fd5b506104c26107a2366004613991565b6118a6565b3480156107b357600080fd5b506104d9611922565b3480156107c857600080fd5b506104c26107d7366004613ad1565b611926565b3480156107e857600080fd5b506104d96119a0565b3480156107fd57600080fd5b506104d96119a6565b34801561081257600080fd5b506104c2610821366004613991565b6119ac565b34801561083257600080fd5b506104d9611a41565b34801561084757600080fd5b506104d9610856366004613991565b611a47565b34801561086757600080fd5b506104c2611aa9565b34801561087c57600080fd5b5061042a611b28565b34801561089157600080fd5b506104c26108a0366004613a41565b611b6f565b3480156108b157600080fd5b5061042a6108c03660046139c9565b611bcf565b3480156108d157600080fd5b506104d9611d99565b3480156108e657600080fd5b5061042a6108f5366004613991565b611d9f565b34801561090657600080fd5b506104fb611dbd565b34801561091b57600080fd5b506104c261092a366004613991565b611dcc565b34801561093b57600080fd5b50610455611ea6565b34801561095057600080fd5b506104c261095f366004613a41565b611ec7565b34801561097057600080fd5b506104d9611f34565b34801561098557600080fd5b5061042a610994366004613a6e565b611f3a565b3480156109a557600080fd5b506104fb611fa2565b3480156109ba57600080fd5b5061042a6109c9366004613a6e565b611fb1565b3480156109da57600080fd5b506104d9611fc5565b3480156109ef57600080fd5b506104d9611fcb565b348015610a0457600080fd5b5061042a610a13366004613991565b611fd1565b348015610a2457600080fd5b5061042a611fe6565b348015610a3957600080fd5b506104d9611ff6565b348015610a4e57600080fd5b506104c2610a5d366004613a99565b611ffc565b348015610a6e57600080fd5b506104fb612078565b348015610a8357600080fd5b506104d9612087565b348015610a9857600080fd5b506104d961208d565b348015610aad57600080fd5b506104d9612093565b348015610ac257600080fd5b506104c2610ad1366004613991565b612099565b348015610ae257600080fd5b506104d9610af13660046139c9565b61212e565b348015610b0257600080fd5b506104c2610b11366004613991565b612159565b348015610b2257600080fd5b506104d96121de565b348015610b3757600080fd5b506104d96121e4565b348015610b4c57600080fd5b506104c2610b5b366004613991565b6121ea565b348015610b6c57600080fd5b506104c26122a0565b348015610b8157600080fd5b5061042a610b90366004613991565b612360565b6000610b9f612375565b6000546001600160a01b03908116911614610bd55760405162461bcd60e51b8152600401610bcc90614297565b60405180910390fd5b602954600160b01b900460ff1615610bff5760405162461bcd60e51b8152600401610bcc906143cb565b610c07612379565b737a250d5630b4cf539739df2c5dacb4c659f2488d610c27816001611b6f565b602880546001600160a01b0319166001600160a01b038381169190911791829055610c5d91309116670de0b6b3a76400006123d6565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c9657600080fd5b505afa158015610caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cce91906139ad565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1657600080fd5b505afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e91906139ad565b6040518363ffffffff1660e01b8152600401610d6b929190613bb5565b602060405180830381600087803b158015610d8557600080fd5b505af1158015610d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbd91906139ad565b602980546001600160a01b0319166001600160a01b039283161790819055610de791166001611b6f565b602954610dfe906001600160a01b0316600161248a565b60004711610e1e5760405162461bcd60e51b8152600401610bcc90613e2a565b610e30610e2a30611a47565b476124e5565b600754610e45906001600160a01b03166121ea565b600191505090565b6040805180820190915260078152664368656573736560c81b602082015290565b6000610e82610e7b612375565b84846123d6565b5060015b92915050565b60256020526000908152604090205460ff1681565b610ea9612375565b6000546001600160a01b03908116911614610ed65760405162461bcd60e51b8152600401610bcc90614297565b6103e8610ee3828461463a565b10610f005760405162461bcd60e51b8152600401610bcc90613e6d565b601f91909155601e55565b60115490565b6028546001600160a01b031681565b670de0b6b3a764000090565b610f34612375565b6000546001600160a01b03908116911614610f615760405162461bcd60e51b8152600401610bcc90614297565b601b839055601c829055601d819055606481610f7d848661463a565b610f87919061463a565b1115610fa55760405162461bcd60e51b8152600401610bcc90614031565b7f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3818385604051610fd893929190614616565b60405180910390a1505050565b610fed612375565b6000546001600160a01b0390811691161461101a5760405162461bcd60e51b8152600401610bcc90614297565b6000811161103a5760405162461bcd60e51b8152600401610bcc906140ad565b6103e861104f82670de0b6b3a7640000614672565b6110599190614652565b60235550565b601b5481565b6000611072848484612596565b6110e28461107e612375565b6110dd85604051806060016040528060288152602001614700602891396001600160a01b038a166000908152600a60205260408120906110bc612375565b6001600160a01b031681526020810191909152604001600020549190612b23565b6123d6565b5060019392505050565b6110f4612375565b6000546001600160a01b039081169116146111215760405162461bcd60e51b8152600401610bcc90614297565b60188390556019829055601a81905560648161113d848661463a565b611147919061463a565b11156111655760405162461bcd60e51b8152600401610bcc90614193565b7f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a773620818385604051610fd893929190614616565b60006010548211156111bc5760405162461bcd60e51b8152600401610bcc90613d58565b60006111c6612b5d565b90506111d28382612b80565b9150505b919050565b600990565b6005546001600160a01b031681565b6111f7612375565b6000546001600160a01b039081169116146112245760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600e602052604090205460ff1661125c5760405162461bcd60e51b8152600401610bcc90613ffa565b60005b600f548110156113b657816001600160a01b0316600f828154811061129457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156113a457600f80546112bf90600190614691565b815481106112dd57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600f80546001600160a01b03909216918390811061131757634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600e90925220805460ff19169055600f80548061137d57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190556113b6565b806113ae816146a8565b91505061125f565b5050565b6000610e826113c7612375565b846110dd85600a60006113d8612375565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612bc9565b6004546001600160a01b031681565b60215481565b611425612375565b6000546001600160a01b039081169116146114525760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600d602052604090819020805460ff19166001179055517f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b62906114a5908390613ba1565b60405180910390a150565b6114b8612375565b6000546001600160a01b039081169116146114e55760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03811661150b5760405162461bcd60e51b8152600401610bcc90614566565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000670de0b6b3a76400008311156115595760405162461bcd60e51b8152600401610bcc90614117565b8161157857600061156984612bf8565b50939550610e86945050505050565b600061158384612bf8565b50929550610e86945050505050565b6029546001600160a01b031681565b600b5460ff1681565b602954600160a81b900460ff1681565b6115c2612375565b6000546001600160a01b039081169116146115ef5760405162461bcd60e51b8152600401610bcc90614297565b60006115fa30611a47565b905061160f6064670de0b6b3a7640000614652565b81101561162e5760405162461bcd60e51b8152600401610bcc90613cfb565b611636612c47565b7f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32426040516114a5919061459d565b61166d612375565b6000546001600160a01b0390811691161461169a5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600e602052604090205460ff16156116d35760405162461bcd60e51b8152600401610bcc90613f2a565b600f546032906116e490600161463a565b11156117025760405162461bcd60e51b8152600401610bcc90614443565b6001600160a01b0381166000908152600860205260409020541561175c576001600160a01b03811660009081526008602052604090205461174290611198565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6117ca612375565b6000546001600160a01b039081169116146117f75760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03811661181d5760405162461bcd60e51b8152600401610bcc90614068565b600580546001600160a01b0319166001600160a01b038381169190911791829055166000908152600d602052604090819020805460ff19166001179055517f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f906114a5908390613ba1565b6001600160a01b03166000908152600d602052604090205460ff1690565b6118ae612375565b6000546001600160a01b039081169116146118db5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166119015760405162461bcd60e51b8152600401610bcc906144b6565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b4290565b61192e612375565b6000546001600160a01b0390811691161461195b5760405162461bcd60e51b8152600401610bcc90614297565b6000811161197b5760405162461bcd60e51b8152600401610bcc906140ad565b6103e861199082670de0b6b3a7640000614672565b61199a9190614652565b60245550565b60025490565b601f5481565b6119b4612375565b6000546001600160a01b039081169116146119e15760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038116611a075760405162461bcd60e51b8152600401610bcc9061435a565b600680546001600160a01b0319166001600160a01b039283161790819055166000908152600d60205260409020805460ff19166001179055565b60225481565b6001600160a01b0381166000908152600e602052604081205460ff1615611a8757506001600160a01b0381166000908152600960205260409020546111d6565b6001600160a01b038216600090815260086020526040902054610e8690611198565b611ab1612375565b6000546001600160a01b03908116911614611ade5760405162461bcd60e51b8152600401610bcc90614297565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000611b32612375565b6000546001600160a01b03908116911614611b5f5760405162461bcd60e51b8152600401610bcc90614297565b50600b805460ff19169055600190565b611b77612375565b6000546001600160a01b03908116911614611ba45760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000611bd9612375565b6000546001600160a01b03908116911614611c065760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038316611c2c5760405162461bcd60e51b8152600401610bcc9061421f565b6001600160a01b038316301415611c555760405162461bcd60e51b8152600401610bcc90613cc4565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190611c84903090600401613ba1565b60206040518083038186803b158015611c9c57600080fd5b505afa158015611cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd49190613ae9565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90611d059086908590600401613bcf565b602060405180830381600087803b158015611d1f57600080fd5b505af1158015611d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d579190613ab5565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611d8a929190613bcf565b60405180910390a15092915050565b601c5481565b6001600160a01b03166000908152600e602052604090205460ff1690565b6000546001600160a01b031690565b611dd4612375565b6000546001600160a01b03908116911614611e015760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038116611e275760405162461bcd60e51b8152600401610bcc9061414e565b600380546001600160a01b039081166000908152600d6020526040808220805460ff1990811690915584546001600160a01b03191686851617948590559390921681528190208054909216600117909155517f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f122000213756906114a5908390613ba1565b6040805180820190915260078152664348454553534560c81b602082015290565b611ecf612375565b6000546001600160a01b03908116911614611efc5760405162461bcd60e51b8152600401610bcc90614297565b6029546001600160a01b0383811691161415611f2a5760405162461bcd60e51b8152600401610bcc90613ecd565b6113b6828261248a565b60275490565b6000610e82611f47612375565b846110dd8560405180606001604052806025815260200161472860259139600a6000611f71612375565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612b23565b6003546001600160a01b031681565b6000610e82611fbe612375565b8484612596565b60245481565b601e5481565b60266020526000908152604090205460ff1681565b602954600160b01b900460ff1681565b601a5481565b612004612375565b6000546001600160a01b039081169116146120315760405162461bcd60e51b8152600401610bcc90614297565b6029805460ff60a81b1916600160a81b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906114a5908390613c23565b6006546001600160a01b031681565b60235481565b601d5481565b60195481565b6120a1612375565b6000546001600160a01b039081169116146120ce5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166120f45760405162461bcd60e51b8152600401610bcc9061435a565b600480546001600160a01b0319166001600160a01b039283161790819055166000908152600d60205260409020805460ff19166001179055565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b612161612375565b6000546001600160a01b0390811691161461218e5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600d602052604090819020805460ff19169055517f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e906114a5908390613ba1565b60205481565b60185481565b6121f2612375565b6000546001600160a01b0390811691161461221f5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166122455760405162461bcd60e51b8152600401610bcc90613da2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6122a8612375565b6000546001600160a01b039081169116146122d55760405162461bcd60e51b8152600401610bcc90614297565b602954600160b01b900460ff16156122ff5760405162461bcd60e51b8152600401610bcc906144e4565b6000336001600160a01b03164760405161231890613b9e565b60006040518083038185875af1925050503d8060008114612355576040519150601f19603f3d011682016040523d82523d6000602084013e61235a565b606091505b50505050565b600c6020526000908152604090205460ff1681565b3390565b612381612375565b6000546001600160a01b039081169116146123ae5760405162461bcd60e51b8152600401610bcc90614297565b6029805460ff60a81b1960ff60b01b19909116600160b01b1716600160a81b17905543602055565b6001600160a01b0383166123fc5760405162461bcd60e51b8152600401610bcc90614387565b6001600160a01b0382166124225760405162461bcd60e51b8152600401610bcc90613de8565b6001600160a01b038084166000818152600a602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061247d90859061459d565b60405180910390a3505050565b6001600160a01b038216600090815260266020908152604080832080548515801560ff19928316811790935560259094529190932080549091169092179091556124d7576124d782611665565b806113b6576113b6826111ef565b6028546124fd9030906001600160a01b0316846123d6565b60285460055460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261253d9230928992600092839216904290600401613be8565b6060604051808303818588803b15801561255657600080fd5b505af115801561256a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061258f9190613b71565b5050505050565b6001600160a01b0383166125bc5760405162461bcd60e51b8152600401610bcc90614315565b6001600160a01b0382166125e25760405162461bcd60e51b8152600401610bcc90613c81565b600081116126025760405162461bcd60e51b8152600401610bcc906142cc565b6001600160a01b0383166000908152600c602052604090205460ff161561263b5760405162461bcd60e51b8152600401610bcc906140d2565b6001600160a01b0382166000908152600c602052604090205460ff16156126745760405162461bcd60e51b8152600401610bcc90613fb7565b602954600160b01b900460ff166126e0576001600160a01b0383166000908152600d602052604090205460ff16806126c457506001600160a01b0382166000908152600d602052604090205460ff165b6126e05760405162461bcd60e51b8152600401610bcc9061452f565b600b5460ff161561289d576126f3611dbd565b6001600160a01b0316836001600160a01b03161415801561272d5750612717611dbd565b6001600160a01b0316826001600160a01b031614155b801561274157506001600160a01b03821615155b801561275857506001600160a01b03821661dead14155b801561276e5750602954600160a01b900460ff16155b1561289d576001600160a01b03831660009081526026602052604090205460ff1680156127b457506001600160a01b03821660009081526025602052604090205460ff16155b156127e0576023548111156127db5760405162461bcd60e51b8152600401610bcc906141ca565b612848565b6001600160a01b03821660009081526026602052604090205460ff16801561282157506001600160a01b03831660009081526025602052604090205460ff16155b15612848576023548111156128485760405162461bcd60e51b8152600401610bcc90613f61565b6001600160a01b03821660009081526025602052604090205460ff1661289d576024548161287584611a47565b61287f919061463a565b111561289d5760405162461bcd60e51b8152600401610bcc90614416565b60006128b6602254602154612bc990919063ffffffff16565b905060006128c330611a47565b60275460295491925082101590600160a01b900460ff161580156128f05750602954600160a81b900460ff165b8015612911575060295460009061290f906001600160a01b0316611a47565b115b801561291d5750600083115b801561294257506001600160a01b0385166000908152600d602052604090205460ff16155b801561296757506001600160a01b0386166000908152600d602052604090205460ff16155b801561298b57506001600160a01b03851660009081526026602052604090205460ff165b80156129945750805b156129a1576129a1612c47565b6001600160a01b0386166000908152600d602052604090205460019060ff16806129e357506001600160a01b0386166000908152600d602052604090205460ff165b156129f5575060036017556000612b0e565b6001600160a01b03871660009081526026602052604090205460ff1615612a7f57612a1e612f4e565b6001601755602054431415612a3c576000601255605a601555612a7a565b602054612a4a90600161463a565b431415612a605760006012556032601555612a7a565b601854601255601a54601954612a76919061463a565b6015555b612b0e565b6001600160a01b03861660009081526026602052604090205460ff1615612b0057612aa8612f4e565b6002601755602054431415612ac6576000601255605a601555612a7a565b602054612ad490600161463a565b431415612aea5760006012556032601555612a7a565b601b54601255601d54601c54612a76919061463a565b612b08612f4e565b60036017555b612b1a87878784612f80565b50505050505050565b60008184841115612b475760405162461bcd60e51b8152600401610bcc9190613c2e565b506000612b548486614691565b95945050505050565b6000806000612b6a61309c565b9092509050612b798282612b80565b9250505090565b6000612bc283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613271565b9392505050565b600080612bd6838561463a565b905083811015612bc25760405162461bcd60e51b8152600401610bcc90613e96565b6000806000806000806000806000612c0f8a61329f565b9250925092506000806000612c2d8d8686612c28612b5d565b6132e1565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b1790556000612c6530611a47565b90506000602254602154612c79919061463a565b90506000612c936002602154612b8090919063ffffffff16565b90506000612ca18483613331565b905047612cad82613373565b6000612cb94783613331565b90506000612cdc86612cd6602254856134f890919063ffffffff16565b90612b80565b90506000612cea8383613331565b90506000612d096103e8612cd6601e54866134f890919063ffffffff16565b90506000612d286103e8612cd6601f54876134f890919063ffffffff16565b9050612d348285614691565b9350612d408185614691565b60006021819055602281905560035460405192965090916001600160a01b03909116908690612d6e90613b9e565b60006040518083038185875af1925050503d8060008114612dab576040519150601f19603f3d011682016040523d82523d6000602084013e612db0565b606091505b50506004546040519192506001600160a01b0316908490612dd090613b9e565b60006040518083038185875af1925050503d8060008114612e0d576040519150601f19603f3d011682016040523d82523d6000602084013e612e12565b606091505b50506006546040519192506001600160a01b0316908390612e3290613b9e565b60006040518083038185875af1925050503d8060008114612e6f576040519150601f19603f3d011682016040523d82523d6000602084013e612e74565b606091505b505080915050612e8489856124e5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56188858b604051612eb793929190614616565b60405180910390a167016345785d8a0000471115612f34576003546040516001600160a01b03909116904790612eec90613b9e565b60006040518083038185875af1925050503d8060008114612f29576040519150601f19603f3d011682016040523d82523d6000602084013e612f2e565b606091505b50909150505b50506029805460ff60a01b19169055505050505050505050565b601254158015612f5e5750601554155b15612f6857612f7e565b6012805460135560158054601655600091829055555b565b80612f8d57612f8d612f4e565b6001600160a01b0384166000908152600e602052604090205460ff168015612fce57506001600160a01b0383166000908152600e602052604090205460ff16155b15612fe357612fde84848461353d565b61308f565b6001600160a01b0384166000908152600e602052604090205460ff1615801561302457506001600160a01b0383166000908152600e602052604090205460ff165b1561303457612fde848484613661565b6001600160a01b0384166000908152600e602052604090205460ff16801561307457506001600160a01b0383166000908152600e602052604090205460ff165b1561308457612fde84848461370a565b61308f84848461377d565b8061235a5761235a6137c1565b6010546000908190670de0b6b3a7640000825b600f54811015613233578260086000600f84815481106130df57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061315857508160096000600f848154811061313157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561317557601054670de0b6b3a76400009450945050505061326d565b6131c960086000600f848154811061319d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613331565b925061321f60096000600f84815481106131f357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613331565b91508061322b816146a8565b9150506130af565b5060105461324990670de0b6b3a7640000612b80565b82101561326757601054670de0b6b3a764000093509350505061326d565b90925090505b9091565b600081836132925760405162461bcd60e51b8152600401610bcc9190613c2e565b506000612b548486614652565b6000806000806132ae856137cf565b905060006132bb866137eb565b905060006132d3826132cd8986613331565b90613331565b979296509094509092505050565b60008080806132f088866134f8565b905060006132fe88876134f8565b9050600061330c88886134f8565b9050600061331e826132cd8686613331565b939b939a50919850919650505050505050565b6000612bc283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b23565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106133b657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561340a57600080fd5b505afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344291906139ad565b8160018151811061346357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260285461348991309116846123d6565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac947906134c29085906000908690309042906004016145a6565b600060405180830381600087803b1580156134dc57600080fd5b505af11580156134f0573d6000803e3d6000fd5b505050505050565b60008261350757506000610e86565b60006135138385614672565b9050826135208583614652565b14612bc25760405162461bcd60e51b8152600401610bcc90614256565b60008060008060008061354f87612bf8565b6001600160a01b038f16600090815260096020526040902054959b509399509197509550935091506135819088613331565b6001600160a01b038a166000908152600960209081526040808320939093556008905220546135b09087613331565b6001600160a01b03808b1660009081526008602052604080822093909355908a16815220546135df9086612bc9565b6001600160a01b03891660009081526008602052604090205561360181613807565b61360b848361396d565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161364e919061459d565b60405180910390a3505050505050505050565b60008060008060008061367387612bf8565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506136a59087613331565b6001600160a01b03808b16600090815260086020908152604080832094909455918b168152600990915220546136db9084612bc9565b6001600160a01b0389166000908152600960209081526040808320939093556008905220546135df9086612bc9565b60008060008060008061371c87612bf8565b6001600160a01b038f16600090815260096020526040902054959b5093995091975095509350915061374e9088613331565b6001600160a01b038a166000908152600960209081526040808320939093556008905220546136a59087613331565b60008060008060008061378f87612bf8565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506135b09087613331565b601354601255601654601555565b6000610e866064612cd6601254856134f890919063ffffffff16565b6000610e866064612cd6601554856134f890919063ffffffff16565b60016017541415613878576015546019546138229083614672565b61382c9190614652565b6021600082825461383d919061463a565b9091555050601554601a546138529083614672565b61385c9190614652565b6022600082825461386d919061463a565b909155506138e49050565b600260175414156138e457601554601c546138939083614672565b61389d9190614652565b602160008282546138ae919061463a565b9091555050601554601d546138c39083614672565b6138cd9190614652565b602260008282546138de919061463a565b90915550505b60006138ee612b5d565b905060006138fc83836134f8565b306000908152600860205260409020549091506139199082612bc9565b30600090815260086020908152604080832093909355600e9052205460ff161561396857306000908152600960205260409020546139579084612bc9565b306000908152600960205260409020555b505050565b60105461397a9083613331565b60105560115461398a9082612bc9565b6011555050565b6000602082840312156139a2578081fd5b8135612bc2816146d9565b6000602082840312156139be578081fd5b8151612bc2816146d9565b600080604083850312156139db578081fd5b82356139e6816146d9565b915060208301356139f6816146d9565b809150509250929050565b600080600060608486031215613a15578081fd5b8335613a20816146d9565b92506020840135613a30816146d9565b929592945050506040919091013590565b60008060408385031215613a53578182fd5b8235613a5e816146d9565b915060208301356139f6816146f1565b60008060408385031215613a80578182fd5b8235613a8b816146d9565b946020939093013593505050565b600060208284031215613aaa578081fd5b8135612bc2816146f1565b600060208284031215613ac6578081fd5b8151612bc2816146f1565b600060208284031215613ae2578081fd5b5035919050565b600060208284031215613afa578081fd5b5051919050565b60008060408385031215613b13578182fd5b8235915060208301356139f6816146f1565b60008060408385031215613b37578182fd5b50508035926020909101359150565b600080600060608486031215613b5a578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215613b85578283fd5b8351925060208401519150604084015190509250925092565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015613c5a57858101830151858201604001528201613c3e565b81811115613c6b5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b6020808252603e908201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060408201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e74726163740000606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6020808252600f908201526e53706c6974206f766572203130302560881b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526039908201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060408201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606082015260800190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526036908201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656040820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606082015260800190565b60208082526023908201527f546f206164647265737320626c61636b6c6973742e20436f6e7461637420616460408201526236b4b760e91b606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601f908201527f4d757374206b6565702073656c6c2074617865732062656c6f77203130302500604082015260600190565b60208082526025908201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604082015264020626520360dc1b606082015260800190565b6020808252600b908201526a043616e6e6f7420626520360ac1b604082015260600190565b60208082526025908201527f46726f6d206164647265737320626c61636b6c6973742e20436f6e746163742060408201526430b236b4b760d91b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526025908201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604082015264020626520360dc1b606082015260800190565b6020808252601e908201527f4d757374206b656570206275792074617865732062656c6f7720313030250000604082015260600190565b60208082526035908201527f427579207472616e7366657220616d6f756e742065786365656473207468652060408201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606082015260800190565b6020808252601a908201527f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526013908201527243616e6e6f742062652030206164647265737360681b604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526013908201527213585e081dd85b1b195d08195e18d959591959606a1b604082015260600190565b6020808252604d908201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60408201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60608201526c3ab232b21030b2323932b9b99760991b608082015260a00190565b60208082526014908201527343616e6e6f74207573652030206164647265737360601b604082015260600190565b6020808252602b908201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360408201526a1b89dd081cdd185c9d195960aa1b606082015260800190565b6020808252601a908201527f54726164696e67206973206e6f7420616374697665207965742e000000000000604082015260600190565b6020808252601a908201527f43616e6e6f7420626c61636b6c69737420302061646472657373000000000000604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156145f55784516001600160a01b0316835293830193918301916001016145d0565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b6000821982111561464d5761464d6146c3565b500190565b60008261466d57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561468c5761468c6146c3565b500290565b6000828210156146a3576146a36146c3565b500390565b60006000198214156146bc576146bc6146c3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146146ee57600080fd5b50565b80151581146146ee57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203bb7b3bf77e36b0ec1ebdbd31c3ceb9628b02ff8d6d21b22aafdafb3cd49487964736f6c63430008000033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
Deployed Bytecode
0x6080604052600436106104095760003560e01c80636605bfda11610213578063aa4bde2811610123578063dc44b6a0116100ab578063ee40166e1161007a578063ee40166e14610b16578063efcc52de14610b2b578063f2fde38b14610b40578063f5648a4f14610b60578063f9f92be414610b7557610410565b8063dc44b6a014610aa1578063dcc345f214610ab6578063dd62ed3e14610ad6578063ea2f0b3714610af657610410565b8063c469b6dd116100f2578063c469b6dd14610a2d578063c49b9a8014610a42578063c5f956af14610a62578063c8c8ebe414610a77578063cab0347114610a8c57610410565b8063aa4bde28146109ce578063b18f50b4146109e3578063b62496f5146109f8578063bbc0c74214610a1857610410565b806388f82020116101a65780639a7a23d6116101755780639a7a23d614610944578063a073d37f14610964578063a457c2d714610979578063a5ece94114610999578063a9059cbb146109ae57610410565b806388f82020146108da5780638da5cb5b146108fa578063906e9dd01461090f57806395d89b411461092f57610410565b8063751039fc116101e2578063751039fc146108705780637571336a146108855780638366e79a146108a557806388790a68146108c557610410565b80636605bfda146108065780636eee65d21461082657806370a082311461083b578063715018a61461085b57610410565b8063395093511161031957806351f205e4116102a1578063537df3b611610270578063537df3b614610787578063557ed1ba146107a75780635d0044ca146107bc578063602bc62b146107dc57806361cd759f146107f157610410565b806351f205e41461071257806352390c0214610727578063525fa81f146107475780635342acb41461076757610410565b806344337ea1116102e857806344337ea1146106935780634549b039146106b357806349bd5a5e146106d35780634a62bb65146106e85780634a74bb02146106fd57610410565b806339509351146106295780633ad10ef6146106495780634047ea3e1461065e578063437823ec1461067357610410565b80631d865c301161039c57806325519cf21161036b57806325519cf2146105925780632d838119146105b2578063313ce567146105d25780633221c93f146105f45780633685d4191461060957610410565b80631d865c301461051d5780631e293c101461053d578063200a692d1461055d57806323b872dd1461057257610410565b8063119c1840116103d8578063119c1840146104a257806313114a9d146104c45780631694505e146104e657806318160ddd1461050857610410565b806301339c211461041557806306fdde0314610440578063095ea7b31461046257806310d5de531461048257610410565b3661041057005b600080fd5b34801561042157600080fd5b5061042a610b95565b6040516104379190613c23565b60405180910390f35b34801561044c57600080fd5b50610455610e4d565b6040516104379190613c2e565b34801561046e57600080fd5b5061042a61047d366004613a6e565b610e6e565b34801561048e57600080fd5b5061042a61049d366004613991565b610e8c565b3480156104ae57600080fd5b506104c26104bd366004613b25565b610ea1565b005b3480156104d057600080fd5b506104d9610f0b565b604051610437919061459d565b3480156104f257600080fd5b506104fb610f11565b6040516104379190613ba1565b34801561051457600080fd5b506104d9610f20565b34801561052957600080fd5b506104c2610538366004613b46565b610f2c565b34801561054957600080fd5b506104c2610558366004613ad1565b610fe5565b34801561056957600080fd5b506104d961105f565b34801561057e57600080fd5b5061042a61058d366004613a01565b611065565b34801561059e57600080fd5b506104c26105ad366004613b46565b6110ec565b3480156105be57600080fd5b506104d96105cd366004613ad1565b611198565b3480156105de57600080fd5b506105e76111db565b604051610437919061462c565b34801561060057600080fd5b506104fb6111e0565b34801561061557600080fd5b506104c2610624366004613991565b6111ef565b34801561063557600080fd5b5061042a610644366004613a6e565b6113ba565b34801561065557600080fd5b506104fb611408565b34801561066a57600080fd5b506104d9611417565b34801561067f57600080fd5b506104c261068e366004613991565b61141d565b34801561069f57600080fd5b506104c26106ae366004613991565b6114b0565b3480156106bf57600080fd5b506104d96106ce366004613b01565b61152f565b3480156106df57600080fd5b506104fb611592565b3480156106f457600080fd5b5061042a6115a1565b34801561070957600080fd5b5061042a6115aa565b34801561071e57600080fd5b506104c26115ba565b34801561073357600080fd5b506104c2610742366004613991565b611665565b34801561075357600080fd5b506104c2610762366004613991565b6117c2565b34801561077357600080fd5b5061042a610782366004613991565b611888565b34801561079357600080fd5b506104c26107a2366004613991565b6118a6565b3480156107b357600080fd5b506104d9611922565b3480156107c857600080fd5b506104c26107d7366004613ad1565b611926565b3480156107e857600080fd5b506104d96119a0565b3480156107fd57600080fd5b506104d96119a6565b34801561081257600080fd5b506104c2610821366004613991565b6119ac565b34801561083257600080fd5b506104d9611a41565b34801561084757600080fd5b506104d9610856366004613991565b611a47565b34801561086757600080fd5b506104c2611aa9565b34801561087c57600080fd5b5061042a611b28565b34801561089157600080fd5b506104c26108a0366004613a41565b611b6f565b3480156108b157600080fd5b5061042a6108c03660046139c9565b611bcf565b3480156108d157600080fd5b506104d9611d99565b3480156108e657600080fd5b5061042a6108f5366004613991565b611d9f565b34801561090657600080fd5b506104fb611dbd565b34801561091b57600080fd5b506104c261092a366004613991565b611dcc565b34801561093b57600080fd5b50610455611ea6565b34801561095057600080fd5b506104c261095f366004613a41565b611ec7565b34801561097057600080fd5b506104d9611f34565b34801561098557600080fd5b5061042a610994366004613a6e565b611f3a565b3480156109a557600080fd5b506104fb611fa2565b3480156109ba57600080fd5b5061042a6109c9366004613a6e565b611fb1565b3480156109da57600080fd5b506104d9611fc5565b3480156109ef57600080fd5b506104d9611fcb565b348015610a0457600080fd5b5061042a610a13366004613991565b611fd1565b348015610a2457600080fd5b5061042a611fe6565b348015610a3957600080fd5b506104d9611ff6565b348015610a4e57600080fd5b506104c2610a5d366004613a99565b611ffc565b348015610a6e57600080fd5b506104fb612078565b348015610a8357600080fd5b506104d9612087565b348015610a9857600080fd5b506104d961208d565b348015610aad57600080fd5b506104d9612093565b348015610ac257600080fd5b506104c2610ad1366004613991565b612099565b348015610ae257600080fd5b506104d9610af13660046139c9565b61212e565b348015610b0257600080fd5b506104c2610b11366004613991565b612159565b348015610b2257600080fd5b506104d96121de565b348015610b3757600080fd5b506104d96121e4565b348015610b4c57600080fd5b506104c2610b5b366004613991565b6121ea565b348015610b6c57600080fd5b506104c26122a0565b348015610b8157600080fd5b5061042a610b90366004613991565b612360565b6000610b9f612375565b6000546001600160a01b03908116911614610bd55760405162461bcd60e51b8152600401610bcc90614297565b60405180910390fd5b602954600160b01b900460ff1615610bff5760405162461bcd60e51b8152600401610bcc906143cb565b610c07612379565b737a250d5630b4cf539739df2c5dacb4c659f2488d610c27816001611b6f565b602880546001600160a01b0319166001600160a01b038381169190911791829055610c5d91309116670de0b6b3a76400006123d6565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c9657600080fd5b505afa158015610caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cce91906139ad565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1657600080fd5b505afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e91906139ad565b6040518363ffffffff1660e01b8152600401610d6b929190613bb5565b602060405180830381600087803b158015610d8557600080fd5b505af1158015610d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbd91906139ad565b602980546001600160a01b0319166001600160a01b039283161790819055610de791166001611b6f565b602954610dfe906001600160a01b0316600161248a565b60004711610e1e5760405162461bcd60e51b8152600401610bcc90613e2a565b610e30610e2a30611a47565b476124e5565b600754610e45906001600160a01b03166121ea565b600191505090565b6040805180820190915260078152664368656573736560c81b602082015290565b6000610e82610e7b612375565b84846123d6565b5060015b92915050565b60256020526000908152604090205460ff1681565b610ea9612375565b6000546001600160a01b03908116911614610ed65760405162461bcd60e51b8152600401610bcc90614297565b6103e8610ee3828461463a565b10610f005760405162461bcd60e51b8152600401610bcc90613e6d565b601f91909155601e55565b60115490565b6028546001600160a01b031681565b670de0b6b3a764000090565b610f34612375565b6000546001600160a01b03908116911614610f615760405162461bcd60e51b8152600401610bcc90614297565b601b839055601c829055601d819055606481610f7d848661463a565b610f87919061463a565b1115610fa55760405162461bcd60e51b8152600401610bcc90614031565b7f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3818385604051610fd893929190614616565b60405180910390a1505050565b610fed612375565b6000546001600160a01b0390811691161461101a5760405162461bcd60e51b8152600401610bcc90614297565b6000811161103a5760405162461bcd60e51b8152600401610bcc906140ad565b6103e861104f82670de0b6b3a7640000614672565b6110599190614652565b60235550565b601b5481565b6000611072848484612596565b6110e28461107e612375565b6110dd85604051806060016040528060288152602001614700602891396001600160a01b038a166000908152600a60205260408120906110bc612375565b6001600160a01b031681526020810191909152604001600020549190612b23565b6123d6565b5060019392505050565b6110f4612375565b6000546001600160a01b039081169116146111215760405162461bcd60e51b8152600401610bcc90614297565b60188390556019829055601a81905560648161113d848661463a565b611147919061463a565b11156111655760405162461bcd60e51b8152600401610bcc90614193565b7f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a773620818385604051610fd893929190614616565b60006010548211156111bc5760405162461bcd60e51b8152600401610bcc90613d58565b60006111c6612b5d565b90506111d28382612b80565b9150505b919050565b600990565b6005546001600160a01b031681565b6111f7612375565b6000546001600160a01b039081169116146112245760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600e602052604090205460ff1661125c5760405162461bcd60e51b8152600401610bcc90613ffa565b60005b600f548110156113b657816001600160a01b0316600f828154811061129457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156113a457600f80546112bf90600190614691565b815481106112dd57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600f80546001600160a01b03909216918390811061131757634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600e90925220805460ff19169055600f80548061137d57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190556113b6565b806113ae816146a8565b91505061125f565b5050565b6000610e826113c7612375565b846110dd85600a60006113d8612375565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612bc9565b6004546001600160a01b031681565b60215481565b611425612375565b6000546001600160a01b039081169116146114525760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600d602052604090819020805460ff19166001179055517f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b62906114a5908390613ba1565b60405180910390a150565b6114b8612375565b6000546001600160a01b039081169116146114e55760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03811661150b5760405162461bcd60e51b8152600401610bcc90614566565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000670de0b6b3a76400008311156115595760405162461bcd60e51b8152600401610bcc90614117565b8161157857600061156984612bf8565b50939550610e86945050505050565b600061158384612bf8565b50929550610e86945050505050565b6029546001600160a01b031681565b600b5460ff1681565b602954600160a81b900460ff1681565b6115c2612375565b6000546001600160a01b039081169116146115ef5760405162461bcd60e51b8152600401610bcc90614297565b60006115fa30611a47565b905061160f6064670de0b6b3a7640000614652565b81101561162e5760405162461bcd60e51b8152600401610bcc90613cfb565b611636612c47565b7f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32426040516114a5919061459d565b61166d612375565b6000546001600160a01b0390811691161461169a5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600e602052604090205460ff16156116d35760405162461bcd60e51b8152600401610bcc90613f2a565b600f546032906116e490600161463a565b11156117025760405162461bcd60e51b8152600401610bcc90614443565b6001600160a01b0381166000908152600860205260409020541561175c576001600160a01b03811660009081526008602052604090205461174290611198565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6117ca612375565b6000546001600160a01b039081169116146117f75760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03811661181d5760405162461bcd60e51b8152600401610bcc90614068565b600580546001600160a01b0319166001600160a01b038381169190911791829055166000908152600d602052604090819020805460ff19166001179055517f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f906114a5908390613ba1565b6001600160a01b03166000908152600d602052604090205460ff1690565b6118ae612375565b6000546001600160a01b039081169116146118db5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166119015760405162461bcd60e51b8152600401610bcc906144b6565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b4290565b61192e612375565b6000546001600160a01b0390811691161461195b5760405162461bcd60e51b8152600401610bcc90614297565b6000811161197b5760405162461bcd60e51b8152600401610bcc906140ad565b6103e861199082670de0b6b3a7640000614672565b61199a9190614652565b60245550565b60025490565b601f5481565b6119b4612375565b6000546001600160a01b039081169116146119e15760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038116611a075760405162461bcd60e51b8152600401610bcc9061435a565b600680546001600160a01b0319166001600160a01b039283161790819055166000908152600d60205260409020805460ff19166001179055565b60225481565b6001600160a01b0381166000908152600e602052604081205460ff1615611a8757506001600160a01b0381166000908152600960205260409020546111d6565b6001600160a01b038216600090815260086020526040902054610e8690611198565b611ab1612375565b6000546001600160a01b03908116911614611ade5760405162461bcd60e51b8152600401610bcc90614297565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000611b32612375565b6000546001600160a01b03908116911614611b5f5760405162461bcd60e51b8152600401610bcc90614297565b50600b805460ff19169055600190565b611b77612375565b6000546001600160a01b03908116911614611ba45760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000611bd9612375565b6000546001600160a01b03908116911614611c065760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038316611c2c5760405162461bcd60e51b8152600401610bcc9061421f565b6001600160a01b038316301415611c555760405162461bcd60e51b8152600401610bcc90613cc4565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190611c84903090600401613ba1565b60206040518083038186803b158015611c9c57600080fd5b505afa158015611cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd49190613ae9565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90611d059086908590600401613bcf565b602060405180830381600087803b158015611d1f57600080fd5b505af1158015611d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d579190613ab5565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611d8a929190613bcf565b60405180910390a15092915050565b601c5481565b6001600160a01b03166000908152600e602052604090205460ff1690565b6000546001600160a01b031690565b611dd4612375565b6000546001600160a01b03908116911614611e015760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b038116611e275760405162461bcd60e51b8152600401610bcc9061414e565b600380546001600160a01b039081166000908152600d6020526040808220805460ff1990811690915584546001600160a01b03191686851617948590559390921681528190208054909216600117909155517f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f122000213756906114a5908390613ba1565b6040805180820190915260078152664348454553534560c81b602082015290565b611ecf612375565b6000546001600160a01b03908116911614611efc5760405162461bcd60e51b8152600401610bcc90614297565b6029546001600160a01b0383811691161415611f2a5760405162461bcd60e51b8152600401610bcc90613ecd565b6113b6828261248a565b60275490565b6000610e82611f47612375565b846110dd8560405180606001604052806025815260200161472860259139600a6000611f71612375565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612b23565b6003546001600160a01b031681565b6000610e82611fbe612375565b8484612596565b60245481565b601e5481565b60266020526000908152604090205460ff1681565b602954600160b01b900460ff1681565b601a5481565b612004612375565b6000546001600160a01b039081169116146120315760405162461bcd60e51b8152600401610bcc90614297565b6029805460ff60a81b1916600160a81b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906114a5908390613c23565b6006546001600160a01b031681565b60235481565b601d5481565b60195481565b6120a1612375565b6000546001600160a01b039081169116146120ce5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166120f45760405162461bcd60e51b8152600401610bcc9061435a565b600480546001600160a01b0319166001600160a01b039283161790819055166000908152600d60205260409020805460ff19166001179055565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b612161612375565b6000546001600160a01b0390811691161461218e5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166000908152600d602052604090819020805460ff19169055517f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e906114a5908390613ba1565b60205481565b60185481565b6121f2612375565b6000546001600160a01b0390811691161461221f5760405162461bcd60e51b8152600401610bcc90614297565b6001600160a01b0381166122455760405162461bcd60e51b8152600401610bcc90613da2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6122a8612375565b6000546001600160a01b039081169116146122d55760405162461bcd60e51b8152600401610bcc90614297565b602954600160b01b900460ff16156122ff5760405162461bcd60e51b8152600401610bcc906144e4565b6000336001600160a01b03164760405161231890613b9e565b60006040518083038185875af1925050503d8060008114612355576040519150601f19603f3d011682016040523d82523d6000602084013e61235a565b606091505b50505050565b600c6020526000908152604090205460ff1681565b3390565b612381612375565b6000546001600160a01b039081169116146123ae5760405162461bcd60e51b8152600401610bcc90614297565b6029805460ff60a81b1960ff60b01b19909116600160b01b1716600160a81b17905543602055565b6001600160a01b0383166123fc5760405162461bcd60e51b8152600401610bcc90614387565b6001600160a01b0382166124225760405162461bcd60e51b8152600401610bcc90613de8565b6001600160a01b038084166000818152600a602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061247d90859061459d565b60405180910390a3505050565b6001600160a01b038216600090815260266020908152604080832080548515801560ff19928316811790935560259094529190932080549091169092179091556124d7576124d782611665565b806113b6576113b6826111ef565b6028546124fd9030906001600160a01b0316846123d6565b60285460055460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261253d9230928992600092839216904290600401613be8565b6060604051808303818588803b15801561255657600080fd5b505af115801561256a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061258f9190613b71565b5050505050565b6001600160a01b0383166125bc5760405162461bcd60e51b8152600401610bcc90614315565b6001600160a01b0382166125e25760405162461bcd60e51b8152600401610bcc90613c81565b600081116126025760405162461bcd60e51b8152600401610bcc906142cc565b6001600160a01b0383166000908152600c602052604090205460ff161561263b5760405162461bcd60e51b8152600401610bcc906140d2565b6001600160a01b0382166000908152600c602052604090205460ff16156126745760405162461bcd60e51b8152600401610bcc90613fb7565b602954600160b01b900460ff166126e0576001600160a01b0383166000908152600d602052604090205460ff16806126c457506001600160a01b0382166000908152600d602052604090205460ff165b6126e05760405162461bcd60e51b8152600401610bcc9061452f565b600b5460ff161561289d576126f3611dbd565b6001600160a01b0316836001600160a01b03161415801561272d5750612717611dbd565b6001600160a01b0316826001600160a01b031614155b801561274157506001600160a01b03821615155b801561275857506001600160a01b03821661dead14155b801561276e5750602954600160a01b900460ff16155b1561289d576001600160a01b03831660009081526026602052604090205460ff1680156127b457506001600160a01b03821660009081526025602052604090205460ff16155b156127e0576023548111156127db5760405162461bcd60e51b8152600401610bcc906141ca565b612848565b6001600160a01b03821660009081526026602052604090205460ff16801561282157506001600160a01b03831660009081526025602052604090205460ff16155b15612848576023548111156128485760405162461bcd60e51b8152600401610bcc90613f61565b6001600160a01b03821660009081526025602052604090205460ff1661289d576024548161287584611a47565b61287f919061463a565b111561289d5760405162461bcd60e51b8152600401610bcc90614416565b60006128b6602254602154612bc990919063ffffffff16565b905060006128c330611a47565b60275460295491925082101590600160a01b900460ff161580156128f05750602954600160a81b900460ff165b8015612911575060295460009061290f906001600160a01b0316611a47565b115b801561291d5750600083115b801561294257506001600160a01b0385166000908152600d602052604090205460ff16155b801561296757506001600160a01b0386166000908152600d602052604090205460ff16155b801561298b57506001600160a01b03851660009081526026602052604090205460ff165b80156129945750805b156129a1576129a1612c47565b6001600160a01b0386166000908152600d602052604090205460019060ff16806129e357506001600160a01b0386166000908152600d602052604090205460ff165b156129f5575060036017556000612b0e565b6001600160a01b03871660009081526026602052604090205460ff1615612a7f57612a1e612f4e565b6001601755602054431415612a3c576000601255605a601555612a7a565b602054612a4a90600161463a565b431415612a605760006012556032601555612a7a565b601854601255601a54601954612a76919061463a565b6015555b612b0e565b6001600160a01b03861660009081526026602052604090205460ff1615612b0057612aa8612f4e565b6002601755602054431415612ac6576000601255605a601555612a7a565b602054612ad490600161463a565b431415612aea5760006012556032601555612a7a565b601b54601255601d54601c54612a76919061463a565b612b08612f4e565b60036017555b612b1a87878784612f80565b50505050505050565b60008184841115612b475760405162461bcd60e51b8152600401610bcc9190613c2e565b506000612b548486614691565b95945050505050565b6000806000612b6a61309c565b9092509050612b798282612b80565b9250505090565b6000612bc283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613271565b9392505050565b600080612bd6838561463a565b905083811015612bc25760405162461bcd60e51b8152600401610bcc90613e96565b6000806000806000806000806000612c0f8a61329f565b9250925092506000806000612c2d8d8686612c28612b5d565b6132e1565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b1790556000612c6530611a47565b90506000602254602154612c79919061463a565b90506000612c936002602154612b8090919063ffffffff16565b90506000612ca18483613331565b905047612cad82613373565b6000612cb94783613331565b90506000612cdc86612cd6602254856134f890919063ffffffff16565b90612b80565b90506000612cea8383613331565b90506000612d096103e8612cd6601e54866134f890919063ffffffff16565b90506000612d286103e8612cd6601f54876134f890919063ffffffff16565b9050612d348285614691565b9350612d408185614691565b60006021819055602281905560035460405192965090916001600160a01b03909116908690612d6e90613b9e565b60006040518083038185875af1925050503d8060008114612dab576040519150601f19603f3d011682016040523d82523d6000602084013e612db0565b606091505b50506004546040519192506001600160a01b0316908490612dd090613b9e565b60006040518083038185875af1925050503d8060008114612e0d576040519150601f19603f3d011682016040523d82523d6000602084013e612e12565b606091505b50506006546040519192506001600160a01b0316908390612e3290613b9e565b60006040518083038185875af1925050503d8060008114612e6f576040519150601f19603f3d011682016040523d82523d6000602084013e612e74565b606091505b505080915050612e8489856124e5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56188858b604051612eb793929190614616565b60405180910390a167016345785d8a0000471115612f34576003546040516001600160a01b03909116904790612eec90613b9e565b60006040518083038185875af1925050503d8060008114612f29576040519150601f19603f3d011682016040523d82523d6000602084013e612f2e565b606091505b50909150505b50506029805460ff60a01b19169055505050505050505050565b601254158015612f5e5750601554155b15612f6857612f7e565b6012805460135560158054601655600091829055555b565b80612f8d57612f8d612f4e565b6001600160a01b0384166000908152600e602052604090205460ff168015612fce57506001600160a01b0383166000908152600e602052604090205460ff16155b15612fe357612fde84848461353d565b61308f565b6001600160a01b0384166000908152600e602052604090205460ff1615801561302457506001600160a01b0383166000908152600e602052604090205460ff165b1561303457612fde848484613661565b6001600160a01b0384166000908152600e602052604090205460ff16801561307457506001600160a01b0383166000908152600e602052604090205460ff165b1561308457612fde84848461370a565b61308f84848461377d565b8061235a5761235a6137c1565b6010546000908190670de0b6b3a7640000825b600f54811015613233578260086000600f84815481106130df57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061315857508160096000600f848154811061313157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561317557601054670de0b6b3a76400009450945050505061326d565b6131c960086000600f848154811061319d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613331565b925061321f60096000600f84815481106131f357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613331565b91508061322b816146a8565b9150506130af565b5060105461324990670de0b6b3a7640000612b80565b82101561326757601054670de0b6b3a764000093509350505061326d565b90925090505b9091565b600081836132925760405162461bcd60e51b8152600401610bcc9190613c2e565b506000612b548486614652565b6000806000806132ae856137cf565b905060006132bb866137eb565b905060006132d3826132cd8986613331565b90613331565b979296509094509092505050565b60008080806132f088866134f8565b905060006132fe88876134f8565b9050600061330c88886134f8565b9050600061331e826132cd8686613331565b939b939a50919850919650505050505050565b6000612bc283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b23565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106133b657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561340a57600080fd5b505afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344291906139ad565b8160018151811061346357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260285461348991309116846123d6565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac947906134c29085906000908690309042906004016145a6565b600060405180830381600087803b1580156134dc57600080fd5b505af11580156134f0573d6000803e3d6000fd5b505050505050565b60008261350757506000610e86565b60006135138385614672565b9050826135208583614652565b14612bc25760405162461bcd60e51b8152600401610bcc90614256565b60008060008060008061354f87612bf8565b6001600160a01b038f16600090815260096020526040902054959b509399509197509550935091506135819088613331565b6001600160a01b038a166000908152600960209081526040808320939093556008905220546135b09087613331565b6001600160a01b03808b1660009081526008602052604080822093909355908a16815220546135df9086612bc9565b6001600160a01b03891660009081526008602052604090205561360181613807565b61360b848361396d565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161364e919061459d565b60405180910390a3505050505050505050565b60008060008060008061367387612bf8565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506136a59087613331565b6001600160a01b03808b16600090815260086020908152604080832094909455918b168152600990915220546136db9084612bc9565b6001600160a01b0389166000908152600960209081526040808320939093556008905220546135df9086612bc9565b60008060008060008061371c87612bf8565b6001600160a01b038f16600090815260096020526040902054959b5093995091975095509350915061374e9088613331565b6001600160a01b038a166000908152600960209081526040808320939093556008905220546136a59087613331565b60008060008060008061378f87612bf8565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506135b09087613331565b601354601255601654601555565b6000610e866064612cd6601254856134f890919063ffffffff16565b6000610e866064612cd6601554856134f890919063ffffffff16565b60016017541415613878576015546019546138229083614672565b61382c9190614652565b6021600082825461383d919061463a565b9091555050601554601a546138529083614672565b61385c9190614652565b6022600082825461386d919061463a565b909155506138e49050565b600260175414156138e457601554601c546138939083614672565b61389d9190614652565b602160008282546138ae919061463a565b9091555050601554601d546138c39083614672565b6138cd9190614652565b602260008282546138de919061463a565b90915550505b60006138ee612b5d565b905060006138fc83836134f8565b306000908152600860205260409020549091506139199082612bc9565b30600090815260086020908152604080832093909355600e9052205460ff161561396857306000908152600960205260409020546139579084612bc9565b306000908152600960205260409020555b505050565b60105461397a9083613331565b60105560115461398a9082612bc9565b6011555050565b6000602082840312156139a2578081fd5b8135612bc2816146d9565b6000602082840312156139be578081fd5b8151612bc2816146d9565b600080604083850312156139db578081fd5b82356139e6816146d9565b915060208301356139f6816146d9565b809150509250929050565b600080600060608486031215613a15578081fd5b8335613a20816146d9565b92506020840135613a30816146d9565b929592945050506040919091013590565b60008060408385031215613a53578182fd5b8235613a5e816146d9565b915060208301356139f6816146f1565b60008060408385031215613a80578182fd5b8235613a8b816146d9565b946020939093013593505050565b600060208284031215613aaa578081fd5b8135612bc2816146f1565b600060208284031215613ac6578081fd5b8151612bc2816146f1565b600060208284031215613ae2578081fd5b5035919050565b600060208284031215613afa578081fd5b5051919050565b60008060408385031215613b13578182fd5b8235915060208301356139f6816146f1565b60008060408385031215613b37578182fd5b50508035926020909101359150565b600080600060608486031215613b5a578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215613b85578283fd5b8351925060208401519150604084015190509250925092565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015613c5a57858101830151858201604001528201613c3e565b81811115613c6b5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b6020808252603e908201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060408201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e74726163740000606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6020808252600f908201526e53706c6974206f766572203130302560881b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526039908201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060408201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606082015260800190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526036908201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656040820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606082015260800190565b60208082526023908201527f546f206164647265737320626c61636b6c6973742e20436f6e7461637420616460408201526236b4b760e91b606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601f908201527f4d757374206b6565702073656c6c2074617865732062656c6f77203130302500604082015260600190565b60208082526025908201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604082015264020626520360dc1b606082015260800190565b6020808252600b908201526a043616e6e6f7420626520360ac1b604082015260600190565b60208082526025908201527f46726f6d206164647265737320626c61636b6c6973742e20436f6e746163742060408201526430b236b4b760d91b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526025908201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604082015264020626520360dc1b606082015260800190565b6020808252601e908201527f4d757374206b656570206275792074617865732062656c6f7720313030250000604082015260600190565b60208082526035908201527f427579207472616e7366657220616d6f756e742065786365656473207468652060408201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606082015260800190565b6020808252601a908201527f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526013908201527243616e6e6f742062652030206164647265737360681b604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526013908201527213585e081dd85b1b195d08195e18d959591959606a1b604082015260600190565b6020808252604d908201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60408201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60608201526c3ab232b21030b2323932b9b99760991b608082015260a00190565b60208082526014908201527343616e6e6f74207573652030206164647265737360601b604082015260600190565b6020808252602b908201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360408201526a1b89dd081cdd185c9d195960aa1b606082015260800190565b6020808252601a908201527f54726164696e67206973206e6f7420616374697665207965742e000000000000604082015260600190565b6020808252601a908201527f43616e6e6f7420626c61636b6c69737420302061646472657373000000000000604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156145f55784516001600160a01b0316835293830193918301916001016145d0565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b6000821982111561464d5761464d6146c3565b500190565b60008261466d57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561468c5761468c6146c3565b500290565b6000828210156146a3576146a36146c3565b500390565b60006000198214156146bc576146bc6146c3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146146ee57600080fd5b50565b80151581146146ee57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203bb7b3bf77e36b0ec1ebdbd31c3ceb9628b02ff8d6d21b22aafdafb3cd49487964736f6c63430008000033
Deployed Bytecode Sourcemap
8773:33722:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17995:1006;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14548:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15545:193::-;;;;;;;;;;-1:-1:-1;15545:193:0;;;;;:::i;:::-;;:::i;11497:63::-;;;;;;;;;;-1:-1:-1;11497:63:0;;;;;:::i;:::-;;:::i;39783:281::-;;;;;;;;;;-1:-1:-1;39783:281:0;;;;;:::i;:::-;;:::i;:::-;;17084:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11832:39::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14831:97::-;;;;;;;;;;;;;:::i;39294:481::-;;;;;;;;;;-1:-1:-1;39294:481:0;;;;;:::i;:::-;;:::i;38436:189::-;;;;;;;;;;-1:-1:-1;38436:189:0;;;;;:::i;:::-;;:::i;10834:30::-;;;;;;;;;;;;;:::i;15746:448::-;;;;;;;;;;-1:-1:-1;15746:448:0;;;;;:::i;:::-;;:::i;38823:463::-;;;;;;;;;;-1:-1:-1;38823:463:0;;;;;:::i;:::-;;:::i;20275:322::-;;;;;;;;;;-1:-1:-1;20275:322:0;;;;;:::i;:::-;;:::i;14738:85::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9104:102::-;;;;;;;;;;;;;:::i;21109:471::-;;;;;;;;;;-1:-1:-1;21109:471:0;;;;;:::i;:::-;;:::i;16202:302::-;;;;;;;;;;-1:-1:-1;16202:302:0;;;;;:::i;:::-;;:::i;9001:96::-;;;;;;;;;;;;;:::i;11333:37::-;;;;;;;;;;;;;:::i;38119:152::-;;;;;;;;;;-1:-1:-1;38119:152:0;;;;;:::i;:::-;;:::i;28905:175::-;;;;;;;;;;-1:-1:-1;28905:175:0;;;;;:::i;:::-;;:::i;19786:481::-;;;;;;;;;;-1:-1:-1;19786:481:0;;;;;:::i;:::-;;:::i;11878:28::-;;;;;;;;;;;;;:::i;9556:33::-;;;;;;;;;;;;;:::i;11951:41::-;;;;;;;;;;;;;:::i;28531:341::-;;;;;;;;;;;;;:::i;20605:496::-;;;;;;;;;;-1:-1:-1;20605:496:0;;;;;:::i;:::-;;:::i;40510:378::-;;;;;;;;;;-1:-1:-1;40510:378:0;;;;;:::i;:::-;;:::i;37985:126::-;;;;;;;;;;-1:-1:-1;37985:126:0;;;;;:::i;:::-;;:::i;29118:175::-;;;;;;;;;;-1:-1:-1;29118:175:0;;;;;:::i;:::-;;:::i;1628:90::-;;;;;;;;;;;;;:::i;38633:182::-;;;;;;;;;;-1:-1:-1;38633:182:0;;;;;:::i;:::-;;:::i;1530:90::-;;;;;;;;;;;;;:::i;11197:48::-;;;;;;;;;;;;;:::i;41141:261::-;;;;;;;;;;-1:-1:-1;41141:261:0;;;;;:::i;:::-;;:::i;11377:32::-;;;;;;;;;;;;;:::i;14936:198::-;;;;;;;;;;-1:-1:-1;14936:198:0;;;;;:::i;:::-;;:::i;1085:148::-;;;;;;;;;;;;;:::i;17241:121::-;;;;;;;;;;;;;:::i;17370:167::-;;;;;;;;;;-1:-1:-1;17370:167:0;;;;;:::i;:::-;;:::i;41684:488::-;;;;;;;;;;-1:-1:-1;41684:488:0;;;;;:::i;:::-;;:::i;10871:36::-;;;;;;;;;;;;;:::i;16922:154::-;;;;;;;;;;-1:-1:-1;16922:154:0;;;;;:::i;:::-;;:::i;871:79::-;;;;;;;;;;;;;:::i;40072:430::-;;;;;;;;;;-1:-1:-1;40072:430:0;;;;;:::i;:::-;;:::i;14641:89::-;;;;;;;;;;;;;:::i;19139:304::-;;;;;;;;;;-1:-1:-1;19139:304:0;;;;;:::i;:::-;;:::i;19009:122::-;;;;;;;;;;;;;:::i;16512:402::-;;;;;;;;;;-1:-1:-1;16512:402:0;;;;;:::i;:::-;;:::i;8892:102::-;;;;;;;;;;;;;:::i;15142:201::-;;;;;;;;;;-1:-1:-1;15142:201:0;;;;;:::i;:::-;;:::i;11460:30::-;;;;;;;;;;;;;:::i;11147:43::-;;;;;;;;;;;;;:::i;11718:57::-;;;;;;;;;;-1:-1:-1;11718:57:0;;;;;:::i;:::-;;:::i;11999:33::-;;;;;;;;;;;;;:::i;10795:30::-;;;;;;;;;;;;;:::i;41410:171::-;;;;;;;;;;-1:-1:-1;41410:171:0;;;;;:::i;:::-;;:::i;9213:101::-;;;;;;;;;;;;;:::i;11418:35::-;;;;;;;;;;;;;:::i;10914:31::-;;;;;;;;;;;;;:::i;10753:35::-;;;;;;;;;;;;;:::i;40896:237::-;;;;;;;;;;-1:-1:-1;40896:237:0;;;;;:::i;:::-;;:::i;15351:186::-;;;;;;;;;;-1:-1:-1;15351:186:0;;;;;:::i;:::-;;:::i;38279:149::-;;;;;;;;;;-1:-1:-1;38279:149:0;;;;;:::i;:::-;;:::i;11254:37::-;;;;;;;;;;;;;:::i;10717:29::-;;;;;;;;;;;;;:::i;1241:281::-;;;;;;;;;;-1:-1:-1;1241:281:0;;;;;:::i;:::-;;:::i;42224:268::-;;;;;;;;;;;;;:::i;9596:41::-;;;;;;;;;;-1:-1:-1;9596:41:0;;;;;:::i;:::-;;:::i;17995:1006::-;18041:4;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;;;;;;;;;18067:13:::1;::::0;-1:-1:-1;;;18067:13:0;::::1;;;18066:14;18058:70;;;;-1:-1:-1::0;;;18058:70:0::1;;;;;;;:::i;:::-;18141:15;:13;:15::i;:::-;18234:42;18298:58;18234:42:::0;18351:4:::1;18298:25;:58::i;:::-;18367:15;:34:::0;;-1:-1:-1;;;;;;18367:34:0::1;-1:-1:-1::0;;;;;18367:34:0;;::::1;::::0;;;::::1;::::0;;;;18412:58:::1;::::0;18429:4:::1;::::0;18444:15:::1;9877:19;18412:8;:58::i;:::-;18515:16;-1:-1:-1::0;;;;;18515:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18497:70:0::1;;18576:4;18583:16;-1:-1:-1::0;;;;;18583:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18497:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18481:13;:126:::0;;-1:-1:-1;;;;;;18481:126:0::1;-1:-1:-1::0;;;;;18481:126:0;;::::1;;::::0;;;;18618:55:::1;::::0;18652:13:::1;-1:-1:-1::0;18618:25:0::1;:55::i;:::-;18721:13;::::0;18684:58:::1;::::0;-1:-1:-1;;;;;18721:13:0::1;::::0;18684:28:::1;:58::i;:::-;18799:1;18775:21;:25;18753:110;;;;-1:-1:-1::0;;;18753:110:0::1;;;;;;;:::i;:::-;18874:61;18887:24;18905:4;18887:9;:24::i;:::-;18913:21;18874:12;:61::i;:::-;18964:6;::::0;18946:25:::1;::::0;-1:-1:-1;;;;;18964:6:0::1;18946:17;:25::i;:::-;18989:4;18982:11;;;17995:1006:::0;:::o;14548:85::-;14620:5;;;;;;;;;;;;-1:-1:-1;;;14620:5:0;;;;14548:85;:::o;15545:193::-;15647:4;15669:39;15678:12;:10;:12::i;:::-;15692:7;15701:6;15669:8;:39::i;:::-;-1:-1:-1;15726:4:0;15545:193;;;;;:::o;11497:63::-;;;;;;;;;;;;;;;:::o;39783:281::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;39934:4:::1;39907:24;39923:8:::0;39907:13;:24:::1;:::i;:::-;:31;39899:59;;;;-1:-1:-1::0;;;39899:59:0::1;;;;;;;:::i;:::-;39969:27;:43:::0;;;;40023:22:::1;:33:::0;39783:281::o;17084:89::-;17155:10;;17084:89;:::o;11832:39::-;;;-1:-1:-1;;;;;11832:39:0;;:::o;14831:97::-;9877:19;14831:97;:::o;39294:481::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;39445:11:::1;:24:::0;;;39480:17:::1;:36:::0;;;39527:12:::1;:26:::0;;;39636:3:::1;39542:11:::0;39586:31:::1;39500:16:::0;39459:10;39586:31:::1;:::i;:::-;:46;;;;:::i;:::-;:53;;39564:134;;;;-1:-1:-1::0;;;39564:134:0::1;;;;;;;:::i;:::-;39714:53;39725:11;39738:16;39756:10;39714:53;;;;;;;;:::i;:::-;;;;;;;;39294:481:::0;;;:::o;38436:189::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;38538:1:::1;38526:9;:13;38518:37;;;;-1:-1:-1::0;;;38518:37:0::1;;;;;;;:::i;:::-;38613:4;38590:19;38600:9:::0;9877:19:::1;38590;:::i;:::-;38589:28;;;;:::i;:::-;38566:20;:51:::0;-1:-1:-1;38436:189:0:o;10834:30::-;;;;:::o;15746:448::-;15880:4;15897:36;15907:6;15915:9;15926:6;15897:9;:36::i;:::-;15944:220;15967:6;15988:12;:10;:12::i;:::-;16015:138;16071:6;16015:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16015:19:0;;;;;;:11;:19;;;;;;16035:12;:10;:12::i;:::-;-1:-1:-1;;;;;16015:33:0;;;;;;;;;;;;-1:-1:-1;16015:33:0;;;:138;:37;:138::i;:::-;15944:8;:220::i;:::-;-1:-1:-1;16182:4:0;15746:448;;;;;:::o;38823:463::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;38970:10:::1;:22:::0;;;39003:16:::1;:34:::0;;;39048:11:::1;:24:::0;;;39152:3:::1;39062:10:::0;39105:29:::1;39022:15:::0;38983:9;39105:29:::1;:::i;:::-;:43;;;;:::i;:::-;:50;;39083:130;;;;-1:-1:-1::0;;;39083:130:0::1;;;;;;;:::i;:::-;39229:49;39239:10;39251:15;39268:9;39229:49;;;;;;;;:::i;20275:322::-:0;20369:7;20427;;20416;:18;;20394:110;;;;-1:-1:-1;;;20394:110:0;;;;;;;:::i;:::-;20515:19;20537:10;:8;:10::i;:::-;20515:32;-1:-1:-1;20565:24:0;:7;20515:32;20565:11;:24::i;:::-;20558:31;;;20275:322;;;;:::o;14738:85::-;10127:1;14738:85;:::o;9104:102::-;;;-1:-1:-1;;;;;9104:102:0;;:::o;21109:471::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21187:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21179:56;;;;-1:-1:-1::0;;;21179:56:0::1;;;;;;;:::i;:::-;21251:9;21246:327;21270:9;:16:::0;21266:20;::::1;21246:327;;;21328:7;-1:-1:-1::0;;;;;21312:23:0::1;:9;21322:1;21312:12;;;;;;-1:-1:-1::0;;;21312:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21312:12:0::1;:23;21308:254;;;21371:9;21381:16:::0;;:20:::1;::::0;21400:1:::1;::::0;21381:20:::1;:::i;:::-;21371:31;;;;;;-1:-1:-1::0;;;21371:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;21356:9:::1;:12:::0;;-1:-1:-1;;;;;21371:31:0;;::::1;::::0;21366:1;;21356:12;::::1;;;-1:-1:-1::0;;;21356:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21356:46:0::1;-1:-1:-1::0;;;;;21356:46:0;;::::1;;::::0;;21421:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21460:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21460:28:0::1;::::0;;21507:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;21507:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21507:15:0;;;;;-1:-1:-1;;;;;;21507:15:0::1;::::0;;;;;21541:5:::1;;21308:254;21288:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21246:327;;;;21109:471:::0;:::o;16202:302::-;16319:4;16341:133;16364:12;:10;:12::i;:::-;16391:7;16413:50;16452:10;16413:11;:25;16425:12;:10;:12::i;:::-;-1:-1:-1;;;;;16413:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;16413:25:0;;;:34;;;;;;;;;;;:38;:50::i;9001:96::-;;;-1:-1:-1;;;;;9001:96:0;;:::o;11333:37::-;;;;:::o;38119:152::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38190:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;:34;;-1:-1:-1;;38190:34:0::1;38220:4;38190:34;::::0;;38240:23;::::1;::::0;::::1;::::0;38209:7;;38240:23:::1;:::i;:::-;;;;;;;;38119:152:::0;:::o;28905:175::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28984:21:0;::::1;28976:60;;;;-1:-1:-1::0;;;28976:60:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29047:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;29047:25:0::1;29068:4;29047:25;::::0;;28905:175::o;19786:481::-;19906:7;9877:19;19939:7;:18;;19931:62;;;;-1:-1:-1;;;19931:62:0;;;;;;;:::i;:::-;20009:17;20004:256;;20044:15;20073:19;20084:7;20073:10;:19::i;:::-;-1:-1:-1;20043:49:0;;-1:-1:-1;20107:14:0;;-1:-1:-1;;;;;20107:14:0;20004:256;20157:23;20192:19;20203:7;20192:10;:19::i;:::-;-1:-1:-1;20154:57:0;;-1:-1:-1;20226:22:0;;-1:-1:-1;;;;;20226:22:0;11878:28;;;-1:-1:-1;;;;;11878:28:0;;:::o;9556:33::-;;;;;;:::o;11951:41::-;;;-1:-1:-1;;;11951:41:0;;;;;:::o;28531:341::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;28586:23:::1;28612:24;28630:4;28612:9;:24::i;:::-;28586:50:::0;-1:-1:-1;28688:13:0::1;28698:3;9877:19;28688:13;:::i;:::-;28669:15;:32;;28647:144;;;;-1:-1:-1::0;;;28647:144:0::1;;;;;;;:::i;:::-;28802:10;:8;:10::i;:::-;28828:36;28848:15;28828:36;;;;;;:::i;20605:496::-:0;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20686:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20685:21;20677:61;;;;-1:-1:-1::0;;;20677:61:0::1;;;;;;;:::i;:::-;20771:9;:16:::0;20795:2:::1;::::0;20771:20:::1;::::0;20790:1:::1;20771:20;:::i;:::-;:26;;20749:153;;;;-1:-1:-1::0;;;20749:153:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20917:16:0;::::1;20936:1;20917:16:::0;;;:7:::1;:16;::::0;;;;;:20;20913:109:::1;;-1:-1:-1::0;;;;;20993:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20973:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20954:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20913:109:::1;-1:-1:-1::0;;;;;21032:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21032:27:0::1;21055:4;21032:27:::0;;::::1;::::0;;;21070:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21070:23:0::1;::::0;;::::1;::::0;;20605:496::o;40510:378::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40616:31:0;::::1;40594:118;;;;-1:-1:-1::0;;;40594:118:0::1;;;;;;;:::i;:::-;40723:16;:45:::0;;-1:-1:-1;;;;;;40723:45:0::1;-1:-1:-1::0;;;;;40723:45:0;;::::1;::::0;;;::::1;::::0;;;;40798:16:::1;-1:-1:-1::0;40779:36:0;;;:18:::1;:36;::::0;;;;;;:43;;-1:-1:-1;;40779:43:0::1;-1:-1:-1::0;40779:43:0::1;::::0;;40838:42;::::1;::::0;::::1;::::0;40723:45;;40838:42:::1;:::i;37985:126::-:0;-1:-1:-1;;;;;38076:27:0;38052:4;38076:27;;;:18;:27;;;;;;;;;37985:126::o;29118:175::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29202:21:0;::::1;29194:54;;;;-1:-1:-1::0;;;29194:54:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29259:18:0::1;29280:5;29259:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;29259:26:0::1;::::0;;29118:175::o;1628:90::-;1695:15;1628:90;:::o;38633:182::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;38730:1:::1;38715:12;:16;38707:40;;;;-1:-1:-1::0;;;38707:40:0::1;;;;;;;:::i;:::-;38803:4;38777:22;38787:12:::0;9877:19:::1;38777:22;:::i;:::-;38776:31;;;;:::i;:::-;38758:15;:49:::0;-1:-1:-1;38633:182:0:o;1530:90::-;1603:9;;1530:90;:::o;11197:48::-;;;;:::o;41141:261::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41233:30:0;::::1;41225:62;;;;-1:-1:-1::0;;;41225:62:0::1;;;;;;;:::i;:::-;41298:15;:43:::0;;-1:-1:-1;;;;;;41298:43:0::1;-1:-1:-1::0;;;;;41298:43:0;;::::1;;::::0;;;;41371:15:::1;-1:-1:-1::0;41352:35:0;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;41352:42:0::1;-1:-1:-1::0;41352:42:0::1;::::0;;41141:261::o;11377:32::-;;;;:::o;14936:198::-;-1:-1:-1;;;;;15026:20:0;;15002:7;15026:20;;;:11;:20;;;;;;;;15022:49;;;-1:-1:-1;;;;;;15055:16:0;;;;;;:7;:16;;;;;;15048:23;;15022:49;-1:-1:-1;;;;;15109:16:0;;;;;;:7;:16;;;;;;15089:37;;:19;:37::i;1085:148::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;1192:1:::1;1176:6:::0;;1155:40:::1;::::0;-1:-1:-1;;;;;1176:6:0;;::::1;::::0;1155:40:::1;::::0;1192:1;;1155:40:::1;1223:1;1206:19:::0;;-1:-1:-1;;;;;;1206:19:0::1;::::0;;1085:148::o;17241:121::-;17293:4;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;17310:14:0::1;:22:::0;;-1:-1:-1;;17310:22:0::1;::::0;;;17241:121;:::o;17370:167::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17483:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17483:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17370:167::o;41684:488::-;41798:10;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41834:20:0;::::1;41826:59;;;;-1:-1:-1::0;;;41826:59:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41904:23:0;::::1;41922:4;41904:23;;41896:64;;;;-1:-1:-1::0;;;41896:64:0::1;;;;;;;:::i;:::-;41998:39;::::0;-1:-1:-1;;;41998:39:0;;41971:24:::1;::::0;-1:-1:-1;;;;;41998:24:0;::::1;::::0;::::1;::::0;:39:::1;::::0;42031:4:::1;::::0;41998:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42056:46;::::0;-1:-1:-1;;;42056:46:0;;41971:66;;-1:-1:-1;;;;;;42056:23:0;::::1;::::0;::::1;::::0;:46:::1;::::0;42080:3;;41971:66;;42056:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42048:54;;42118:46;42139:6;42147:16;42118:46;;;;;;;:::i;:::-;;;;;;;;1068:1;41684:488:::0;;;;:::o;10871:36::-;;;;:::o;16922:154::-;-1:-1:-1;;;;;17048:20:0;17019:4;17048:20;;;:11;:20;;;;;;;;;16922:154::o;871:79::-;909:7;936:6;-1:-1:-1;;;;;936:6:0;871:79;:::o;40072:430::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40180:31:0;::::1;40158:118;;;;-1:-1:-1::0;;;40158:118:0::1;;;;;;;:::i;:::-;40306:16;::::0;;-1:-1:-1;;;;;40306:16:0;;::::1;40326:5;40287:36:::0;;;:18:::1;:36;::::0;;;;;:44;;-1:-1:-1;;40287:44:0;;::::1;::::0;;;40342:45;;-1:-1:-1;;;;;;40342:45:0::1;::::0;;::::1;;::::0;;;;40417:16;;;::::1;40398:36:::0;;;;;:43;;;;::::1;-1:-1:-1::0;40398:43:0::1;::::0;;;40457:37;::::1;::::0;::::1;::::0;40342:45;;40457:37:::1;:::i;14641:89::-:0;14715:7;;;;;;;;;;;;-1:-1:-1;;;14715:7:0;;;;14641:89;:::o;19139:304::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;19283:13:::1;::::0;-1:-1:-1;;;;;19275:21:0;;::::1;19283:13:::0;::::1;19275:21;;19253:128;;;;-1:-1:-1::0;;;19253:128:0::1;;;;;;;:::i;:::-;19394:41;19423:4;19429:5;19394:28;:41::i;19009:122::-:0;19100:23;;19009:122;:::o;16512:402::-;16634:4;16656:228;16679:12;:10;:12::i;:::-;16706:7;16728:145;16785:15;16728:145;;;;;;;;;;;;;;;;;:11;:25;16740:12;:10;:12::i;:::-;-1:-1:-1;;;;;16728:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;16728:25:0;;;:34;;;;;;;;;;;:145;:38;:145::i;8892:102::-;;;-1:-1:-1;;;;;8892:102:0;;:::o;15142:201::-;15249:4;15271:42;15281:12;:10;:12::i;:::-;15295:9;15306:6;15271:9;:42::i;11460:30::-;;;;:::o;11147:43::-;;;;:::o;11718:57::-;;;;;;;;;;;;;;;:::o;11999:33::-;;;-1:-1:-1;;;11999:33:0;;;;;:::o;10795:30::-;;;;:::o;41410:171::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;41487:21:::1;:32:::0;;-1:-1:-1;;;;41487:32:0::1;-1:-1:-1::0;;;41487:32:0;::::1;;;;::::0;;41535:38:::1;::::0;::::1;::::0;::::1;::::0;41487:32;;41535:38:::1;:::i;9213:101::-:0;;;-1:-1:-1;;;;;9213:101:0;;:::o;11418:35::-;;;;:::o;10914:31::-;;;;:::o;10753:35::-;;;;:::o;40896:237::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40984:25:0;::::1;40976:57;;;;-1:-1:-1::0;;;40976:57:0::1;;;;;;;:::i;:::-;41044:10;:33:::0;;-1:-1:-1;;;;;;41044:33:0::1;-1:-1:-1::0;;;;;41044:33:0;;::::1;;::::0;;;;41107:10:::1;-1:-1:-1::0;41088:30:0;;;:18:::1;:30;::::0;;;;:37;;-1:-1:-1;;41088:37:0::1;-1:-1:-1::0;41088:37:0::1;::::0;;40896:237::o;15351:186::-;-1:-1:-1;;;;;15502:18:0;;;15470:7;15502:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15351:186::o;38279:149::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38348:27:0;::::1;38378:5;38348:27:::0;;;:18:::1;:27;::::0;;;;;;:35;;-1:-1:-1;;38348:35:0::1;::::0;;38399:21;::::1;::::0;::::1;::::0;38367:7;;38399:21:::1;:::i;11254:37::-:0;;;;:::o;10717:29::-;;;;:::o;1241:281::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1344:22:0;::::1;1322:110;;;;-1:-1:-1::0;;;1322:110:0::1;;;;;;;:::i;:::-;1469:6;::::0;;1448:38:::1;::::0;-1:-1:-1;;;;;1448:38:0;;::::1;::::0;1469:6;::::1;::::0;1448:38:::1;::::0;::::1;1497:6;:17:::0;;-1:-1:-1;;;;;;1497:17:0::1;-1:-1:-1::0;;;;;1497:17:0;;;::::1;::::0;;;::::1;::::0;;1241:281::o;42224:268::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;42291:13:::1;::::0;-1:-1:-1;;;42291:13:0;::::1;;;42290:14;42282:70;;;;-1:-1:-1::0;;;42282:70:0::1;;;;;;;:::i;:::-;42363:12;42408:10;-1:-1:-1::0;;;;;42400:24:0::1;42433:21;42400:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;42224:268:0:o;9596:41::-;;;;;;;;;;;;;;;:::o;95:115::-;191:10;95:115;:::o;17591:166::-;1008:12;:10;:12::i;:::-;998:6;;-1:-1:-1;;;;;998:6:0;;;:22;;;990:67;;;;-1:-1:-1;;;990:67:0;;;;;;;:::i;:::-;17646:13:::1;:20:::0;;-1:-1:-1;;;;;;;;17646:20:0;;::::1;-1:-1:-1::0;;;17646:20:0::1;17677:28;-1:-1:-1::0;;;17677:28:0::1;::::0;;17737:12:::1;17716:18;:33:::0;17591:166::o;21588:371::-;-1:-1:-1;;;;;21715:19:0;;21707:68;;;;-1:-1:-1;;;21707:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21794:21:0;;21786:68;;;;-1:-1:-1;;;21786:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21867:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;21919:32;;;;;21897:6;;21919:32;:::i;:::-;;;;;;;;21588:371;;;:::o;19451:327::-;-1:-1:-1;;;;;19534:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;19534:39:0;;;;;;;;19584:31;:37;;;;;;;:45;;;;;;;;;;;19640:61;;19666:23;19684:4;19666:17;:23::i;:::-;19716:5;19711:60;;19738:21;19754:4;19738:15;:21::i;29808:425::-;29921:15;;29889:62;;29906:4;;-1:-1:-1;;;;;29921:15:0;29939:11;29889:8;:62::i;:::-;29962:15;;30168:16;;29962:263;;-1:-1:-1;;;29962:263:0;;-1:-1:-1;;;;;29962:15:0;;;;:31;;30002:9;;29962:263;;30036:4;;30056:11;;29962:15;;;;30168:16;;30199:15;;29962:263;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29808:425;;:::o;21967:4570::-;-1:-1:-1;;;;;22089:18:0;;22081:68;;;;-1:-1:-1;;;22081:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22168:16:0;;22160:64;;;;-1:-1:-1;;;22160:64:0;;;;;;;:::i;:::-;22252:1;22243:6;:10;22235:64;;;;-1:-1:-1;;;22235:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22319:15:0;;;;;;:9;:15;;;;;;;;22318:16;22310:66;;;;-1:-1:-1;;;22310:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22396:13:0;;;;;;:9;:13;;;;;;;;22395:14;22387:62;;;;-1:-1:-1;;;22387:62:0;;;;;;;:::i;:::-;22467:13;;-1:-1:-1;;;22467:13:0;;;;22462:185;;-1:-1:-1;;;;;22523:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;22551:22:0;;;;;;:18;:22;;;;;;;;22523:50;22497:138;;;;-1:-1:-1;;;22497:138:0;;;;;;;:::i;:::-;22663:14;;;;22659:1316;;;22724:7;:5;:7::i;:::-;-1:-1:-1;;;;;22716:15:0;:4;-1:-1:-1;;;;;22716:15:0;;;:49;;;;;22758:7;:5;:7::i;:::-;-1:-1:-1;;;;;22752:13:0;:2;-1:-1:-1;;;;;22752:13:0;;;22716:49;:86;;;;-1:-1:-1;;;;;;22786:16:0;;;;22716:86;:128;;;;-1:-1:-1;;;;;;22823:21:0;;22837:6;22823:21;;22716:128;:166;;;;-1:-1:-1;22866:16:0;;-1:-1:-1;;;22866:16:0;;;;22865:17;22716:166;22694:1270;;;-1:-1:-1;;;;;22971:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;23028:35:0;;;;;;:31;:35;;;;;;;;23027:36;22971:92;22945:753;;;23150:20;;23140:6;:30;;23106:169;;;;-1:-1:-1;;;23106:169:0;;;;;;;:::i;:::-;22945:753;;;-1:-1:-1;;;;;23373:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23428:37:0;;;;;;:31;:37;;;;;;;;23427:38;23373:92;23347:351;;;23552:20;;23542:6;:30;;23508:170;;;;-1:-1:-1;;;23508:170:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23723:35:0;;;;;;:31;:35;;;;;;;;23718:231;;23843:15;;23833:6;23817:13;23827:2;23817:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;23783:146;;;;-1:-1:-1;;;23783:146:0;;;;;;;:::i;:::-;23987:25;24015:69;24056:17;;24015:22;;:26;;:69;;;;:::i;:::-;23987:97;;24095:28;24126:24;24144:4;24126:9;:24::i;:::-;24229:23;;24313:16;;24095:55;;-1:-1:-1;24192:60:0;;;;-1:-1:-1;;;24313:16:0;;;;24312:17;:55;;;;-1:-1:-1;24346:21:0;;-1:-1:-1;;;24346:21:0;;;;24312:55;:100;;;;-1:-1:-1;24394:13:0;;24411:1;;24384:24;;-1:-1:-1;;;;;24394:13:0;24384:9;:24::i;:::-;:28;24312:100;:138;;;;;24449:1;24429:17;:21;24312:138;:178;;;;-1:-1:-1;;;;;;24468:22:0;;;;;;:18;:22;;;;;;;;24467:23;24312:178;:220;;;;-1:-1:-1;;;;;;24508:24:0;;;;;;:18;:24;;;;;;;;24507:25;24312:220;:266;;;;-1:-1:-1;;;;;;24549:29:0;;;;;;:25;:29;;;;;;;;24312:266;:306;;;;;24595:23;24312:306;24294:373;;;24645:10;:8;:10::i;:::-;-1:-1:-1;;;;;24800:24:0;;24679:12;24800:24;;;:18;:24;;;;;;24694:4;;24800:24;;;:50;;-1:-1:-1;;;;;;24828:22:0;;;;;;:18;:22;;;;;;;;24800:50;24796:1680;;;-1:-1:-1;10619:1:0;24897:15;:26;24877:5;24796:1680;;;-1:-1:-1;;;;;25011:31:0;;;;;;:25;:31;;;;;;;;25007:1458;;;25063:14;:12;:14::i;:::-;10535:1;25096:15;:21;25156:18;;25140:12;:34;25136:418;;;25209:1;25199:7;:11;25249:2;25233:13;:18;25136:418;;;25297:18;;:22;;25318:1;25297:22;:::i;:::-;25281:12;:38;25277:277;;;25354:1;25344:7;:11;25394:2;25378:13;:18;25277:277;;;25455:10;;25445:7;:20;25523:11;;25504:16;;:30;;25523:11;25504:30;:::i;:::-;25488:13;:46;25277:277;25007:1458;;;-1:-1:-1;;;;;25613:29:0;;;;;;:25;:29;;;;;;;;25609:856;;;25663:14;:12;:14::i;:::-;10575:1;25696:15;:22;25864:18;;25848:12;:34;25844:421;;;25917:1;25907:7;:11;25957:2;25941:13;:18;25844:421;;;26005:18;;:22;;26026:1;26005:22;:::i;:::-;25989:12;:38;25985:280;;;26062:1;26052:7;:11;26102:2;26086:13;:18;25985:280;;;26163:11;;26153:7;:21;26233:12;;26213:17;;:32;;26233:12;26213:32;:::i;25609:856::-;26359:14;:12;:14::i;:::-;10619:1;26392:15;:26;25609:856;26488:41;26503:4;26509:2;26513:6;26521:7;26488:14;:41::i;:::-;21967:4570;;;;;;;:::o;7456:226::-;7576:7;7612:12;7604:6;;;;7596:29;;;;-1:-1:-1;;;7596:29:0;;;;;;;;:::i;:::-;-1:-1:-1;7636:9:0;7648:5;7652:1;7648;:5;:::i;:::-;7636:17;7456:226;-1:-1:-1;;;;;7456:226:0:o;35642:164::-;35684:7;35705:15;35722;35741:19;:17;:19::i;:::-;35704:56;;-1:-1:-1;35704:56:0;-1:-1:-1;35778:20:0;35704:56;;35778:11;:20::i;:::-;35771:27;;;;35642:164;:::o;7948:132::-;8006:7;8033:39;8037:1;8040;8033:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8026:46;7948:132;-1:-1:-1;;;7948:132:0:o;7123:181::-;7181:7;;7213:5;7217:1;7213;:5;:::i;:::-;7201:17;;7242:1;7237;:6;;7229:46;;;;-1:-1:-1;;;7229:46:0;;;;;;;:::i;33910:742::-;34010:7;34032;34054;34076;34098;34120;34170:23;34208:12;34235:18;34267:20;34279:7;34267:11;:20::i;:::-;34155:132;;;;;;34299:15;34316:23;34341:12;34357:113;34383:7;34405:4;34424:10;34449;:8;:10::i;:::-;34357:11;:113::i;:::-;34298:172;;;;-1:-1:-1;34298:172:0;;-1:-1:-1;34574:15:0;;-1:-1:-1;34604:4:0;;-1:-1:-1;34623:10:0;;-1:-1:-1;33910:742:0;;-1:-1:-1;;;;;33910:742:0:o;26545:1920::-;13187:16;:23;;-1:-1:-1;;;;13187:23:0;-1:-1:-1;;;13187:23:0;;;;26622:24:::1;26640:4;26622:9;:24::i;:::-;26596:50;;26657:25;26710:17;;26685:22;;:42;;;;:::i;:::-;26657:70;;26789:26;26818:29;26845:1;26818:22;;:26;;:29;;;;:::i;:::-;26789:58:::0;-1:-1:-1;26858:26:0::1;26887:39;:15:::0;26789:58;26887:19:::1;:39::i;:::-;26858:68:::0;-1:-1:-1;26967:21:0::1;27001:36;26858:68:::0;27001:16:::1;:36::i;:::-;27050:18;27071:44;:21;27097:17:::0;27071:25:::1;:44::i;:::-;27050:65;;27128:23;27154:80;27206:17;27154:33;27169:17;;27154:10;:14;;:33;;;;:::i;:::-;:37:::0;::::1;:80::i;:::-;27128:106:::0;-1:-1:-1;27247:23:0::1;27273:31;:10:::0;27128:106;27273:14:::1;:31::i;:::-;27247:57;;27317:17;27337:77;27399:4;27337:43;27357:22;;27337:15;:19;;:43;;;;:::i;:77::-;27317:97;;27425:22;27450:86;27531:4;27450:62;27484:27;;27450:15;:33;;:62;;;;:::i;:86::-;27425:111:::0;-1:-1:-1;27547:28:0::1;27566:9:::0;27547:28;::::1;:::i;:::-;::::0;-1:-1:-1;27586:33:0::1;27605:14:::0;27547:28;27586:33:::1;:::i;:::-;27657:1;27632:22;:26:::0;;;27669:17:::1;:21:::0;;;27730:16:::1;::::0;27722:82:::1;::::0;27586:33;;-1:-1:-1;27657:1:0;;-1:-1:-1;;;;;27730:16:0;;::::1;::::0;27586:33;;27722:82:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27837:10:0::1;::::0;27829:48:::1;::::0;27703:101;;-1:-1:-1;;;;;;27837:10:0::1;::::0;27862:9;;27829:48:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27910:15:0::1;::::0;27902:82:::1;::::0;27815:62;;-1:-1:-1;;;;;;27910:15:0::1;::::0;27940:14;;27902:82:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27888:96;;;;;27997:49;28010:18;28030:15;27997:12;:49::i;:::-;28062:121;28091:18;28124:15;28154:18;28062:121;;;;;;;;:::i;:::-;;;;;;;;28315:4;28291:21;:28;28287:171;;;28358:16;::::0;28350:96:::1;::::0;-1:-1:-1;;;;;28358:16:0;;::::1;::::0;28406:21:::1;::::0;28350:96:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;28336:110:0;;-1:-1:-1;;28287:171:0::1;-1:-1:-1::0;;13233:16:0;:24;;-1:-1:-1;;;;13233:24:0;;;-1:-1:-1;;;;;;;;;26545:1920:0:o;37609:235::-;37656:7;;:12;:34;;;;-1:-1:-1;37672:13:0;;:18;37656:34;37652:47;;;37692:7;;37652:47;37729:7;;;37711:15;:25;37771:13;;;37747:21;:37;-1:-1:-1;37797:11:0;;;;37819:17;37609:235;:::o;30241:708::-;30397:7;30392:28;;30406:14;:12;:14::i;:::-;-1:-1:-1;;;;;30437:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30461:22:0;;;;;;:11;:22;;;;;;;;30460:23;30437:46;30433:467;;;30500:48;30522:6;30530:9;30541:6;30500:21;:48::i;:::-;30433:467;;;-1:-1:-1;;;;;30571:19:0;;;;;;:11;:19;;;;;;;;30570:20;:46;;;;-1:-1:-1;;;;;;30594:22:0;;;;;;:11;:22;;;;;;;;30570:46;30566:334;;;30633:46;30653:6;30661:9;30672:6;30633:19;:46::i;30566:334::-;-1:-1:-1;;;;;30701:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;30724:22:0;;;;;;:11;:22;;;;;;;;30701:45;30697:203;;;30763:48;30785:6;30793:9;30804:6;30763:21;:48::i;30697:203::-;30844:44;30862:6;30870:9;30881:6;30844:17;:44::i;:::-;30917:7;30912:29;;30926:15;:13;:15::i;35814:605::-;35912:7;;35865;;;;9877:19;35865:7;35966:338;35990:9;:16;35986:20;;35966:338;;;36074:7;36050;:21;36058:9;36068:1;36058:12;;;;;;-1:-1:-1;;;36058:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36058:12:0;36050:21;;;;;;;;;;;;;:31;;:83;;;36126:7;36102;:21;36110:9;36120:1;36110:12;;;;;;-1:-1:-1;;;36110:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36110:12:0;36102:21;;;;;;;;;;;;;:31;36050:83;36028:146;;;36157:7;;9877:19;36149:25;;;;;;;;;36028:146;36199:34;36211:7;:21;36219:9;36229:1;36219:12;;;;;;-1:-1:-1;;;36219:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36219:12:0;36211:21;;;;;;;;;;;;;36199:7;;:11;:34::i;:::-;36189:44;;36258:34;36270:7;:21;36278:9;36288:1;36278:12;;;;;;-1:-1:-1;;;36278:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36278:12:0;36270:21;;;;;;;;;;;;;36258:7;;:11;:34::i;:::-;36248:44;-1:-1:-1;36008:3:0;;;;:::i;:::-;;;;35966:338;;;-1:-1:-1;36328:7:0;;:20;;9877:19;36328:11;:20::i;:::-;36318:7;:30;36314:61;;;36358:7;;9877:19;36350:25;;;;;;;;36314:61;36394:7;;-1:-1:-1;36403:7:0;-1:-1:-1;35814:605:0;;;:::o;8088:312::-;8208:7;8243:12;8236:5;8228:28;;;;-1:-1:-1;;;8228:28:0;;;;;;;;:::i;:::-;-1:-1:-1;8267:9:0;8279:5;8283:1;8279;:5;:::i;34660:412::-;34761:7;34783;34805;34840:12;34855:24;34871:7;34855:15;:24::i;:::-;34840:39;;34890:18;34911:30;34933:7;34911:21;:30::i;:::-;34890:51;-1:-1:-1;34952:23:0;34978:33;34890:51;34978:17;:7;34990:4;34978:11;:17::i;:::-;:21;;:33::i;:::-;34952:59;35047:4;;-1:-1:-1;35053:10:0;;-1:-1:-1;34660:412:0;;-1:-1:-1;;;34660:412:0:o;35080:554::-;35279:7;;;;35376:24;:7;35388:11;35376;:24::i;:::-;35358:42;-1:-1:-1;35411:12:0;35426:21;:4;35435:11;35426:8;:21::i;:::-;35411:36;-1:-1:-1;35458:18:0;35479:27;:10;35494:11;35479:14;:27::i;:::-;35458:48;-1:-1:-1;35517:23:0;35543:33;35458:48;35543:17;:7;35555:4;35543:11;:17::i;:33::-;35595:7;;;;-1:-1:-1;35621:4:0;;-1:-1:-1;35080:554:0;;-1:-1:-1;;;;;;;35080:554:0:o;7312:136::-;7370:7;7397:43;7401:1;7404;7397:43;;;;;;;;;;;;;;;;;:3;:43::i;29301:499::-;29391:16;;;29405:1;29391:16;;;;;;;;29367:21;;29391:16;;;;;;;;;;-1:-1:-1;29391:16:0;29367:40;;29436:4;29418;29423:1;29418:7;;;;;;-1:-1:-1;;;29418:7:0;;;;;;;;;-1:-1:-1;;;;;29418:23:0;;;:7;;;;;;;;;;:23;;;;29462:15;;:22;;;-1:-1:-1;;;29462:22:0;;;;:15;;;;;:20;;:22;;;;;29418:7;;29462:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29452:4;29457:1;29452:7;;;;;;-1:-1:-1;;;29452:7:0;;;;;;;;;-1:-1:-1;;;;;29452:32:0;;;:7;;;;;;;;;:32;29527:15;;29495:62;;29512:4;;29527:15;29545:11;29495:8;:62::i;:::-;29568:15;;:224;;-1:-1:-1;;;29568:224:0;;-1:-1:-1;;;;;29568:15:0;;;;:66;;:224;;29649:11;;29568:15;;29719:4;;29746;;29766:15;;29568:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29301:499;;:::o;7690:250::-;7748:7;7772:6;7768:47;;-1:-1:-1;7802:1:0;7795:8;;7768:47;7827:9;7839:5;7843:1;7839;:5;:::i;:::-;7827:17;-1:-1:-1;7872:1:0;7863:5;7867:1;7827:17;7863:5;:::i;:::-;:10;7855:56;;;;-1:-1:-1;;;7855:56:0;;;;;;;:::i;32296:686::-;32447:15;32477:23;32515:12;32542:23;32580:12;32607:18;32639:19;32650:7;32639:10;:19::i;:::-;-1:-1:-1;;;;;32687:15:0;;;;;;:7;:15;;;;;;32432:226;;-1:-1:-1;32432:226:0;;-1:-1:-1;32432:226:0;;-1:-1:-1;32432:226:0;-1:-1:-1;32432:226:0;-1:-1:-1;32432:226:0;-1:-1:-1;32687:28:0;;32707:7;32687:19;:28::i;:::-;-1:-1:-1;;;;;32669:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32744:7;:15;;;;:28;;32764:7;32744:19;:28::i;:::-;-1:-1:-1;;;;;32726:15:0;;;;;;;:7;:15;;;;;;:46;;;;32804:18;;;;;;;:39;;32827:15;32804:22;:39::i;:::-;-1:-1:-1;;;;;32783:18:0;;;;;;:7;:18;;;;;:60;32854:26;32869:10;32854:14;:26::i;:::-;32891:23;32903:4;32909;32891:11;:23::i;:::-;32947:9;-1:-1:-1;;;;;32930:44:0;32939:6;-1:-1:-1;;;;;32930:44:0;;32958:15;32930:44;;;;;;:::i;:::-;;;;;;;;32296:686;;;;;;;;;:::o;31590:698::-;31739:15;31769:23;31807:12;31834:23;31872:12;31899:18;31931:19;31942:7;31931:10;:19::i;:::-;-1:-1:-1;;;;;31979:15:0;;;;;;:7;:15;;;;;;31724:226;;-1:-1:-1;31724:226:0;;-1:-1:-1;31724:226:0;;-1:-1:-1;31724:226:0;-1:-1:-1;31724:226:0;-1:-1:-1;31724:226:0;-1:-1:-1;31979:28:0;;31724:226;31979:19;:28::i;:::-;-1:-1:-1;;;;;31961:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32039:18;;;;;:7;:18;;;;;:39;;32062:15;32039:22;:39::i;:::-;-1:-1:-1;;;;;32018:18:0;;;;;;:7;:18;;;;;;;;:60;;;;32110:7;:18;;;;:39;;32133:15;32110:22;:39::i;32990:757::-;33141:15;33171:23;33209:12;33236:23;33274:12;33301:18;33333:19;33344:7;33333:10;:19::i;:::-;-1:-1:-1;;;;;33381:15:0;;;;;;:7;:15;;;;;;33126:226;;-1:-1:-1;33126:226:0;;-1:-1:-1;33126:226:0;;-1:-1:-1;33126:226:0;-1:-1:-1;33126:226:0;-1:-1:-1;33126:226:0;-1:-1:-1;33381:28:0;;33401:7;33381:19;:28::i;:::-;-1:-1:-1;;;;;33363:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33438:7;:15;;;;:28;;33458:7;33438:19;:28::i;30957:625::-;31104:15;31134:23;31172:12;31199:23;31237:12;31264:18;31296:19;31307:7;31296:10;:19::i;:::-;-1:-1:-1;;;;;31344:15:0;;;;;;:7;:15;;;;;;31089:226;;-1:-1:-1;31089:226:0;;-1:-1:-1;31089:226:0;;-1:-1:-1;31089:226:0;-1:-1:-1;31089:226:0;-1:-1:-1;31089:226:0;-1:-1:-1;31344:28:0;;31089:226;31344:19;:28::i;37852:125::-;37906:15;;37896:7;:25;37948:21;;37932:13;:37;37852:125::o;37289:130::-;37353:7;37380:31;37405:5;37380:20;37392:7;;37380;:11;;:20;;;;:::i;37427:174::-;37524:7;37556:37;37587:5;37556:26;37568:13;;37556:7;:11;;:26;;;;:::i;36427:854::-;10535:1;36494:15;;:22;36490:489;;;36627:13;;36590:16;;36577:29;;:10;:29;:::i;:::-;36576:64;;;;:::i;:::-;36533:22;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;36705:13:0;;36690:11;;36677:24;;:10;:24;:::i;:::-;36676:42;;;;:::i;:::-;36655:17;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;36490:489:0;;-1:-1:-1;36490:489:0;;10575:1;36740:15;;:23;36736:243;;;36875:13;;36837:17;;36824:30;;:10;:30;:::i;:::-;36823:65;;;;:::i;:::-;36780:22;;:108;;;;;;;:::i;:::-;;;;-1:-1:-1;;36954:13:0;;36938:12;;36925:25;;:10;:25;:::i;:::-;36924:43;;;;:::i;:::-;36903:17;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;36736:243:0;36989:19;37011:10;:8;:10::i;:::-;36989:32;-1:-1:-1;37032:18:0;37053:27;:10;36989:32;37053:14;:27::i;:::-;37132:4;37116:22;;;;:7;:22;;;;;;37032:48;;-1:-1:-1;37116:38:0;;37032:48;37116:26;:38::i;:::-;37107:4;37091:22;;;;:7;:22;;;;;;;;:63;;;;37169:11;:26;;;;;;37165:108;;;37251:4;37235:22;;;;:7;:22;;;;;;:38;;37262:10;37235:26;:38::i;:::-;37226:4;37210:22;;;;:7;:22;;;;;:63;37165:108;36427:854;;;:::o;33755:147::-;33833:7;;:17;;33845:4;33833:11;:17::i;:::-;33823:7;:27;33874:10;;:20;;33889:4;33874:14;:20::i;:::-;33861:10;:33;-1:-1:-1;;33755:147:0:o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:1;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:1;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:1;1398:18;;;;1385:32;;1057:366::o;1428:396::-;;;1554:2;1542:9;1533:7;1529:23;1525:32;1522:2;;;1575:6;1567;1560:22;1522:2;1619:9;1606:23;1638:33;1665:5;1638:33;:::i;:::-;1690:5;-1:-1:-1;1747:2:1;1732:18;;1719:32;1760;1719;1760;:::i;1829:327::-;;;1958:2;1946:9;1937:7;1933:23;1929:32;1926:2;;;1979:6;1971;1964:22;1926:2;2023:9;2010:23;2042:33;2069:5;2042:33;:::i;:::-;2094:5;2146:2;2131:18;;;;2118:32;;-1:-1:-1;;;1916:240:1:o;2161:253::-;;2270:2;2258:9;2249:7;2245:23;2241:32;2238:2;;;2291:6;2283;2276:22;2238:2;2335:9;2322:23;2354:30;2378:5;2354:30;:::i;2419:257::-;;2539:2;2527:9;2518:7;2514:23;2510:32;2507:2;;;2560:6;2552;2545:22;2507:2;2597:9;2591:16;2616:30;2640:5;2616:30;:::i;2681:190::-;;2793:2;2781:9;2772:7;2768:23;2764:32;2761:2;;;2814:6;2806;2799:22;2761:2;-1:-1:-1;2842:23:1;;2751:120;-1:-1:-1;2751:120:1:o;2876:194::-;;2999:2;2987:9;2978:7;2974:23;2970:32;2967:2;;;3020:6;3012;3005:22;2967:2;-1:-1:-1;3048:16:1;;2957:113;-1:-1:-1;2957:113:1:o;3075:321::-;;;3201:2;3189:9;3180:7;3176:23;3172:32;3169:2;;;3222:6;3214;3207:22;3169:2;3263:9;3250:23;3240:33;;3323:2;3312:9;3308:18;3295:32;3336:30;3360:5;3336:30;:::i;3401:258::-;;;3530:2;3518:9;3509:7;3505:23;3501:32;3498:2;;;3551:6;3543;3536:22;3498:2;-1:-1:-1;;3579:23:1;;;3649:2;3634:18;;;3621:32;;-1:-1:-1;3488:171:1:o;3664:326::-;;;;3810:2;3798:9;3789:7;3785:23;3781:32;3778:2;;;3831:6;3823;3816:22;3778:2;-1:-1:-1;;3859:23:1;;;3929:2;3914:18;;3901:32;;-1:-1:-1;3980:2:1;3965:18;;;3952:32;;3768:222;-1:-1:-1;3768:222:1:o;3995:316::-;;;;4152:2;4140:9;4131:7;4127:23;4123:32;4120:2;;;4173:6;4165;4158:22;4120:2;4207:9;4201:16;4191:26;;4257:2;4246:9;4242:18;4236:25;4226:35;;4301:2;4290:9;4286:18;4280:25;4270:35;;4110:201;;;;;:::o;4316:205::-;4516:3;4507:14::o;4526:203::-;-1:-1:-1;;;;;4690:32:1;;;;4672:51;;4660:2;4645:18;;4627:102::o;4958:304::-;-1:-1:-1;;;;;5188:15:1;;;5170:34;;5240:15;;5235:2;5220:18;;5213:43;5120:2;5105:18;;5087:175::o;5267:274::-;-1:-1:-1;;;;;5459:32:1;;;;5441:51;;5523:2;5508:18;;5501:34;5429:2;5414:18;;5396:145::o;5546:615::-;-1:-1:-1;;;;;5913:15:1;;;5895:34;;5960:2;5945:18;;5938:34;;;;6003:2;5988:18;;5981:34;;;;6046:2;6031:18;;6024:34;;;;6095:15;;;6089:3;6074:19;;6067:44;5875:3;6127:19;;6120:35;;;;5844:3;5829:19;;5811:350::o;6166:187::-;6331:14;;6324:22;6306:41;;6294:2;6279:18;;6261:92::o;6590:603::-;;6731:2;6760;6749:9;6742:21;6792:6;6786:13;6835:6;6830:2;6819:9;6815:18;6808:34;6860:4;6873:140;6887:6;6884:1;6881:13;6873:140;;;6982:14;;;6978:23;;6972:30;6948:17;;;6967:2;6944:26;6937:66;6902:10;;6873:140;;;7031:6;7028:1;7025:13;7022:2;;;7101:4;7096:2;7087:6;7076:9;7072:22;7068:31;7061:45;7022:2;-1:-1:-1;7177:2:1;7156:15;-1:-1:-1;;7152:29:1;7137:45;;;;7184:2;7133:54;;6711:482;-1:-1:-1;;;6711:482:1:o;7198:399::-;7400:2;7382:21;;;7439:2;7419:18;;;7412:30;7478:34;7473:2;7458:18;;7451:62;-1:-1:-1;;;7544:2:1;7529:18;;7522:33;7587:3;7572:19;;7372:225::o;7602:352::-;7804:2;7786:21;;;7843:2;7823:18;;;7816:30;7882;7877:2;7862:18;;7855:58;7945:2;7930:18;;7776:178::o;7959:426::-;8161:2;8143:21;;;8200:2;8180:18;;;8173:30;8239:34;8234:2;8219:18;;8212:62;8310:32;8305:2;8290:18;;8283:60;8375:3;8360:19;;8133:252::o;8390:406::-;8592:2;8574:21;;;8631:2;8611:18;;;8604:30;8670:34;8665:2;8650:18;;8643:62;-1:-1:-1;;;8736:2:1;8721:18;;8714:40;8786:3;8771:19;;8564:232::o;8801:402::-;9003:2;8985:21;;;9042:2;9022:18;;;9015:30;9081:34;9076:2;9061:18;;9054:62;-1:-1:-1;;;9147:2:1;9132:18;;9125:36;9193:3;9178:19;;8975:228::o;9208:398::-;9410:2;9392:21;;;9449:2;9429:18;;;9422:30;9488:34;9483:2;9468:18;;9461:62;-1:-1:-1;;;9554:2:1;9539:18;;9532:32;9596:3;9581:19;;9382:224::o;9611:399::-;9813:2;9795:21;;;9852:2;9832:18;;;9825:30;9891:34;9886:2;9871:18;;9864:62;-1:-1:-1;;;9957:2:1;9942:18;;9935:33;10000:3;9985:19;;9785:225::o;10015:339::-;10217:2;10199:21;;;10256:2;10236:18;;;10229:30;-1:-1:-1;;;10290:2:1;10275:18;;10268:45;10345:2;10330:18;;10189:165::o;10359:351::-;10561:2;10543:21;;;10600:2;10580:18;;;10573:30;10639:29;10634:2;10619:18;;10612:57;10701:2;10686:18;;10533:177::o;10715:421::-;10917:2;10899:21;;;10956:2;10936:18;;;10929:30;10995:34;10990:2;10975:18;;10968:62;11066:27;11061:2;11046:18;;11039:55;11126:3;11111:19;;10889:247::o;11141:351::-;11343:2;11325:21;;;11382:2;11362:18;;;11355:30;11421:29;11416:2;11401:18;;11394:57;11483:2;11468:18;;11315:177::o;11497:418::-;11699:2;11681:21;;;11738:2;11718:18;;;11711:30;11777:34;11772:2;11757:18;;11750:62;-1:-1:-1;;;11843:2:1;11828:18;;11821:52;11905:3;11890:19;;11671:244::o;11920:399::-;12122:2;12104:21;;;12161:2;12141:18;;;12134:30;12200:34;12195:2;12180:18;;12173:62;-1:-1:-1;;;12266:2:1;12251:18;;12244:33;12309:3;12294:19;;12094:225::o;12324:347::-;12526:2;12508:21;;;12565:2;12545:18;;;12538:30;12604:25;12599:2;12584:18;;12577:53;12662:2;12647:18;;12498:173::o;12676:355::-;12878:2;12860:21;;;12917:2;12897:18;;;12890:30;12956:33;12951:2;12936:18;;12929:61;13022:2;13007:18;;12850:181::o;13036:401::-;13238:2;13220:21;;;13277:2;13257:18;;;13250:30;13316:34;13311:2;13296:18;;13289:62;-1:-1:-1;;;13382:2:1;13367:18;;13360:35;13427:3;13412:19;;13210:227::o;13442:335::-;13644:2;13626:21;;;13683:2;13663:18;;;13656:30;-1:-1:-1;;;13717:2:1;13702:18;;13695:41;13768:2;13753:18;;13616:161::o;13782:401::-;13984:2;13966:21;;;14023:2;14003:18;;;13996:30;14062:34;14057:2;14042:18;;14035:62;-1:-1:-1;;;14128:2:1;14113:18;;14106:35;14173:3;14158:19;;13956:227::o;14188:355::-;14390:2;14372:21;;;14429:2;14409:18;;;14402:30;14468:33;14463:2;14448:18;;14441:61;14534:2;14519:18;;14362:181::o;14548:401::-;14750:2;14732:21;;;14789:2;14769:18;;;14762:30;14828:34;14823:2;14808:18;;14801:62;-1:-1:-1;;;14894:2:1;14879:18;;14872:35;14939:3;14924:19;;14722:227::o;14954:354::-;15156:2;15138:21;;;15195:2;15175:18;;;15168:30;15234:32;15229:2;15214:18;;15207:60;15299:2;15284:18;;15128:180::o;15313:417::-;15515:2;15497:21;;;15554:2;15534:18;;;15527:30;15593:34;15588:2;15573:18;;15566:62;-1:-1:-1;;;15659:2:1;15644:18;;15637:51;15720:3;15705:19;;15487:243::o;15735:350::-;15937:2;15919:21;;;15976:2;15956:18;;;15949:30;16015:28;16010:2;15995:18;;15988:56;16076:2;16061:18;;15909:176::o;16090:397::-;16292:2;16274:21;;;16331:2;16311:18;;;16304:30;16370:34;16365:2;16350:18;;16343:62;-1:-1:-1;;;16436:2:1;16421:18;;16414:31;16477:3;16462:19;;16264:223::o;16492:356::-;16694:2;16676:21;;;16713:18;;;16706:30;16772:34;16767:2;16752:18;;16745:62;16839:2;16824:18;;16666:182::o;16853:405::-;17055:2;17037:21;;;17094:2;17074:18;;;17067:30;17133:34;17128:2;17113:18;;17106:62;-1:-1:-1;;;17199:2:1;17184:18;;17177:39;17248:3;17233:19;;17027:231::o;17263:401::-;17465:2;17447:21;;;17504:2;17484:18;;;17477:30;17543:34;17538:2;17523:18;;17516:62;-1:-1:-1;;;17609:2:1;17594:18;;17587:35;17654:3;17639:19;;17437:227::o;17669:343::-;17871:2;17853:21;;;17910:2;17890:18;;;17883:30;-1:-1:-1;;;17944:2:1;17929:18;;17922:49;18003:2;17988:18;;17843:169::o;18017:400::-;18219:2;18201:21;;;18258:2;18238:18;;;18231:30;18297:34;18292:2;18277:18;;18270:62;-1:-1:-1;;;18363:2:1;18348:18;;18341:34;18407:3;18392:19;;18191:226::o;18422:407::-;18624:2;18606:21;;;18663:2;18643:18;;;18636:30;18702:34;18697:2;18682:18;;18675:62;-1:-1:-1;;;18768:2:1;18753:18;;18746:41;18819:3;18804:19;;18596:233::o;18834:343::-;19036:2;19018:21;;;19075:2;19055:18;;;19048:30;-1:-1:-1;;;19109:2:1;19094:18;;19087:49;19168:2;19153:18;;19008:169::o;19182:481::-;19384:2;19366:21;;;19423:2;19403:18;;;19396:30;19462:34;19457:2;19442:18;;19435:62;19533:34;19528:2;19513:18;;19506:62;-1:-1:-1;;;19599:3:1;19584:19;;19577:44;19653:3;19638:19;;19356:307::o;19668:344::-;19870:2;19852:21;;;19909:2;19889:18;;;19882:30;-1:-1:-1;;;19943:2:1;19928:18;;19921:50;20003:2;19988:18;;19842:170::o;20017:407::-;20219:2;20201:21;;;20258:2;20238:18;;;20231:30;20297:34;20292:2;20277:18;;20270:62;-1:-1:-1;;;20363:2:1;20348:18;;20341:41;20414:3;20399:19;;20191:233::o;20429:350::-;20631:2;20613:21;;;20670:2;20650:18;;;20643:30;20709:28;20704:2;20689:18;;20682:56;20770:2;20755:18;;20603:176::o;20784:350::-;20986:2;20968:21;;;21025:2;21005:18;;;20998:30;21064:28;21059:2;21044:18;;21037:56;21125:2;21110:18;;20958:176::o;21139:177::-;21285:25;;;21273:2;21258:18;;21240:76::o;21321:983::-;;21631:3;21620:9;21616:19;21662:6;21651:9;21644:25;21688:2;21726:6;21721:2;21710:9;21706:18;21699:34;21769:3;21764:2;21753:9;21749:18;21742:31;21793:6;21828;21822:13;21859:6;21851;21844:22;21897:3;21886:9;21882:19;21875:26;;21936:2;21928:6;21924:15;21910:29;;21957:4;21970:195;21984:6;21981:1;21978:13;21970:195;;;22049:13;;-1:-1:-1;;;;;22045:39:1;22033:52;;22140:15;;;;22105:12;;;;22081:1;21999:9;21970:195;;;-1:-1:-1;;;;;;;22221:32:1;;;;22216:2;22201:18;;22194:60;-1:-1:-1;;;22285:3:1;22270:19;22263:35;22182:3;21592:712;-1:-1:-1;;;21592:712:1:o;22309:319::-;22511:25;;;22567:2;22552:18;;22545:34;;;;22610:2;22595:18;;22588:34;22499:2;22484:18;;22466:162::o;22633:184::-;22805:4;22793:17;;;;22775:36;;22763:2;22748:18;;22730:87::o;22822:128::-;;22893:1;22889:6;22886:1;22883:13;22880:2;;;22899:18;;:::i;:::-;-1:-1:-1;22935:9:1;;22870:80::o;22955:217::-;;23021:1;23011:2;;-1:-1:-1;;;23046:31:1;;23100:4;23097:1;23090:15;23128:4;23053:1;23118:15;23011:2;-1:-1:-1;23157:9:1;;23001:171::o;23177:168::-;;23283:1;23279;23275:6;23271:14;23268:1;23265:21;23260:1;23253:9;23246:17;23242:45;23239:2;;;23290:18;;:::i;:::-;-1:-1:-1;23330:9:1;;23229:116::o;23350:125::-;;23418:1;23415;23412:8;23409:2;;;23423:18;;:::i;:::-;-1:-1:-1;23460:9:1;;23399:76::o;23480:135::-;;-1:-1:-1;;23540:17:1;;23537:2;;;23560:18;;:::i;:::-;-1:-1:-1;23607:1:1;23596:13;;23527:88::o;23620:127::-;23681:10;23676:3;23672:20;23669:1;23662:31;23712:4;23709:1;23702:15;23736:4;23733:1;23726:15;23752:133;-1:-1:-1;;;;;23829:31:1;;23819:42;;23809:2;;23875:1;23872;23865:12;23809:2;23799:86;:::o;23890:120::-;23978:5;23971:13;23964:21;23957:5;23954:32;23944:2;;24000:1;23997;23990:12
Swarm Source
ipfs://3bb7b3bf77e36b0ec1ebdbd31c3ceb9628b02ff8d6d21b22aafdafb3cd494879
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.