Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000,000 KPETS
Holders
1,214
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,203,010,128,963.410321194366776526 KPETSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
KryptoPets
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-21 */ // 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; } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } 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 KryptoPets is IERC20, Ownable { using Address for address; using SafeMath for uint256; IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "Krypto Pets"; string private constant _symbol = "KPETS"; 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 = 1000000000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; bool public isTradingEnabled; uint256 private _tradingPausedTimestamp; // max wallet is 2% of initialSupply uint256 public maxWalletAmount = _tTotal * 200 / 10000; // max tx is 1% of initialSupply uint256 public maxTxAmount = _tTotal * 100 / 10000; bool private _swapping; uint256 public minimumTokensBeforeSwap = 25000000 * (10**18); address private dead = 0x000000000000000000000000000000000000dEaD; address public liquidityWallet; address public devWallet; address public buyBackWallet; address public gamingWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint256 liquidityFeeOnBuy; uint256 liquidityFeeOnSell; uint256 devFeeOnBuy; uint256 devFeeOnSell; uint256 buyBackFeeOnBuy; uint256 buyBackFeeOnSell; uint256 gamingFeeOnBuy; uint256 gamingFeeOnSell; uint256 holdersFeeOnBuy; uint256 holdersFeeOnSell; } // Launch taxes uint256 private _launchTimestamp; uint256 private _launchBlockNumber; // Base taxes CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,100,100,550,550,200,200,150,150,200,200); mapping (address => bool) private _isAllowedToTradeWhenDisabled; mapping (address => bool) private _feeOnSelectedWalletTransfers; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromMaxWalletLimit; mapping (address => bool) private _isExcludedFromMaxTransactionLimit; mapping (address => bool) public automatedMarketMakerPairs; address[] private _excludedFromDividends; mapping (address => bool) private _isExcludedFromDividends; uint256 private _liquidityFee; uint256 private _devFee; uint256 private _buyBackFee; uint256 private _gamingFee; uint256 private _holdersFee; uint256 private _totalFee; event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value); event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress); event WalletChange(string indexed walletIdentifier, address indexed newWallet, address indexed oldWallet); event FeeChange(string indexed identifier, uint256 liquidityFee, uint256 devFee, uint256 buyBackFee, uint256 gamingFee, uint256 holdersFee); event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded); event ExcludeFromDividendsChange(address indexed account, bool isExcluded); event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity); event ClaimETHOverflow(uint256 amount); event FeesApplied(uint256 liquidityFee, uint256 devFee, uint256 buyBackFee, uint256 gamingFee, uint256 holdersFee, uint256 totalFee); constructor() { liquidityWallet = owner(); devWallet = owner(); buyBackWallet = owner(); gamingWallet = owner(); IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Mainnet address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isAllowedToTradeWhenDisabled[owner()] = true; _isAllowedToTradeWhenDisabled[address(this)] = true; excludeFromDividends(address(this), true); excludeFromDividends(address(dead), true); excludeFromDividends(address(_uniswapV2Router), true); excludeFromDividends(address(_uniswapV2Pair), true); _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[address(this)] = 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 activateTrading() external onlyOwner { isTradingEnabled = true; if (_launchTimestamp == 0) { _launchTimestamp = block.timestamp; _launchBlockNumber = block.number; } } function deactivateTrading() external onlyOwner { isTradingEnabled = false; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "KryptoPets: 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, "KryptoPets: Account is already the value of 'excluded'"); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromDividends(address account, bool excluded) public onlyOwner { require(_isExcludedFromDividends[account] != excluded, "KryptoPets: 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 excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxWalletLimit[account] != excluded, "KryptoPets: Account is already the value of 'excluded'"); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxWalletChange(account, excluded); } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxTransactionLimit[account] != excluded, "KryptoPets: Account is already the value of 'excluded'"); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransferChange(account, excluded); } function setWallets(address newLiquidityWallet, address newDevWallet, address newBuyBackWallet, address newGamingWallet) external onlyOwner { if(liquidityWallet != newLiquidityWallet) { require(newLiquidityWallet != address(0), "KryptoPets: The liquidityWallet cannot be 0"); emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } if(devWallet != newDevWallet) { require(newDevWallet != address(0), "KryptoPets: The devWallet cannot be 0"); emit WalletChange('devWallet', newDevWallet, devWallet); devWallet = newDevWallet; } if(buyBackWallet != newBuyBackWallet) { require(newBuyBackWallet != address(0), "KryptoPets: The buyBackWallet cannot be 0"); emit WalletChange('buyBackWallet', newBuyBackWallet, buyBackWallet); buyBackWallet = newBuyBackWallet; } if(gamingWallet != newGamingWallet) { require(newGamingWallet != address(0), "KryptoPets: The gamingWallet cannot be 0"); emit WalletChange('gamingWallet', newGamingWallet, gamingWallet); gamingWallet = newGamingWallet; } } // Base Fees function setBaseFeesOnBuy(uint256 _liquidityFeeOnBuy, uint256 _devFeeOnBuy, uint256 _buyBackFeeOnBuy, uint256 _gamingFeeOnBuy, uint256 _holdersFeeOnBuy) external onlyOwner { _setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _gamingFeeOnBuy, _holdersFeeOnBuy); emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _devFeeOnBuy, _buyBackFeeOnBuy, _gamingFeeOnBuy, _holdersFeeOnBuy); } function setBaseFeesOnSell(uint256 _liquidityFeeOnSell, uint256 _devFeeOnSell, uint256 _buyBackFeeOnSell, uint256 _gamingFeeOnSell, uint256 _holdersFeeOnSell) external onlyOwner { _setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _gamingFeeOnSell, _holdersFeeOnSell); emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _devFeeOnSell, _buyBackFeeOnSell, _gamingFeeOnSell, _holdersFeeOnSell); } function setUniswapRouter(address newAddress) external onlyOwner { require(newAddress != address(uniswapV2Router), "KryptoPets: The router already has that address"); emit UniswapV2RouterChange(newAddress, address(uniswapV2Router)); uniswapV2Router = IRouter(newAddress); } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "KryptoPets: Cannot update minimumTokensBeforeSwap to same value"); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner { require(_feeOnSelectedWalletTransfers[account] != value, "KryptoPets: The selected wallet is already set to the value "); _feeOnSelectedWalletTransfers[account] = value; emit FeeOnSelectedWalletTransfersChange(account, value); } function claimETHOverflow() external onlyOwner { 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 (uint256, uint256, uint256, uint256, uint256){ return (_base.liquidityFeeOnBuy, _base.devFeeOnBuy, _base.buyBackFeeOnBuy, _base.gamingFeeOnBuy, _base.holdersFeeOnBuy); } function getBaseSellFees() external view returns (uint256, uint256, uint256, uint256, uint256){ return (_base.liquidityFeeOnSell, _base.devFeeOnSell, _base.buyBackFeeOnSell, _base.gamingFeeOnSell, _base.holdersFeeOnSell); } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "KryptoPets: 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, "KryptoPets: Amount must be less than supply"); uint256 currentRate = _getRate(); uint256 rAmount = tAmount * currentRate; if (!deductTransferFee) { return rAmount; } else { uint256 rTotalFee = tAmount * _totalFee / 10000 * 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), "KryptoPets: Cannot transfer more than balance"); bool isBuyFromLp = automatedMarketMakerPairs[from]; bool isSelltoLp = automatedMarketMakerPairs[to]; if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "KryptoPets: Trading is currently disabled."); if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxAmount, "KryptoPets: Transfer amount exceeds the maxTxAmount."); } if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "KryptoPets: Expected wallet amount exceeds the maxWalletAmount."); } } _adjustTaxes(isBuyFromLp, isSelltoLp, from, to); 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 / 10000; uint256 tOther = tAmount * (_liquidityFee + _devFee + _buyBackFee + _gamingFee) / 10000; 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, address from, address to) private { _liquidityFee = 0; _devFee = 0; _buyBackFee = 0; _gamingFee = 0; _holdersFee = 0; if (isBuyFromLp) { if ((block.number - _launchBlockNumber) <= 5) { _liquidityFee = 10000; } else { _liquidityFee = _base.liquidityFeeOnBuy; _devFee = _base.devFeeOnBuy; _buyBackFee = _base.buyBackFeeOnBuy; _gamingFee = _base.gamingFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _devFee = _base.devFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _gamingFee = _base.gamingFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) { _liquidityFee = _base.liquidityFeeOnSell; _devFee = _base.devFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _gamingFee = _base.gamingFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } _totalFee = _liquidityFee + _devFee + _buyBackFee + _gamingFee + _holdersFee; emit FeesApplied(_liquidityFee, _devFee, _buyBackFee, _gamingFee, _holdersFee, _totalFee); } function _setCustomSellTaxPeriod(CustomTaxPeriod storage map, uint256 _liquidityFeeOnSell, uint256 _devFeeOnSell, uint256 _buyBackFeeOnSell, uint256 _gamingFeeOnSell, uint256 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.devFeeOnSell != _devFeeOnSell) { emit CustomTaxPeriodChange(_devFeeOnSell, map.devFeeOnSell, 'devFeeOnSell', map.periodName); map.devFeeOnSell = _devFeeOnSell; } if (map.buyBackFeeOnSell != _buyBackFeeOnSell) { emit CustomTaxPeriodChange(_buyBackFeeOnSell, map.buyBackFeeOnSell, 'buyBackFeeOnSell', map.periodName); map.buyBackFeeOnSell = _buyBackFeeOnSell; } if (map.gamingFeeOnSell != _gamingFeeOnSell) { emit CustomTaxPeriodChange(_gamingFeeOnSell, map.gamingFeeOnSell, 'gamingFeeOnSell', map.periodName); map.gamingFeeOnSell = _gamingFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, 'holdersFeeOnSell', map.periodName); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map, uint256 _liquidityFeeOnBuy, uint256 _devFeeOnBuy, uint256 _buyBackFeeOnBuy, uint256 _gamingFeeOnBuy, uint256 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.devFeeOnBuy != _devFeeOnBuy) { emit CustomTaxPeriodChange(_devFeeOnBuy, map.devFeeOnBuy, 'devFeeOnBuy', map.periodName); map.devFeeOnBuy = _devFeeOnBuy; } if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) { emit CustomTaxPeriodChange(_buyBackFeeOnBuy, map.buyBackFeeOnBuy, 'buyBackFeeOnBuy', map.periodName); map.buyBackFeeOnBuy = _buyBackFeeOnBuy; } if (map.gamingFeeOnBuy != _gamingFeeOnBuy) { emit CustomTaxPeriodChange(_gamingFeeOnBuy, map.gamingFeeOnBuy, 'gamingFeeOnBuy', map.periodName); map.gamingFeeOnBuy = _gamingFeeOnBuy; } 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; uint256 totalFeePrior = _totalFee; uint256 holdersFeePrior = _holdersFee; uint256 devFeePrior = _devFee; uint256 buyBackFeePrior = _buyBackFee; uint256 liquidityFeePrior = _liquidityFee; uint256 gamingFeePrior = _gamingFee; uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2; uint256 amountToSwap = contractBalance - amountToLiquify; _swapTokensForETH(amountToSwap); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = _totalFee - (liquidityFeePrior / 2) - holdersFeePrior; uint256 amountETHLiquidity = ETHBalanceAfterSwap * liquidityFeePrior / totalETHFee / 2; uint256 amountETHDev = ETHBalanceAfterSwap * devFeePrior / totalETHFee; uint256 amountETHBuyBack = ETHBalanceAfterSwap * buyBackFeePrior / totalETHFee; uint256 amountETHGaming = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHDev + amountETHBuyBack); payable(devWallet).transfer(amountETHDev); payable(buyBackWallet).transfer(amountETHBuyBack); payable(gamingWallet).transfer(amountETHGaming); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify(amountToSwap, amountETHLiquidity, amountToLiquify); } _totalFee = totalFeePrior; _holdersFee = holdersFeePrior; _buyBackFee = buyBackFeePrior; _liquidityFee = liquidityFeePrior; _devFee = devFeePrior; _gamingFee = gamingFeePrior; } 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":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":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gamingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersFee","type":"uint256"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newValue","type":"bool"}],"name":"FeeOnSelectedWalletTransfersChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gamingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalFee","type":"uint256"}],"name":"FeesApplied","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":"walletIdentifier","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":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gamingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"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":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uint256","name":"_liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_devFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_buyBackFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_gamingFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_holdersFeeOnBuy","type":"uint256"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_devFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_buyBackFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_gamingFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_holdersFeeOnSell","type":"uint256"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeOnSelectedWalletTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newDevWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"},{"internalType":"address","name":"newGamingWallet","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":[],"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
60a0604052620000206d314dc6448d9338c15b0a0000000060001962000d8e565b6200002e9060001962000dbb565b6005556127106200004f6d314dc6448d9338c15b0a0000000060c862000dd5565b6200005b919062000df7565b6009556127106200007c6d314dc6448d9338c15b0a00000000606462000dd5565b62000088919062000df7565b600a556a14adf4b7320334b9000000600c55600d80546001600160a01b03191661dead179055604080516101a081018252636261736560e01b81526000602082018190529181018290526064606082018190526080820181905261022660a0830181905260c0830181905260c860e0840181905261010084018190526096610120850181905261014085018190526101608501829052610180909401819052601480546001600160c01b031916636261736560981b17905560159490945560168290556017919091556018819055601955601a829055601b829055601c819055601d55601e819055601f553480156200018057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008054600e80546001600160a01b039092166001600160a01b03199283168117909155600f805483168217905560108054831682179055601180549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000259573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027f919062000e0e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f3919062000e0e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000341573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000367919062000e0e565b600180546001600160a01b0319166001600160a01b0385811691909117825582166080529091506200039b90829062000618565b600160226000620003b46000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260228352908120805490931660019081179093556200040a6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308082529280522080549092166001908117909255620004569162000716565b600d546200046f906001600160a01b0316600162000716565b6200047c82600162000716565b6200048981600162000716565b6001600160a01b0381811660009081526023602081905260408083208054600160ff1991821681179092558154909516845281842080548616821790553084529083208054909416811790935590620004ea6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260249283905290812080549093166001908117909355620005426000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560055490600290620005876000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620005b46000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6d314dc6448d9338c15b0a000000006040516200060891815260200190565b60405180910390a3505062000ed9565b6001600160a01b03821660009081526025602052604090205481151560ff909116151503620006c25760405162461bcd60e51b8152602060048201526044602482018190527f4b727970746f506574733a204175746f6d61746564206d61726b6574206d616b908201527f6572207061697220697320616c72656164792073657420746f20746861742076606482015263616c756560e01b608482015260a4015b60405180910390fd5b6001600160a01b038216600081815260256020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6000546001600160a01b03163314620007725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006b9565b6001600160a01b03821660009081526027602052604090205481151560ff9091161515036200080a5760405162461bcd60e51b815260206004820152603660248201527f4b727970746f506574733a204163636f756e7420697320616c7265616479207460448201527f68652076616c7565206f6620276578636c7564656427000000000000000000006064820152608401620006b9565b8015620008d7576001600160a01b038216600090815260026020526040902054156200086e576001600160a01b038216600090815260026020526040902054620008549062000a58565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152602760205260408120805460ff19168415151790556026805460018101825591527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b031916909117905562000a0e565b60005b60265481101562000a0c57826001600160a01b03166026828154811062000905576200090562000e39565b6000918252602090912001546001600160a01b031603620009f75760268054620009329060019062000dbb565b8154811062000945576200094562000e39565b600091825260209091200154602680546001600160a01b03909216918390811062000974576200097462000e39565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055602790925220805460ff191690556026805480620009cf57620009cf62000e4f565b600082815260209020810160001990810180546001600160a01b031916905501905562000a0c565b8062000a038162000e65565b915050620008da565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa98260405162000a4c911515815260200190565b60405180910390a25050565b600060055482111562000ad45760405162461bcd60e51b815260206004820152603660248201527f4b727970746f506574733a20416d6f756e74206d757374206265206c6573732060448201527f7468616e20746f74616c207265666c656374696f6e73000000000000000000006064820152608401620006b9565b600062000ae062000af5565b905062000aee818462000df7565b9392505050565b6000808062000b0362000b28565b9150915062000b21818362000cf260201b62001b081790919060201c565b9250505090565b60055460009081906d314dc6448d9338c15b0a00000000825b60265481101562000ca75782600260006026848154811062000b675762000b6762000e39565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000bd6575081600360006026848154811062000baf5762000baf62000e39565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000bf8575050600554936d314dc6448d9338c15b0a000000009350915050565b600260006026838154811062000c125762000c1262000e39565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c43908462000dbb565b9250600360006026838154811062000c5f5762000c5f62000e39565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c90908362000dbb565b91508062000c9e8162000e65565b91505062000b41565b506d314dc6448d9338c15b0a0000000060055462000cc6919062000df7565b82101562000ce9575050600554926d314dc6448d9338c15b0a0000000092509050565b90939092509050565b600062000aee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000d3c60201b60201c565b6000818362000d605760405162461bcd60e51b8152600401620006b9919062000e81565b50600062000d6f848662000df7565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b60008262000da05762000da062000d78565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000dd05762000dd062000da5565b500390565b600081600019048311821515161562000df25762000df262000da5565b500290565b60008262000e095762000e0962000d78565b500490565b60006020828403121562000e2157600080fd5b81516001600160a01b038116811462000aee57600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820162000e7a5762000e7a62000da5565b5060010190565b600060208083528351808285015260005b8181101562000eb05785810183015185820160400152820162000e92565b8181111562000ec3576000604083870101525b50601f01601f1916929092016040019392505050565b60805161369262000ef560003960006104f501526136926000f3fe60806040526004361061026b5760003560e01c8063781edb3c11610144578063b62496f5116100b6578063d32215761161007a578063d322157614610784578063d4698016146107a4578063d4d493f4146107c4578063dd62ed3e146107e4578063f2fde38b1461082a578063fe0175351461084a57600080fd5b8063b62496f5146106b9578063bea9849e146106e9578063c024666814610709578063cd43e22814610729578063d2d7ad831461076e57600080fd5b80638ea5220f116101085780638ea5220f146105f557806395d89b4114610615578063a457c2d714610643578063a9059cbb14610663578063aa4bde2814610683578063aee50b1e1461069957600080fd5b8063781edb3c1461056157806383672f3e14610581578063880bcbc1146105a15780638c0b5e22146105c15780638da5cb5b146105d757600080fd5b806323b872dd116101dd5780634549b039116101a15780634549b039146104a357806345a42329146104c357806349bd5a5e146104e357806366164f6f1461051757806370a082311461052c578063715018a61461054c57600080fd5b806323b872dd146104125780632d83811914610432578063313ce5671461045257806334cf1fea1461046e578063395093511461048357600080fd5b80630c5cbd701161022f5780630c5cbd701461033a5780630e6318591461035a57806313114a9d146103925780631694505e146103b157806318160ddd146103d15780631cd348c0146103f257600080fd5b80630483f7a014610277578063064a59d01461029957806306fdde03146102c8578063095ea7b3146103055780630bd05b691461032557600080fd5b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004613186565b61086b565b005b3480156102a557600080fd5b506007546102b39060ff1681565b60405190151581526020015b60405180910390f35b3480156102d457600080fd5b5060408051808201909152600b81526a4b727970746f205065747360a81b60208201525b6040516102bf91906131bb565b34801561031157600080fd5b506102b3610320366004613210565b610b12565b34801561033157600080fd5b50610297610b29565b34801561034657600080fd5b5061029761035536600461323c565b610b75565b34801561036657600080fd5b5060115461037a906001600160a01b031681565b6040516001600160a01b0390911681526020016102bf565b34801561039e57600080fd5b506006545b6040519081526020016102bf565b3480156103bd57600080fd5b5060015461037a906001600160a01b031681565b3480156103dd57600080fd5b506d314dc6448d9338c15b0a000000006103a3565b3480156103fe57600080fd5b5060105461037a906001600160a01b031681565b34801561041e57600080fd5b506102b361042d366004613277565b610c24565b34801561043e57600080fd5b506103a361044d3660046132b8565b610c8d565b34801561045e57600080fd5b50604051601281526020016102bf565b34801561047a57600080fd5b50610297610d1d565b34801561048f57600080fd5b506102b361049e366004613210565b610d53565b3480156104af57600080fd5b506103a36104be3660046132d1565b610d89565b3480156104cf57600080fd5b506102976104de366004613186565b610e67565b3480156104ef57600080fd5b5061037a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052357600080fd5b50610297610f7f565b34801561053857600080fd5b506103a36105473660046132f4565b61104f565b34801561055857600080fd5b506102976110ae565b34801561056d57600080fd5b5061029761057c366004613186565b611122565b34801561058d57600080fd5b5061029761059c366004613311565b6111e4565b3480156105ad57600080fd5b506102976105bc366004613186565b611596565b3480156105cd57600080fd5b506103a3600a5481565b3480156105e357600080fd5b506000546001600160a01b031661037a565b34801561060157600080fd5b50600f5461037a906001600160a01b031681565b34801561062157600080fd5b506040805180820190915260058152644b5045545360d81b60208201526102f8565b34801561064f57600080fd5b506102b361065e366004613210565b611658565b34801561066f57600080fd5b506102b361067e366004613210565b6116a7565b34801561068f57600080fd5b506103a360095481565b3480156106a557600080fd5b506102976106b43660046132b8565b6116b4565b3480156106c557600080fd5b506102b36106d43660046132f4565b60256020526000908152604090205460ff1681565b3480156106f557600080fd5b506102976107043660046132f4565b611788565b34801561071557600080fd5b50610297610724366004613186565b611885565b34801561073557600080fd5b50601654601854601a54601c54601e545b604080519586526020860194909452928401919091526060830152608082015260a0016102bf565b34801561077a57600080fd5b506103a3600c5481565b34801561079057600080fd5b5061029761079f366004613186565b611947565b3480156107b057600080fd5b50600e5461037a906001600160a01b031681565b3480156107d057600080fd5b506102976107df36600461323c565b6119c7565b3480156107f057600080fd5b506103a36107ff36600461336d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561083657600080fd5b506102976108453660046132f4565b611a1e565b34801561085657600080fd5b50601754601954601b54601d54601f54610746565b6000546001600160a01b0316331461089e5760405162461bcd60e51b8152600401610895906133a6565b60405180910390fd5b6001600160a01b03821660009081526027602052604090205481151560ff9091161515036108de5760405162461bcd60e51b8152600401610895906133db565b80156109a6576001600160a01b0382166000908152600260205260409020541561093e576001600160a01b03821660009081526002602052604090205461092490610c8d565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152602760205260408120805460ff19168415151790556026805460018101825591527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055610ac9565b60005b602654811015610ac757826001600160a01b0316602682815481106109d0576109d0613431565b6000918252602090912001546001600160a01b031603610ab557602680546109fa9060019061345d565b81548110610a0a57610a0a613431565b600091825260209091200154602680546001600160a01b039092169183908110610a3657610a36613431565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055602790925220805460ff191690556026805480610a8e57610a8e613474565b600082815260209020810160001990810180546001600160a01b0319169055019055610ac7565b80610abf8161348a565b9150506109a9565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610b06911515815260200190565b60405180910390a25050565b6000610b1f338484611b4a565b5060015b92915050565b6000546001600160a01b03163314610b535760405162461bcd60e51b8152600401610895906133a6565b6007805460ff19166001179055601254600003610b735742601255436013555b565b6000546001600160a01b03163314610b9f5760405162461bcd60e51b8152600401610895906133a6565b610bae60148686868686611c6e565b6040516b62617365466565732d42757960a01b8152600c015b60408051918290038220878352602083018790529082018590526060820184905260808201839052907f18313eafd26b263470e815300393e601ee24084135005dfe66a3bc4bbba795669060a00160405180910390a25050505050565b6000610c31848484611e8f565b610c838433610c7e856040518060600160405280602881526020016135f0602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061235b565b611b4a565b5060019392505050565b6000600554821115610d005760405162461bcd60e51b815260206004820152603660248201527f4b727970746f506574733a20416d6f756e74206d757374206265206c657373206044820152757468616e20746f74616c207265666c656374696f6e7360501b6064820152608401610895565b6000610d0a612395565b9050610d1681846134a3565b9392505050565b6000546001600160a01b03163314610d475760405162461bcd60e51b8152600401610895906133a6565b6007805460ff19169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b1f918590610c7e90866123b8565b60006d314dc6448d9338c15b0a00000000831115610dfd5760405162461bcd60e51b815260206004820152602b60248201527f4b727970746f506574733a20416d6f756e74206d757374206265206c6573732060448201526a7468616e20737570706c7960a81b6064820152608401610895565b6000610e07612395565b90506000610e1582866134c5565b905083610e25579150610b239050565b600082612710602d5488610e3991906134c5565b610e4391906134a3565b610e4d91906134c5565b90506000610e5b828461345d565b9450610b239350505050565b6000546001600160a01b03163314610e915760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b03821660009081526021602052604090205481151560ff909116151503610f275760405162461bcd60e51b815260206004820152603c60248201527f4b727970746f506574733a205468652073656c65637465642077616c6c65742060448201527f697320616c72656164792073657420746f207468652076616c756520000000006064820152608401610895565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a196668779101610b06565b6000546001600160a01b03163314610fa95760405162461bcd60e51b8152600401610895906133a6565b476000610fbe6000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611008576040519150601f19603f3d011682016040523d82523d6000602084013e61100d565b606091505b50509050801561104b576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6001600160a01b03811660009081526027602052604081205460ff161561108c57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610b2390610c8d565b6000546001600160a01b031633146110d85760405162461bcd60e51b8152600401610895906133a6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461114c5760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b03821660009081526023602052604090205481151560ff90911615150361118c5760405162461bcd60e51b8152600401610895906133db565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610b06565b6000546001600160a01b0316331461120e5760405162461bcd60e51b8152600401610895906133a6565b600e546001600160a01b038581169116146112f4576001600160a01b03841661128d5760405162461bcd60e51b815260206004820152602b60248201527f4b727970746f506574733a20546865206c697175696469747957616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610895565b600e546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f01604051908190038120906000805160206135d083398151915290600090a4600e80546001600160a01b0319166001600160a01b0386161790555b600f546001600160a01b038481169116146113ce576001600160a01b03831661136d5760405162461bcd60e51b815260206004820152602560248201527f4b727970746f506574733a205468652064657657616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610895565b600f546040516819195d95d85b1b195d60ba1b81526001600160a01b0391821691851690600901604051908190038120906000805160206135d083398151915290600090a4600f80546001600160a01b0319166001600160a01b0385161790555b6010546001600160a01b038381169116146114b0576001600160a01b03821661144b5760405162461bcd60e51b815260206004820152602960248201527f4b727970746f506574733a20546865206275794261636b57616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610895565b6010546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691841690600d01604051908190038120906000805160206135d083398151915290600090a4601080546001600160a01b0319166001600160a01b0384161790555b6011546001600160a01b03828116911614611590576001600160a01b03811661152c5760405162461bcd60e51b815260206004820152602860248201527f4b727970746f506574733a205468652067616d696e6757616c6c65742063616e60448201526706e6f7420626520360c41b6064820152608401610895565b6011546040516b19d85b5a5b99d5d85b1b195d60a21b81526001600160a01b0391821691831690600c01604051908190038120906000805160206135d083398151915290600090a4601180546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b031633146115c05760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b03821660009081526024602052604090205481151560ff9091161515036116005760405162461bcd60e51b8152600401610895906133db565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610b06565b6000610b1f3384610c7e85604051806060016040528060258152602001613638602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061235b565b6000610b1f338484611e8f565b6000546001600160a01b031633146116de5760405162461bcd60e51b8152600401610895906133a6565b600c5481036117555760405162461bcd60e51b815260206004820152603f60248201527f4b727970746f506574733a2043616e6e6f7420757064617465206d696e696d7560448201527f6d546f6b656e734265666f72655377617020746f2073616d652076616c7565006064820152608401610895565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146117b25760405162461bcd60e51b8152600401610895906133a6565b6001546001600160a01b03908116908216036118285760405162461bcd60e51b815260206004820152602f60248201527f4b727970746f506574733a2054686520726f7574657220616c7265616479206860448201526e61732074686174206164647265737360881b6064820152608401610895565b6001546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118af5760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b03821660009081526022602052604090205481151560ff9091161515036118ef5760405162461bcd60e51b8152600401610895906133db565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610b06565b6000546001600160a01b031633146119715760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610b06565b6000546001600160a01b031633146119f15760405162461bcd60e51b8152600401610895906133a6565b611a0060148686868686612417565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01610bc7565b6000546001600160a01b03163314611a485760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b038116611aad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610895565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d1683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061263c565b6001600160a01b038316611bac5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610895565b6001600160a01b038216611c0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610895565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b84866002015414611cdc57604051706c69717569646974794665654f6e42757960781b81526011016040519081900381206002880154885491929091889160008051602061361883398151915291611ccc9160489190911b906134e4565b60405180910390a4600286018590555b83866004015414611d44576040516a6465764665654f6e42757960a81b8152600b016040519081900381206004880154885491929091879160008051602061361883398151915291611d349160489190911b906134e4565b60405180910390a4600486018490555b82866006015414611db0576040516e6275794261636b4665654f6e42757960881b8152600f016040519081900381206006880154885491929091869160008051602061361883398151915291611da09160489190911b906134e4565b60405180910390a4600686018390555b81866008015414611e1b576040516d67616d696e674665654f6e42757960901b8152600e016040519081900381206008880154885491929091859160008051602061361883398151915291611e0b9160489190911b906134e4565b60405180910390a4600886018290555b8086600a015414611e87576040516e686f6c646572734665654f6e42757960881b8152600f01604051908190038120600a880154885491929091849160008051602061361883398151915291611e779160489190911b906134e4565b60405180910390a4600a86018190555b505050505050565b6001600160a01b038316611ef35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610895565b6001600160a01b038216611f555760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610895565b60008111611fb75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610895565b611fc08361104f565b8111156120255760405162461bcd60e51b815260206004820152602d60248201527f4b727970746f506574733a2043616e6e6f74207472616e73666572206d6f726560448201526c207468616e2062616c616e636560981b6064820152608401610895565b6001600160a01b0380841660008181526025602090815260408083205494871683528083205493835290805290205460ff92831692918216911615801561208457506001600160a01b038416600090815260208052604090205460ff16155b1561224f5760075460ff166120ee5760405162461bcd60e51b815260206004820152602a60248201527f4b727970746f506574733a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b6064820152608401610895565b6001600160a01b03841660009081526024602052604090205460ff1615801561213057506001600160a01b03851660009081526024602052604090205460ff16155b156121a457600a548311156121a45760405162461bcd60e51b815260206004820152603460248201527f4b727970746f506574733a205472616e7366657220616d6f756e74206578636560448201527332b239903a34329036b0bc2a3c20b6b7bab73a1760611b6064820152608401610895565b6001600160a01b03841660009081526023602052604090205460ff1661224f57600954836121d18661104f565b6121db91906134fb565b111561224f5760405162461bcd60e51b815260206004820152603f60248201527f4b727970746f506574733a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e006064820152608401610895565b61225b8282878761266a565b6000600c546122693061104f565b600754911115915060ff16801561227d5750805b801561228c5750600b5460ff16155b801561229a57506000602d54115b80156122be57506001600160a01b03851660009081526025602052604090205460ff165b156122e357600b805460ff191660011790556122d8612809565b600b805460ff191690555b600b5460009060ff161580156122fb575060075460ff165b6001600160a01b03881660009081526022602052604090205490915060ff168061233d57506001600160a01b03861660009081526022602052604090205460ff165b15612346575060005b61235287878784612a42565b50505050505050565b6000818484111561237f5760405162461bcd60e51b815260040161089591906131bb565b50600061238c848661345d565b95945050505050565b60008060006123a2612c13565b90925090506123b18282611b08565b9250505090565b6000806123c583856134fb565b905083811015610d165760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610895565b8486600301541461248657604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060038801548854919290918891600080516020613618833981519152916124769160489190911b906134e4565b60405180910390a4600386018590555b838660050154146124ef576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060058801548854919290918791600080516020613618833981519152916124df9160489190911b906134e4565b60405180910390a4600586018490555b8286600701541461255c576040516f189d5e509858dad1995953db94d95b1b60821b8152601001604051908190038120600788015488549192909186916000805160206136188339815191529161254c9160489190911b906134e4565b60405180910390a4600786018390555b818660090154146125c8576040516e19d85b5a5b99d1995953db94d95b1b608a1b8152600f0160405190819003812060098801548854919290918591600080516020613618833981519152916125b89160489190911b906134e4565b60405180910390a4600986018290555b8086600b015414611e87576040516f1a1bdb19195c9cd1995953db94d95b1b60821b8152601001604051908190038120600b8801548854919290918491600080516020613618833981519152916126259160489190911b906134e4565b60405180910390a4600b8601819055505050505050565b6000818361265d5760405162461bcd60e51b815260040161089591906131bb565b50600061238c84866134a3565b600060288190556029819055602a819055602b819055602c5583156126c857600560135443612699919061345d565b116126a9576127106028556126c8565b601654602855601854602955601a54602a55601c54602b55601e54602c555b82156126ed57601754602855601954602955601b54602a55601d54602b55601f54602c555b821580156126f9575083155b801561273f57506001600160a01b03821660009081526021602052604090205460ff168061273f57506001600160a01b03811660009081526021602052604090205460ff165b1561276357601754602855601954602955601b54602a55601d54602b55601f54602c555b602c54602b54602a5460295460285461277c91906134fb565b61278691906134fb565b61279091906134fb565b61279a91906134fb565b602d819055602854602954602a54602b54602c54604080519586526020860194909452928401919091526060830152608082015260a08101919091527f24b7b85246369f5fb87526971064f357b39a0f399bca1c50e11af8c3c8f4bbd69060c00160405180910390a150505050565b60006128143061104f565b602d54602c54602954602a54602854602b549596504795600060028761283a858c6134c5565b61284491906134a3565b61284e91906134a3565b9050600061285c828b61345d565b905061286781612dc4565b60006128738a4761345d565b90506000886128836002886134a3565b602d54612890919061345d565b61289a919061345d565b905060006002826128ab89866134c5565b6128b591906134a3565b6128bf91906134a3565b90506000826128ce8b866134c5565b6128d891906134a3565b90506000836128e78b876134c5565b6128f191906134a3565b905060008161290084866134fb565b61290a91906134fb565b612914908761345d565b600f546040519192506001600160a01b03169084156108fc029085906000818181858888f1935050505015801561294f573d6000803e3d6000fd5b506010546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561298a573d6000803e3d6000fd5b506011546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129c5573d6000803e3d6000fd5b508715612a18576129d68885612f16565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b505050602d9a909a55505050602c95909555602a92909255602855602991909155602b5550505050565b6000806000612a518585612fca565b925092509250600080600080612a70898787612a6b612395565b613071565b6001600160a01b038f166000908152602760205260409020549397509195509350915060ff1615612ad9576001600160a01b038b16600090815260036020526040902054612abf908a9061345d565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a1660009081526027602052604090205460ff1615612b38576001600160a01b038a16600090815260036020526040902054612b1e9088906134fb565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054612b5c90859061345d565b6001600160a01b03808d1660009081526002602052604080822093909355908c1681522054612b8c9084906134fb565b6001600160a01b038b16600090815260026020526040902055612baf81866130c9565b612bb9828761312e565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051612bfe91815260200190565b60405180910390a35050505050505050505050565b60055460009081906d314dc6448d9338c15b0a00000000825b602654811015612d7c57826002600060268481548110612c4e57612c4e613431565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612cb95750816003600060268481548110612c9257612c92613431565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612cda575050600554936d314dc6448d9338c15b0a000000009350915050565b6002600060268381548110612cf157612cf1613431565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d20908461345d565b92506003600060268381548110612d3957612d39613431565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d68908361345d565b915080612d748161348a565b915050612c2c565b506d314dc6448d9338c15b0a00000000600554612d9991906134a3565b821015612dbb575050600554926d314dc6448d9338c15b0a0000000092509050565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612df957612df9613431565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e769190613513565b81600181518110612e8957612e89613431565b6001600160a01b039283166020918202929092010152600154612eaf9130911684611b4a565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ee8908590600090869030904290600401613530565b600060405180830381600087803b158015612f0257600080fd5b505af1158015611e87573d6000803e3d6000fd5b600154612f2e9030906001600160a01b031684611b4a565b600154600e5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f9e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fc391906135a1565b5050505050565b600080600083612fe25750839150600090508061306a565b6000612710602c5487612ff591906134c5565b612fff91906134a3565b90506000612710602b54602a5460295460285461301c91906134fb565b61302691906134fb565b61303091906134fb565b61303a90896134c5565b61304491906134a3565b9050600061305282846134fb565b61305c908961345d565b9550919350915061306a9050565b9250925092565b600080808080613081868a6134c5565b9050600061308f878a6134c5565b9050600061309d888a6134c5565b905060006130ab82846134fb565b6130b5908561345d565b939c939b5091995097509095505050505050565b3060009081526027602052604090205460ff16156131065730600090815260036020526040812080548392906131009084906134fb565b90915550505b30600090815260026020526040812080548492906131259084906134fb565b90915550505050565b8160056000828254613140919061345d565b92505081905550806006600082825461312591906134fb565b6001600160a01b038116811461316e57600080fd5b50565b8035801515811461318157600080fd5b919050565b6000806040838503121561319957600080fd5b82356131a481613159565b91506131b260208401613171565b90509250929050565b600060208083528351808285015260005b818110156131e8578581018301518582016040015282016131cc565b818111156131fa576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561322357600080fd5b823561322e81613159565b946020939093013593505050565b600080600080600060a0868803121561325457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060006060848603121561328c57600080fd5b833561329781613159565b925060208401356132a781613159565b929592945050506040919091013590565b6000602082840312156132ca57600080fd5b5035919050565b600080604083850312156132e457600080fd5b823591506131b260208401613171565b60006020828403121561330657600080fd5b8135610d1681613159565b6000806000806080858703121561332757600080fd5b843561333281613159565b9350602085013561334281613159565b9250604085013561335281613159565b9150606085013561336281613159565b939692955090935050565b6000806040838503121561338057600080fd5b823561338b81613159565b9150602083013561339b81613159565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526036908201527f4b727970746f506574733a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561346f5761346f613447565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161349c5761349c613447565b5060010190565b6000826134c057634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156134df576134df613447565b500290565b68ffffffffffffffffff1991909116815260200190565b6000821982111561350e5761350e613447565b500190565b60006020828403121561352557600080fd5b8151610d1681613159565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135805784516001600160a01b03168352938301939183019160010161355b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156135b657600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201a3964cf15428edc934d88a99fd49de36d66e01533800c23985fd3e7ccbbc5e364736f6c634300080d0033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c8063781edb3c11610144578063b62496f5116100b6578063d32215761161007a578063d322157614610784578063d4698016146107a4578063d4d493f4146107c4578063dd62ed3e146107e4578063f2fde38b1461082a578063fe0175351461084a57600080fd5b8063b62496f5146106b9578063bea9849e146106e9578063c024666814610709578063cd43e22814610729578063d2d7ad831461076e57600080fd5b80638ea5220f116101085780638ea5220f146105f557806395d89b4114610615578063a457c2d714610643578063a9059cbb14610663578063aa4bde2814610683578063aee50b1e1461069957600080fd5b8063781edb3c1461056157806383672f3e14610581578063880bcbc1146105a15780638c0b5e22146105c15780638da5cb5b146105d757600080fd5b806323b872dd116101dd5780634549b039116101a15780634549b039146104a357806345a42329146104c357806349bd5a5e146104e357806366164f6f1461051757806370a082311461052c578063715018a61461054c57600080fd5b806323b872dd146104125780632d83811914610432578063313ce5671461045257806334cf1fea1461046e578063395093511461048357600080fd5b80630c5cbd701161022f5780630c5cbd701461033a5780630e6318591461035a57806313114a9d146103925780631694505e146103b157806318160ddd146103d15780631cd348c0146103f257600080fd5b80630483f7a014610277578063064a59d01461029957806306fdde03146102c8578063095ea7b3146103055780630bd05b691461032557600080fd5b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004613186565b61086b565b005b3480156102a557600080fd5b506007546102b39060ff1681565b60405190151581526020015b60405180910390f35b3480156102d457600080fd5b5060408051808201909152600b81526a4b727970746f205065747360a81b60208201525b6040516102bf91906131bb565b34801561031157600080fd5b506102b3610320366004613210565b610b12565b34801561033157600080fd5b50610297610b29565b34801561034657600080fd5b5061029761035536600461323c565b610b75565b34801561036657600080fd5b5060115461037a906001600160a01b031681565b6040516001600160a01b0390911681526020016102bf565b34801561039e57600080fd5b506006545b6040519081526020016102bf565b3480156103bd57600080fd5b5060015461037a906001600160a01b031681565b3480156103dd57600080fd5b506d314dc6448d9338c15b0a000000006103a3565b3480156103fe57600080fd5b5060105461037a906001600160a01b031681565b34801561041e57600080fd5b506102b361042d366004613277565b610c24565b34801561043e57600080fd5b506103a361044d3660046132b8565b610c8d565b34801561045e57600080fd5b50604051601281526020016102bf565b34801561047a57600080fd5b50610297610d1d565b34801561048f57600080fd5b506102b361049e366004613210565b610d53565b3480156104af57600080fd5b506103a36104be3660046132d1565b610d89565b3480156104cf57600080fd5b506102976104de366004613186565b610e67565b3480156104ef57600080fd5b5061037a7f000000000000000000000000919c3d39536db1bb35dd09ffabe8a436924831c481565b34801561052357600080fd5b50610297610f7f565b34801561053857600080fd5b506103a36105473660046132f4565b61104f565b34801561055857600080fd5b506102976110ae565b34801561056d57600080fd5b5061029761057c366004613186565b611122565b34801561058d57600080fd5b5061029761059c366004613311565b6111e4565b3480156105ad57600080fd5b506102976105bc366004613186565b611596565b3480156105cd57600080fd5b506103a3600a5481565b3480156105e357600080fd5b506000546001600160a01b031661037a565b34801561060157600080fd5b50600f5461037a906001600160a01b031681565b34801561062157600080fd5b506040805180820190915260058152644b5045545360d81b60208201526102f8565b34801561064f57600080fd5b506102b361065e366004613210565b611658565b34801561066f57600080fd5b506102b361067e366004613210565b6116a7565b34801561068f57600080fd5b506103a360095481565b3480156106a557600080fd5b506102976106b43660046132b8565b6116b4565b3480156106c557600080fd5b506102b36106d43660046132f4565b60256020526000908152604090205460ff1681565b3480156106f557600080fd5b506102976107043660046132f4565b611788565b34801561071557600080fd5b50610297610724366004613186565b611885565b34801561073557600080fd5b50601654601854601a54601c54601e545b604080519586526020860194909452928401919091526060830152608082015260a0016102bf565b34801561077a57600080fd5b506103a3600c5481565b34801561079057600080fd5b5061029761079f366004613186565b611947565b3480156107b057600080fd5b50600e5461037a906001600160a01b031681565b3480156107d057600080fd5b506102976107df36600461323c565b6119c7565b3480156107f057600080fd5b506103a36107ff36600461336d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561083657600080fd5b506102976108453660046132f4565b611a1e565b34801561085657600080fd5b50601754601954601b54601d54601f54610746565b6000546001600160a01b0316331461089e5760405162461bcd60e51b8152600401610895906133a6565b60405180910390fd5b6001600160a01b03821660009081526027602052604090205481151560ff9091161515036108de5760405162461bcd60e51b8152600401610895906133db565b80156109a6576001600160a01b0382166000908152600260205260409020541561093e576001600160a01b03821660009081526002602052604090205461092490610c8d565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152602760205260408120805460ff19168415151790556026805460018101825591527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055610ac9565b60005b602654811015610ac757826001600160a01b0316602682815481106109d0576109d0613431565b6000918252602090912001546001600160a01b031603610ab557602680546109fa9060019061345d565b81548110610a0a57610a0a613431565b600091825260209091200154602680546001600160a01b039092169183908110610a3657610a36613431565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055602790925220805460ff191690556026805480610a8e57610a8e613474565b600082815260209020810160001990810180546001600160a01b0319169055019055610ac7565b80610abf8161348a565b9150506109a9565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610b06911515815260200190565b60405180910390a25050565b6000610b1f338484611b4a565b5060015b92915050565b6000546001600160a01b03163314610b535760405162461bcd60e51b8152600401610895906133a6565b6007805460ff19166001179055601254600003610b735742601255436013555b565b6000546001600160a01b03163314610b9f5760405162461bcd60e51b8152600401610895906133a6565b610bae60148686868686611c6e565b6040516b62617365466565732d42757960a01b8152600c015b60408051918290038220878352602083018790529082018590526060820184905260808201839052907f18313eafd26b263470e815300393e601ee24084135005dfe66a3bc4bbba795669060a00160405180910390a25050505050565b6000610c31848484611e8f565b610c838433610c7e856040518060600160405280602881526020016135f0602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061235b565b611b4a565b5060019392505050565b6000600554821115610d005760405162461bcd60e51b815260206004820152603660248201527f4b727970746f506574733a20416d6f756e74206d757374206265206c657373206044820152757468616e20746f74616c207265666c656374696f6e7360501b6064820152608401610895565b6000610d0a612395565b9050610d1681846134a3565b9392505050565b6000546001600160a01b03163314610d475760405162461bcd60e51b8152600401610895906133a6565b6007805460ff19169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b1f918590610c7e90866123b8565b60006d314dc6448d9338c15b0a00000000831115610dfd5760405162461bcd60e51b815260206004820152602b60248201527f4b727970746f506574733a20416d6f756e74206d757374206265206c6573732060448201526a7468616e20737570706c7960a81b6064820152608401610895565b6000610e07612395565b90506000610e1582866134c5565b905083610e25579150610b239050565b600082612710602d5488610e3991906134c5565b610e4391906134a3565b610e4d91906134c5565b90506000610e5b828461345d565b9450610b239350505050565b6000546001600160a01b03163314610e915760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b03821660009081526021602052604090205481151560ff909116151503610f275760405162461bcd60e51b815260206004820152603c60248201527f4b727970746f506574733a205468652073656c65637465642077616c6c65742060448201527f697320616c72656164792073657420746f207468652076616c756520000000006064820152608401610895565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a196668779101610b06565b6000546001600160a01b03163314610fa95760405162461bcd60e51b8152600401610895906133a6565b476000610fbe6000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611008576040519150601f19603f3d011682016040523d82523d6000602084013e61100d565b606091505b50509050801561104b576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca489060200160405180910390a15b5050565b6001600160a01b03811660009081526027602052604081205460ff161561108c57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610b2390610c8d565b6000546001600160a01b031633146110d85760405162461bcd60e51b8152600401610895906133a6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461114c5760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b03821660009081526023602052604090205481151560ff90911615150361118c5760405162461bcd60e51b8152600401610895906133db565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610b06565b6000546001600160a01b0316331461120e5760405162461bcd60e51b8152600401610895906133a6565b600e546001600160a01b038581169116146112f4576001600160a01b03841661128d5760405162461bcd60e51b815260206004820152602b60248201527f4b727970746f506574733a20546865206c697175696469747957616c6c65742060448201526a063616e6e6f7420626520360ac1b6064820152608401610895565b600e546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f01604051908190038120906000805160206135d083398151915290600090a4600e80546001600160a01b0319166001600160a01b0386161790555b600f546001600160a01b038481169116146113ce576001600160a01b03831661136d5760405162461bcd60e51b815260206004820152602560248201527f4b727970746f506574733a205468652064657657616c6c65742063616e6e6f74604482015264020626520360dc1b6064820152608401610895565b600f546040516819195d95d85b1b195d60ba1b81526001600160a01b0391821691851690600901604051908190038120906000805160206135d083398151915290600090a4600f80546001600160a01b0319166001600160a01b0385161790555b6010546001600160a01b038381169116146114b0576001600160a01b03821661144b5760405162461bcd60e51b815260206004820152602960248201527f4b727970746f506574733a20546865206275794261636b57616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610895565b6010546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691841690600d01604051908190038120906000805160206135d083398151915290600090a4601080546001600160a01b0319166001600160a01b0384161790555b6011546001600160a01b03828116911614611590576001600160a01b03811661152c5760405162461bcd60e51b815260206004820152602860248201527f4b727970746f506574733a205468652067616d696e6757616c6c65742063616e60448201526706e6f7420626520360c41b6064820152608401610895565b6011546040516b19d85b5a5b99d5d85b1b195d60a21b81526001600160a01b0391821691831690600c01604051908190038120906000805160206135d083398151915290600090a4601180546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b031633146115c05760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b03821660009081526024602052604090205481151560ff9091161515036116005760405162461bcd60e51b8152600401610895906133db565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610b06565b6000610b1f3384610c7e85604051806060016040528060258152602001613638602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061235b565b6000610b1f338484611e8f565b6000546001600160a01b031633146116de5760405162461bcd60e51b8152600401610895906133a6565b600c5481036117555760405162461bcd60e51b815260206004820152603f60248201527f4b727970746f506574733a2043616e6e6f7420757064617465206d696e696d7560448201527f6d546f6b656e734265666f72655377617020746f2073616d652076616c7565006064820152608401610895565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146117b25760405162461bcd60e51b8152600401610895906133a6565b6001546001600160a01b03908116908216036118285760405162461bcd60e51b815260206004820152602f60248201527f4b727970746f506574733a2054686520726f7574657220616c7265616479206860448201526e61732074686174206164647265737360881b6064820152608401610895565b6001546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118af5760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b03821660009081526022602052604090205481151560ff9091161515036118ef5760405162461bcd60e51b8152600401610895906133db565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610b06565b6000546001600160a01b031633146119715760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610b06565b6000546001600160a01b031633146119f15760405162461bcd60e51b8152600401610895906133a6565b611a0060148686868686612417565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01610bc7565b6000546001600160a01b03163314611a485760405162461bcd60e51b8152600401610895906133a6565b6001600160a01b038116611aad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610895565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d1683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061263c565b6001600160a01b038316611bac5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610895565b6001600160a01b038216611c0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610895565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b84866002015414611cdc57604051706c69717569646974794665654f6e42757960781b81526011016040519081900381206002880154885491929091889160008051602061361883398151915291611ccc9160489190911b906134e4565b60405180910390a4600286018590555b83866004015414611d44576040516a6465764665654f6e42757960a81b8152600b016040519081900381206004880154885491929091879160008051602061361883398151915291611d349160489190911b906134e4565b60405180910390a4600486018490555b82866006015414611db0576040516e6275794261636b4665654f6e42757960881b8152600f016040519081900381206006880154885491929091869160008051602061361883398151915291611da09160489190911b906134e4565b60405180910390a4600686018390555b81866008015414611e1b576040516d67616d696e674665654f6e42757960901b8152600e016040519081900381206008880154885491929091859160008051602061361883398151915291611e0b9160489190911b906134e4565b60405180910390a4600886018290555b8086600a015414611e87576040516e686f6c646572734665654f6e42757960881b8152600f01604051908190038120600a880154885491929091849160008051602061361883398151915291611e779160489190911b906134e4565b60405180910390a4600a86018190555b505050505050565b6001600160a01b038316611ef35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610895565b6001600160a01b038216611f555760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610895565b60008111611fb75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610895565b611fc08361104f565b8111156120255760405162461bcd60e51b815260206004820152602d60248201527f4b727970746f506574733a2043616e6e6f74207472616e73666572206d6f726560448201526c207468616e2062616c616e636560981b6064820152608401610895565b6001600160a01b0380841660008181526025602090815260408083205494871683528083205493835290805290205460ff92831692918216911615801561208457506001600160a01b038416600090815260208052604090205460ff16155b1561224f5760075460ff166120ee5760405162461bcd60e51b815260206004820152602a60248201527f4b727970746f506574733a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b6064820152608401610895565b6001600160a01b03841660009081526024602052604090205460ff1615801561213057506001600160a01b03851660009081526024602052604090205460ff16155b156121a457600a548311156121a45760405162461bcd60e51b815260206004820152603460248201527f4b727970746f506574733a205472616e7366657220616d6f756e74206578636560448201527332b239903a34329036b0bc2a3c20b6b7bab73a1760611b6064820152608401610895565b6001600160a01b03841660009081526023602052604090205460ff1661224f57600954836121d18661104f565b6121db91906134fb565b111561224f5760405162461bcd60e51b815260206004820152603f60248201527f4b727970746f506574733a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e006064820152608401610895565b61225b8282878761266a565b6000600c546122693061104f565b600754911115915060ff16801561227d5750805b801561228c5750600b5460ff16155b801561229a57506000602d54115b80156122be57506001600160a01b03851660009081526025602052604090205460ff165b156122e357600b805460ff191660011790556122d8612809565b600b805460ff191690555b600b5460009060ff161580156122fb575060075460ff165b6001600160a01b03881660009081526022602052604090205490915060ff168061233d57506001600160a01b03861660009081526022602052604090205460ff165b15612346575060005b61235287878784612a42565b50505050505050565b6000818484111561237f5760405162461bcd60e51b815260040161089591906131bb565b50600061238c848661345d565b95945050505050565b60008060006123a2612c13565b90925090506123b18282611b08565b9250505090565b6000806123c583856134fb565b905083811015610d165760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610895565b8486600301541461248657604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060038801548854919290918891600080516020613618833981519152916124769160489190911b906134e4565b60405180910390a4600386018590555b838660050154146124ef576040516b19195d91995953db94d95b1b60a21b8152600c0160405190819003812060058801548854919290918791600080516020613618833981519152916124df9160489190911b906134e4565b60405180910390a4600586018490555b8286600701541461255c576040516f189d5e509858dad1995953db94d95b1b60821b8152601001604051908190038120600788015488549192909186916000805160206136188339815191529161254c9160489190911b906134e4565b60405180910390a4600786018390555b818660090154146125c8576040516e19d85b5a5b99d1995953db94d95b1b608a1b8152600f0160405190819003812060098801548854919290918591600080516020613618833981519152916125b89160489190911b906134e4565b60405180910390a4600986018290555b8086600b015414611e87576040516f1a1bdb19195c9cd1995953db94d95b1b60821b8152601001604051908190038120600b8801548854919290918491600080516020613618833981519152916126259160489190911b906134e4565b60405180910390a4600b8601819055505050505050565b6000818361265d5760405162461bcd60e51b815260040161089591906131bb565b50600061238c84866134a3565b600060288190556029819055602a819055602b819055602c5583156126c857600560135443612699919061345d565b116126a9576127106028556126c8565b601654602855601854602955601a54602a55601c54602b55601e54602c555b82156126ed57601754602855601954602955601b54602a55601d54602b55601f54602c555b821580156126f9575083155b801561273f57506001600160a01b03821660009081526021602052604090205460ff168061273f57506001600160a01b03811660009081526021602052604090205460ff165b1561276357601754602855601954602955601b54602a55601d54602b55601f54602c555b602c54602b54602a5460295460285461277c91906134fb565b61278691906134fb565b61279091906134fb565b61279a91906134fb565b602d819055602854602954602a54602b54602c54604080519586526020860194909452928401919091526060830152608082015260a08101919091527f24b7b85246369f5fb87526971064f357b39a0f399bca1c50e11af8c3c8f4bbd69060c00160405180910390a150505050565b60006128143061104f565b602d54602c54602954602a54602854602b549596504795600060028761283a858c6134c5565b61284491906134a3565b61284e91906134a3565b9050600061285c828b61345d565b905061286781612dc4565b60006128738a4761345d565b90506000886128836002886134a3565b602d54612890919061345d565b61289a919061345d565b905060006002826128ab89866134c5565b6128b591906134a3565b6128bf91906134a3565b90506000826128ce8b866134c5565b6128d891906134a3565b90506000836128e78b876134c5565b6128f191906134a3565b905060008161290084866134fb565b61290a91906134fb565b612914908761345d565b600f546040519192506001600160a01b03169084156108fc029085906000818181858888f1935050505015801561294f573d6000803e3d6000fd5b506010546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561298a573d6000803e3d6000fd5b506011546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129c5573d6000803e3d6000fd5b508715612a18576129d68885612f16565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b505050602d9a909a55505050602c95909555602a92909255602855602991909155602b5550505050565b6000806000612a518585612fca565b925092509250600080600080612a70898787612a6b612395565b613071565b6001600160a01b038f166000908152602760205260409020549397509195509350915060ff1615612ad9576001600160a01b038b16600090815260036020526040902054612abf908a9061345d565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a1660009081526027602052604090205460ff1615612b38576001600160a01b038a16600090815260036020526040902054612b1e9088906134fb565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054612b5c90859061345d565b6001600160a01b03808d1660009081526002602052604080822093909355908c1681522054612b8c9084906134fb565b6001600160a01b038b16600090815260026020526040902055612baf81866130c9565b612bb9828761312e565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051612bfe91815260200190565b60405180910390a35050505050505050505050565b60055460009081906d314dc6448d9338c15b0a00000000825b602654811015612d7c57826002600060268481548110612c4e57612c4e613431565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612cb95750816003600060268481548110612c9257612c92613431565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612cda575050600554936d314dc6448d9338c15b0a000000009350915050565b6002600060268381548110612cf157612cf1613431565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d20908461345d565b92506003600060268381548110612d3957612d39613431565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d68908361345d565b915080612d748161348a565b915050612c2c565b506d314dc6448d9338c15b0a00000000600554612d9991906134a3565b821015612dbb575050600554926d314dc6448d9338c15b0a0000000092509050565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612df957612df9613431565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e769190613513565b81600181518110612e8957612e89613431565b6001600160a01b039283166020918202929092010152600154612eaf9130911684611b4a565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ee8908590600090869030904290600401613530565b600060405180830381600087803b158015612f0257600080fd5b505af1158015611e87573d6000803e3d6000fd5b600154612f2e9030906001600160a01b031684611b4a565b600154600e5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f9e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fc391906135a1565b5050505050565b600080600083612fe25750839150600090508061306a565b6000612710602c5487612ff591906134c5565b612fff91906134a3565b90506000612710602b54602a5460295460285461301c91906134fb565b61302691906134fb565b61303091906134fb565b61303a90896134c5565b61304491906134a3565b9050600061305282846134fb565b61305c908961345d565b9550919350915061306a9050565b9250925092565b600080808080613081868a6134c5565b9050600061308f878a6134c5565b9050600061309d888a6134c5565b905060006130ab82846134fb565b6130b5908561345d565b939c939b5091995097509095505050505050565b3060009081526027602052604090205460ff16156131065730600090815260036020526040812080548392906131009084906134fb565b90915550505b30600090815260026020526040812080548492906131259084906134fb565b90915550505050565b8160056000828254613140919061345d565b92505081905550806006600082825461312591906134fb565b6001600160a01b038116811461316e57600080fd5b50565b8035801515811461318157600080fd5b919050565b6000806040838503121561319957600080fd5b82356131a481613159565b91506131b260208401613171565b90509250929050565b600060208083528351808285015260005b818110156131e8578581018301518582016040015282016131cc565b818111156131fa576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561322357600080fd5b823561322e81613159565b946020939093013593505050565b600080600080600060a0868803121561325457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060006060848603121561328c57600080fd5b833561329781613159565b925060208401356132a781613159565b929592945050506040919091013590565b6000602082840312156132ca57600080fd5b5035919050565b600080604083850312156132e457600080fd5b823591506131b260208401613171565b60006020828403121561330657600080fd5b8135610d1681613159565b6000806000806080858703121561332757600080fd5b843561333281613159565b9350602085013561334281613159565b9250604085013561335281613159565b9150606085013561336281613159565b939692955090935050565b6000806040838503121561338057600080fd5b823561338b81613159565b9150602083013561339b81613159565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526036908201527f4b727970746f506574733a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561346f5761346f613447565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161349c5761349c613447565b5060010190565b6000826134c057634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156134df576134df613447565b500290565b68ffffffffffffffffff1991909116815260200190565b6000821982111561350e5761350e613447565b500190565b60006020828403121561352557600080fd5b8151610d1681613159565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135805784516001600160a01b03168352938301939183019160010161355b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156135b657600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201a3964cf15428edc934d88a99fd49de36d66e01533800c23985fd3e7ccbbc5e364736f6c634300080d0033
Deployed Bytecode Sourcemap
7945:24942:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15742:830;;;;;;;;;;-1:-1:-1;15742:830:0;;;;;:::i;:::-;;:::i;:::-;;8630:28;;;;;;;;;;-1:-1:-1;8630:28:0;;;;;;;;;;;800:14:1;;793:22;775:41;;763:2;748:18;8630:28:0;;;;;;;;20442:76;;;;;;;;;;-1:-1:-1;20508:5:0;;;;;;;;;;;;-1:-1:-1;;;20508:5:0;;;;20442:76;;;;;;;:::i;13446:146::-;;;;;;;;;;-1:-1:-1;13446:146:0;;;;;:::i;:::-;;:::i;14660:195::-;;;;;;;;;;;;;:::i;18380:420::-;;;;;;;;;;-1:-1:-1;18380:420:0;;;;;:::i;:::-;;:::i;9158:27::-;;;;;;;;;;-1:-1:-1;9158:27:0;;;;-1:-1:-1;;;;;9158:27:0;;;;;;-1:-1:-1;;;;;2372:32:1;;;2354:51;;2342:2;2327:18;9158:27:0;2208:203:1;20981:80:0;;;;;;;;;;-1:-1:-1;21046:10:0;;20981:80;;;2562:25:1;;;2550:2;2535:18;20981:80:0;2416:177:1;8049:30:0;;;;;;;;;;-1:-1:-1;8049:30:0;;;;-1:-1:-1;;;;;8049:30:0;;;20691:88;;;;;;;;;;-1:-1:-1;8516:25:0;20691:88;;9123:28;;;;;;;;;;-1:-1:-1;9123:28:0;;;;-1:-1:-1;;;;;9123:28:0;;;13595:292;;;;;;;;;;-1:-1:-1;13595:292:0;;;;;:::i;:::-;;:::i;21659:241::-;;;;;;;;;;-1:-1:-1;21659:241:0;;;;;:::i;:::-;;:::i;20604:84::-;;;;;;;;;;-1:-1:-1;20604:84:0;;8256:2;3609:36:1;;3597:2;3582:18;20604:84:0;3467:184:1;14858:82:0;;;;;;;;;;;;;:::i;13890:202::-;;;;;;;;;;-1:-1:-1;13890:202:0;;;;;:::i;:::-;;:::i;21903:484::-;;;;;;;;;;-1:-1:-1;21903:484:0;;;;;:::i;:::-;;:::i;19845:330::-;;;;;;;;;;-1:-1:-1;19845:330:0;;;;;:::i;:::-;;:::i;8083:38::-;;;;;;;;;;;;;;;20178:246;;;;;;;;;;;;;:::i;20782:196::-;;;;;;;;;;-1:-1:-1;20782:196:0;;;;;:::i;:::-;;:::i;7577:133::-;;;;;;;;;;;;;:::i;16575:322::-;;;;;;;;;;-1:-1:-1;16575:322:0;;;;;:::i;:::-;;:::i;17242:1120::-;;;;;;;;;;-1:-1:-1;17242:1120:0;;;;;:::i;:::-;;:::i;16900:339::-;;;;;;;;;;-1:-1:-1;16900:339:0;;;;;:::i;:::-;;:::i;8844:50::-;;;;;;;;;;;;;;;;7393:70;;;;;;;;;;-1:-1:-1;7431:7:0;7452:6;-1:-1:-1;;;;;7452:6:0;7393:70;;9095:24;;;;;;;;;;-1:-1:-1;9095:24:0;;;;-1:-1:-1;;;;;9095:24:0;;;20521:80;;;;;;;;;;-1:-1:-1;20589:7:0;;;;;;;;;;;;-1:-1:-1;;;20589:7:0;;;;20521:80;;14095:253;;;;;;;;;;-1:-1:-1;14095:253:0;;;;;:::i;:::-;;:::i;13289:154::-;;;;;;;;;;-1:-1:-1;13289:154:0;;;;;:::i;:::-;;:::i;8746:54::-;;;;;;;;;;;;;;;;19531:308;;;;;;;;;;-1:-1:-1;19531:308:0;;;;;:::i;:::-;;:::i;10135:58::-;;;;;;;;;;-1:-1:-1;10135:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19244:284;;;;;;;;;;-1:-1:-1;19244:284:0;;;;;:::i;:::-;;:::i;15454:285::-;;;;;;;;;;-1:-1:-1;15454:285:0;;;;;:::i;:::-;;:::i;21203:222::-;;;;;;;;;;-1:-1:-1;21309:23:0;;21334:17;;21353:21;;21376:20;;21398:21;;21203:222;;;;5096:25:1;;;5152:2;5137:18;;5130:34;;;;5180:18;;;5173:34;;;;5238:2;5223:18;;5216:34;5281:3;5266:19;;5259:35;5083:3;5068:19;21203:222:0;4837:463:1;8926:60:0;;;;;;;;;;;;;;;;15249:202;;;;;;;;;;-1:-1:-1;15249:202:0;;;;;:::i;:::-;;:::i;9061:30::-;;;;;;;;;;-1:-1:-1;9061:30:0;;;;-1:-1:-1;;;;;9061:30:0;;;18803:438;;;;;;;;;;-1:-1:-1;18803:438:0;;;;;:::i;:::-;;:::i;21064:136::-;;;;;;;;;;-1:-1:-1;21064:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;21168:18:0;;;21147:7;21168:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21064:136;7715:223;;;;;;;;;;-1:-1:-1;7715:223:0;;;;;:::i;:::-;;:::i;21428:228::-;;;;;;;;;;-1:-1:-1;21535:24:0;;21561:18;;21581:22;;21605:21;;21628:22;;21428:228;;15742:830;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;15834:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;15826:112:::1;;;;-1:-1:-1::0;;;15826:112:0::1;;;;;;;:::i;:::-;15946:8;15943:570;;;-1:-1:-1::0;;;;;15965:16:0;::::1;15984:1;15965:16:::0;;;:7:::1;:16;::::0;;;;;:20;15962:95:::1;;-1:-1:-1::0;;;;;16033:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;16013:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;15994:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;15962:95:::1;-1:-1:-1::0;;;;;16062:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;16062:44:0::1;::::0;::::1;;;::::0;;16112:22:::1;:36:::0;;-1:-1:-1;16112:36:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;16112:36:0::1;::::0;;::::1;::::0;;15943:570:::1;;;16171:9;16166:342;16190:22;:29:::0;16186:33;::::1;16166:342;;;16266:7;-1:-1:-1::0;;;;;16237:36:0::1;:22;16260:1;16237:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;16237:25:0::1;:36:::0;16233:269:::1;;16311:22;16334:29:::0;;:33:::1;::::0;16366:1:::1;::::0;16334:33:::1;:::i;:::-;16311:57;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;16283:22:::1;:25:::0;;-1:-1:-1;;;;;16311:57:0;;::::1;::::0;16306:1;;16283:25;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:85:::0;;-1:-1:-1;;;;;;16283:85:0::1;-1:-1:-1::0;;;;;16283:85:0;;::::1;;::::0;;16376:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;16404:24:::1;:33:::0;;;;:41;;-1:-1:-1;;16404:41:0::1;::::0;;16453:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;16453:28:0;;;;;-1:-1:-1;;;;;;16453:28:0::1;::::0;;;;;16489:5:::1;;16233:269;16221:3:::0;::::1;::::0;::::1;:::i;:::-;;;;16166:342;;;;15943:570;16549:7;-1:-1:-1::0;;;;;16522:45:0::1;;16558:8;16522:45;;;;800:14:1::0;793:22;775:41;;763:2;748:18;;635:187;16522:45:0::1;;;;;;;;15742:830:::0;;:::o;13446:146::-;13521:4;13532:39;6859:10;13555:7;13564:6;13532:8;:39::i;:::-;-1:-1:-1;13583:4:0;13446:146;;;;;:::o;14660:195::-;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;14711:16:::1;:23:::0;;-1:-1:-1;;14711:23:0::1;14730:4;14711:23;::::0;;14743:16:::1;::::0;14711::::1;14743:21:::0;14739:112:::1;;14791:15;14772:16;:34:::0;14833:12:::1;14812:18;:33:::0;14739:112:::1;14660:195::o:0;18380:420::-;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;18557:116:::1;18580:5;18587:18;18607:12;18621:16;18639:15;18656:16;18557:22;:116::i;:::-;18683:112;::::0;-1:-1:-1;;;7350:27:1;;7402:2;7393:12;18683:112:0::1;;::::0;;;;;::::1;::::0;;5096:25:1;;;5152:2;5137:18;;5130:34;;;5180:18;;;5173:34;;;5238:2;5223:18;;5216:34;;;5281:3;5266:19;;5259:35;;;18683:112:0;::::1;::::0;5083:3:1;5068:19;18683:112:0::1;;;;;;;18380:420:::0;;;;;:::o;13595:292::-;13694:4;13705:36;13715:6;13723:9;13734:6;13705:9;:36::i;:::-;13746:120;13755:6;6859:10;13777:88;13815:6;13777:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13777:19:0;;;;;;:11;:19;;;;;;;;6859:10;13777:33;;;;;;;;;;:37;:88::i;:::-;13746:8;:120::i;:::-;-1:-1:-1;13878:4:0;13595:292;;;;;:::o;21659:241::-;21725:7;21758;;21747;:18;;21739:85;;;;-1:-1:-1;;;21739:85:0;;7618:2:1;21739:85:0;;;7600:21:1;7657:2;7637:18;;;7630:30;7696:34;7676:18;;;7669:62;-1:-1:-1;;;7747:18:1;;;7740:52;7809:19;;21739:85:0;7416:418:1;21739:85:0;21829:19;21852:10;:8;:10::i;:::-;21829:33;-1:-1:-1;21874:21:0;21829:33;21874:7;:21;:::i;:::-;21867:28;21659:241;-1:-1:-1;;;21659:241:0:o;14858:82::-;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;14911:16:::1;:24:::0;;-1:-1:-1;;14911:24:0::1;::::0;;14858:82::o;13890:202::-;6859:10;13980:4;14020:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14020:34:0;;;;;;;;;;13980:4;;13990:81;;14012:7;;14020:50;;14059:10;14020:38;:50::i;21903:484::-;21996:7;8516:25;22018:7;:18;;22010:74;;;;-1:-1:-1;;;22010:74:0;;8263:2:1;22010:74:0;;;8245:21:1;8302:2;8282:18;;;8275:30;8341:34;8321:18;;;8314:62;-1:-1:-1;;;8392:18:1;;;8385:41;8443:19;;22010:74:0;8061:407:1;22010:74:0;22089:19;22111:10;:8;:10::i;:::-;22089:32;-1:-1:-1;22126:15:0;22145:21;22089:32;22145:7;:21;:::i;:::-;22126:40;;22176:17;22171:212;;22208:7;-1:-1:-1;22201:14:0;;-1:-1:-1;22201:14:0;22171:212;22236:17;22287:11;22279:5;22267:9;;22257:7;:19;;;;:::i;:::-;:27;;;;:::i;:::-;:41;;;;:::i;:::-;22236:62;-1:-1:-1;22304:23:0;22330:19;22236:62;22330:7;:19;:::i;:::-;22304:45;-1:-1:-1;22355:22:0;;-1:-1:-1;;;;22355:22:0;19845:330;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19947:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;19939:120:::1;;;::::0;-1:-1:-1;;;19939:120:0;;8848:2:1;19939:120:0::1;::::0;::::1;8830:21:1::0;8887:2;8867:18;;;8860:30;8926:34;8906:18;;;8899:62;8997:30;8977:18;;;8970:58;9045:19;;19939:120:0::1;8646:424:1::0;19939:120:0::1;-1:-1:-1::0;;;;;20064:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;20064:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20120:50;;775:41:1;;;20120:50:0::1;::::0;748:18:1;20120:50:0::1;635:187:1::0;20178:246:0;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;20250:21:::1;20233:14;20308:7;7431::::0;7452:6;-1:-1:-1;;;;;7452:6:0;;7393:70;20308:7:::1;-1:-1:-1::0;;;;;20300:21:0::1;20330:6;20300:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20282:59;;;20356:7;20352:68;;;20384:24;::::0;2562:25:1;;;20384:24:0::1;::::0;2550:2:1;2535:18;20384:24:0::1;;;;;;;20352:68;20225:199;;20178:246::o:0;20782:196::-;-1:-1:-1;;;;;20866:33:0;;20848:7;20866:33;;;:24;:33;;;;;;;;20862:62;;;-1:-1:-1;;;;;;20908:16:0;;;;;:7;:16;;;;;;;20782:196::o;20862:62::-;-1:-1:-1;;;;;20956:16:0;;;;;;:7;:16;;;;;;20936:37;;:19;:37::i;7577:133::-;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;7678:1:::1;7662:6:::0;;7641:40:::1;::::0;-1:-1:-1;;;;;7662:6:0;;::::1;::::0;7641:40:::1;::::0;7678:1;;7641:40:::1;7703:1;7686:19:::0;;-1:-1:-1;;;;;;7686:19:0::1;::::0;;7577:133::o;16575:322::-;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16674:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;16666:117:::1;;;;-1:-1:-1::0;;;16666:117:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16788:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;16788:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16847:45;;775:41:1;;;16847:45:0::1;::::0;748:18:1;16847:45:0::1;635:187:1::0;17242:1120:0;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;17390:15:::1;::::0;-1:-1:-1;;;;;17390:37:0;;::::1;:15:::0;::::1;:37;17387:263;;-1:-1:-1::0;;;;;17443:32:0;::::1;17435:88;;;::::0;-1:-1:-1;;;17435:88:0;;9487:2:1;17435:88:0::1;::::0;::::1;9469:21:1::0;9526:2;9506:18;;;9499:30;9565:34;9545:18;;;9538:62;-1:-1:-1;;;9616:18:1;;;9609:41;9667:19;;17435:88:0::1;9285:407:1::0;17435:88:0::1;17586:15;::::0;17534:68:::1;::::0;-1:-1:-1;;;9899:30:1;;-1:-1:-1;;;;;17586:15:0;;::::1;::::0;17534:68;::::1;::::0;9954:2:1;9945:12;17534:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17534:68:0;;;::::1;17608:15;:36:::0;;-1:-1:-1;;;;;;17608:36:0::1;-1:-1:-1::0;;;;;17608:36:0;::::1;;::::0;;17387:263:::1;17657:9;::::0;-1:-1:-1;;;;;17657:25:0;;::::1;:9:::0;::::1;:25;17654:209;;-1:-1:-1::0;;;;;17698:26:0;::::1;17690:76;;;::::0;-1:-1:-1;;;17690:76:0;;10170:2:1;17690:76:0::1;::::0;::::1;10152:21:1::0;10209:2;10189:18;;;10182:30;10248:34;10228:18;;;10221:62;-1:-1:-1;;;10299:18:1;;;10292:35;10344:19;;17690:76:0::1;9968:401:1::0;17690:76:0::1;17817:9;::::0;17777:50:::1;::::0;-1:-1:-1;;;10576:24:1;;-1:-1:-1;;;;;17817:9:0;;::::1;::::0;17777:50;::::1;::::0;10625:1:1;10616:11;17777:50:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;17777:50:0;;;::::1;17833:9;:24:::0;;-1:-1:-1;;;;;;17833:24:0::1;-1:-1:-1::0;;;;;17833:24:0;::::1;;::::0;;17654:209:::1;17870:13;::::0;-1:-1:-1;;;;;17870:33:0;;::::1;:13:::0;::::1;:33;17867:245;;-1:-1:-1::0;;;;;17919:30:0;::::1;17911:84;;;::::0;-1:-1:-1;;;17911:84:0;;10840:2:1;17911:84:0::1;::::0;::::1;10822:21:1::0;10879:2;10859:18;;;10852:30;10918:34;10898:18;;;10891:62;-1:-1:-1;;;10969:18:1;;;10962:39;11018:19;;17911:84:0::1;10638:405:1::0;17911:84:0::1;18054:13;::::0;18006:62:::1;::::0;-1:-1:-1;;;11250:28:1;;-1:-1:-1;;;;;18054:13:0;;::::1;::::0;18006:62;::::1;::::0;11303:2:1;11294:12;18006:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18006:62:0;;;::::1;18074:13;:32:::0;;-1:-1:-1;;;;;;18074:32:0::1;-1:-1:-1::0;;;;;18074:32:0;::::1;;::::0;;17867:245:::1;18125:12;::::0;-1:-1:-1;;;;;18125:31:0;;::::1;:12:::0;::::1;:31;18122:236;;-1:-1:-1::0;;;;;18172:29:0;::::1;18164:82;;;::::0;-1:-1:-1;;;18164:82:0;;11519:2:1;18164:82:0::1;::::0;::::1;11501:21:1::0;11558:2;11538:18;;;11531:30;11597:34;11577:18;;;11570:62;-1:-1:-1;;;11648:18:1;;;11641:38;11696:19;;18164:82:0::1;11317:404:1::0;18164:82:0::1;18303:12;::::0;18257:59:::1;::::0;-1:-1:-1;;;11928:27:1;;-1:-1:-1;;;;;18303:12:0;;::::1;::::0;18257:59;::::1;::::0;11980:2:1;11971:12;18257:59:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18257:59:0;;;::::1;18322:12;:30:::0;;-1:-1:-1;;;;;;18322:30:0::1;-1:-1:-1::0;;;;;18322:30:0;::::1;;::::0;;18122:236:::1;17242:1120:::0;;;;:::o;16900:339::-;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17004:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;16996:122:::1;;;;-1:-1:-1::0;;;16996:122:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17123:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;17123:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17187:47;;775:41:1;;;17187:47:0::1;::::0;748:18:1;17187:47:0::1;635:187:1::0;14095:253:0;14190:4;14201:126;6859:10;14223:7;14231:95;14270:15;14231:95;;;;;;;;;;;;;;;;;6859:10;14231:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14231:34:0;;;;;;;;;;;;:38;:95::i;13289:154::-;13369:4;13380:42;6859:10;13404:9;13415:6;13380:9;:42::i;19531:308::-;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;19629:23:::1;;19617:8;:35:::0;19609:111:::1;;;::::0;-1:-1:-1;;;19609:111:0;;12196:2:1;19609:111:0::1;::::0;::::1;12178:21:1::0;12235:2;12215:18;;;12208:30;12274:34;12254:18;;;12247:62;12345:33;12325:18;;;12318:61;12396:19;;19609:111:0::1;11994:427:1::0;19609:111:0::1;19771:23;::::0;19730:65:::1;::::0;19761:8;;19730:65:::1;::::0;;;::::1;19800:23;:34:::0;19531:308::o;19244:284::-;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;19344:15:::1;::::0;-1:-1:-1;;;;;19344:15:0;;::::1;19322:38:::0;;::::1;::::0;19314:98:::1;;;::::0;-1:-1:-1;;;19314:98:0;;12628:2:1;19314:98:0::1;::::0;::::1;12610:21:1::0;12667:2;12647:18;;;12640:30;12706:34;12686:18;;;12679:62;-1:-1:-1;;;12757:18:1;;;12750:45;12812:19;;19314:98:0::1;12426:411:1::0;19314:98:0::1;19464:15;::::0;19422:59:::1;::::0;-1:-1:-1;;;;;19464:15:0;;::::1;::::0;19422:59;::::1;::::0;::::1;::::0;19464:15:::1;::::0;19422:59:::1;19486:15;:37:::0;;-1:-1:-1;;;;;;19486:37:0::1;-1:-1:-1::0;;;;;19486:37:0;;;::::1;::::0;;;::::1;::::0;;19244:284::o;15454:285::-;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15543:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;15535:106:::1;;;;-1:-1:-1::0;;;15535:106:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15646:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;15646:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15694:40;;775:41:1;;;15694:40:0::1;::::0;748:18:1;15694:40:0::1;635:187:1::0;15249:202:0;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15338:38:0;::::1;;::::0;;;:29:::1;:38:::0;;;;;;;;:48;;-1:-1:-1;;15338:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15396:50;;775:41:1;;;15396:50:0::1;::::0;748:18:1;15396:50:0::1;635:187:1::0;18803:438:0;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;18986:122:::1;19010:5;19017:19;19038:13;19053:17;19072:16;19090:17;18986:23;:122::i;:::-;19118:118;::::0;-1:-1:-1;;;13044:28:1;;13097:2;13088:12;19118:118:0::1;12842:264:1::0;7715:223:0;7502:6;;-1:-1:-1;;;;;7502:6:0;6859:10;7502:22;7494:67;;;;-1:-1:-1;;;7494:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7798:22:0;::::1;7790:73;;;::::0;-1:-1:-1;;;7790:73:0;;13313:2:1;7790:73:0::1;::::0;::::1;13295:21:1::0;13352:2;13332:18;;;13325:30;13391:34;13371:18;;;13364:62;-1:-1:-1;;;13442:18:1;;;13435:36;13488:19;;7790:73:0::1;13111:402:1::0;7790:73:0::1;7894:6;::::0;;7873:38:::1;::::0;-1:-1:-1;;;;;7873:38:0;;::::1;::::0;7894:6;::::1;::::0;7873:38:::1;::::0;::::1;7916:6;:17:::0;;-1:-1:-1;;;;;;7916:17:0::1;-1:-1:-1::0;;;;;7916:17:0;;;::::1;::::0;;;::::1;::::0;;7715:223::o;2873:123::-;2931:7;2952:39;2956:1;2959;2952:39;;;;;;;;;;;;;;;;;:3;:39::i;14351:306::-;-1:-1:-1;;;;;14436:19:0;;14428:68;;;;-1:-1:-1;;;14428:68:0;;13720:2:1;14428:68:0;;;13702:21:1;13759:2;13739:18;;;13732:30;13798:34;13778:18;;;13771:62;-1:-1:-1;;;13849:18:1;;;13842:34;13893:19;;14428:68:0;13518:400:1;14428:68:0;-1:-1:-1;;;;;14509:21:0;;14501:68;;;;-1:-1:-1;;;14501:68:0;;14125:2:1;14501:68:0;;;14107:21:1;14164:2;14144:18;;;14137:30;14203:34;14183:18;;;14176:62;-1:-1:-1;;;14254:18:1;;;14247:32;14296:19;;14501:68:0;13923:398:1;14501:68:0;-1:-1:-1;;;;;14574:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14620:32;;2562:25:1;;;14620:32:0;;2535:18:1;14620:32:0;;;;;;;14351:306;;;:::o;29260:1236::-;29515:18;29490:3;:21;;;:43;29486:215;;29546:101;;-1:-1:-1;;;14528:32:1;;14585:2;14576:12;29546:101:0;;;;;;;;29588:21;;;;29632:14;;29546:101;;29588:21;;29568:18;;-1:-1:-1;;;;;;;;;;;29546:101:0;;;29632:14;;;;;;29546:101;:::i;:::-;;;;;;;;29653:21;;;:42;;;29486:215;29728:12;29709:3;:15;;;:31;29705:173;;29753:83;;-1:-1:-1;;;15015:26:1;;15066:2;15057:12;29753:83:0;;;;;;;;29789:15;;;;29821:14;;29753:83;;29789:15;;29775:12;;-1:-1:-1;;;;;;;;;;;29753:83:0;;;29821:14;;;;;;29753:83;:::i;:::-;;;;;;;;29842:15;;;:30;;;29705:173;29909:16;29886:3;:19;;;:39;29882:201;;29938:95;;-1:-1:-1;;;15282:30:1;;15337:2;15328:12;29938:95:0;;;;;;;;29978:19;;;;30018:14;;29938:95;;29978:19;;29960:16;;-1:-1:-1;;;;;;;;;;;29938:95:0;;;30018:14;;;;;;29938:95;:::i;:::-;;;;;;;;30039:19;;;:38;;;29882:201;30119:15;30097:3;:18;;;:37;30093:194;;30147:92;;-1:-1:-1;;;15553:29:1;;15607:2;15598:12;30147:92:0;;;;;;;;30186:18;;;;30224:14;;30147:92;;30186:18;;30169:15;;-1:-1:-1;;;;;;;;;;;30147:92:0;;;30224:14;;;;;;30147:92;:::i;:::-;;;;;;;;30245:18;;;:36;;;30093:194;30318:16;30295:3;:19;;;:39;30291:201;;30347:95;;-1:-1:-1;;;15823:30:1;;15878:2;15869:12;30347:95:0;;;;;;;;30387:19;;;;30427:14;;30347:95;;30387:19;;30369:16;;-1:-1:-1;;;;;;;;;;;30347:95:0;;;30427:14;;;;;;30347:95;:::i;:::-;;;;;;;;30448:19;;;:38;;;30291:201;29260:1236;;;;;;:::o;22402:1602::-;-1:-1:-1;;;;;22500:18:0;;22492:68;;;;-1:-1:-1;;;22492:68:0;;16094:2:1;22492:68:0;;;16076:21:1;16133:2;16113:18;;;16106:30;16172:34;16152:18;;;16145:62;-1:-1:-1;;;16223:18:1;;;16216:35;16268:19;;22492:68:0;15892:401:1;22492:68:0;-1:-1:-1;;;;;22574:16:0;;22566:64;;;;-1:-1:-1;;;22566:64:0;;16500:2:1;22566:64:0;;;16482:21:1;16539:2;16519:18;;;16512:30;16578:34;16558:18;;;16551:62;-1:-1:-1;;;16629:18:1;;;16622:33;16672:19;;22566:64:0;16298:399:1;22566:64:0;22653:1;22644:6;:10;22636:64;;;;-1:-1:-1;;;22636:64:0;;16904:2:1;22636:64:0;;;16886:21:1;16943:2;16923:18;;;16916:30;16982:34;16962:18;;;16955:62;-1:-1:-1;;;17033:18:1;;;17026:39;17082:19;;22636:64:0;16702:405:1;22636:64:0;22724:15;22734:4;22724:9;:15::i;:::-;22714:6;:25;;22706:83;;;;-1:-1:-1;;;22706:83:0;;17314:2:1;22706:83:0;;;17296:21:1;17353:2;17333:18;;;17326:30;17392:34;17372:18;;;17365:62;-1:-1:-1;;;17443:18:1;;;17436:43;17496:19;;22706:83:0;17112:409:1;22706:83:0;-1:-1:-1;;;;;22816:31:0;;;22797:16;22816:31;;;:25;:31;;;;;;;;;22871:29;;;;;;;;;22915:35;;;;;;;;;22816:31;;;;;22871:29;;;;22915:35;22914:36;:74;;;;-1:-1:-1;;;;;;22955:33:0;;;;;;:29;:33;;;;;;;;22954:34;22914:74;22911:557;;;23005:16;;;;22997:71;;;;-1:-1:-1;;;22997:71:0;;17728:2:1;22997:71:0;;;17710:21:1;17767:2;17747:18;;;17740:30;17806:34;17786:18;;;17779:62;-1:-1:-1;;;17857:18:1;;;17850:40;17907:19;;22997:71:0;17526:406:1;22997:71:0;-1:-1:-1;;;;;23092:38:0;;;;;;:34;:38;;;;;;;;23091:39;:84;;;;-1:-1:-1;;;;;;23135:40:0;;;;;;:34;:40;;;;;;;;23134:41;23091:84;23087:192;;;23203:11;;23193:6;:21;;23185:86;;;;-1:-1:-1;;;23185:86:0;;18139:2:1;23185:86:0;;;18121:21:1;18178:2;18158:18;;;18151:30;18217:34;18197:18;;;18190:62;-1:-1:-1;;;18268:18:1;;;18261:50;18328:19;;23185:86:0;17937:416:1;23185:86:0;-1:-1:-1;;;;;23290:33:0;;;;;;:29;:33;;;;;;;;23285:175;;23369:15;;23358:6;23342:13;23352:2;23342:9;:13::i;:::-;:22;;;;:::i;:::-;23341:43;;23333:119;;;;-1:-1:-1;;;23333:119:0;;18693:2:1;23333:119:0;;;18675:21:1;18732:2;18712:18;;;18705:30;18771:34;18751:18;;;18744:62;18842:33;18822:18;;;18815:61;18893:19;;23333:119:0;18491:427:1;23333:119:0;23475:47;23488:11;23501:10;23513:4;23519:2;23475:12;:47::i;:::-;23528:12;23571:23;;23543:24;23561:4;23543:9;:24::i;:::-;23612:16;;23543:51;-1:-1:-1;23543:51:0;;-1:-1:-1;23612:16:0;;:32;;;;;23637:7;23612:32;:51;;;;-1:-1:-1;23654:9:0;;;;23653:10;23612:51;:73;;;;;23684:1;23672:9;;:13;23612:73;:111;;;;-1:-1:-1;;;;;;23694:29:0;;;;;;:25;:29;;;;;;;;23612:111;23602:206;;;23737:9;:16;;-1:-1:-1;;23737:16:0;23749:4;23737:16;;;23760:17;:15;:17::i;:::-;23784:9;:17;;-1:-1:-1;;23784:17:0;;;23602:206;23831:9;;23815:12;;23831:9;;23830:10;:30;;;;-1:-1:-1;23844:16:0;;;;23830:30;-1:-1:-1;;;;;23871:24:0;;;;;;:18;:24;;;;;;23815:45;;-1:-1:-1;23871:24:0;;;:50;;-1:-1:-1;;;;;;23899:22:0;;;;;;:18;:22;;;;;;;;23871:50;23868:83;;;-1:-1:-1;23939:5:0;23868:83;23958:41;23973:4;23979:2;23983:6;23991:7;23958:14;:41::i;:::-;22486:1518;;;;22402:1602;;;:::o;2281:171::-;2367:7;2397:12;2389:6;;;;2381:29;;;;-1:-1:-1;;;2381:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2415:9:0;2427:5;2431:1;2427;:5;:::i;:::-;2415:17;2281:171;-1:-1:-1;;;;;2281:171:0:o;25702:149::-;25744:7;25759:15;25776;25795:19;:17;:19::i;:::-;25758:56;;-1:-1:-1;25758:56:0;-1:-1:-1;25826:20:0;25758:56;;25826:11;:20::i;:::-;25819:27;;;;25702:149;:::o;1984:160::-;2042:7;;2068:5;2072:1;2068;:5;:::i;:::-;2056:17;;2091:1;2086;:6;;2078:46;;;;-1:-1:-1;;;2078:46:0;;19125:2:1;2078:46:0;;;19107:21:1;19164:2;19144:18;;;19137:30;19203:29;19183:18;;;19176:57;19250:18;;2078:46:0;18923:351:1;27981:1276:0;28242:19;28216:3;:22;;;:45;28212:222;;28274:104;;-1:-1:-1;;;19481:33:1;;19539:2;19530:12;28274:104:0;;;;;;;;28317:22;;;;28363:14;;28274:104;;28317:22;;28296:19;;-1:-1:-1;;;;;;;;;;;28274:104:0;;;28363:14;;;;;;28274:104;:::i;:::-;;;;;;;;28384:22;;;:44;;;28212:222;28462:13;28442:3;:16;;;:33;28438:180;;28488:86;;-1:-1:-1;;;19755:27:1;;19807:2;19798:12;28488:86:0;;;;;;;;28525:16;;;;28559:14;;28488:86;;28525:16;;28510:13;;-1:-1:-1;;;;;;;;;;;28488:86:0;;;28559:14;;;;;;28488:86;:::i;:::-;;;;;;;;28580:16;;;:32;;;28438:180;28650:17;28626:3;:20;;;:41;28622:208;;28680:98;;-1:-1:-1;;;20023:31:1;;20079:2;20070:12;28680:98:0;;;;;;;;28721:20;;;;28763:14;;28680:98;;28721:20;;28702:17;;-1:-1:-1;;;;;;;;;;;28680:98:0;;;28763:14;;;;;;28680:98;:::i;:::-;;;;;;;;28784:20;;;:40;;;28622:208;28867:16;28844:3;:19;;;:39;28840:201;;28896:95;;-1:-1:-1;;;20295:30:1;;20350:2;20341:12;28896:95:0;;;;;;;;28936:19;;;;28976:14;;28896:95;;28936:19;;28918:16;;-1:-1:-1;;;;;;;;;;;28896:95:0;;;28976:14;;;;;;28896:95;:::i;:::-;;;;;;;;28997:19;;;:38;;;28840:201;29073:17;29049:3;:20;;;:41;29045:208;;29103:98;;-1:-1:-1;;;20566:31:1;;20622:2;20613:12;29103:98:0;;;;;;;;29144:20;;;;29186:14;;29103:98;;29144:20;;29125:17;;-1:-1:-1;;;;;;;;;;;29103:98:0;;;29186:14;;;;;;29103:98;:::i;:::-;;;;;;;;29207:20;;;:40;;;27981:1276;;;;;;:::o;3001:251::-;3087:7;3116:12;3109:5;3101:28;;;;-1:-1:-1;;;3101:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3134:9:0;3146:5;3150:1;3146;:5;:::i;26624:1354::-;26742:1;26726:13;:17;;;26748:7;:11;;;26764;:15;;;26790:10;:14;;;26809:11;:15;26831:404;;;;26906:1;26883:18;;26868:12;:33;;;;:::i;:::-;26867:40;26863:367;;26932:5;26916:13;:21;26863:367;;;26985:23;;26969:13;:39;27037:17;;27027:7;:27;27087:21;;27073:11;:35;27140:20;;27127:10;:33;27193:21;;27179:11;:35;26863:367;27246:10;27242:226;;;27280:24;;27264:13;:40;27320:18;;27310:7;:28;27358:22;;27344:11;:36;27399:21;;27386:10;:34;27440:22;;27426:11;:36;27242:226;27483:10;27482:11;:27;;;;;27498:11;27497:12;27482:27;:105;;;;-1:-1:-1;;;;;;27514:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;27553:33:0;;;;;;:29;:33;;;;;;;;27514:72;27478:321;;;27611:24;;27595:13;:40;27651:18;;27641:7;:28;27689:22;;27675:11;:36;27730:21;;27717:10;:34;27771:22;;27757:11;:36;27478:321;27868:11;;27855:10;;27841:11;;27831:7;;27815:13;;:23;;;;:::i;:::-;:37;;;;:::i;:::-;:50;;;;:::i;:::-;:64;;;;:::i;:::-;27803:9;:76;;;27901:13;;27916:7;;27925:11;;27938:10;;27950:11;;27889:84;;;20923:25:1;;;20979:2;20964:18;;20957:34;;;;21007:18;;;21000:34;;;;21065:2;21050:18;;21043:34;21108:3;21093:19;;21086:35;21152:3;21137:19;;21130:35;;;;27889:84:0;;20910:3:1;20895:19;27889:84:0;;;;;;;26624:1354;;;;:::o;30499:1615::-;30539:23;30565:24;30583:4;30565:9;:24::i;:::-;30674:9;;30714:11;;30752:7;;30790:11;;30834:13;;30877:10;;30539:50;;-1:-1:-1;30622:21:0;;30594:25;30966:1;30674:9;30920:31;30834:13;30539:50;30920:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;30894:73;-1:-1:-1;30972:20:0;30995:33;30894:73;30995:15;:33;:::i;:::-;30972:56;;31035:31;31053:12;31035:17;:31::i;:::-;31073:27;31103:41;31127:17;31103:21;:41;:::i;:::-;31073:71;-1:-1:-1;31149:19:0;31209:15;31184:21;31204:1;31184:17;:21;:::i;:::-;31171:9;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;31149:75;-1:-1:-1;31229:26:0;31314:1;31149:75;31258:39;31280:17;31258:19;:39;:::i;:::-;:53;;;;:::i;:::-;:57;;;;:::i;:::-;31229:86;-1:-1:-1;31320:20:0;31379:11;31343:33;31365:11;31343:19;:33;:::i;:::-;:47;;;;:::i;:::-;31320:70;-1:-1:-1;31395:24:0;31462:11;31422:37;31444:15;31422:19;:37;:::i;:::-;:51;;;;:::i;:::-;31395:78;-1:-1:-1;31484:23:0;31395:78;31533:33;31554:12;31533:18;:33;:::i;:::-;:52;;;;:::i;:::-;31510:76;;:19;:76;:::i;:::-;31601:9;;31593:41;;31484:102;;-1:-1:-1;;;;;;31601:9:0;;31593:41;;;;;31621:12;;31601:9;31593:41;31601:9;31593:41;31621:12;31601:9;31593:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31647:13:0;;31639:49;;-1:-1:-1;;;;;31647:13:0;;;;31639:49;;;;;31671:16;;31647:13;31639:49;31647:13;31639:49;31671:16;31647:13;31639:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31707:12:0;;31699:47;;-1:-1:-1;;;;;31707:12:0;;;;31699:47;;;;;31730:15;;31707:12;31699:47;31707:12;31699:47;31730:15;31707:12;31699:47;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31757:19:0;;31753:163;;31784:50;31798:15;31815:18;31784:13;:50::i;:::-;31845:65;;;21378:25:1;;;21434:2;21419:18;;21412:34;;;21462:18;;;21455:34;;;31845:65:0;;21366:2:1;21351:18;31845:65:0;;;;;;;31753:163;-1:-1:-1;;;31920:9:0;:25;;;;-1:-1:-1;;;31950:11:0;:29;;;;31984:11;:29;;;;32018:13;:33;32056:7;:21;;;;32082:10;:27;-1:-1:-1;;;;30499:1615:0:o;24007:762::-;24110:23;24134:12;24148:14;24166:29;24178:7;24187;24166:11;:29::i;:::-;24109:86;;;;;;24201:15;24218:23;24243:12;24257:14;24275:46;24287:7;24296:4;24302:6;24310:10;:8;:10::i;:::-;24275:11;:46::i;:::-;-1:-1:-1;;;;;24332:32:0;;;;;;:24;:32;;;;;;24200:121;;-1:-1:-1;24200:121:0;;-1:-1:-1;24200:121:0;-1:-1:-1;24200:121:0;-1:-1:-1;24332:32:0;;24328:93;;;-1:-1:-1;;;;;24390:15:0;;;;;;:7;:15;;;;;;:25;;24408:7;;24390:25;:::i;:::-;-1:-1:-1;;;;;24372:15:0;;;;;;:7;:15;;;;;:43;24328:93;-1:-1:-1;;;;;24429:35:0;;;;;;:24;:35;;;;;;;;24425:110;;;-1:-1:-1;;;;;24493:18:0;;;;;;:7;:18;;;;;;:36;;24514:15;;24493:36;:::i;:::-;-1:-1:-1;;;;;24472:18:0;;;;;;:7;:18;;;;;:57;24425:110;-1:-1:-1;;;;;24557:15:0;;;;;;:7;:15;;;;;;:25;;24575:7;;24557:25;:::i;:::-;-1:-1:-1;;;;;24539:15:0;;;;;;;:7;:15;;;;;;:43;;;;24608:18;;;;;;;:36;;24629:15;;24608:36;:::i;:::-;-1:-1:-1;;;;;24587:18:0;;;;;;:7;:18;;;;;:57;24649:33;24667:6;24675;24649:17;:33::i;:::-;24687:23;24699:4;24705;24687:11;:23::i;:::-;24737:9;-1:-1:-1;;;;;24720:44:0;24729:6;-1:-1:-1;;;;;24720:44:0;;24748:15;24720:44;;;;2562:25:1;;2550:2;2535:18;;2416:177;24720:44:0;;;;;;;;24104:665;;;;;;;24007:762;;;;:::o;25854:562::-;25946:7;;25905;;;;8516:25;25905:7;25988:331;26012:22;:29;26008:33;;25988:331;;;26101:7;26064;:34;26072:22;26095:1;26072:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26072:25:0;26064:34;;;;;;;;;;;;;:44;;:97;;;26154:7;26117;:34;26125:22;26148:1;26125:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26125:25:0;26117:34;;;;;;;;;;;;;:44;26064:97;26054:139;;;-1:-1:-1;;26176:7:0;;;8516:25;;-1:-1:-1;25854:562:0;-1:-1:-1;;25854:562:0:o;26054:139::-;26219:7;:34;26227:22;26250:1;26227:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26227:25:0;26219:34;;;;;;;;;;;;;26209:44;;:7;:44;:::i;:::-;26199:54;;26279:7;:34;26287:22;26310:1;26287:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26287:25:0;26279:34;;;;;;;;;;;;;26269:44;;:7;:44;:::i;:::-;26259:54;-1:-1:-1;26043:3:0;;;;:::i;:::-;;;;25988:331;;;;8516:25;26337:7;;:17;;;;:::i;:::-;26327:7;:27;26323:58;;;-1:-1:-1;;26364:7:0;;;8516:25;;-1:-1:-1;25854:562:0;-1:-1:-1;25854:562:0:o;26323:58::-;26394:7;;26403;;-1:-1:-1;25854:562:0;-1:-1:-1;25854:562:0:o;32117:416::-;32202:16;;;32216:1;32202:16;;;;;;;;32178:21;;32202:16;;;;;;;;;;-1:-1:-1;32202:16:0;32178:40;;32241:4;32223;32228:1;32223:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32223:23:0;;;:7;;;;;;;;;;:23;;;;32261:15;;:22;;;-1:-1:-1;;;32261:22:0;;;;:15;;;;;:20;;:22;;;;;32223:7;;32261:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32251:4;32256:1;32251:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32251:32:0;;;:7;;;;;;;;;:32;32320:15;;32288:62;;32305:4;;32320:15;32338:11;32288:8;:62::i;:::-;32355:15;;:173;;-1:-1:-1;;;32355:173:0;;-1:-1:-1;;;;;32355:15:0;;;;:66;;:173;;32427:11;;32355:15;;32479:4;;32497;;32508:15;;32355:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32536:348;32644:15;;32612:62;;32629:4;;-1:-1:-1;;;;;32644:15:0;32662:11;32612:8;:62::i;:::-;32679:15;;32838;;32679:200;;-1:-1:-1;;;32679:200:0;;32742:4;32679:200;;;23214:34:1;23264:18;;;23257:34;;;32679:15:0;23307:18:1;;;23300:34;;;23350:18;;;23343:34;-1:-1:-1;;;;;32838:15:0;;;23393:19:1;;;23386:44;32859:15:0;23446:19:1;;;23439:35;32679:15:0;;;:31;;32718:9;;23148:19:1;;32679:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32536:348;;:::o;24880:414::-;24954:7;24962;24970;24988;24983:307;;-1:-1:-1;25011:7:0;;-1:-1:-1;25020:1:0;;-1:-1:-1;25020:1:0;25003:22;;24983:307;25046:12;25085:5;25071:11;;25061:7;:21;;;;:::i;:::-;:29;;;;:::i;:::-;25046:44;;25096:14;25178:5;25164:10;;25150:11;;25140:7;;25124:13;;:23;;;;:::i;:::-;:37;;;;:::i;:::-;:50;;;;:::i;:::-;25113:62;;:7;:62;:::i;:::-;:70;;;;:::i;:::-;25096:87;-1:-1:-1;25189:23:0;25226:13;25096:87;25226:4;:13;:::i;:::-;25215:25;;:7;:25;:::i;:::-;25189:51;-1:-1:-1;25271:4:0;;-1:-1:-1;25277:6:0;-1:-1:-1;25246:38:0;;-1:-1:-1;25246:38:0;24983:307;24880:414;;;;;:::o;25297:402::-;25426:7;;;;;25485:21;25495:11;25485:7;:21;:::i;:::-;25467:39;-1:-1:-1;25511:12:0;25526:18;25533:11;25526:4;:18;:::i;:::-;25511:33;-1:-1:-1;25549:14:0;25566:20;25575:11;25566:6;:20;:::i;:::-;25549:37;-1:-1:-1;25591:23:0;25628:13;25549:37;25628:4;:13;:::i;:::-;25617:25;;:7;:25;:::i;:::-;25655:7;;;;-1:-1:-1;25681:4:0;;-1:-1:-1;25681:4:0;-1:-1:-1;25297:402:0;;-1:-1:-1;;;;;;25297:402:0:o;26419:202::-;26528:4;26495:39;;;;:24;:39;;;;;;;;26491:89;;;26558:4;26542:22;;;;:7;:22;;;;;:32;;26568:6;;26542:22;:32;;26568:6;;26542:32;:::i;:::-;;;;-1:-1:-1;;26491:89:0;26600:4;26584:22;;;;:7;:22;;;;;:32;;26610:6;;26584:22;:32;;26610:6;;26584:32;:::i;:::-;;;;-1:-1:-1;;;;26419:202:0:o;24772:105::-;24845:4;24834:7;;:15;;;;;;;:::i;:::-;;;;;;;;24868:4;24854: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;1749:454::-;1844:6;1852;1860;1868;1876;1929:3;1917:9;1908:7;1904:23;1900:33;1897:53;;;1946:1;1943;1936:12;1897:53;-1:-1:-1;;1969:23:1;;;2039:2;2024:18;;2011:32;;-1:-1:-1;2090:2:1;2075:18;;2062:32;;2141:2;2126:18;;2113:32;;-1:-1:-1;2192:3:1;2177:19;2164:33;;-1:-1:-1;1749:454:1;-1:-1:-1;1749:454:1:o;2821:456::-;2898:6;2906;2914;2967:2;2955:9;2946:7;2942:23;2938:32;2935:52;;;2983:1;2980;2973:12;2935:52;3022:9;3009:23;3041:31;3066:5;3041:31;:::i;:::-;3091:5;-1:-1:-1;3148:2:1;3133:18;;3120:32;3161:33;3120:32;3161:33;:::i;:::-;2821:456;;3213:7;;-1:-1:-1;;;3267:2:1;3252:18;;;;3239:32;;2821:456::o;3282:180::-;3341:6;3394:2;3382:9;3373:7;3369:23;3365:32;3362:52;;;3410:1;3407;3400:12;3362:52;-1:-1:-1;3433:23:1;;3282:180;-1:-1:-1;3282:180:1:o;3656:248::-;3721:6;3729;3782:2;3770:9;3761:7;3757:23;3753:32;3750:52;;;3798:1;3795;3788:12;3750:52;3834:9;3821:23;3811:33;;3863:35;3894:2;3883:9;3879:18;3863:35;:::i;3909:247::-;3968:6;4021:2;4009:9;4000:7;3996:23;3992:32;3989:52;;;4037:1;4034;4027:12;3989:52;4076:9;4063:23;4095:31;4120:5;4095:31;:::i;4161:671::-;4247:6;4255;4263;4271;4324:3;4312:9;4303:7;4299:23;4295:33;4292:53;;;4341:1;4338;4331:12;4292:53;4380:9;4367:23;4399:31;4424:5;4399:31;:::i;:::-;4449:5;-1:-1:-1;4506:2:1;4491:18;;4478:32;4519:33;4478:32;4519:33;:::i;:::-;4571:7;-1:-1:-1;4630:2:1;4615:18;;4602:32;4643:33;4602:32;4643:33;:::i;:::-;4695:7;-1:-1:-1;4754:2:1;4739:18;;4726:32;4767:33;4726:32;4767:33;:::i;:::-;4161:671;;;;-1:-1:-1;4161:671:1;;-1:-1:-1;;4161:671:1:o;5305:388::-;5373:6;5381;5434:2;5422:9;5413:7;5409:23;5405:32;5402:52;;;5450:1;5447;5440:12;5402:52;5489:9;5476:23;5508:31;5533:5;5508:31;:::i;:::-;5558:5;-1:-1:-1;5615:2:1;5600:18;;5587:32;5628:33;5587:32;5628:33;:::i;:::-;5680:7;5670:17;;;5305:388;;;;;:::o;5698:356::-;5900:2;5882:21;;;5919:18;;;5912:30;5978:34;5973:2;5958:18;;5951:62;6045:2;6030:18;;5698:356::o;6059:418::-;6261:2;6243:21;;;6300:2;6280:18;;;6273:30;6339:34;6334:2;6319:18;;6312:62;-1:-1:-1;;;6405:2:1;6390:18;;6383:52;6467:3;6452:19;;6059:418::o;6482:127::-;6543:10;6538:3;6534:20;6531:1;6524:31;6574:4;6571:1;6564:15;6598:4;6595:1;6588:15;6614:127;6675:10;6670:3;6666:20;6663:1;6656:31;6706:4;6703:1;6696:15;6730:4;6727:1;6720:15;6746:125;6786:4;6814:1;6811;6808:8;6805:34;;;6819:18;;:::i;:::-;-1:-1:-1;6856:9:1;;6746:125::o;6876:127::-;6937:10;6932:3;6928:20;6925:1;6918:31;6968:4;6965:1;6958:15;6992:4;6989:1;6982:15;7008:135;7047:3;7068:17;;;7065:43;;7088:18;;:::i;:::-;-1:-1:-1;7135:1:1;7124:13;;7008:135::o;7839:217::-;7879:1;7905;7895:132;;7949:10;7944:3;7940:20;7937:1;7930:31;7984:4;7981:1;7974:15;8012:4;8009:1;8002:15;7895:132;-1:-1:-1;8041:9:1;;7839:217::o;8473:168::-;8513:7;8579:1;8575;8571:6;8567:14;8564:1;8561:21;8556:1;8549:9;8542:17;8538:45;8535:71;;;8586:18;;:::i;:::-;-1:-1:-1;8626:9:1;;8473:168::o;14599:209::-;-1:-1:-1;;14763:38:1;;;;14745:57;;14733:2;14718:18;;14599:209::o;18358:128::-;18398:3;18429:1;18425:6;18422:1;18419:13;18416:39;;;18435:18;;:::i;:::-;-1:-1:-1;18471:9:1;;18358:128::o;21632:251::-;21702:6;21755:2;21743:9;21734:7;21730:23;21726:32;21723:52;;;21771:1;21768;21761:12;21723:52;21803:9;21797:16;21822:31;21847:5;21822:31;:::i;21888:980::-;22150:4;22198:3;22187:9;22183:19;22229:6;22218:9;22211:25;22255:2;22293:6;22288:2;22277:9;22273:18;22266:34;22336:3;22331:2;22320:9;22316:18;22309:31;22360:6;22395;22389:13;22426:6;22418;22411:22;22464:3;22453:9;22449:19;22442:26;;22503:2;22495:6;22491:15;22477:29;;22524:1;22534:195;22548:6;22545:1;22542:13;22534:195;;;22613:13;;-1:-1:-1;;;;;22609:39:1;22597:52;;22704:15;;;;22669:12;;;;22645:1;22563:9;22534:195;;;-1:-1:-1;;;;;;;22785:32:1;;;;22780:2;22765:18;;22758:60;-1:-1:-1;;;22849:3:1;22834:19;22827:35;22746:3;21888:980;-1:-1:-1;;;21888:980:1:o;23485:306::-;23573:6;23581;23589;23642:2;23630:9;23621:7;23617:23;23613:32;23610:52;;;23658:1;23655;23648:12;23610:52;23687:9;23681:16;23671:26;;23737:2;23726:9;23722:18;23716:25;23706:35;;23781:2;23770:9;23766:18;23760:25;23750:35;;23485:306;;;;;:::o
Swarm Source
ipfs://1a3964cf15428edc934d88a99fd49de36d66e01533800c23985fd3e7ccbbc5e3
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.