ERC-20
Investment
Overview
Max Total Supply
1,000,000,000,000 FLIP
Holders
104 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,299,649,008.225322671706782535 FLIPValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FlipToken
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-17 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.13; 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 IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { 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 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) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 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; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (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" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { 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; 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; } } contract FlipToken is IERC20, Ownable { using Address for address; using SafeMath for uint256; IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "FlipToken"; string private constant _symbol = "FLIP"; uint8 private constant _decimals = 18; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1000000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; bool public isTradingEnabled; uint256 private _tradingPausedTimestamp; // max tx is 1.0% of initialSupply uint256 public maxTxAmount = _tTotal * 100 / 10000; bool private _swapping; // max wallet is 0.05% of initialSupply uint256 public minimumTokensBeforeSwap = _tTotal * 500 / 1000000; address private dead = 0x000000000000000000000000000000000000dEaD; address public liquidityWallet; address public investmentWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 investmentFeeOnBuy; uint8 investmentFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } // Base taxes CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,1,1,3,3,3,3); uint256 private _launchTimestamp; uint256 private _launchBlockNumber; uint256 constant private _blockedTimeLimit = 172800; mapping (address => bool) private _isBlocked; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromMaxTransactionLimit; mapping (address => bool) public automatedMarketMakerPairs; mapping (address => bool) private _isExcludedFromDividends; mapping (address => bool) private _isAllowedToTradeWhenDisabled; address[] private _excludedFromDividends; uint8 private _liquidityFee; uint8 private _investmentFee; uint8 private _holdersFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); event BlockedAccountChange(address indexed holder, bool indexed status); event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress); event WalletChange(string indexed indentifier, address indexed newWallet, address indexed oldWallet); event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 investmentFee, uint8 holdersFee); event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period); event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event ExcludeFromDividendsChange(address indexed account, bool isExcluded); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded); event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity); event ClaimETHOverflow(uint256 amount); event FeesApplied(uint8 liquidityFee, uint8 investmentFee, uint8 holdersFee, uint8 totalFee); constructor() { liquidityWallet = owner(); investmentWallet = owner(); IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; excludeFromDividends(address(this), true); excludeFromDividends(address(dead), true); excludeFromDividends(address(_uniswapV2Router), true); _isAllowedToTradeWhenDisabled[owner()] = true; _isAllowedToTradeWhenDisabled[address(this)] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[address(dead)] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _rOwned[owner()] = _rTotal; emit Transfer(address(0), owner(), _tTotal); } receive() external payable {} // Setters function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } 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 _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 _getNow() private view returns (uint256) { return block.timestamp; } function activateTrading() external onlyOwner { isTradingEnabled = true; if (_launchTimestamp == 0) { _launchTimestamp = block.timestamp; _launchBlockNumber = block.number; } } function deactivateTrading() external onlyOwner { isTradingEnabled = false; _tradingPausedTimestamp = _getNow(); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "Flip: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit AutomatedMarketMakerPairChange(pair, value); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFee[account] != excluded, "Flip: Account is already the value of 'excluded'"); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxTransactionLimit[account] != excluded, "Flip: Account is already the value of 'excluded'"); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransferChange(account, excluded); } function setWallets(address newLiquidityWallet, address newInvestmentWallet) external onlyOwner { if(liquidityWallet != newLiquidityWallet) { require(newLiquidityWallet != address(0), "Flip: The liquidityWallet cannot be 0"); emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } if(investmentWallet != newInvestmentWallet) { require(newInvestmentWallet != address(0), "Flip: The investmentWallet cannot be 0"); emit WalletChange('investmentWallet', newInvestmentWallet, investmentWallet); investmentWallet = newInvestmentWallet; } } // Base fees function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _investmentFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner { _setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _investmentFeeOnBuy, _holdersFeeOnBuy); emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _investmentFeeOnBuy, _holdersFeeOnBuy); } function setBaseFeesOnSell(uint8 _liquidityFeeOnSell, uint8 _investmentFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner { _setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _investmentFeeOnSell, _holdersFeeOnSell); emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _investmentFeeOnSell, _holdersFeeOnSell); } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require(newValue != maxTxAmount, "Flip: Cannot update maxTxAmount to same value"); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function excludeFromDividends(address account, bool excluded) public onlyOwner { require(_isExcludedFromDividends[account] != excluded, "Flip: Account is already the value of 'excluded'"); if(excluded) { if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcludedFromDividends[account] = excluded; _excludedFromDividends.push(account); } else { for (uint256 i = 0; i < _excludedFromDividends.length; i++) { if (_excludedFromDividends[i] == account) { _excludedFromDividends[i] = _excludedFromDividends[_excludedFromDividends.length - 1]; _tOwned[account] = 0; _isExcludedFromDividends[account] = false; _excludedFromDividends.pop(); break; } } } emit ExcludeFromDividendsChange(account, excluded); } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "Flip: Cannot update minimumTokensBeforeSwap to same value"); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function blockAccount(address account) external onlyOwner { require(!_isBlocked[account], "Flip: Account is already blocked"); require((block.timestamp - _launchTimestamp) < _blockedTimeLimit, "Flip: Time to block accounts has expired"); _isBlocked[account] = true; emit BlockedAccountChange(account, true); } function unblockAccount(address account) external onlyOwner { require(_isBlocked[account], "Flip: Account is not blcoked"); _isBlocked[account] = false; emit BlockedAccountChange(account, false); } function claimETHOverflow() external onlyOwner { require(address(this).balance > 0, "Flip: Cannot send more than contract balance"); uint256 amount = address(this).balance; (bool success,) = address(owner()).call{value : amount}(""); if (success){ emit ClaimETHOverflow(amount); } } // Getters function name() external view returns (string memory) { return _name; } function symbol() external view returns (string memory) { return _symbol; } function decimals() external view virtual returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcludedFromDividends[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function totalFees() external view returns (uint256) { return _tFeeTotal; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function getBaseBuyFees() external view returns (uint8, uint8, uint8){ return (_base.liquidityFeeOnBuy, _base.investmentFeeOnBuy, _base.holdersFeeOnBuy); } function getBaseSellFees() external view returns (uint8, uint8, uint8){ return (_base.liquidityFeeOnSell, _base.investmentFeeOnSell, _base.holdersFeeOnSell); } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Flip: Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount / currentRate; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) { require(tAmount <= _tTotal, "Flip: Amount must be less than supply"); uint256 currentRate = _getRate(); uint256 rAmount = tAmount * currentRate; if (!deductTransferFee) { return rAmount; } else { uint256 rTotalFee = tAmount * _totalFee / 100 * currentRate; uint256 rTransferAmount = rAmount - rTotalFee; return rTransferAmount; } } // Main function _transfer( address from, address to, uint256 amount ) internal { 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(amount <= balanceOf(from), "Flip: Cannot transfer more than balance"); bool isBuyFromLp = automatedMarketMakerPairs[from]; bool isSelltoLp = automatedMarketMakerPairs[to]; if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "Flip: Trading is currently disabled."); require(!_isBlocked[to], "Flip: Account is blocked"); require(!_isBlocked[from], "Flip: Account is blocked"); if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxAmount, "Flip: Transfer amount exceeds the maxTxAmount."); } } _adjustTaxes(isBuyFromLp, isSelltoLp); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && automatedMarketMakerPairs[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function _tokenTransfer(address sender,address recipient, uint256 tAmount, bool takeFee) private { (uint256 tTransferAmount,uint256 tFee, uint256 tOther) = _getTValues(tAmount, takeFee); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rOther) = _getRValues(tAmount, tFee, tOther, _getRate()); if (_isExcludedFromDividends[sender]) { _tOwned[sender] = _tOwned[sender] - tAmount; } if (_isExcludedFromDividends[recipient]) { _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; } _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeContractFees(rOther, tOther); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal -= rFee; _tFeeTotal += tFee; } function _getTValues(uint256 tAmount, bool takeFee) private view returns (uint256,uint256,uint256){ if (!takeFee) { return (tAmount, 0, 0); } else { uint256 tFee = tAmount * _holdersFee / 100; uint256 tOther = tAmount * (_liquidityFee + _investmentFee) / 100; uint256 tTransferAmount = tAmount - (tFee + tOther); return (tTransferAmount, tFee, tOther); } } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tOther, uint256 currentRate ) private pure returns ( uint256, uint256, uint256, uint256) { uint256 rAmount = tAmount * currentRate; uint256 rFee = tFee * currentRate; uint256 rOther = tOther * currentRate; uint256 rTransferAmount = rAmount - (rFee + rOther); return (rAmount, rTransferAmount, rFee, rOther); } 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 < _excludedFromDividends.length; i++) { if ( _rOwned[_excludedFromDividends[i]] > rSupply || _tOwned[_excludedFromDividends[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply - _rOwned[_excludedFromDividends[i]]; tSupply = tSupply - _tOwned[_excludedFromDividends[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeContractFees(uint256 rOther, uint256 tOther) private { if (_isExcludedFromDividends[address(this)]) { _tOwned[address(this)] += tOther; } _rOwned[address(this)] += rOther; } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private { _liquidityFee = 0; _investmentFee = 0; _holdersFee = 0; if (isBuyFromLp) { if ((block.number - _launchBlockNumber) <= 5) { _liquidityFee = 100; } else { _liquidityFee = _base.liquidityFeeOnBuy; _investmentFee = _base.investmentFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _investmentFee = _base.investmentFeeOnSell; _holdersFee = _base.holdersFeeOnSell; if (block.timestamp - _launchTimestamp <= 86400) { _liquidityFee = 5; _holdersFee = 10; if (block.timestamp - _launchTimestamp <= 3600) { _investmentFee = 15; } else { _investmentFee = 10; } } } _totalFee = _liquidityFee + _investmentFee + _holdersFee; emit FeesApplied(_liquidityFee, _investmentFee, _holdersFee, _totalFee); } function _setCustomSellTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _investmentFeeOnSell, uint8 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.investmentFeeOnSell != _investmentFeeOnSell) { emit CustomTaxPeriodChange(_investmentFeeOnSell, map.investmentFeeOnSell, 'investmentFeeOnSell', map.periodName); map.investmentFeeOnSell = _investmentFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, 'holdersFeeOnSell', map.periodName); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnBuy, uint8 _investmentFeeOnBuy, uint8 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.investmentFeeOnBuy != _investmentFeeOnBuy) { emit CustomTaxPeriodChange(_investmentFeeOnBuy, map.investmentFeeOnBuy, 'investmentFeeOnBuy', map.periodName); map.investmentFeeOnBuy = _investmentFeeOnBuy; } if (map.holdersFeeOnBuy != _holdersFeeOnBuy) { emit CustomTaxPeriodChange(_holdersFeeOnBuy, map.holdersFeeOnBuy, 'holdersFeeOnBuy', map.periodName); map.holdersFeeOnBuy = _holdersFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; uint8 totalFeePrior = _totalFee; uint8 liquidityFeePrior = _liquidityFee; uint8 investmentFeePrior = _investmentFee; uint8 holdersFeePrior = _holdersFee; uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2; uint256 amountToSwapForETH = contractBalance - amountToLiquify; _swapTokensForETH(amountToSwapForETH); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = totalFeePrior - (liquidityFeePrior / 2) - (holdersFeePrior); uint256 amountETHLiquidity = ETHBalanceAfterSwap * liquidityFeePrior / totalETHFee / 2; uint256 amountETHInvestment = ETHBalanceAfterSwap - amountETHLiquidity; payable(investmentWallet).transfer(amountETHInvestment); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify(amountToSwapForETH, amountETHLiquidity, amountToLiquify); } _totalFee = totalFeePrior; _liquidityFee = liquidityFeePrior; _investmentFee = investmentFeePrior; _holdersFee = holdersFeePrior; } 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 liquidityWallet, block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"investmentFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"investmentFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","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":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_investmentFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_investmentFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newInvestmentWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"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":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526200001f6c0c9f2c9cd04674edea4000000060001962000c7a565b6200002d9060001962000ca7565b6005556127106200004d6c0c9f2c9cd04674edea40000000606462000cc1565b62000059919062000ce3565b600955620f42406200007b6c0c9f2c9cd04674edea400000006101f462000cc1565b62000087919062000ce3565b600b55600c80546001600160a01b03191661dead1790556040805161012081018252636261736560e01b81526000602082018190529181018290526001606082018190526080820152600360a0820181905260c0820181905260e082018190526101009190910152600f80546001600160c01b031916636261736560981b179055601055601180546503030303010165ffffffffffff199091161790553480156200013157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008054600d80546001600160a01b039092166001600160a01b03199283168117909155600e80549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c919062000cfa565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000cfa565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000304919062000cfa565b600180546001600160a01b0319166001600160a01b0385811691909117825582166080529091506200033890829062000530565b600160156000620003516000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530808252601590935220805490921660019081179092556200039f9162000620565b600c54620003b8906001600160a01b0316600162000620565b620003c582600162000620565b600160196000620003de6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601984528281208054861660019081179091556016948590528382208054871682179055600c549092168152918220805490941681179093556200045b6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560055490600290620004a06000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620004cd6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6c0c9f2c9cd04674edea400000006040516200052091815260200190565b60405180910390a3505062000dc5565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503620005cc5760405162461bcd60e51b815260206004820152603e60248201527f466c69703a204175746f6d61746564206d61726b6574206d616b65722070616960448201527f7220697320616c72656164792073657420746f20746861742076616c7565000060648201526084015b60405180910390fd5b6001600160a01b038216600081815260176020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6000546001600160a01b031633146200067c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005c3565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503620007075760405162461bcd60e51b815260206004820152603060248201527f466c69703a204163636f756e7420697320616c7265616479207468652076616c60448201526f7565206f6620276578636c756465642760801b6064820152608401620005c3565b8015620007d4576001600160a01b038216600090815260026020526040902054156200076b576001600160a01b038216600090815260026020526040902054620007519062000955565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601860205260408120805460ff1916841515179055601a805460018101825591527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b03191690911790556200090b565b60005b601a548110156200090957826001600160a01b0316601a828154811062000802576200080262000d25565b6000918252602090912001546001600160a01b031603620008f457601a80546200082f9060019062000ca7565b8154811062000842576200084262000d25565b600091825260209091200154601a80546001600160a01b03909216918390811062000871576200087162000d25565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601890925220805460ff19169055601a805480620008cc57620008cc62000d3b565b600082815260209020810160001990810180546001600160a01b031916905501905562000909565b80620009008162000d51565b915050620007d7565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa98260405162000949911515815260200190565b60405180910390a25050565b6000600554821115620009c45760405162461bcd60e51b815260206004820152603060248201527f466c69703a20416d6f756e74206d757374206265206c657373207468616e207460448201526f6f74616c207265666c656374696f6e7360801b6064820152608401620005c3565b6000620009d0620009e5565b9050620009de818462000ce3565b9392505050565b60008080620009f362000a18565b9150915062000a11818362000bde60201b620019871790919060201c565b9250505090565b60055460009081906c0c9f2c9cd04674edea40000000825b601a5481101562000b95578260026000601a848154811062000a565762000a5662000d25565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000ac557508160036000601a848154811062000a9e5762000a9e62000d25565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000ae6575050600554936c0c9f2c9cd04674edea400000009350915050565b60026000601a838154811062000b005762000b0062000d25565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000b31908462000ca7565b925060036000601a838154811062000b4d5762000b4d62000d25565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000b7e908362000ca7565b91508062000b8c8162000d51565b91505062000a30565b506c0c9f2c9cd04674edea4000000060055462000bb3919062000ce3565b82101562000bd5575050600554926c0c9f2c9cd04674edea4000000092509050565b90939092509050565b6000620009de83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000c2860201b60201c565b6000818362000c4c5760405162461bcd60e51b8152600401620005c3919062000d6d565b50600062000c5b848662000ce3565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b60008262000c8c5762000c8c62000c64565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000cbc5762000cbc62000c91565b500390565b600081600019048311821515161562000cde5762000cde62000c91565b500290565b60008262000cf55762000cf562000c64565b500490565b60006020828403121562000d0d57600080fd5b81516001600160a01b0381168114620009de57600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820162000d665762000d6662000c91565b5060010190565b600060208083528351808285015260005b8181101562000d9c5785810183015185820160400152820162000d7e565b8181111562000daf576000604083870101525b50601f01601f1916929092016040019392505050565b60805161342362000de1600039600061047101526134236000f3fe60806040526004361061024a5760003560e01c806376dca83511610139578063b6fa37bc116100b6578063d3f6a1571161007a578063d3f6a15714610712578063d469801614610732578063dd62ed3e14610752578063e625724614610798578063f2fde38b146107b8578063fe017535146107d857600080fd5b8063b6fa37bc1461064e578063c02466681461066e578063cd43e2281461068e578063d2d7ad83146106dc578063d3221576146106f257600080fd5b806395d89b41116100fd57806395d89b4114610591578063a457c2d7146105be578063a9059cbb146105de578063aee50b1e146105fe578063b62496f51461061e57600080fd5b806376dca835146104fd5780637c0a893d1461051d578063880bcbc11461053d5780638c0b5e221461055d5780638da5cb5b1461057357600080fd5b80632d838119116101c757806349bd5a5e1161018b57806349bd5a5e1461045f5780634d78fdc61461049357806366164f6f146104b357806370a08231146104c8578063715018a6146104e857600080fd5b80632d838119146103ce578063313ce567146103ee57806334cf1fea1461040a578063395093511461041f5780634549b0391461043f57600080fd5b806313114a9d1161020e57806313114a9d146103175780631694505e1461033657806318160ddd1461036e5780631e293c101461038e57806323b872dd146103ae57600080fd5b80630483f7a014610256578063064a59d01461027857806306fdde03146102a7578063095ea7b3146102e25780630bd05b691461030257600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50610276610271366004612f0e565b61080a565b005b34801561028457600080fd5b506007546102929060ff1681565b60405190151581526020015b60405180910390f35b3480156102b357600080fd5b50604080518082019091526009815268233634b82a37b5b2b760b91b60208201525b60405161029e9190612f43565b3480156102ee57600080fd5b506102926102fd366004612f98565b610ab1565b34801561030e57600080fd5b50610276610ac8565b34801561032357600080fd5b506006545b60405190815260200161029e565b34801561034257600080fd5b50600154610356906001600160a01b031681565b6040516001600160a01b03909116815260200161029e565b34801561037a57600080fd5b506c0c9f2c9cd04674edea40000000610328565b34801561039a57600080fd5b506102766103a9366004612fc4565b610b14565b3480156103ba57600080fd5b506102926103c9366004612fdd565b610bd8565b3480156103da57600080fd5b506103286103e9366004612fc4565b610c41565b3480156103fa57600080fd5b506040516012815260200161029e565b34801561041657600080fd5b50610276610ccb565b34801561042b57600080fd5b5061029261043a366004612f98565b610d05565b34801561044b57600080fd5b5061032861045a36600461301e565b610d3b565b34801561046b57600080fd5b506103567f000000000000000000000000000000000000000000000000000000000000000081565b34801561049f57600080fd5b506102766104ae366004613041565b610e1d565b3480156104bf57600080fd5b50610276610efc565b3480156104d457600080fd5b506103286104e3366004613041565b611032565b3480156104f457600080fd5b50610276611091565b34801561050957600080fd5b5061027661051836600461306f565b611105565b34801561052957600080fd5b50610276610538366004613041565b6111a9565b34801561054957600080fd5b50610276610558366004612f0e565b6112fe565b34801561056957600080fd5b5061032860095481565b34801561057f57600080fd5b506000546001600160a01b0316610356565b34801561059d57600080fd5b506040805180820190915260048152630464c49560e41b60208201526102d5565b3480156105ca57600080fd5b506102926105d9366004612f98565b6113c0565b3480156105ea57600080fd5b506102926105f9366004612f98565b61140f565b34801561060a57600080fd5b50610276610619366004612fc4565b61141c565b34801561062a57600080fd5b50610292610639366004613041565b60176020526000908152604090205460ff1681565b34801561065a57600080fd5b50600e54610356906001600160a01b031681565b34801561067a57600080fd5b50610276610689366004612f0e565b6114f0565b34801561069a57600080fd5b5060115460ff80821691620100008104821691640100000000909104165b6040805160ff9485168152928416602084015292169181019190915260600161029e565b3480156106e857600080fd5b50610328600b5481565b3480156106fe57600080fd5b5061027661070d366004612f0e565b6115b2565b34801561071e57600080fd5b5061027661072d3660046130b2565b611634565b34801561073e57600080fd5b50600d54610356906001600160a01b031681565b34801561075e57600080fd5b5061032861076d3660046130b2565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156107a457600080fd5b506102766107b336600461306f565b611849565b3480156107c457600080fd5b506102766107d3366004613041565b61189d565b3480156107e457600080fd5b5060115460ff610100820481169163010000008104821691600160281b909104166106b8565b6000546001600160a01b0316331461083d5760405162461bcd60e51b8152600401610834906130eb565b60405180910390fd5b6001600160a01b03821660009081526018602052604090205481151560ff90911615150361087d5760405162461bcd60e51b815260040161083490613120565b8015610945576001600160a01b038216600090815260026020526040902054156108dd576001600160a01b0382166000908152600260205260409020546108c390610c41565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601860205260408120805460ff1916841515179055601a805460018101825591527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b0319169091179055610a68565b60005b601a54811015610a6657826001600160a01b0316601a828154811061096f5761096f613170565b6000918252602090912001546001600160a01b031603610a5457601a80546109999060019061319c565b815481106109a9576109a9613170565b600091825260209091200154601a80546001600160a01b0390921691839081106109d5576109d5613170565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601890925220805460ff19169055601a805480610a2d57610a2d6131b3565b600082815260209020810160001990810180546001600160a01b0319169055019055610a66565b80610a5e816131c9565b915050610948565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610aa5911515815260200190565b60405180910390a25050565b6000610abe3384846119c9565b5060015b92915050565b6000546001600160a01b03163314610af25760405162461bcd60e51b8152600401610834906130eb565b6007805460ff19166001179055601254600003610b125742601255436013555b565b6000546001600160a01b03163314610b3e5760405162461bcd60e51b8152600401610834906130eb565b6009548103610ba55760405162461bcd60e51b815260206004820152602d60248201527f466c69703a2043616e6e6f7420757064617465206d61785478416d6f756e742060448201526c746f2073616d652076616c756560981b6064820152608401610834565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610be5848484611aed565b610c378433610c3285604051806060016040528060288152602001613381602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611fcd565b6119c9565b5060019392505050565b6000600554821115610cae5760405162461bcd60e51b815260206004820152603060248201527f466c69703a20416d6f756e74206d757374206265206c657373207468616e207460448201526f6f74616c207265666c656374696f6e7360801b6064820152608401610834565b6000610cb8612007565b9050610cc481846131f8565b9392505050565b6000546001600160a01b03163314610cf55760405162461bcd60e51b8152600401610834906130eb565b6007805460ff1916905542600855565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610abe918590610c32908661202a565b60006c0c9f2c9cd04674edea40000000831115610da85760405162461bcd60e51b815260206004820152602560248201527f466c69703a20416d6f756e74206d757374206265206c657373207468616e20736044820152647570706c7960d81b6064820152608401610834565b6000610db2612007565b90506000610dc0828661320c565b905083610dd0579150610ac29050565b601b546000908390606490610def906301000000900460ff168961320c565b610df991906131f8565b610e03919061320c565b90506000610e11828461319c565b9450610ac29350505050565b6000546001600160a01b03163314610e475760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b03811660009081526014602052604090205460ff16610eaf5760405162461bcd60e51b815260206004820152601c60248201527f466c69703a204163636f756e74206973206e6f7420626c636f6b6564000000006044820152606401610834565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b03163314610f265760405162461bcd60e51b8152600401610834906130eb565b60004711610f8b5760405162461bcd60e51b815260206004820152602c60248201527f466c69703a2043616e6e6f742073656e64206d6f7265207468616e20636f6e7460448201526b726163742062616c616e636560a01b6064820152608401610834565b476000610fa06000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610fea576040519150601f19603f3d011682016040523d82523d6000602084013e610fef565b606091505b50509050801561102e576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6001600160a01b03811660009081526018602052604081205460ff161561106f57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610ac290610c41565b6000546001600160a01b031633146110bb5760405162461bcd60e51b8152600401610834906130eb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461112f5760405162461bcd60e51b8152600401610834906130eb565b61113c600f848484612089565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146111d35760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b03811660009081526014602052604090205460ff161561123c5760405162461bcd60e51b815260206004820181905260248201527f466c69703a204163636f756e7420697320616c726561647920626c6f636b65646044820152606401610834565b6202a3006012544261124e919061319c565b106112ac5760405162461bcd60e51b815260206004820152602860248201527f466c69703a2054696d6520746f20626c6f636b206163636f756e74732068617360448201526708195e1c1a5c995960c21b6064820152608401610834565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146113285760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036113685760405162461bcd60e51b815260040161083490613120565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610aa5565b6000610abe3384610c32856040518060600160405280602581526020016133c9602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611fcd565b6000610abe338484611aed565b6000546001600160a01b031633146114465760405162461bcd60e51b8152600401610834906130eb565b600b5481036114bd5760405162461bcd60e51b815260206004820152603960248201527f466c69703a2043616e6e6f7420757064617465206d696e696d756d546f6b656e60448201527f734265666f72655377617020746f2073616d652076616c7565000000000000006064820152608401610834565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b0316331461151a5760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361155a5760405162461bcd60e51b815260040161083490613120565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610aa5565b6000546001600160a01b031633146115dc5760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610aa5565b6000546001600160a01b0316331461165e5760405162461bcd60e51b8152600401610834906130eb565b600d546001600160a01b03838116911614611750576001600160a01b0382166116d75760405162461bcd60e51b815260206004820152602560248201527f466c69703a20546865206c697175696469747957616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610834565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461102e576001600160a01b0381166117ca5760405162461bcd60e51b815260206004820152602660248201527f466c69703a2054686520696e766573746d656e7457616c6c65742063616e6e6f60448201526507420626520360d41b6064820152608401610834565b600e546040516f1a5b9d995cdd1b595b9d15d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b03199091161790555050565b6000546001600160a01b031633146118735760405162461bcd60e51b8152600401610834906130eb565b611880600f848484612253565b6040516b62617365466565732d42757960a01b8152600c01611156565b6000546001600160a01b031633146118c75760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b03811661192c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610834565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cc483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061240a565b6001600160a01b038316611a2b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610834565b6001600160a01b038216611a8c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610834565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b515760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610834565b6001600160a01b038216611bb35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610834565b60008111611c155760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610834565b611c1e83611032565b811115611c7d5760405162461bcd60e51b815260206004820152602760248201527f466c69703a2043616e6e6f74207472616e73666572206d6f7265207468616e2060448201526662616c616e636560c81b6064820152608401610834565b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601990915290205460ff928316929182169116158015611cdf57506001600160a01b03841660009081526019602052604090205460ff16155b15611eba5760075460ff16611d425760405162461bcd60e51b8152602060048201526024808201527f466c69703a2054726164696e672069732063757272656e746c792064697361626044820152633632b21760e11b6064820152608401610834565b6001600160a01b03841660009081526014602052604090205460ff1615611da65760405162461bcd60e51b8152602060048201526018602482015277119b1a5c0e881058d8dbdd5b9d081a5cc8189b1bd8dad95960421b6044820152606401610834565b6001600160a01b03851660009081526014602052604090205460ff1615611e0a5760405162461bcd60e51b8152602060048201526018602482015277119b1a5c0e881058d8dbdd5b9d081a5cc8189b1bd8dad95960421b6044820152606401610834565b6001600160a01b03841660009081526016602052604090205460ff16158015611e4c57506001600160a01b03851660009081526016602052604090205460ff16155b15611eba57600954831115611eba5760405162461bcd60e51b815260206004820152602e60248201527f466c69703a205472616e7366657220616d6f756e74206578636565647320746860448201526d329036b0bc2a3c20b6b7bab73a1760911b6064820152608401610834565b611ec48282612438565b6000600b54611ed230611032565b600754911115915060ff168015611ee65750805b8015611ef55750600a5460ff16155b8015611f0c5750601b546301000000900460ff1615155b8015611f3057506001600160a01b03851660009081526017602052604090205460ff165b15611f5557600a805460ff19166001179055611f4a61260b565b600a805460ff191690555b600a5460009060ff16158015611f6d575060075460ff165b6001600160a01b03881660009081526015602052604090205490915060ff1680611faf57506001600160a01b03861660009081526015602052604090205460ff165b15611fb8575060005b611fc4878787846127cb565b50505050505050565b60008184841115611ff15760405162461bcd60e51b81526004016108349190612f43565b506000611ffe848661319c565b95945050505050565b600080600061201461299c565b90925090506120238282611987565b9250505090565b600080612037838561322b565b905083811015610cc45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610834565b600284015460ff848116610100909204161461211a57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028601548654919260ff610100909204821692918716916000805160206133a9833981519152916120fb9160481b90613243565b60405180910390a460028401805461ff00191661010060ff8616021790555b600284015460ff838116630100000090920416146121b457604051721a5b9d995cdd1b595b9d11995953db94d95b1b606a1b815260130160405190819003812060028601548654919260ff6301000000909204821692918616916000805160206133a9833981519152916121919160481b90613243565b60405180910390a460028401805463ff0000001916630100000060ff8516021790555b600284015460ff828116600160281b909204161461224d576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028601548654919260ff600160281b909204821692918516916000805160206133a9833981519152916122289160481b90613243565b60405180910390a460028401805465ff00000000001916600160281b60ff8416021790555b50505050565b600284015460ff8481169116146122d457604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028601548654919260ff91821692918716916000805160206133a9833981519152916122ba9160481b90613243565b60405180910390a460028401805460ff191660ff85161790555b600284015460ff8381166201000090920416146123695760405171696e766573746d656e744665654f6e42757960701b815260120160405190819003812060028601548654919260ff62010000909204821692918616916000805160206133a9833981519152916123489160481b90613243565b60405180910390a460028401805462ff000019166201000060ff8516021790555b600284015460ff828116640100000000909204161461224d576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028601548654919260ff640100000000909204821692918516916000805160206133a9833981519152916123de9160481b90613243565b60405180910390a460028401805460ff83166401000000000264ff000000001990911617905550505050565b6000818361242b5760405162461bcd60e51b81526004016108349190612f43565b506000611ffe84866131f8565b601b805462ffffff1916905581156124b55760056013544361245a919061319c565b1161247157601b805460ff191660641790556124b5565b601154601b8054640100000000830460ff9081166201000090810262ff00001991860483166101000261ffff19909416929095169190911791909117169190911790555b801561256257601154601b805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790556012546201518090612512904261319c565b1161256257601b805462ff00ff1916620a0005179055601254610e1090612539904261319c565b1161255257601b805461ff001916610f00179055612562565b601b805461ff001916610a001790555b601b5460ff6201000082048116916125829161010082048116911661325a565b61258c919061325a565b601b805463ff000000198116630100000060ff9485168102918217938490556040805193861692861692909217835261010084048516602084015262010000840485169183019190915290910490911660608201527fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b90608001611025565b600061261630611032565b601b54909150479060ff6301000000820481169181811691610100820481169162010000900416600060028561264c868a61320c565b61265691906131f8565b61266091906131f8565b9050600061266e828961319c565b905061267981612b49565b6000612685884761319c565b905060008461269560028961327f565b61269f908a6132a1565b6126a991906132a1565b60ff16905060006002828960ff16856126c2919061320c565b6126cc91906131f8565b6126d691906131f8565b905060006126e4828561319c565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561271f573d6000803e3d6000fd5b508515612772576127308683612ca3565b60408051868152602081018490529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601b805460ff968716620100000262ff0000199888166101000261ffff199b89166301000000029b909b1663ff00ffff19909216919091179890961697909717979097179490941692909217909355505050505050565b60008060006127da8585612d57565b9250925092506000806000806127f98987876127f4612007565b612df9565b6001600160a01b038f166000908152601860205260409020549397509195509350915060ff1615612862576001600160a01b038b16600090815260036020526040902054612848908a9061319c565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a1660009081526018602052604090205460ff16156128c1576001600160a01b038a166000908152600360205260409020546128a790889061322b565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b166000908152600260205260409020546128e590859061319c565b6001600160a01b03808d1660009081526002602052604080822093909355908c168152205461291590849061322b565b6001600160a01b038b166000908152600260205260409020556129388186612e51565b6129428287612eb6565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161298791815260200190565b60405180910390a35050505050505050505050565b60055460009081906c0c9f2c9cd04674edea40000000825b601a54811015612b03578260026000601a84815481106129d6576129d6613170565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a4157508160036000601a8481548110612a1a57612a1a613170565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a61575050600554936c0c9f2c9cd04674edea400000009350915050565b60026000601a8381548110612a7857612a78613170565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612aa7908461319c565b925060036000601a8381548110612ac057612ac0613170565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612aef908361319c565b915080612afb816131c9565b9150506129b4565b506c0c9f2c9cd04674edea40000000600554612b1f91906131f8565b821015612b40575050600554926c0c9f2c9cd04674edea4000000092509050565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b7e57612b7e613170565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfb91906132c4565b81600181518110612c0e57612c0e613170565b6001600160a01b039283166020918202929092010152600154612c3491309116846119c9565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c6d9085906000908690309042906004016132e1565b600060405180830381600087803b158015612c8757600080fd5b505af1158015612c9b573d6000803e3d6000fd5b505050505050565b600154612cbb9030906001600160a01b0316846119c9565b600154600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d2b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d509190613352565b5050505050565b600080600083612d6f57508391506000905080612df2565b601b54600090606490612d8b9062010000900460ff168861320c565b612d9591906131f8565b601b54909150600090606490612db59060ff61010082048116911661325a565b612dc29060ff168961320c565b612dcc91906131f8565b90506000612dda828461322b565b612de4908961319c565b95509193509150612df29050565b9250925092565b600080808080612e09868a61320c565b90506000612e17878a61320c565b90506000612e25888a61320c565b90506000612e33828461322b565b612e3d908561319c565b939c939b5091995097509095505050505050565b3060009081526018602052604090205460ff1615612e8e573060009081526003602052604081208054839290612e8890849061322b565b90915550505b3060009081526002602052604081208054849290612ead90849061322b565b90915550505050565b8160056000828254612ec8919061319c565b925050819055508060066000828254612ead919061322b565b6001600160a01b0381168114612ef657600080fd5b50565b80358015158114612f0957600080fd5b919050565b60008060408385031215612f2157600080fd5b8235612f2c81612ee1565b9150612f3a60208401612ef9565b90509250929050565b600060208083528351808285015260005b81811015612f7057858101830151858201604001528201612f54565b81811115612f82576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612fab57600080fd5b8235612fb681612ee1565b946020939093013593505050565b600060208284031215612fd657600080fd5b5035919050565b600080600060608486031215612ff257600080fd5b8335612ffd81612ee1565b9250602084013561300d81612ee1565b929592945050506040919091013590565b6000806040838503121561303157600080fd5b82359150612f3a60208401612ef9565b60006020828403121561305357600080fd5b8135610cc481612ee1565b803560ff81168114612f0957600080fd5b60008060006060848603121561308457600080fd5b61308d8461305e565b925061309b6020850161305e565b91506130a96040850161305e565b90509250925092565b600080604083850312156130c557600080fd5b82356130d081612ee1565b915060208301356130e081612ee1565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f466c69703a204163636f756e7420697320616c7265616479207468652076616c60408201526f7565206f6620276578636c756465642760801b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156131ae576131ae613186565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016131db576131db613186565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613207576132076131e2565b500490565b600081600019048311821515161561322657613226613186565b500290565b6000821982111561323e5761323e613186565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff0382111561327757613277613186565b019392505050565b600060ff831680613292576132926131e2565b8060ff84160491505092915050565b600060ff821660ff8416808210156132bb576132bb613186565b90039392505050565b6000602082840312156132d657600080fd5b8151610cc481612ee1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133315784516001600160a01b03168352938301939183019160010161330c565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561336757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e6ab72041654a0155f3ca1cd1717d715959f325b5374bf96c9ea51f19e76494964736f6c634300080d0033
Deployed Bytecode
0x60806040526004361061024a5760003560e01c806376dca83511610139578063b6fa37bc116100b6578063d3f6a1571161007a578063d3f6a15714610712578063d469801614610732578063dd62ed3e14610752578063e625724614610798578063f2fde38b146107b8578063fe017535146107d857600080fd5b8063b6fa37bc1461064e578063c02466681461066e578063cd43e2281461068e578063d2d7ad83146106dc578063d3221576146106f257600080fd5b806395d89b41116100fd57806395d89b4114610591578063a457c2d7146105be578063a9059cbb146105de578063aee50b1e146105fe578063b62496f51461061e57600080fd5b806376dca835146104fd5780637c0a893d1461051d578063880bcbc11461053d5780638c0b5e221461055d5780638da5cb5b1461057357600080fd5b80632d838119116101c757806349bd5a5e1161018b57806349bd5a5e1461045f5780634d78fdc61461049357806366164f6f146104b357806370a08231146104c8578063715018a6146104e857600080fd5b80632d838119146103ce578063313ce567146103ee57806334cf1fea1461040a578063395093511461041f5780634549b0391461043f57600080fd5b806313114a9d1161020e57806313114a9d146103175780631694505e1461033657806318160ddd1461036e5780631e293c101461038e57806323b872dd146103ae57600080fd5b80630483f7a014610256578063064a59d01461027857806306fdde03146102a7578063095ea7b3146102e25780630bd05b691461030257600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50610276610271366004612f0e565b61080a565b005b34801561028457600080fd5b506007546102929060ff1681565b60405190151581526020015b60405180910390f35b3480156102b357600080fd5b50604080518082019091526009815268233634b82a37b5b2b760b91b60208201525b60405161029e9190612f43565b3480156102ee57600080fd5b506102926102fd366004612f98565b610ab1565b34801561030e57600080fd5b50610276610ac8565b34801561032357600080fd5b506006545b60405190815260200161029e565b34801561034257600080fd5b50600154610356906001600160a01b031681565b6040516001600160a01b03909116815260200161029e565b34801561037a57600080fd5b506c0c9f2c9cd04674edea40000000610328565b34801561039a57600080fd5b506102766103a9366004612fc4565b610b14565b3480156103ba57600080fd5b506102926103c9366004612fdd565b610bd8565b3480156103da57600080fd5b506103286103e9366004612fc4565b610c41565b3480156103fa57600080fd5b506040516012815260200161029e565b34801561041657600080fd5b50610276610ccb565b34801561042b57600080fd5b5061029261043a366004612f98565b610d05565b34801561044b57600080fd5b5061032861045a36600461301e565b610d3b565b34801561046b57600080fd5b506103567f000000000000000000000000923693f167ed56a529f191012b1523a4ce69724681565b34801561049f57600080fd5b506102766104ae366004613041565b610e1d565b3480156104bf57600080fd5b50610276610efc565b3480156104d457600080fd5b506103286104e3366004613041565b611032565b3480156104f457600080fd5b50610276611091565b34801561050957600080fd5b5061027661051836600461306f565b611105565b34801561052957600080fd5b50610276610538366004613041565b6111a9565b34801561054957600080fd5b50610276610558366004612f0e565b6112fe565b34801561056957600080fd5b5061032860095481565b34801561057f57600080fd5b506000546001600160a01b0316610356565b34801561059d57600080fd5b506040805180820190915260048152630464c49560e41b60208201526102d5565b3480156105ca57600080fd5b506102926105d9366004612f98565b6113c0565b3480156105ea57600080fd5b506102926105f9366004612f98565b61140f565b34801561060a57600080fd5b50610276610619366004612fc4565b61141c565b34801561062a57600080fd5b50610292610639366004613041565b60176020526000908152604090205460ff1681565b34801561065a57600080fd5b50600e54610356906001600160a01b031681565b34801561067a57600080fd5b50610276610689366004612f0e565b6114f0565b34801561069a57600080fd5b5060115460ff80821691620100008104821691640100000000909104165b6040805160ff9485168152928416602084015292169181019190915260600161029e565b3480156106e857600080fd5b50610328600b5481565b3480156106fe57600080fd5b5061027661070d366004612f0e565b6115b2565b34801561071e57600080fd5b5061027661072d3660046130b2565b611634565b34801561073e57600080fd5b50600d54610356906001600160a01b031681565b34801561075e57600080fd5b5061032861076d3660046130b2565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156107a457600080fd5b506102766107b336600461306f565b611849565b3480156107c457600080fd5b506102766107d3366004613041565b61189d565b3480156107e457600080fd5b5060115460ff610100820481169163010000008104821691600160281b909104166106b8565b6000546001600160a01b0316331461083d5760405162461bcd60e51b8152600401610834906130eb565b60405180910390fd5b6001600160a01b03821660009081526018602052604090205481151560ff90911615150361087d5760405162461bcd60e51b815260040161083490613120565b8015610945576001600160a01b038216600090815260026020526040902054156108dd576001600160a01b0382166000908152600260205260409020546108c390610c41565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601860205260408120805460ff1916841515179055601a805460018101825591527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b0319169091179055610a68565b60005b601a54811015610a6657826001600160a01b0316601a828154811061096f5761096f613170565b6000918252602090912001546001600160a01b031603610a5457601a80546109999060019061319c565b815481106109a9576109a9613170565b600091825260209091200154601a80546001600160a01b0390921691839081106109d5576109d5613170565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601890925220805460ff19169055601a805480610a2d57610a2d6131b3565b600082815260209020810160001990810180546001600160a01b0319169055019055610a66565b80610a5e816131c9565b915050610948565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610aa5911515815260200190565b60405180910390a25050565b6000610abe3384846119c9565b5060015b92915050565b6000546001600160a01b03163314610af25760405162461bcd60e51b8152600401610834906130eb565b6007805460ff19166001179055601254600003610b125742601255436013555b565b6000546001600160a01b03163314610b3e5760405162461bcd60e51b8152600401610834906130eb565b6009548103610ba55760405162461bcd60e51b815260206004820152602d60248201527f466c69703a2043616e6e6f7420757064617465206d61785478416d6f756e742060448201526c746f2073616d652076616c756560981b6064820152608401610834565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610be5848484611aed565b610c378433610c3285604051806060016040528060288152602001613381602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611fcd565b6119c9565b5060019392505050565b6000600554821115610cae5760405162461bcd60e51b815260206004820152603060248201527f466c69703a20416d6f756e74206d757374206265206c657373207468616e207460448201526f6f74616c207265666c656374696f6e7360801b6064820152608401610834565b6000610cb8612007565b9050610cc481846131f8565b9392505050565b6000546001600160a01b03163314610cf55760405162461bcd60e51b8152600401610834906130eb565b6007805460ff1916905542600855565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610abe918590610c32908661202a565b60006c0c9f2c9cd04674edea40000000831115610da85760405162461bcd60e51b815260206004820152602560248201527f466c69703a20416d6f756e74206d757374206265206c657373207468616e20736044820152647570706c7960d81b6064820152608401610834565b6000610db2612007565b90506000610dc0828661320c565b905083610dd0579150610ac29050565b601b546000908390606490610def906301000000900460ff168961320c565b610df991906131f8565b610e03919061320c565b90506000610e11828461319c565b9450610ac29350505050565b6000546001600160a01b03163314610e475760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b03811660009081526014602052604090205460ff16610eaf5760405162461bcd60e51b815260206004820152601c60248201527f466c69703a204163636f756e74206973206e6f7420626c636f6b6564000000006044820152606401610834565b6001600160a01b038116600081815260146020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b03163314610f265760405162461bcd60e51b8152600401610834906130eb565b60004711610f8b5760405162461bcd60e51b815260206004820152602c60248201527f466c69703a2043616e6e6f742073656e64206d6f7265207468616e20636f6e7460448201526b726163742062616c616e636560a01b6064820152608401610834565b476000610fa06000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610fea576040519150601f19603f3d011682016040523d82523d6000602084013e610fef565b606091505b50509050801561102e576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6001600160a01b03811660009081526018602052604081205460ff161561106f57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610ac290610c41565b6000546001600160a01b031633146110bb5760405162461bcd60e51b8152600401610834906130eb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461112f5760405162461bcd60e51b8152600401610834906130eb565b61113c600f848484612089565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6000546001600160a01b031633146111d35760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b03811660009081526014602052604090205460ff161561123c5760405162461bcd60e51b815260206004820181905260248201527f466c69703a204163636f756e7420697320616c726561647920626c6f636b65646044820152606401610834565b6202a3006012544261124e919061319c565b106112ac5760405162461bcd60e51b815260206004820152602860248201527f466c69703a2054696d6520746f20626c6f636b206163636f756e74732068617360448201526708195e1c1a5c995960c21b6064820152608401610834565b6001600160a01b038116600081815260146020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b031633146113285760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036113685760405162461bcd60e51b815260040161083490613120565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610aa5565b6000610abe3384610c32856040518060600160405280602581526020016133c9602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611fcd565b6000610abe338484611aed565b6000546001600160a01b031633146114465760405162461bcd60e51b8152600401610834906130eb565b600b5481036114bd5760405162461bcd60e51b815260206004820152603960248201527f466c69703a2043616e6e6f7420757064617465206d696e696d756d546f6b656e60448201527f734265666f72655377617020746f2073616d652076616c7565000000000000006064820152608401610834565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b0316331461151a5760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361155a5760405162461bcd60e51b815260040161083490613120565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610aa5565b6000546001600160a01b031633146115dc5760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610aa5565b6000546001600160a01b0316331461165e5760405162461bcd60e51b8152600401610834906130eb565b600d546001600160a01b03838116911614611750576001600160a01b0382166116d75760405162461bcd60e51b815260206004820152602560248201527f466c69703a20546865206c697175696469747957616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610834565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461102e576001600160a01b0381166117ca5760405162461bcd60e51b815260206004820152602660248201527f466c69703a2054686520696e766573746d656e7457616c6c65742063616e6e6f60448201526507420626520360d41b6064820152608401610834565b600e546040516f1a5b9d995cdd1b595b9d15d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b03199091161790555050565b6000546001600160a01b031633146118735760405162461bcd60e51b8152600401610834906130eb565b611880600f848484612253565b6040516b62617365466565732d42757960a01b8152600c01611156565b6000546001600160a01b031633146118c75760405162461bcd60e51b8152600401610834906130eb565b6001600160a01b03811661192c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610834565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cc483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061240a565b6001600160a01b038316611a2b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610834565b6001600160a01b038216611a8c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610834565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b515760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610834565b6001600160a01b038216611bb35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610834565b60008111611c155760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610834565b611c1e83611032565b811115611c7d5760405162461bcd60e51b815260206004820152602760248201527f466c69703a2043616e6e6f74207472616e73666572206d6f7265207468616e2060448201526662616c616e636560c81b6064820152608401610834565b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601990915290205460ff928316929182169116158015611cdf57506001600160a01b03841660009081526019602052604090205460ff16155b15611eba5760075460ff16611d425760405162461bcd60e51b8152602060048201526024808201527f466c69703a2054726164696e672069732063757272656e746c792064697361626044820152633632b21760e11b6064820152608401610834565b6001600160a01b03841660009081526014602052604090205460ff1615611da65760405162461bcd60e51b8152602060048201526018602482015277119b1a5c0e881058d8dbdd5b9d081a5cc8189b1bd8dad95960421b6044820152606401610834565b6001600160a01b03851660009081526014602052604090205460ff1615611e0a5760405162461bcd60e51b8152602060048201526018602482015277119b1a5c0e881058d8dbdd5b9d081a5cc8189b1bd8dad95960421b6044820152606401610834565b6001600160a01b03841660009081526016602052604090205460ff16158015611e4c57506001600160a01b03851660009081526016602052604090205460ff16155b15611eba57600954831115611eba5760405162461bcd60e51b815260206004820152602e60248201527f466c69703a205472616e7366657220616d6f756e74206578636565647320746860448201526d329036b0bc2a3c20b6b7bab73a1760911b6064820152608401610834565b611ec48282612438565b6000600b54611ed230611032565b600754911115915060ff168015611ee65750805b8015611ef55750600a5460ff16155b8015611f0c5750601b546301000000900460ff1615155b8015611f3057506001600160a01b03851660009081526017602052604090205460ff165b15611f5557600a805460ff19166001179055611f4a61260b565b600a805460ff191690555b600a5460009060ff16158015611f6d575060075460ff165b6001600160a01b03881660009081526015602052604090205490915060ff1680611faf57506001600160a01b03861660009081526015602052604090205460ff165b15611fb8575060005b611fc4878787846127cb565b50505050505050565b60008184841115611ff15760405162461bcd60e51b81526004016108349190612f43565b506000611ffe848661319c565b95945050505050565b600080600061201461299c565b90925090506120238282611987565b9250505090565b600080612037838561322b565b905083811015610cc45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610834565b600284015460ff848116610100909204161461211a57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028601548654919260ff610100909204821692918716916000805160206133a9833981519152916120fb9160481b90613243565b60405180910390a460028401805461ff00191661010060ff8616021790555b600284015460ff838116630100000090920416146121b457604051721a5b9d995cdd1b595b9d11995953db94d95b1b606a1b815260130160405190819003812060028601548654919260ff6301000000909204821692918616916000805160206133a9833981519152916121919160481b90613243565b60405180910390a460028401805463ff0000001916630100000060ff8516021790555b600284015460ff828116600160281b909204161461224d576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028601548654919260ff600160281b909204821692918516916000805160206133a9833981519152916122289160481b90613243565b60405180910390a460028401805465ff00000000001916600160281b60ff8416021790555b50505050565b600284015460ff8481169116146122d457604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028601548654919260ff91821692918716916000805160206133a9833981519152916122ba9160481b90613243565b60405180910390a460028401805460ff191660ff85161790555b600284015460ff8381166201000090920416146123695760405171696e766573746d656e744665654f6e42757960701b815260120160405190819003812060028601548654919260ff62010000909204821692918616916000805160206133a9833981519152916123489160481b90613243565b60405180910390a460028401805462ff000019166201000060ff8516021790555b600284015460ff828116640100000000909204161461224d576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028601548654919260ff640100000000909204821692918516916000805160206133a9833981519152916123de9160481b90613243565b60405180910390a460028401805460ff83166401000000000264ff000000001990911617905550505050565b6000818361242b5760405162461bcd60e51b81526004016108349190612f43565b506000611ffe84866131f8565b601b805462ffffff1916905581156124b55760056013544361245a919061319c565b1161247157601b805460ff191660641790556124b5565b601154601b8054640100000000830460ff9081166201000090810262ff00001991860483166101000261ffff19909416929095169190911791909117169190911790555b801561256257601154601b805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790556012546201518090612512904261319c565b1161256257601b805462ff00ff1916620a0005179055601254610e1090612539904261319c565b1161255257601b805461ff001916610f00179055612562565b601b805461ff001916610a001790555b601b5460ff6201000082048116916125829161010082048116911661325a565b61258c919061325a565b601b805463ff000000198116630100000060ff9485168102918217938490556040805193861692861692909217835261010084048516602084015262010000840485169183019190915290910490911660608201527fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b90608001611025565b600061261630611032565b601b54909150479060ff6301000000820481169181811691610100820481169162010000900416600060028561264c868a61320c565b61265691906131f8565b61266091906131f8565b9050600061266e828961319c565b905061267981612b49565b6000612685884761319c565b905060008461269560028961327f565b61269f908a6132a1565b6126a991906132a1565b60ff16905060006002828960ff16856126c2919061320c565b6126cc91906131f8565b6126d691906131f8565b905060006126e4828561319c565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561271f573d6000803e3d6000fd5b508515612772576127308683612ca3565b60408051868152602081018490529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601b805460ff968716620100000262ff0000199888166101000261ffff199b89166301000000029b909b1663ff00ffff19909216919091179890961697909717979097179490941692909217909355505050505050565b60008060006127da8585612d57565b9250925092506000806000806127f98987876127f4612007565b612df9565b6001600160a01b038f166000908152601860205260409020549397509195509350915060ff1615612862576001600160a01b038b16600090815260036020526040902054612848908a9061319c565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a1660009081526018602052604090205460ff16156128c1576001600160a01b038a166000908152600360205260409020546128a790889061322b565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b166000908152600260205260409020546128e590859061319c565b6001600160a01b03808d1660009081526002602052604080822093909355908c168152205461291590849061322b565b6001600160a01b038b166000908152600260205260409020556129388186612e51565b6129428287612eb6565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161298791815260200190565b60405180910390a35050505050505050505050565b60055460009081906c0c9f2c9cd04674edea40000000825b601a54811015612b03578260026000601a84815481106129d6576129d6613170565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a4157508160036000601a8481548110612a1a57612a1a613170565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a61575050600554936c0c9f2c9cd04674edea400000009350915050565b60026000601a8381548110612a7857612a78613170565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612aa7908461319c565b925060036000601a8381548110612ac057612ac0613170565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612aef908361319c565b915080612afb816131c9565b9150506129b4565b506c0c9f2c9cd04674edea40000000600554612b1f91906131f8565b821015612b40575050600554926c0c9f2c9cd04674edea4000000092509050565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b7e57612b7e613170565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfb91906132c4565b81600181518110612c0e57612c0e613170565b6001600160a01b039283166020918202929092010152600154612c3491309116846119c9565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c6d9085906000908690309042906004016132e1565b600060405180830381600087803b158015612c8757600080fd5b505af1158015612c9b573d6000803e3d6000fd5b505050505050565b600154612cbb9030906001600160a01b0316846119c9565b600154600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d2b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d509190613352565b5050505050565b600080600083612d6f57508391506000905080612df2565b601b54600090606490612d8b9062010000900460ff168861320c565b612d9591906131f8565b601b54909150600090606490612db59060ff61010082048116911661325a565b612dc29060ff168961320c565b612dcc91906131f8565b90506000612dda828461322b565b612de4908961319c565b95509193509150612df29050565b9250925092565b600080808080612e09868a61320c565b90506000612e17878a61320c565b90506000612e25888a61320c565b90506000612e33828461322b565b612e3d908561319c565b939c939b5091995097509095505050505050565b3060009081526018602052604090205460ff1615612e8e573060009081526003602052604081208054839290612e8890849061322b565b90915550505b3060009081526002602052604081208054849290612ead90849061322b565b90915550505050565b8160056000828254612ec8919061319c565b925050819055508060066000828254612ead919061322b565b6001600160a01b0381168114612ef657600080fd5b50565b80358015158114612f0957600080fd5b919050565b60008060408385031215612f2157600080fd5b8235612f2c81612ee1565b9150612f3a60208401612ef9565b90509250929050565b600060208083528351808285015260005b81811015612f7057858101830151858201604001528201612f54565b81811115612f82576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612fab57600080fd5b8235612fb681612ee1565b946020939093013593505050565b600060208284031215612fd657600080fd5b5035919050565b600080600060608486031215612ff257600080fd5b8335612ffd81612ee1565b9250602084013561300d81612ee1565b929592945050506040919091013590565b6000806040838503121561303157600080fd5b82359150612f3a60208401612ef9565b60006020828403121561305357600080fd5b8135610cc481612ee1565b803560ff81168114612f0957600080fd5b60008060006060848603121561308457600080fd5b61308d8461305e565b925061309b6020850161305e565b91506130a96040850161305e565b90509250925092565b600080604083850312156130c557600080fd5b82356130d081612ee1565b915060208301356130e081612ee1565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f466c69703a204163636f756e7420697320616c7265616479207468652076616c60408201526f7565206f6620276578636c756465642760801b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156131ae576131ae613186565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016131db576131db613186565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613207576132076131e2565b500490565b600081600019048311821515161561322657613226613186565b500290565b6000821982111561323e5761323e613186565b500190565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff0382111561327757613277613186565b019392505050565b600060ff831680613292576132926131e2565b8060ff84160491505092915050565b600060ff821660ff8416808210156132bb576132bb613186565b90039392505050565b6000602082840312156132d657600080fd5b8151610cc481612ee1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133315784516001600160a01b03168352938301939183019160010161330c565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561336757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e6ab72041654a0155f3ca1cd1717d715959f325b5374bf96c9ea51f19e76494964736f6c634300080d0033
Deployed Bytecode Sourcemap
7734:21825:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16843:824;;;;;;;;;;-1:-1:-1;16843:824:0;;;;;:::i;:::-;;:::i;:::-;;8413:28;;;;;;;;;;-1:-1:-1;8413:28:0;;;;;;;;;;;800:14:1;;793:22;775:41;;763:2;748:18;8413:28:0;;;;;;;;18842:76;;;;;;;;;;-1:-1:-1;18908:5:0;;;;;;;;;;;;-1:-1:-1;;;18908:5:0;;;;18842:76;;;;;;;:::i;12513:146::-;;;;;;;;;;-1:-1:-1;12513:146:0;;;;;:::i;:::-;;:::i;13812:201::-;;;;;;;;;;;;;:::i;19381:80::-;;;;;;;;;;-1:-1:-1;19446:10:0;;19381:80;;;1895:25:1;;;1883:2;1868:18;19381:80:0;1749:177:1;7837:30:0;;;;;;;;;;-1:-1:-1;7837:30:0;;;;-1:-1:-1;;;;;7837:30:0;;;;;;-1:-1:-1;;;;;2110:32:1;;;2092:51;;2080:2;2065:18;7837:30:0;1931:218:1;19091:88:0;;;;;;;;;;-1:-1:-1;8302:22:0;19091:88;;16581:259;;;;;;;;;;-1:-1:-1;16581:259:0;;;;;:::i;:::-;;:::i;12662:292::-;;;;;;;;;;-1:-1:-1;12662:292:0;;;;;:::i;:::-;;:::i;19936:235::-;;;;;;;;;;-1:-1:-1;19936:235:0;;;;;:::i;:::-;;:::i;19004:84::-;;;;;;;;;;-1:-1:-1;19004:84:0;;8042:2;2942:36:1;;2930:2;2915:18;19004:84:0;2800:184:1;14016:122:0;;;;;;;;;;;;;:::i;12957:202::-;;;;;;;;;;-1:-1:-1;12957:202:0;;;;;:::i;:::-;;:::i;20174:476::-;;;;;;;;;;-1:-1:-1;20174:476:0;;;;;:::i;:::-;;:::i;7871:38::-;;;;;;;;;;;;;;;18304:208;;;;;;;;;;-1:-1:-1;18304:208:0;;;;;:::i;:::-;;:::i;18515:309::-;;;;;;;;;;;;;:::i;19182:196::-;;;;;;;;;;-1:-1:-1;19182:196:0;;;;;:::i;:::-;;:::i;7366:133::-;;;;;;;;;;;;;:::i;16252:326::-;;;;;;;;;;-1:-1:-1;16252:326:0;;;;;:::i;:::-;;:::i;17978:323::-;;;;;;;;;;-1:-1:-1;17978:323:0;;;;;:::i;:::-;;:::i;14928:333::-;;;;;;;;;;-1:-1:-1;14928:333:0;;;;;:::i;:::-;;:::i;8533:50::-;;;;;;;;;;;;;;;;7182:70;;;;;;;;;;-1:-1:-1;7220:7:0;7241:6;-1:-1:-1;;;;;7241:6:0;7182:70;;18921:80;;;;;;;;;;-1:-1:-1;18989:7:0;;;;;;;;;;;;-1:-1:-1;;;18989:7:0;;;;18921:80;;13162:253;;;;;;;;;;-1:-1:-1;13162:253:0;;;;;:::i;:::-;;:::i;12356:154::-;;;;;;;;;;-1:-1:-1;12356:154:0;;;;;:::i;:::-;;:::i;17670:302::-;;;;;;;;;;-1:-1:-1;17670:302:0;;;;;:::i;:::-;;:::i;9565:58::-;;;;;;;;;;-1:-1:-1;9565:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8840:31;;;;;;;;;;-1:-1:-1;8840:31:0;;;;-1:-1:-1;;;;;8840:31:0;;;14646:279;;;;;;;;;;-1:-1:-1;14646:279:0;;;;;:::i;:::-;;:::i;19606:160::-;;;;;;;;;;-1:-1:-1;19688:23:0;;;;;;;19713:24;;;;;;19739:21;;;;;19606:160;;;;4410:4:1;4398:17;;;4380:36;;4452:17;;;4447:2;4432:18;;4425:45;4506:17;;4486:18;;;4479:45;;;;4368:2;4353:18;19606:160:0;4190:340:1;8662:64:0;;;;;;;;;;;;;;;;14441:202;;;;;;;;;;-1:-1:-1;14441:202:0;;;;;:::i;:::-;;:::i;15264:650::-;;;;;;;;;;-1:-1:-1;15264:650:0;;;;;:::i;:::-;;:::i;8806:30::-;;;;;;;;;;-1:-1:-1;8806:30:0;;;;-1:-1:-1;;;;;8806:30:0;;;19464:136;;;;;;;;;;-1:-1:-1;19464:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;19568:18:0;;;19547:7;19568:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19464:136;15935:314;;;;;;;;;;-1:-1:-1;15935:314:0;;;;;:::i;:::-;;:::i;7504:223::-;;;;;;;;;;-1:-1:-1;7504:223:0;;;;;:::i;:::-;;:::i;19769:164::-;;;;;;;;;;-1:-1:-1;19852:24:0;;;;;;;;;19878:25;;;;;;-1:-1:-1;;;19905:22:0;;;;19769:164;;16843:824;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;16935:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;16927:106:::1;;;;-1:-1:-1::0;;;16927:106:0::1;;;;;;;:::i;:::-;17041:8;17038:570;;;-1:-1:-1::0;;;;;17060:16:0;::::1;17079:1;17060:16:::0;;;:7:::1;:16;::::0;;;;;:20;17057:95:::1;;-1:-1:-1::0;;;;;17128:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;17108:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;17089:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;17057:95:::1;-1:-1:-1::0;;;;;17157:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;17157:44:0::1;::::0;::::1;;;::::0;;17207:22:::1;:36:::0;;-1:-1:-1;17207:36:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;17207:36:0::1;::::0;;::::1;::::0;;17038:570:::1;;;17266:9;17261:342;17285:22;:29:::0;17281:33;::::1;17261:342;;;17361:7;-1:-1:-1::0;;;;;17332:36:0::1;:22;17355:1;17332:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;17332:25:0::1;:36:::0;17328:269:::1;;17406:22;17429:29:::0;;:33:::1;::::0;17461:1:::1;::::0;17429:33:::1;:::i;:::-;17406:57;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;17378:22:::1;:25:::0;;-1:-1:-1;;;;;17406:57:0;;::::1;::::0;17401:1;;17378:25;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:85:::0;;-1:-1:-1;;;;;;17378:85:0::1;-1:-1:-1::0;;;;;17378:85:0;;::::1;;::::0;;17471:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;17499:24:::1;:33:::0;;;;:41;;-1:-1:-1;;17499:41:0::1;::::0;;17548:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;17548:28:0;;;;;-1:-1:-1;;;;;;17548:28:0::1;::::0;;;;;17584:5:::1;;17328:269;17316:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17261:342;;;;17038:570;17644:7;-1:-1:-1::0;;;;;17617:45:0::1;;17653:8;17617:45;;;;800:14:1::0;793:22;775:41;;763:2;748:18;;635:187;17617:45:0::1;;;;;;;;16843:824:::0;;:::o;12513:146::-;12588:4;12599:39;6648:10;12622:7;12631:6;12599:8;:39::i;:::-;-1:-1:-1;12650:4:0;12513:146;;;;;:::o;13812:201::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;13863:16:::1;:23:::0;;-1:-1:-1;;13863:23:0::1;13882:4;13863:23;::::0;;13901:16:::1;::::0;13863::::1;13901:21:::0;13897:112:::1;;13949:15;13930:16;:34:::0;13991:12:::1;13970:18;:33:::0;13897:112:::1;13812:201::o:0;16581:259::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;16676:11:::1;;16664:8;:23:::0;16656:81:::1;;;::::0;-1:-1:-1;;;16656:81:0;;6574:2:1;16656:81:0::1;::::0;::::1;6556:21:1::0;6613:2;6593:18;;;6586:30;6652:34;6632:18;;;6625:62;-1:-1:-1;;;6703:18:1;;;6696:43;6756:19;;16656:81:0::1;6372:409:1::0;16656:81:0::1;16790:11;::::0;16753:49:::1;::::0;16780:8;;16753:49:::1;::::0;;;::::1;16813:11;:22:::0;16581:259::o;12662:292::-;12761:4;12772:36;12782:6;12790:9;12801:6;12772:9;:36::i;:::-;12813:120;12822:6;6648:10;12844:88;12882:6;12844:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12844:19:0;;;;;;:11;:19;;;;;;;;6648:10;12844:33;;;;;;;;;;:37;:88::i;:::-;12813:8;:120::i;:::-;-1:-1:-1;12945:4:0;12662:292;;;;;:::o;19936:235::-;20002:7;20035;;20024;:18;;20016:79;;;;-1:-1:-1;;;20016:79:0;;6988:2:1;20016:79:0;;;6970:21:1;7027:2;7007:18;;;7000:30;7066:34;7046:18;;;7039:62;-1:-1:-1;;;7117:18:1;;;7110:46;7173:19;;20016:79:0;6786:412:1;20016:79:0;20100:19;20123:10;:8;:10::i;:::-;20100:33;-1:-1:-1;20145:21:0;20100:33;20145:7;:21;:::i;:::-;20138:28;19936:235;-1:-1:-1;;;19936:235:0:o;14016:122::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14069:16:::1;:24:::0;;-1:-1:-1;;14069:24:0::1;::::0;;13789:15;14098:23:::1;:35:::0;14016:122::o;12957:202::-;6648:10;13047:4;13087:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13087:34:0;;;;;;;;;;13047:4;;13057:81;;13079:7;;13087:50;;13126:10;13087:38;:50::i;20174:476::-;20267:7;8302:22;20289:7;:18;;20281:68;;;;-1:-1:-1;;;20281:68:0;;7662:2:1;20281:68:0;;;7644:21:1;7701:2;7681:18;;;7674:30;7740:34;7720:18;;;7713:62;-1:-1:-1;;;7791:18:1;;;7784:35;7836:19;;20281:68:0;7460:401:1;20281:68:0;20354:19;20376:10;:8;:10::i;:::-;20354:32;-1:-1:-1;20391:15:0;20410:21;20354:32;20410:7;:21;:::i;:::-;20391:40;;20441:17;20436:210;;20473:7;-1:-1:-1;20466:14:0;;-1:-1:-1;20466:14:0;20436:210;20532:9;;20501:17;;20550:11;;20544:3;;20522:19;;20532:9;;;;;20522:7;:19;:::i;:::-;:25;;;;:::i;:::-;:39;;;;:::i;:::-;20501:60;-1:-1:-1;20567:23:0;20593:19;20501:60;20593:7;:19;:::i;:::-;20567:45;-1:-1:-1;20618:22:0;;-1:-1:-1;;;;20618:22:0;18304:208;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18377:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;18369:60;;;::::0;-1:-1:-1;;;18369:60:0;;8241:2:1;18369:60:0::1;::::0;::::1;8223:21:1::0;8280:2;8260:18;;;8253:30;8319;8299:18;;;8292:58;8367:18;;18369:60:0::1;8039:352:1::0;18369:60:0::1;-1:-1:-1::0;;;;;18434:19:0;::::1;18456:5;18434:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;18434:27:0::1;::::0;;18471:36;18456:5;;18434:19;18471:36:::1;::::0;18456:5;;18471:36:::1;18304:208:::0;:::o;18515:309::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18599:1:::1;18575:21;:25;18567:82;;;::::0;-1:-1:-1;;;18567:82:0;;8598:2:1;18567:82:0::1;::::0;::::1;8580:21:1::0;8637:2;8617:18;;;8610:30;8676:34;8656:18;;;8649:62;-1:-1:-1;;;8727:18:1;;;8720:42;8779:19;;18567:82:0::1;8396:408:1::0;18567:82:0::1;18677:21;18660:14;18729:7;7220::::0;7241:6;-1:-1:-1;;;;;7241:6:0;;7182:70;18729:7:::1;-1:-1:-1::0;;;;;18721:21:0::1;18751:6;18721:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18703:59;;;18771:7;18767:53;;;18790:24;::::0;1895:25:1;;;18790:24:0::1;::::0;1883:2:1;1868:18;18790:24:0::1;;;;;;;;18767:53;18562:262;;18515:309::o:0;19182:196::-;-1:-1:-1;;;;;19266:33:0;;19248:7;19266:33;;;:24;:33;;;;;;;;19262:62;;;-1:-1:-1;;;;;;19308:16:0;;;;;:7;:16;;;;;;;19182:196::o;19262:62::-;-1:-1:-1;;;;;19356:16:0;;;;;;:7;:16;;;;;;19336:37;;:19;:37::i;7366:133::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;7467:1:::1;7451:6:::0;;7430:40:::1;::::0;-1:-1:-1;;;;;7451:6:0;;::::1;::::0;7430:40:::1;::::0;7467:1;;7430:40:::1;7492:1;7475:19:::0;;-1:-1:-1;;;;;;7475:19:0::1;::::0;;7366:133::o;16252:326::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;16383:92:::1;16407:5;16414:19;16435:20;16457:17;16383:23;:92::i;:::-;16485:88;::::0;-1:-1:-1;;;9221:28:1;;9274:2;9265:12;16485:88:0::1;;::::0;;;;;::::1;::::0;;4410:4:1;4398:17;;;4380:36;;4452:17;;;4447:2;4432:18;;4425:45;4506:17;;4486:18;;;4479:45;16485:88:0;;;;::::1;::::0;;;;;4368:2:1;16485:88:0;;::::1;16252:326:::0;;;:::o;17978:323::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18050:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;18049:20;18041:65;;;::::0;-1:-1:-1;;;18041:65:0;;9490:2:1;18041:65:0::1;::::0;::::1;9472:21:1::0;;;9509:18;;;9502:30;9568:34;9548:18;;;9541:62;9620:18;;18041:65:0::1;9288:356:1::0;18041:65:0::1;9376:6;18138:16;;18120:15;:34;;;;:::i;:::-;18119:56;18111:109;;;::::0;-1:-1:-1;;;18111:109:0;;9851:2:1;18111:109:0::1;::::0;::::1;9833:21:1::0;9890:2;9870:18;;;9863:30;9929:34;9909:18;;;9902:62;-1:-1:-1;;;9980:18:1;;;9973:38;10028:19;;18111:109:0::1;9649:404:1::0;18111:109:0::1;-1:-1:-1::0;;;;;18225:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;18225:26:0::1;18247:4;18225:26:::0;;::::1;::::0;;;18261:35;;18247:4;;18225:19;18261:35:::1;::::0;::::1;17978:323:::0;:::o;14928:333::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15032:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;15024:116:::1;;;;-1:-1:-1::0;;;15024:116:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15145:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;15145:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15209:47;;775:41:1;;;15209:47:0::1;::::0;748:18:1;15209:47:0::1;635:187:1::0;13162:253:0;13257:4;13268:126;6648:10;13290:7;13298:95;13337:15;13298:95;;;;;;;;;;;;;;;;;6648:10;13298:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13298:34:0;;;;;;;;;;;;:38;:95::i;12356:154::-;12436:4;12447:42;6648:10;12471:9;12482:6;12447:9;:42::i;17670:302::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;17768:23:::1;;17756:8;:35:::0;17748:105:::1;;;::::0;-1:-1:-1;;;17748:105:0;;10260:2:1;17748:105:0::1;::::0;::::1;10242:21:1::0;10299:2;10279:18;;;10272:30;10338:34;10318:18;;;10311:62;10409:27;10389:18;;;10382:55;10454:19;;17748:105:0::1;10058:421:1::0;17748:105:0::1;17904:23;::::0;17863:65:::1;::::0;17894:8;;17863:65:::1;::::0;;;::::1;17933:23;:34:::0;17670:302::o;14646:279::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14735:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;14727:100:::1;;;;-1:-1:-1::0;;;14727:100:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14832:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;14832:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14880:40;;775:41:1;;;14880:40:0::1;::::0;748:18:1;14880:40:0::1;635:187:1::0;14441:202:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14530:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;14530:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14588:50;;775:41:1;;;14588:50:0::1;::::0;748:18:1;14588:50:0::1;635:187:1::0;15264:650:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;15368:15:::1;::::0;-1:-1:-1;;;;;15368:37:0;;::::1;:15:::0;::::1;:37;15365:266;;-1:-1:-1::0;;;;;15430:32:0;::::1;15422:82;;;::::0;-1:-1:-1;;;15422:82:0;;10686:2:1;15422:82:0::1;::::0;::::1;10668:21:1::0;10725:2;10705:18;;;10698:30;10764:34;10744:18;;;10737:62;-1:-1:-1;;;10815:18:1;;;10808:35;10860:19;;15422:82:0::1;10484:401:1::0;15422:82:0::1;15567:15;::::0;15515:68:::1;::::0;-1:-1:-1;;;11092:30:1;;-1:-1:-1;;;;;15567:15:0;;::::1;::::0;15515:68;::::1;::::0;11147:2:1;11138:12;15515:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;15589:15;:36:::0;;-1:-1:-1;;;;;;15589:36:0::1;-1:-1:-1::0;;;;;15589:36:0;::::1;;::::0;;15365:266:::1;15638:16;::::0;-1:-1:-1;;;;;15638:39:0;;::::1;:16:::0;::::1;:39;15635:275;;-1:-1:-1::0;;;;;15702:33:0;::::1;15694:84;;;::::0;-1:-1:-1;;;15694:84:0;;11363:2:1;15694:84:0::1;::::0;::::1;11345:21:1::0;11402:2;11382:18;;;11375:30;11441:34;11421:18;;;11414:62;-1:-1:-1;;;11492:18:1;;;11485:36;11538:19;;15694:84:0::1;11161:402:1::0;15694:84:0::1;15843:16;::::0;15789:71:::1;::::0;-1:-1:-1;;;11770:31:1;;-1:-1:-1;;;;;15843:16:0;;::::1;::::0;15789:71;::::1;::::0;11826:2:1;11817:12;15789:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;15866:16;:38:::0;;-1:-1:-1;;;;;15866:38:0;::::1;-1:-1:-1::0;;;;;;15866:38:0;;::::1;;::::0;;15264:650;;:::o;15935:314::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;16062:88:::1;16085:5;16092:18;16112:19;16133:16;16062:22;:88::i;:::-;16160:84;::::0;-1:-1:-1;;;12042:27:1;;12094:2;12085:12;16160:84:0::1;11840:263:1::0;7504:223:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7587:22:0;::::1;7579:73;;;::::0;-1:-1:-1;;;7579:73:0;;12310:2:1;7579:73:0::1;::::0;::::1;12292:21:1::0;12349:2;12329:18;;;12322:30;12388:34;12368:18;;;12361:62;-1:-1:-1;;;12439:18:1;;;12432:36;12485:19;;7579:73:0::1;12108:402:1::0;7579:73:0::1;7683:6;::::0;;7662:38:::1;::::0;-1:-1:-1;;;;;7662:38:0;;::::1;::::0;7683:6;::::1;::::0;7662:38:::1;::::0;::::1;7705:6;:17:::0;;-1:-1:-1;;;;;;7705:17:0::1;-1:-1:-1::0;;;;;7705:17:0;;;::::1;::::0;;;::::1;::::0;;7504:223::o;2663:123::-;2721:7;2742:39;2746:1;2749;2742:39;;;;;;;;;;;;;;;;;:3;:39::i;13418:306::-;-1:-1:-1;;;;;13503:19:0;;13495:68;;;;-1:-1:-1;;;13495:68:0;;12717:2:1;13495:68:0;;;12699:21:1;12756:2;12736:18;;;12729:30;12795:34;12775:18;;;12768:62;-1:-1:-1;;;12846:18:1;;;12839:34;12890:19;;13495:68:0;12515:400:1;13495:68:0;-1:-1:-1;;;;;13576:21:0;;13568:68;;;;-1:-1:-1;;;13568:68:0;;13122:2:1;13568:68:0;;;13104:21:1;13161:2;13141:18;;;13134:30;13200:34;13180:18;;;13173:62;-1:-1:-1;;;13251:18:1;;;13244:32;13293:19;;13568:68:0;12920:398:1;13568:68:0;-1:-1:-1;;;;;13641:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13687:32;;1895:25:1;;;13687:32:0;;1868:18:1;13687:32:0;;;;;;;13418:306;;;:::o;20665:1497::-;-1:-1:-1;;;;;20758:18:0;;20750:68;;;;-1:-1:-1;;;20750:68:0;;13525:2:1;20750:68:0;;;13507:21:1;13564:2;13544:18;;;13537:30;13603:34;13583:18;;;13576:62;-1:-1:-1;;;13654:18:1;;;13647:35;13699:19;;20750:68:0;13323:401:1;20750:68:0;-1:-1:-1;;;;;20831:16:0;;20823:64;;;;-1:-1:-1;;;20823:64:0;;13931:2:1;20823:64:0;;;13913:21:1;13970:2;13950:18;;;13943:30;14009:34;13989:18;;;13982:62;-1:-1:-1;;;14060:18:1;;;14053:33;14103:19;;20823:64:0;13729:399:1;20823:64:0;20909:1;20900:6;:10;20892:64;;;;-1:-1:-1;;;20892:64:0;;14335:2:1;20892:64:0;;;14317:21:1;14374:2;14354:18;;;14347:30;14413:34;14393:18;;;14386:62;-1:-1:-1;;;14464:18:1;;;14457:39;14513:19;;20892:64:0;14133:405:1;20892:64:0;20979:15;20989:4;20979:9;:15::i;:::-;20969:6;:25;;20961:77;;;;-1:-1:-1;;;20961:77:0;;14745:2:1;20961:77:0;;;14727:21:1;14784:2;14764:18;;;14757:30;14823:34;14803:18;;;14796:62;-1:-1:-1;;;14874:18:1;;;14867:37;14921:19;;20961:77:0;14543:403:1;20961:77:0;-1:-1:-1;;;;;21064:31:0;;;21045:16;21064:31;;;:25;:31;;;;;;;;;21118:29;;;;;;;;;21158:35;;;:29;:35;;;;;;21064:31;;;;;21118:29;;;;21158:35;21157:36;:74;;;;-1:-1:-1;;;;;;21198:33:0;;;;;;:29;:33;;;;;;;;21197:34;21157:74;21154:502;;;21247:16;;;;21239:65;;;;-1:-1:-1;;;21239:65:0;;15153:2:1;21239:65:0;;;15135:21:1;15192:2;15172:18;;;15165:30;15231:34;15211:18;;;15204:62;-1:-1:-1;;;15282:18:1;;;15275:34;15326:19;;21239:65:0;14951:400:1;21239:65:0;-1:-1:-1;;;;;21328:14:0;;;;;;:10;:14;;;;;;;;21327:15;21319:52;;;;-1:-1:-1;;;21319:52:0;;15558:2:1;21319:52:0;;;15540:21:1;15597:2;15577:18;;;15570:30;-1:-1:-1;;;15616:18:1;;;15609:54;15680:18;;21319:52:0;15356:348:1;21319:52:0;-1:-1:-1;;;;;21386:16:0;;;;;;:10;:16;;;;;;;;21385:17;21377:54;;;;-1:-1:-1;;;21377:54:0;;15558:2:1;21377:54:0;;;15540:21:1;15597:2;15577:18;;;15570:30;-1:-1:-1;;;15616:18:1;;;15609:54;15680:18;;21377:54:0;15356:348:1;21377:54:0;-1:-1:-1;;;;;21451:38:0;;;;;;:34;:38;;;;;;;;21450:39;:84;;;;-1:-1:-1;;;;;;21494:40:0;;;;;;:34;:40;;;;;;;;21493:41;21450:84;21446:205;;;21573:11;;21563:6;:21;;21555:80;;;;-1:-1:-1;;;21555:80:0;;15911:2:1;21555:80:0;;;15893:21:1;15950:2;15930:18;;;15923:30;15989:34;15969:18;;;15962:62;-1:-1:-1;;;16040:18:1;;;16033:44;16094:19;;21555:80:0;15709:410:1;21555:80:0;21662:37;21675:11;21688:10;21662:12;:37::i;:::-;21704:12;21747:23;;21719:24;21737:4;21719:9;:24::i;:::-;21786:16;;21719:51;-1:-1:-1;21719:51:0;;-1:-1:-1;21786:16:0;;:31;;;;;21810:7;21786:31;:49;;;;-1:-1:-1;21826:9:0;;;;21825:10;21786:49;:70;;;;-1:-1:-1;21843:9:0;;;;;;;:13;;21786:70;:107;;;;-1:-1:-1;;;;;;21864:29:0;;;;;;:25;:29;;;;;;;;21786:107;21777:196;;;21905:9;:16;;-1:-1:-1;;21905:16:0;21917:4;21905:16;;;21927:17;:15;:17::i;:::-;21950:9;:17;;-1:-1:-1;;21950:17:0;;;21777:196;21995:9;;21979:12;;21995:9;;21994:10;:30;;;;-1:-1:-1;22008:16:0;;;;21994:30;-1:-1:-1;;;;;22034:24:0;;;;;;:18;:24;;;;;;21979:45;;-1:-1:-1;22034:24:0;;;:50;;-1:-1:-1;;;;;;22062:22:0;;;;;;:18;:22;;;;;;;;22034:50;22031:81;;;-1:-1:-1;22101:5:0;22031:81;22116:41;22131:4;22137:2;22141:6;22149:7;22116:14;:41::i;:::-;20745:1417;;;;20665:1497;;;:::o;2071:171::-;2157:7;2187:12;2179:6;;;;2171:29;;;;-1:-1:-1;;;2171:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2205:9:0;2217:5;2221:1;2217;:5;:::i;:::-;2205:17;2071:171;-1:-1:-1;;;;;2071:171:0:o;23836:149::-;23878:7;23893:15;23910;23929:19;:17;:19::i;:::-;23892:56;;-1:-1:-1;23892:56:0;-1:-1:-1;23960:20:0;23892:56;;23960:11;:20::i;:::-;23953:27;;;;23836:149;:::o;1774:160::-;1832:7;;1858:5;1862:1;1858;:5;:::i;:::-;1846:17;;1881:1;1876;:6;;1868:46;;;;-1:-1:-1;;;1868:46:0;;16459:2:1;1868:46:0;;;16441:21:1;16498:2;16478:18;;;16471:30;16537:29;16517:18;;;16510:57;16584:18;;1868:46:0;16257:351:1;25872:850:0;26049:22;;;;:45;;;;:22;;;;;:45;26045:222;;26107:104;;-1:-1:-1;;;16815:33:1;;16873:2;16864:12;26107:104:0;;;;;;;;26150:22;;;;26196:14;;26107:104;;26150:22;;;;;;;;26107:104;;;;-1:-1:-1;;;;;;;;;;;26107:104:0;;;26196:14;;;26107:104;:::i;:::-;;;;;;;;26217:22;;;:44;;-1:-1:-1;;26217:44:0;;;;;;;;;26045:222;26281:23;;;;:47;;;;:23;;;;;:47;26277:229;;26341:107;;-1:-1:-1;;;17303:34:1;;17362:2;17353:12;26341:107:0;;;;;;;;26385:23;;;;26433:14;;26341:107;;26385:23;;;;;;;;26341:107;;;;-1:-1:-1;;;;;;;;;;;26341:107:0;;;26433:14;;;26341:107;:::i;:::-;;;;;;;;26454:23;;;:46;;-1:-1:-1;;26454:46:0;;;;;;;;;26277:229;26514:20;;;;:41;;;;-1:-1:-1;;;26514:20:0;;;;:41;26510:208;;26568:98;;-1:-1:-1;;;17578:31:1;;17634:2;17625:12;26568:98:0;;;;;;;;26609:20;;;;26651:14;;26568:98;;26609:20;-1:-1:-1;;;26609:20:0;;;;;;26568:98;;;;-1:-1:-1;;;;;;;;;;;26568:98:0;;;26651:14;;;26568:98;:::i;:::-;;;;;;;;26672:20;;;:40;;-1:-1:-1;;26672:40:0;-1:-1:-1;;;26672:40:0;;;;;;;26510:208;25872:850;;;;:::o;26725:825::-;26898:21;;;;:43;;;;:21;;:43;26894:215;;26954:101;;-1:-1:-1;;;17850:32:1;;17907:2;17898:12;26954:101:0;;;;;;;;26996:21;;;;27040:14;;26954:101;;26996:21;;;;;26954:101;;;;-1:-1:-1;;;;;;;;;;;26954:101:0;;;27040:14;;;26954:101;:::i;:::-;;;;;;;;27061:21;;;:42;;-1:-1:-1;;27061:42:0;;;;;;;26894:215;27123:22;;;;:45;;;;:22;;;;;:45;27119:222;;27181:104;;-1:-1:-1;;;18123:33:1;;18181:2;18172:12;27181:104:0;;;;;;;;27224:22;;;;27270:14;;27181:104;;27224:22;;;;;;;;27181:104;;;;-1:-1:-1;;;;;;;;;;;27181:104:0;;;27270:14;;;27181:104;:::i;:::-;;;;;;;;27291:22;;;:44;;-1:-1:-1;;27291:44:0;;;;;;;;;27119:222;27349:19;;;;:39;;;;:19;;;;;:39;27345:201;;27401:95;;-1:-1:-1;;;18397:30:1;;18452:2;18443:12;27401:95:0;;;;;;;;27441:19;;;;27481:14;;27401:95;;27441:19;;;;;;;;27401:95;;;;-1:-1:-1;;;;;;;;;;;27401:95:0;;;27481:14;;;27401:95;:::i;:::-;;;;;;;;27502:19;;;:38;;;;;;;-1:-1:-1;;27502:38:0;;;;;;26725:825;;;;:::o;2791:251::-;2877:7;2906:12;2899:5;2891:28;;;;-1:-1:-1;;;2891:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2924:9:0;2936:5;2940:1;2936;:5;:::i;24758:1111::-;24828:13;:17;;-1:-1:-1;;24873:15:0;;;24895:323;;;;24970:1;24947:18;;24932:12;:33;;;;:::i;:::-;24931:40;24927:286;;24980:13;:19;;-1:-1:-1;;24980:19:0;24996:3;24980:19;;;24927:286;;;25060:23;;25044:13;:39;;25176:21;;;25060:23;25176:21;;;25119:24;25162:35;;;-1:-1:-1;;25119:24:0;;;;;25060:23;25102:41;-1:-1:-1;;25102:41:0;;;25060:23;;;;25102:41;;;;;;;;25162:35;;;;;;;24927:286;25226:10;25222:506;;;25260:24;;25244:13;:40;;25260:24;;;;;;;;-1:-1:-1;;25290:42:0;;;;;;;25307:25;;;;;25290:42;;;;;-1:-1:-1;;25338:36:0;-1:-1:-1;;;25352:22:0;;;;25338:36;;;;;;;;25413:16;;25433:5;;25395:34;;:15;:34;:::i;:::-;:43;25391:332;;25459:13;:17;;-1:-1:-1;;25495:16:0;;;;;25552;;25572:4;;25534:34;;:15;:34;:::i;:::-;:42;25530:178;;25601:14;:19;;-1:-1:-1;;25601:19:0;;;;;25530:178;;;25669:14;:19;;-1:-1:-1;;25669:19:0;;;;;25530:178;25777:11;;;;;;;;;25744:30;;25777:11;25760:14;;;;;25744:13;:30;:::i;:::-;:44;;;;:::i;:::-;25732:9;:56;;-1:-1:-1;;25732:56:0;;;;;;;;;;;;;;;;25798:66;;;25810:13;;;;;;;;;;18890:36:1;;25732:56:0;25825:14;;;;18957:2:1;18942:18;;18935:45;25841:11:0;;;;;18996:18:1;;;18989:45;;;;25854:9:0;;;;;;19065:2:1;19050:18;;19043:45;25798:66:0;;18877:3:1;18862:19;25798:66:0;18675:419:1;27553:1241:0;27593:23;27619:24;27637:4;27619:9;:24::i;:::-;27726:9;;27593:50;;-1:-1:-1;27676:21:0;;27726:9;;;;;;;27772:13;;;;27726:9;27823:14;;;;;27866:11;;;;27648:25;27866:11;27726:9;27910:31;27772:13;27593:50;27910:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;27884:73;-1:-1:-1;27962:26:0;27991:33;27884:73;27991:15;:33;:::i;:::-;27962:62;;28031:37;28049:18;28031:17;:37::i;:::-;28075:27;28105:41;28129:17;28105:21;:41;:::i;:::-;28075:71;-1:-1:-1;28151:19:0;28216:15;28190:21;28210:1;28190:17;:21;:::i;:::-;28173:39;;:13;:39;:::i;:::-;:59;;;;:::i;:::-;28151:81;;;;28237:26;28322:1;28308:11;28288:17;28266:39;;:19;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:57;;;;:::i;:::-;28237:86;-1:-1:-1;28328:27:0;28358:40;28237:86;28358:19;:40;:::i;:::-;28413:16;;28405:55;;28328:70;;-1:-1:-1;;;;;;28413:16:0;;28405:55;;;;;28328:70;;28413:16;28405:55;28413:16;28405:55;28328:70;28413:16;28405:55;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28471:19:0;;28467:169;;28498:50;28512:15;28529:18;28498:13;:50::i;:::-;28559:71;;;19671:25:1;;;19727:2;19712:18;;19705:34;;;19755:18;;;19748:34;;;28559:71:0;;19659:2:1;19644:18;28559:71:0;;;;;;;28467:169;-1:-1:-1;;28640:9:0;:25;;;28760:29;;;;;-1:-1:-1;;28720:35:0;;;28640:25;28720:35;-1:-1:-1;;28640:25:0;;;;;28720:35;;;;-1:-1:-1;;28720:35:0;;;;;;;28676:33;;;;28720:35;;;;;;;;28760:29;;;;;;;;;;;-1:-1:-1;;;;;;27553:1241:0:o;22165:762::-;22268:23;22292:12;22306:14;22324:29;22336:7;22345;22324:11;:29::i;:::-;22267:86;;;;;;22359:15;22376:23;22401:12;22415:14;22433:46;22445:7;22454:4;22460:6;22468:10;:8;:10::i;:::-;22433:11;:46::i;:::-;-1:-1:-1;;;;;22490:32:0;;;;;;:24;:32;;;;;;22358:121;;-1:-1:-1;22358:121:0;;-1:-1:-1;22358:121:0;-1:-1:-1;22358:121:0;-1:-1:-1;22490:32:0;;22486:93;;;-1:-1:-1;;;;;22548:15:0;;;;;;:7;:15;;;;;;:25;;22566:7;;22548:25;:::i;:::-;-1:-1:-1;;;;;22530:15:0;;;;;;:7;:15;;;;;:43;22486:93;-1:-1:-1;;;;;22587:35:0;;;;;;:24;:35;;;;;;;;22583:110;;;-1:-1:-1;;;;;22651:18:0;;;;;;:7;:18;;;;;;:36;;22672:15;;22651:36;:::i;:::-;-1:-1:-1;;;;;22630:18:0;;;;;;:7;:18;;;;;:57;22583:110;-1:-1:-1;;;;;22715:15:0;;;;;;:7;:15;;;;;;:25;;22733:7;;22715:25;:::i;:::-;-1:-1:-1;;;;;22697:15:0;;;;;;;:7;:15;;;;;;:43;;;;22766:18;;;;;;;:36;;22787:15;;22766:36;:::i;:::-;-1:-1:-1;;;;;22745:18:0;;;;;;:7;:18;;;;;:57;22807:33;22825:6;22833;22807:17;:33::i;:::-;22845:23;22857:4;22863;22845:11;:23::i;:::-;22895:9;-1:-1:-1;;;;;22878:44:0;22887:6;-1:-1:-1;;;;;22878:44:0;;22906:15;22878:44;;;;1895:25:1;;1883:2;1868:18;;1749:177;22878:44:0;;;;;;;;22262:665;;;;;;;22165:762;;;;:::o;23988:562::-;24080:7;;24039;;;;8302:22;24039:7;24122:331;24146:22;:29;24142:33;;24122:331;;;24235:7;24198;:34;24206:22;24229:1;24206:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24206:25:0;24198:34;;;;;;;;;;;;;:44;;:97;;;24288:7;24251;:34;24259:22;24282:1;24259:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24259:25:0;24251:34;;;;;;;;;;;;;:44;24198:97;24188:139;;;-1:-1:-1;;24310:7:0;;;8302:22;;-1:-1:-1;23988:562:0;-1:-1:-1;;23988:562:0:o;24188:139::-;24353:7;:34;24361:22;24384:1;24361:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24361:25:0;24353:34;;;;;;;;;;;;;24343:44;;:7;:44;:::i;:::-;24333:54;;24413:7;:34;24421:22;24444:1;24421:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24421:25:0;24413:34;;;;;;;;;;;;;24403:44;;:7;:44;:::i;:::-;24393:54;-1:-1:-1;24177:3:0;;;;:::i;:::-;;;;24122:331;;;;8302:22;24471:7;;:17;;;;:::i;:::-;24461:7;:27;24457:58;;;-1:-1:-1;;24498:7:0;;;8302:22;;-1:-1:-1;23988:562:0;-1:-1:-1;23988:562:0:o;24457:58::-;24528:7;;24537;;-1:-1:-1;23988:562:0;-1:-1:-1;23988:562:0:o;28797:411::-;28882:16;;;28896:1;28882:16;;;;;;;;28858:21;;28882:16;;;;;;;;;;-1:-1:-1;28882:16:0;28858:40;;28921:4;28903;28908:1;28903:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28903:23:0;;;:7;;;;;;;;;;:23;;;;28941:15;;:22;;;-1:-1:-1;;;28941:22:0;;;;:15;;;;;:20;;:22;;;;;28903:7;;28941:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28931:4;28936:1;28931:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28931:32:0;;;:7;;;;;;;;;:32;29000:15;;28968:62;;28985:4;;29000:15;29018:11;28968:8;:62::i;:::-;29035:15;;:168;;-1:-1:-1;;;29035:168:0;;-1:-1:-1;;;;;29035:15:0;;;;:66;;:168;;29106:11;;29035:15;;29156:4;;29173;;29183:15;;29035:168;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28853:355;28797:411;:::o;29211:345::-;29319:15;;29287:62;;29304:4;;-1:-1:-1;;;;;29319:15:0;29337:11;29287:8;:62::i;:::-;29354:15;;29508;;29354:194;;-1:-1:-1;;;29354:194:0;;29416:4;29354:194;;;21507:34:1;21557:18;;;21550:34;;;29354:15:0;21600:18:1;;;21593:34;;;21643:18;;;21636:34;-1:-1:-1;;;;;29508:15:0;;;21686:19:1;;;21679:44;29528:15:0;21739:19:1;;;21732:35;29354:15:0;;;:31;;29393:9;;21441:19:1;;29354:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29211:345;;:::o;23038:390::-;23112:7;23120;23128;23146;23141:283;;-1:-1:-1;23169:7:0;;-1:-1:-1;23178:1:0;;-1:-1:-1;23178:1:0;23161:22;;23141:283;23229:11;;23204:12;;23243:3;;23219:21;;23229:11;;;;;23219:7;:21;:::i;:::-;:27;;;;:::i;:::-;23296:14;;23204:42;;-1:-1:-1;23252:14:0;;23314:3;;23280:30;;23296:14;;;;;;;23280:13;:30;:::i;:::-;23269:42;;;;:7;:42;:::i;:::-;:48;;;;:::i;:::-;23252:65;-1:-1:-1;23323:23:0;23360:13;23252:65;23360:4;:13;:::i;:::-;23349:25;;:7;:25;:::i;:::-;23323:51;-1:-1:-1;23405:4:0;;-1:-1:-1;23411:6:0;-1:-1:-1;23380:38:0;;-1:-1:-1;23380:38:0;23141:283;23038:390;;;;;:::o;23431:402::-;23560:7;;;;;23619:21;23629:11;23619:7;:21;:::i;:::-;23601:39;-1:-1:-1;23645:12:0;23660:18;23667:11;23660:4;:18;:::i;:::-;23645:33;-1:-1:-1;23683:14:0;23700:20;23709:11;23700:6;:20;:::i;:::-;23683:37;-1:-1:-1;23725:23:0;23762:13;23683:37;23762:4;:13;:::i;:::-;23751:25;;:7;:25;:::i;:::-;23789:7;;;;-1:-1:-1;23815:4:0;;-1:-1:-1;23815:4:0;-1:-1:-1;23431:402:0;;-1:-1:-1;;;;;;23431:402:0:o;24553:202::-;24662:4;24629:39;;;;:24;:39;;;;;;;;24625:89;;;24692:4;24676:22;;;;:7;:22;;;;;:32;;24702:6;;24676:22;:32;;24702:6;;24676:32;:::i;:::-;;;;-1:-1:-1;;24625:89:0;24734:4;24718:22;;;;:7;:22;;;;;:32;;24744:6;;24718:22;:32;;24744:6;;24718:32;:::i;:::-;;;;-1:-1:-1;;;;24553:202:0:o;22930:105::-;23003:4;22992:7;;:15;;;;;;;:::i;:::-;;;;;;;;23026:4;23012:10;;:18;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:160::-;215:20;;271:13;;264:21;254:32;;244:60;;300:1;297;290:12;244:60;150:160;;;:::o;315:315::-;380:6;388;441:2;429:9;420:7;416:23;412:32;409:52;;;457:1;454;447:12;409:52;496:9;483:23;515:31;540:5;515:31;:::i;:::-;565:5;-1:-1:-1;589:35:1;620:2;605:18;;589:35;:::i;:::-;579:45;;315:315;;;;;:::o;827:597::-;939:4;968:2;997;986:9;979:21;1029:6;1023:13;1072:6;1067:2;1056:9;1052:18;1045:34;1097:1;1107:140;1121:6;1118:1;1115:13;1107:140;;;1216:14;;;1212:23;;1206:30;1182:17;;;1201:2;1178:26;1171:66;1136:10;;1107:140;;;1265:6;1262:1;1259:13;1256:91;;;1335:1;1330:2;1321:6;1310:9;1306:22;1302:31;1295:42;1256:91;-1:-1:-1;1408:2:1;1387:15;-1:-1:-1;;1383:29:1;1368:45;;;;1415:2;1364:54;;827:597;-1:-1:-1;;;827:597:1:o;1429:315::-;1497:6;1505;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;1613:9;1600:23;1632:31;1657:5;1632:31;:::i;:::-;1682:5;1734:2;1719:18;;;;1706:32;;-1:-1:-1;;;1429:315:1:o;2154:180::-;2213:6;2266:2;2254:9;2245:7;2241:23;2237:32;2234:52;;;2282:1;2279;2272:12;2234:52;-1:-1:-1;2305:23:1;;2154:180;-1:-1:-1;2154:180:1:o;2339:456::-;2416:6;2424;2432;2485:2;2473:9;2464:7;2460:23;2456:32;2453:52;;;2501:1;2498;2491:12;2453:52;2540:9;2527:23;2559:31;2584:5;2559:31;:::i;:::-;2609:5;-1:-1:-1;2666:2:1;2651:18;;2638:32;2679:33;2638:32;2679:33;:::i;:::-;2339:456;;2731:7;;-1:-1:-1;;;2785:2:1;2770:18;;;;2757:32;;2339:456::o;2989:248::-;3054:6;3062;3115:2;3103:9;3094:7;3090:23;3086:32;3083:52;;;3131:1;3128;3121:12;3083:52;3167:9;3154:23;3144:33;;3196:35;3227:2;3216:9;3212:18;3196:35;:::i;3450:247::-;3509:6;3562:2;3550:9;3541:7;3537:23;3533:32;3530:52;;;3578:1;3575;3568:12;3530:52;3617:9;3604:23;3636:31;3661:5;3636:31;:::i;3702:156::-;3768:20;;3828:4;3817:16;;3807:27;;3797:55;;3848:1;3845;3838:12;3863:322;3934:6;3942;3950;4003:2;3991:9;3982:7;3978:23;3974:32;3971:52;;;4019:1;4016;4009:12;3971:52;4042:27;4059:9;4042:27;:::i;:::-;4032:37;;4088:36;4120:2;4109:9;4105:18;4088:36;:::i;:::-;4078:46;;4143:36;4175:2;4164:9;4160:18;4143:36;:::i;:::-;4133:46;;3863:322;;;;;:::o;4535:388::-;4603:6;4611;4664:2;4652:9;4643:7;4639:23;4635:32;4632:52;;;4680:1;4677;4670:12;4632:52;4719:9;4706:23;4738:31;4763:5;4738:31;:::i;:::-;4788:5;-1:-1:-1;4845:2:1;4830:18;;4817:32;4858:33;4817:32;4858:33;:::i;:::-;4910:7;4900:17;;;4535:388;;;;;:::o;4928:356::-;5130:2;5112:21;;;5149:18;;;5142:30;5208:34;5203:2;5188:18;;5181:62;5275:2;5260:18;;4928:356::o;5289:412::-;5491:2;5473:21;;;5530:2;5510:18;;;5503:30;5569:34;5564:2;5549:18;;5542:62;-1:-1:-1;;;5635:2:1;5620:18;;5613:46;5691:3;5676:19;;5289:412::o;5706:127::-;5767:10;5762:3;5758:20;5755:1;5748:31;5798:4;5795:1;5788:15;5822:4;5819:1;5812:15;5838:127;5899:10;5894:3;5890:20;5887:1;5880:31;5930:4;5927:1;5920:15;5954:4;5951:1;5944:15;5970:125;6010:4;6038:1;6035;6032:8;6029:34;;;6043:18;;:::i;:::-;-1:-1:-1;6080:9:1;;5970:125::o;6100:127::-;6161:10;6156:3;6152:20;6149:1;6142:31;6192:4;6189:1;6182:15;6216:4;6213:1;6206:15;6232:135;6271:3;6292:17;;;6289:43;;6312:18;;:::i;:::-;-1:-1:-1;6359:1:1;6348:13;;6232:135::o;7203:127::-;7264:10;7259:3;7255:20;7252:1;7245:31;7295:4;7292:1;7285:15;7319:4;7316:1;7309:15;7335:120;7375:1;7401;7391:35;;7406:18;;:::i;:::-;-1:-1:-1;7440:9:1;;7335:120::o;7866:168::-;7906:7;7972:1;7968;7964:6;7960:14;7957:1;7954:21;7949:1;7942:9;7935:17;7931:45;7928:71;;;7979:18;;:::i;:::-;-1:-1:-1;8019:9:1;;7866:168::o;16124:128::-;16164:3;16195:1;16191:6;16188:1;16185:13;16182:39;;;16201:18;;:::i;:::-;-1:-1:-1;16237:9:1;;16124:128::o;16887:209::-;-1:-1:-1;;17051:38:1;;;;17033:57;;17021:2;17006:18;;16887:209::o;18466:204::-;18504:3;18540:4;18537:1;18533:12;18572:4;18569:1;18565:12;18607:3;18601:4;18597:14;18592:3;18589:23;18586:49;;;18615:18;;:::i;:::-;18651:13;;18466:204;-1:-1:-1;;;18466:204:1:o;19099:165::-;19137:1;19171:4;19168:1;19164:12;19195:3;19185:37;;19202:18;;:::i;:::-;19254:3;19247:4;19244:1;19240:12;19236:22;19231:27;;;19099:165;;;;:::o;19269:195::-;19307:4;19344;19341:1;19337:12;19376:4;19373:1;19369:12;19401:3;19396;19393:12;19390:38;;;19408:18;;:::i;:::-;19445:13;;;19269:195;-1:-1:-1;;;19269:195:1:o;19925:251::-;19995:6;20048:2;20036:9;20027:7;20023:23;20019:32;20016:52;;;20064:1;20061;20054:12;20016:52;20096:9;20090:16;20115:31;20140:5;20115:31;:::i;20181:980::-;20443:4;20491:3;20480:9;20476:19;20522:6;20511:9;20504:25;20548:2;20586:6;20581:2;20570:9;20566:18;20559:34;20629:3;20624:2;20613:9;20609:18;20602:31;20653:6;20688;20682:13;20719:6;20711;20704:22;20757:3;20746:9;20742:19;20735:26;;20796:2;20788:6;20784:15;20770:29;;20817:1;20827:195;20841:6;20838:1;20835:13;20827:195;;;20906:13;;-1:-1:-1;;;;;20902:39:1;20890:52;;20997:15;;;;20962:12;;;;20938:1;20856:9;20827:195;;;-1:-1:-1;;;;;;;21078:32:1;;;;21073:2;21058:18;;21051:60;-1:-1:-1;;;21142:3:1;21127:19;21120:35;21039:3;20181:980;-1:-1:-1;;;20181:980:1:o;21778:306::-;21866:6;21874;21882;21935:2;21923:9;21914:7;21910:23;21906:32;21903:52;;;21951:1;21948;21941:12;21903:52;21980:9;21974:16;21964:26;;22030:2;22019:9;22015:18;22009:25;21999:35;;22074:2;22063:9;22059:18;22053:25;22043:35;;21778:306;;;;;:::o
Swarm Source
ipfs://e6ab72041654a0155f3ca1cd1717d715959f325b5374bf96c9ea51f19e764949
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.