Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 JEBUS
Holders
17
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
4,124,597.174504754 JEBUSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
JEBUS
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-17 */ // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: Jebus_file.sol /* JEBUS 1% tax is collected for dev fees */ pragma solidity ^0.8.7; // Import SafeMath library abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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); } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function getUnlockTime() public view returns (uint256) { return _lockTime; } function getTime() public view returns (uint256) { return block.timestamp; } 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; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint 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 (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint 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 (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); 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 (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract JEBUS is Context, IERC20, Ownable { using SafeMath for uint256; //using Address for address; address payable public marketingAddress = payable(0xb7A7BB1AedB54Dd327a7a838a4E7B66c41105b87); // dev Address address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; 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; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000 * 10**6 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "JEBUS"; string private _symbol = "JEBUS"; uint8 private _decimals = 9; uint256 public _taxFee = 0; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 1; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public marketingDivisor = 1; uint256 public _maxTxAmount = 30 * 10**6 * 10**9; uint256 private minimumTokensBeforeSwap = 20000 * 10**6 * 10**9; uint256 private buyBackUpperLimit = 1 * 10**17; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public buyBackEnabled = true; event RewardLiquidityProviders(uint256 tokenAmount); event BuyBackEnabledUpdated(bool enabled); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapETHForTokens( uint256 amountIn, address[] path ); event SwapTokensForETH( uint256 amountIn, address[] path ); 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); 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 minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } function buyBackUpperLimitAmount() public view returns (uint256) { return buyBackUpperLimit; } 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 _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"); if(from != owner() && to != owner()) { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) { if (overMinimumTokenBalance) { contractTokenBalance = minimumTokensBeforeSwap; swapTokens(contractTokenBalance); } uint256 balance = address(this).balance; if (buyBackEnabled && balance > uint256(1 * 10**17)) { if (balance > buyBackUpperLimit) balance = buyBackUpperLimit; //buyBackTokens(balance.div(100)); //Send to Marketing address transferToAddressETH(marketingAddress, balance.div(100)); } } bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } _tokenTransfer(from,to,amount,takeFee); } function swapTokens(uint256 contractTokenBalance) private lockTheSwap { uint256 initialBalance = address(this).balance; swapTokensForEth(contractTokenBalance); uint256 transferredBalance = address(this).balance.sub(initialBalance); //Send to Marketing address transferToAddressETH(marketingAddress, transferredBalance.div(_liquidityFee).mul(marketingDivisor)); } function buyBackTokens(uint256 amount) private lockTheSwap { if (amount > 0) { swapETHForTokens(amount); } } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, deadAddress, // Burn address block.timestamp.add(300) ); emit SwapETHForTokens(amount, path); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { 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 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 setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } function setMarketingDivisor(uint256 divisor) external onlyOwner() { marketingDivisor = divisor; } function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() { minimumTokensBeforeSwap = _minimumTokensBeforeSwap; } function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() { buyBackUpperLimit = buyBackLimit * 10**17; } function setMarketingAddress(address _marketingAddress) external onlyOwner() { marketingAddress = payable(_marketingAddress); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setBuyBackEnabled(bool _enabled) public onlyOwner { buyBackEnabled = _enabled; emit BuyBackEnabledUpdated(_enabled); } function prepareForPreSale() external onlyOwner { setSwapAndLiquifyEnabled(false); _taxFee = 0; _liquidityFee = 0; _maxTxAmount = 1000000000 * 10**6 * 10**9; } function afterPreSale() external onlyOwner { setSwapAndLiquifyEnabled(true); _taxFee = 0; _liquidityFee = 1; _maxTxAmount = 30 * 10**6 * 10**9; } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
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":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"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":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","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":[],"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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e0604052600380546001600160a01b03191673b7a7bb1aedb54dd327a7a838a4e7b66c41105b871790556ddead000000000000000000000000608052670de0b6b3a7640000600a819055620000589060001962000524565b6200006690600019620004c1565b600b55604080518082019091526005808252644a4542555360d81b60209092019182526200009791600d91620003e9565b50604080518082019091526005808252644a4542555360d81b6020909201918252620000c691600e91620003e9565b50600f805460ff1916600917905560006010819055601155600160128190556013819055601455666a94d74f4300006015556801158e460913d0000060165567016345785d8a0000601755601880546201010062ffff00199091161790553480156200013157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b543360009081526004602081815260409283902093909355815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a0155938181019391829003018186803b158015620001d357600080fd5b505afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e91906200048f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025757600080fd5b505afa1580156200026c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029291906200048f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002db57600080fd5b505af1158015620002f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031691906200048f565b6001600160601b0319606091821b811660c0529082901b1660a0526001600760006200034a6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526007909252902080549091166001179055620003923390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620003da91815260200190565b60405180910390a35062000547565b828054620003f790620004e7565b90600052602060002090601f0160209004810192826200041b576000855562000466565b82601f106200043657805160ff191683800117855562000466565b8280016001018555821562000466579182015b828111156200046657825182559160200191906001019062000449565b506200047492915062000478565b5090565b5b8082111562000474576000815560010162000479565b600060208284031215620004a257600080fd5b81516001600160a01b0381168114620004ba57600080fd5b9392505050565b600082821015620004e257634e487b7160e01b600052601160045260246000fd5b500390565b600181811c90821680620004fc57607f821691505b602082108114156200051e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200054257634e487b7160e01b600052601260045260246000fd5b500690565b60805160601c60a05160601c60c05160601c6129b66200059c600039600081816105840152611a1e0152600081816103b701528181612018015281816120e0015261211c0152600061043801526129b66000f3fe6080604052600436106102e85760003560e01c80636053a0e311610190578063a5ece941116100dc578063d6b513cf11610095578063ea2f0b371161006f578063ea2f0b3714610903578063ec28438a14610923578063f0f165af14610943578063f2fde38b1461096357600080fd5b8063d6b513cf14610887578063dd4670641461089d578063dd62ed3e146108bd57600080fd5b8063a5ece941146107dd578063a69df4b5146107fd578063a9059cbb14610812578063b0cb81f114610832578063bdc653ef14610852578063c49b9a801461086757600080fd5b806388f8202011610149578063906e9dd011610123578063906e9dd01461077357806395d89b4114610793578063a073d37f146107a8578063a457c2d7146107bd57600080fd5b806388f82020146106fc5780638da5cb5b146107355780638ee88c531461075357600080fd5b80636053a0e31461065b5780636bc87c3a1461067b57806370a0823114610691578063715018a6146106b15780637d1db4a5146106c657806382d2a4bb146106dc57600080fd5b80633685d4191161024f57806349bd5a5e1161020857806352390c02116101e257806352390c02146105da5780635342acb4146105fa578063557ed1ba14610633578063602bc62b1461064657600080fd5b806349bd5a5e146105725780634a74bb02146105a65780635134f6ab146105c557600080fd5b80633685d419146104bc57806339509351146104dc5780633b124fe7146104fc5780633bd5d17314610512578063437823ec146105325780634549b0391461055257600080fd5b806318160ddd116102a157806318160ddd146103f157806323b872dd1461040657806327c8f8351461042657806329370cc61461045a5780632d8381191461047a578063313ce5671461049a57600080fd5b8063061c82d0146102f457806306fdde031461031657806307efbfdc14610341578063095ea7b31461035657806313114a9d146103865780631694505e146103a557600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004612683565b610983565b005b34801561032257600080fd5b5061032b6109bb565b604051610338919061270c565b60405180910390f35b34801561034d57600080fd5b50610314610a4d565b34801561036257600080fd5b5061037661037136600461263c565b610a98565b6040519015158152602001610338565b34801561039257600080fd5b50600c545b604051908152602001610338565b3480156103b157600080fd5b506103d97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610338565b3480156103fd57600080fd5b50600a54610397565b34801561041257600080fd5b506103766104213660046125fb565b610aaf565b34801561043257600080fd5b506103d97f000000000000000000000000000000000000000000000000000000000000000081565b34801561046657600080fd5b50610314610475366004612668565b610b18565b34801561048657600080fd5b50610397610495366004612683565b610b98565b3480156104a657600080fd5b50600f5460405160ff9091168152602001610338565b3480156104c857600080fd5b506103146104d7366004612588565b610c1c565b3480156104e857600080fd5b506103766104f736600461263c565b610dd3565b34801561050857600080fd5b5061039760105481565b34801561051e57600080fd5b5061031461052d366004612683565b610e09565b34801561053e57600080fd5b5061031461054d366004612588565b610ef3565b34801561055e57600080fd5b5061039761056d36600461269c565b610f41565b34801561057e57600080fd5b506103d97f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b257600080fd5b5060185461037690610100900460ff1681565b3480156105d157600080fd5b50610314610fce565b3480156105e657600080fd5b506103146105f5366004612588565b61101c565b34801561060657600080fd5b50610376610615366004612588565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561063f57600080fd5b5042610397565b34801561065257600080fd5b50600254610397565b34801561066757600080fd5b506018546103769062010000900460ff1681565b34801561068757600080fd5b5061039760125481565b34801561069d57600080fd5b506103976106ac366004612588565b61116f565b3480156106bd57600080fd5b506103146111ce565b3480156106d257600080fd5b5061039760155481565b3480156106e857600080fd5b506103146106f7366004612683565b611230565b34801561070857600080fd5b50610376610717366004612588565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561074157600080fd5b506000546001600160a01b03166103d9565b34801561075f57600080fd5b5061031461076e366004612683565b611272565b34801561077f57600080fd5b5061031461078e366004612588565b6112a1565b34801561079f57600080fd5b5061032b6112ed565b3480156107b457600080fd5b50601654610397565b3480156107c957600080fd5b506103766107d836600461263c565b6112fc565b3480156107e957600080fd5b506003546103d9906001600160a01b031681565b34801561080957600080fd5b5061031461134b565b34801561081e57600080fd5b5061037661082d36600461263c565b611451565b34801561083e57600080fd5b5061031461084d366004612683565b61145e565b34801561085e57600080fd5b50601754610397565b34801561087357600080fd5b50610314610882366004612668565b61148d565b34801561089357600080fd5b5061039760145481565b3480156108a957600080fd5b506103146108b8366004612683565b611500565b3480156108c957600080fd5b506103976108d83660046125c2565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561090f57600080fd5b5061031461091e366004612588565b611585565b34801561092f57600080fd5b5061031461093e366004612683565b6115d0565b34801561094f57600080fd5b5061031461095e366004612683565b6115ff565b34801561096f57600080fd5b5061031461097e366004612588565b61162e565b6000546001600160a01b031633146109b65760405162461bcd60e51b81526004016109ad90612761565b60405180910390fd5b601055565b6060600d80546109ca90612863565b80601f01602080910402602001604051908101604052809291908181526020018280546109f690612863565b8015610a435780601f10610a1857610100808354040283529160200191610a43565b820191906000526020600020905b815481529060010190602001808311610a2657829003601f168201915b5050505050905090565b6000546001600160a01b03163314610a775760405162461bcd60e51b81526004016109ad90612761565b610a81600161148d565b60006010556001601255666a94d74f430000601555565b6000610aa5338484611706565b5060015b92915050565b6000610abc84848461182a565b610b0e8433610b0985604051806060016040528060288152602001612914602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611b21565b611706565b5060019392505050565b6000546001600160a01b03163314610b425760405162461bcd60e51b81526004016109ad90612761565b60188054821515620100000262ff0000199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610b8d90831515815260200190565b60405180910390a150565b6000600b54821115610bff5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109ad565b6000610c09611b4d565b9050610c158382611b70565b9392505050565b6000546001600160a01b03163314610c465760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03811660009081526008602052604090205460ff16610cae5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ad565b60005b600954811015610dcf57816001600160a01b031660098281548110610cd857610cd86128e5565b6000918252602090912001546001600160a01b03161415610dbd5760098054610d039060019061284c565b81548110610d1357610d136128e5565b600091825260209091200154600980546001600160a01b039092169183908110610d3f57610d3f6128e5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610d9757610d976128cf565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dc78161289e565b915050610cb1565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610aa5918590610b099086611b7c565b3360008181526008602052604090205460ff1615610e7e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109ad565b6000610e8983611b88565b505050506001600160a01b038416600090815260046020526040902054919250610eb591905082611bd7565b6001600160a01b038316600090815260046020526040902055600b54610edb9082611bd7565b600b55600c54610eeb9084611b7c565b600c55505050565b6000546001600160a01b03163314610f1d5760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a54831115610f955760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109ad565b81610fb4576000610fa584611b88565b50939550610aa9945050505050565b6000610fbf84611b88565b50929550610aa9945050505050565b6000546001600160a01b03163314610ff85760405162461bcd60e51b81526004016109ad90612761565b611002600061148d565b6000601081905560125569d3c21bcecceda1000000601555565b6000546001600160a01b031633146110465760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03811660009081526008602052604090205460ff16156110af5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ad565b6001600160a01b03811660009081526004602052604090205415611109576001600160a01b0381166000908152600460205260409020546110ef90610b98565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526008602052604081205460ff16156111ac57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610aa990610b98565b6000546001600160a01b031633146111f85760405162461bcd60e51b81526004016109ad90612761565b600080546040516001600160a01b039091169060008051602061293c833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461125a5760405162461bcd60e51b81526004016109ad90612761565b61126c8167016345785d8a000061282d565b60175550565b6000546001600160a01b0316331461129c5760405162461bcd60e51b81526004016109ad90612761565b601255565b6000546001600160a01b031633146112cb5760405162461bcd60e51b81526004016109ad90612761565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e80546109ca90612863565b6000610aa53384610b098560405180606001604052806025815260200161295c602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611b21565b6001546001600160a01b031633146113b15760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016109ad565b60025442116114025760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016109ad565b600154600080546040516001600160a01b03938416939091169160008051602061293c83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610aa533848461182a565b6000546001600160a01b031633146114885760405162461bcd60e51b81526004016109ad90612761565b601455565b6000546001600160a01b031633146114b75760405162461bcd60e51b81526004016109ad90612761565b601880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b8d90831515815260200190565b6000546001600160a01b0316331461152a5760405162461bcd60e51b81526004016109ad90612761565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561155981426127f3565b600255600080546040516001600160a01b039091169060008051602061293c833981519152908390a350565b6000546001600160a01b031633146115af5760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146115fa5760405162461bcd60e51b81526004016109ad90612761565b601555565b6000546001600160a01b031633146116295760405162461bcd60e51b81526004016109ad90612761565b601655565b6000546001600160a01b031633146116585760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b0381166116bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ad565b600080546040516001600160a01b038085169392169160008051602061293c83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117685760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ad565b6001600160a01b0382166117c95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ad565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661188e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109ad565b6001600160a01b0382166118f05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109ad565b600081116119525760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109ad565b6000546001600160a01b0384811691161480159061197e57506000546001600160a01b03838116911614155b156119e6576015548111156119e65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109ad565b60006119f13061116f565b6016546018549192508210159060ff16158015611a155750601854610100900460ff165b8015611a5257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b15611ac2578015611a6b576016549150611a6b82611be3565b601854479062010000900460ff168015611a8c575067016345785d8a000081115b15611ac057601754811115611aa057506017545b600354611ac0906001600160a01b0316611abb836064611b70565b611c47565b505b6001600160a01b03851660009081526007602052604090205460019060ff1680611b0457506001600160a01b03851660009081526007602052604090205460ff165b15611b0d575060005b611b1986868684611c82565b505050505050565b60008184841115611b455760405162461bcd60e51b81526004016109ad919061270c565b505050900390565b6000806000611b5a611dad565b9092509050611b698282611b70565b9250505090565b6000610c15828461280b565b6000610c1582846127f3565b6000806000806000806000806000611b9f8a611f2f565b9250925092506000806000611bbd8d8686611bb8611b4d565b611f71565b919f909e50909c50959a5093985091965092945050505050565b6000610c15828461284c565b6018805460ff1916600117905547611bfa82611fc1565b6000611c064783611bd7565b600354601454601254929350611c38926001600160a01b0390921691611abb9190611c32908690611b70565b906121c9565b50506018805460ff1916905550565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611c7d573d6000803e3d6000fd5b505050565b80611c8f57611c8f6121d5565b6001600160a01b03841660009081526008602052604090205460ff168015611cd057506001600160a01b03831660009081526008602052604090205460ff16155b15611ce557611ce0848484612203565b611d91565b6001600160a01b03841660009081526008602052604090205460ff16158015611d2657506001600160a01b03831660009081526008602052604090205460ff165b15611d3657611ce0848484612329565b6001600160a01b03841660009081526008602052604090205460ff168015611d7657506001600160a01b03831660009081526008602052604090205460ff165b15611d8657611ce08484846123d2565b611d91848484612445565b80611da757611da7601154601055601354601255565b50505050565b600b54600a546000918291825b600954811015611eff57826004600060098481548110611ddc57611ddc6128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611e475750816005600060098481548110611e2057611e206128e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611e5d57600b54600a54945094505050509091565b611ea36004600060098481548110611e7757611e776128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bd7565b9250611eeb6005600060098481548110611ebf57611ebf6128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bd7565b915080611ef78161289e565b915050611dba565b50600a54600b54611f0f91611b70565b821015611f2657600b54600a549350935050509091565b90939092509050565b600080600080611f3e85612489565b90506000611f4b866124ab565b90506000611f6382611f5d8986611bd7565b90611bd7565b979296509094509092505050565b6000808080611f8088866121c9565b90506000611f8e88876121c9565b90506000611f9c88886121c9565b90506000611fae82611f5d8686611bd7565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ff657611ff66128e5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561206f57600080fd5b505afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a791906125a5565b816001815181106120ba576120ba6128e5565b60200260200101906001600160a01b031690816001600160a01b031681525050612105307f000000000000000000000000000000000000000000000000000000000000000084611706565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061215a9085906000908690309042906004016127b7565b600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516121bd929190612796565b60405180910390a15050565b6000610c15828461282d565b6010541580156121e55750601254155b156121ec57565b601080546011556012805460135560009182905555565b60008060008060008061221587611b88565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506122479088611bd7565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546122769087611bd7565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546122a59086611b7c565b6001600160a01b0389166000908152600460205260409020556122c7816124c7565b6122d1848361254f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161231691815260200190565b60405180910390a3505050505050505050565b60008060008060008061233b87611b88565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061236d9087611bd7565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546123a39084611b7c565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546122a59086611b7c565b6000806000806000806123e487611b88565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506124169088611bd7565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461236d9087611bd7565b60008060008060008061245787611b88565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506122769087611bd7565b6000610aa960646124a5601054856121c990919063ffffffff16565b90611b70565b6000610aa960646124a5601254856121c990919063ffffffff16565b60006124d1611b4d565b905060006124df83836121c9565b306000908152600460205260409020549091506124fc9082611b7c565b3060009081526004602090815260408083209390935560089052205460ff1615611c7d573060009081526005602052604090205461253a9084611b7c565b30600090815260056020526040902055505050565b600b5461255c9083611bd7565b600b55600c5461256c9082611b7c565b600c555050565b8035801515811461258357600080fd5b919050565b60006020828403121561259a57600080fd5b8135610c15816128fb565b6000602082840312156125b757600080fd5b8151610c15816128fb565b600080604083850312156125d557600080fd5b82356125e0816128fb565b915060208301356125f0816128fb565b809150509250929050565b60008060006060848603121561261057600080fd5b833561261b816128fb565b9250602084013561262b816128fb565b929592945050506040919091013590565b6000806040838503121561264f57600080fd5b823561265a816128fb565b946020939093013593505050565b60006020828403121561267a57600080fd5b610c1582612573565b60006020828403121561269557600080fd5b5035919050565b600080604083850312156126af57600080fd5b823591506126bf60208401612573565b90509250929050565b600081518084526020808501945080840160005b838110156127015781516001600160a01b0316875295820195908201906001016126dc565b509495945050505050565b600060208083528351808285015260005b818110156127395785810183015185820160400152820161271d565b8181111561274b576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006127af60408301846126c8565b949350505050565b85815284602082015260a0604082015260006127d660a08301866126c8565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612806576128066128b9565b500190565b60008261282857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612847576128476128b9565b500290565b60008282101561285e5761285e6128b9565b500390565b600181811c9082168061287757607f821691505b6020821081141561289857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128b2576128b26128b9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461291057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fe380180148e096c40913f16c618c5a8f9e263788fe04a6e6010445e6688168664736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102e85760003560e01c80636053a0e311610190578063a5ece941116100dc578063d6b513cf11610095578063ea2f0b371161006f578063ea2f0b3714610903578063ec28438a14610923578063f0f165af14610943578063f2fde38b1461096357600080fd5b8063d6b513cf14610887578063dd4670641461089d578063dd62ed3e146108bd57600080fd5b8063a5ece941146107dd578063a69df4b5146107fd578063a9059cbb14610812578063b0cb81f114610832578063bdc653ef14610852578063c49b9a801461086757600080fd5b806388f8202011610149578063906e9dd011610123578063906e9dd01461077357806395d89b4114610793578063a073d37f146107a8578063a457c2d7146107bd57600080fd5b806388f82020146106fc5780638da5cb5b146107355780638ee88c531461075357600080fd5b80636053a0e31461065b5780636bc87c3a1461067b57806370a0823114610691578063715018a6146106b15780637d1db4a5146106c657806382d2a4bb146106dc57600080fd5b80633685d4191161024f57806349bd5a5e1161020857806352390c02116101e257806352390c02146105da5780635342acb4146105fa578063557ed1ba14610633578063602bc62b1461064657600080fd5b806349bd5a5e146105725780634a74bb02146105a65780635134f6ab146105c557600080fd5b80633685d419146104bc57806339509351146104dc5780633b124fe7146104fc5780633bd5d17314610512578063437823ec146105325780634549b0391461055257600080fd5b806318160ddd116102a157806318160ddd146103f157806323b872dd1461040657806327c8f8351461042657806329370cc61461045a5780632d8381191461047a578063313ce5671461049a57600080fd5b8063061c82d0146102f457806306fdde031461031657806307efbfdc14610341578063095ea7b31461035657806313114a9d146103865780631694505e146103a557600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004612683565b610983565b005b34801561032257600080fd5b5061032b6109bb565b604051610338919061270c565b60405180910390f35b34801561034d57600080fd5b50610314610a4d565b34801561036257600080fd5b5061037661037136600461263c565b610a98565b6040519015158152602001610338565b34801561039257600080fd5b50600c545b604051908152602001610338565b3480156103b157600080fd5b506103d97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610338565b3480156103fd57600080fd5b50600a54610397565b34801561041257600080fd5b506103766104213660046125fb565b610aaf565b34801561043257600080fd5b506103d97f000000000000000000000000000000000000000000000000000000000000dead81565b34801561046657600080fd5b50610314610475366004612668565b610b18565b34801561048657600080fd5b50610397610495366004612683565b610b98565b3480156104a657600080fd5b50600f5460405160ff9091168152602001610338565b3480156104c857600080fd5b506103146104d7366004612588565b610c1c565b3480156104e857600080fd5b506103766104f736600461263c565b610dd3565b34801561050857600080fd5b5061039760105481565b34801561051e57600080fd5b5061031461052d366004612683565b610e09565b34801561053e57600080fd5b5061031461054d366004612588565b610ef3565b34801561055e57600080fd5b5061039761056d36600461269c565b610f41565b34801561057e57600080fd5b506103d97f0000000000000000000000002f80a7b0c5c9cdcae89309e8d6c4394a93b1769c81565b3480156105b257600080fd5b5060185461037690610100900460ff1681565b3480156105d157600080fd5b50610314610fce565b3480156105e657600080fd5b506103146105f5366004612588565b61101c565b34801561060657600080fd5b50610376610615366004612588565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561063f57600080fd5b5042610397565b34801561065257600080fd5b50600254610397565b34801561066757600080fd5b506018546103769062010000900460ff1681565b34801561068757600080fd5b5061039760125481565b34801561069d57600080fd5b506103976106ac366004612588565b61116f565b3480156106bd57600080fd5b506103146111ce565b3480156106d257600080fd5b5061039760155481565b3480156106e857600080fd5b506103146106f7366004612683565b611230565b34801561070857600080fd5b50610376610717366004612588565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561074157600080fd5b506000546001600160a01b03166103d9565b34801561075f57600080fd5b5061031461076e366004612683565b611272565b34801561077f57600080fd5b5061031461078e366004612588565b6112a1565b34801561079f57600080fd5b5061032b6112ed565b3480156107b457600080fd5b50601654610397565b3480156107c957600080fd5b506103766107d836600461263c565b6112fc565b3480156107e957600080fd5b506003546103d9906001600160a01b031681565b34801561080957600080fd5b5061031461134b565b34801561081e57600080fd5b5061037661082d36600461263c565b611451565b34801561083e57600080fd5b5061031461084d366004612683565b61145e565b34801561085e57600080fd5b50601754610397565b34801561087357600080fd5b50610314610882366004612668565b61148d565b34801561089357600080fd5b5061039760145481565b3480156108a957600080fd5b506103146108b8366004612683565b611500565b3480156108c957600080fd5b506103976108d83660046125c2565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561090f57600080fd5b5061031461091e366004612588565b611585565b34801561092f57600080fd5b5061031461093e366004612683565b6115d0565b34801561094f57600080fd5b5061031461095e366004612683565b6115ff565b34801561096f57600080fd5b5061031461097e366004612588565b61162e565b6000546001600160a01b031633146109b65760405162461bcd60e51b81526004016109ad90612761565b60405180910390fd5b601055565b6060600d80546109ca90612863565b80601f01602080910402602001604051908101604052809291908181526020018280546109f690612863565b8015610a435780601f10610a1857610100808354040283529160200191610a43565b820191906000526020600020905b815481529060010190602001808311610a2657829003601f168201915b5050505050905090565b6000546001600160a01b03163314610a775760405162461bcd60e51b81526004016109ad90612761565b610a81600161148d565b60006010556001601255666a94d74f430000601555565b6000610aa5338484611706565b5060015b92915050565b6000610abc84848461182a565b610b0e8433610b0985604051806060016040528060288152602001612914602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611b21565b611706565b5060019392505050565b6000546001600160a01b03163314610b425760405162461bcd60e51b81526004016109ad90612761565b60188054821515620100000262ff0000199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610b8d90831515815260200190565b60405180910390a150565b6000600b54821115610bff5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109ad565b6000610c09611b4d565b9050610c158382611b70565b9392505050565b6000546001600160a01b03163314610c465760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03811660009081526008602052604090205460ff16610cae5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ad565b60005b600954811015610dcf57816001600160a01b031660098281548110610cd857610cd86128e5565b6000918252602090912001546001600160a01b03161415610dbd5760098054610d039060019061284c565b81548110610d1357610d136128e5565b600091825260209091200154600980546001600160a01b039092169183908110610d3f57610d3f6128e5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610d9757610d976128cf565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dc78161289e565b915050610cb1565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610aa5918590610b099086611b7c565b3360008181526008602052604090205460ff1615610e7e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109ad565b6000610e8983611b88565b505050506001600160a01b038416600090815260046020526040902054919250610eb591905082611bd7565b6001600160a01b038316600090815260046020526040902055600b54610edb9082611bd7565b600b55600c54610eeb9084611b7c565b600c55505050565b6000546001600160a01b03163314610f1d5760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a54831115610f955760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109ad565b81610fb4576000610fa584611b88565b50939550610aa9945050505050565b6000610fbf84611b88565b50929550610aa9945050505050565b6000546001600160a01b03163314610ff85760405162461bcd60e51b81526004016109ad90612761565b611002600061148d565b6000601081905560125569d3c21bcecceda1000000601555565b6000546001600160a01b031633146110465760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03811660009081526008602052604090205460ff16156110af5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109ad565b6001600160a01b03811660009081526004602052604090205415611109576001600160a01b0381166000908152600460205260409020546110ef90610b98565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526008602052604081205460ff16156111ac57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610aa990610b98565b6000546001600160a01b031633146111f85760405162461bcd60e51b81526004016109ad90612761565b600080546040516001600160a01b039091169060008051602061293c833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461125a5760405162461bcd60e51b81526004016109ad90612761565b61126c8167016345785d8a000061282d565b60175550565b6000546001600160a01b0316331461129c5760405162461bcd60e51b81526004016109ad90612761565b601255565b6000546001600160a01b031633146112cb5760405162461bcd60e51b81526004016109ad90612761565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e80546109ca90612863565b6000610aa53384610b098560405180606001604052806025815260200161295c602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611b21565b6001546001600160a01b031633146113b15760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016109ad565b60025442116114025760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016109ad565b600154600080546040516001600160a01b03938416939091169160008051602061293c83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610aa533848461182a565b6000546001600160a01b031633146114885760405162461bcd60e51b81526004016109ad90612761565b601455565b6000546001600160a01b031633146114b75760405162461bcd60e51b81526004016109ad90612761565b601880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b8d90831515815260200190565b6000546001600160a01b0316331461152a5760405162461bcd60e51b81526004016109ad90612761565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561155981426127f3565b600255600080546040516001600160a01b039091169060008051602061293c833981519152908390a350565b6000546001600160a01b031633146115af5760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146115fa5760405162461bcd60e51b81526004016109ad90612761565b601555565b6000546001600160a01b031633146116295760405162461bcd60e51b81526004016109ad90612761565b601655565b6000546001600160a01b031633146116585760405162461bcd60e51b81526004016109ad90612761565b6001600160a01b0381166116bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ad565b600080546040516001600160a01b038085169392169160008051602061293c83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117685760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ad565b6001600160a01b0382166117c95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ad565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661188e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109ad565b6001600160a01b0382166118f05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109ad565b600081116119525760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109ad565b6000546001600160a01b0384811691161480159061197e57506000546001600160a01b03838116911614155b156119e6576015548111156119e65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109ad565b60006119f13061116f565b6016546018549192508210159060ff16158015611a155750601854610100900460ff165b8015611a5257507f0000000000000000000000002f80a7b0c5c9cdcae89309e8d6c4394a93b1769c6001600160a01b0316846001600160a01b0316145b15611ac2578015611a6b576016549150611a6b82611be3565b601854479062010000900460ff168015611a8c575067016345785d8a000081115b15611ac057601754811115611aa057506017545b600354611ac0906001600160a01b0316611abb836064611b70565b611c47565b505b6001600160a01b03851660009081526007602052604090205460019060ff1680611b0457506001600160a01b03851660009081526007602052604090205460ff165b15611b0d575060005b611b1986868684611c82565b505050505050565b60008184841115611b455760405162461bcd60e51b81526004016109ad919061270c565b505050900390565b6000806000611b5a611dad565b9092509050611b698282611b70565b9250505090565b6000610c15828461280b565b6000610c1582846127f3565b6000806000806000806000806000611b9f8a611f2f565b9250925092506000806000611bbd8d8686611bb8611b4d565b611f71565b919f909e50909c50959a5093985091965092945050505050565b6000610c15828461284c565b6018805460ff1916600117905547611bfa82611fc1565b6000611c064783611bd7565b600354601454601254929350611c38926001600160a01b0390921691611abb9190611c32908690611b70565b906121c9565b50506018805460ff1916905550565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611c7d573d6000803e3d6000fd5b505050565b80611c8f57611c8f6121d5565b6001600160a01b03841660009081526008602052604090205460ff168015611cd057506001600160a01b03831660009081526008602052604090205460ff16155b15611ce557611ce0848484612203565b611d91565b6001600160a01b03841660009081526008602052604090205460ff16158015611d2657506001600160a01b03831660009081526008602052604090205460ff165b15611d3657611ce0848484612329565b6001600160a01b03841660009081526008602052604090205460ff168015611d7657506001600160a01b03831660009081526008602052604090205460ff165b15611d8657611ce08484846123d2565b611d91848484612445565b80611da757611da7601154601055601354601255565b50505050565b600b54600a546000918291825b600954811015611eff57826004600060098481548110611ddc57611ddc6128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611e475750816005600060098481548110611e2057611e206128e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611e5d57600b54600a54945094505050509091565b611ea36004600060098481548110611e7757611e776128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bd7565b9250611eeb6005600060098481548110611ebf57611ebf6128e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bd7565b915080611ef78161289e565b915050611dba565b50600a54600b54611f0f91611b70565b821015611f2657600b54600a549350935050509091565b90939092509050565b600080600080611f3e85612489565b90506000611f4b866124ab565b90506000611f6382611f5d8986611bd7565b90611bd7565b979296509094509092505050565b6000808080611f8088866121c9565b90506000611f8e88876121c9565b90506000611f9c88886121c9565b90506000611fae82611f5d8686611bd7565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611ff657611ff66128e5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561206f57600080fd5b505afa158015612083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a791906125a5565b816001815181106120ba576120ba6128e5565b60200260200101906001600160a01b031690816001600160a01b031681525050612105307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611706565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061215a9085906000908690309042906004016127b7565b600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516121bd929190612796565b60405180910390a15050565b6000610c15828461282d565b6010541580156121e55750601254155b156121ec57565b601080546011556012805460135560009182905555565b60008060008060008061221587611b88565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506122479088611bd7565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546122769087611bd7565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546122a59086611b7c565b6001600160a01b0389166000908152600460205260409020556122c7816124c7565b6122d1848361254f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161231691815260200190565b60405180910390a3505050505050505050565b60008060008060008061233b87611b88565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061236d9087611bd7565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546123a39084611b7c565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546122a59086611b7c565b6000806000806000806123e487611b88565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506124169088611bd7565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461236d9087611bd7565b60008060008060008061245787611b88565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506122769087611bd7565b6000610aa960646124a5601054856121c990919063ffffffff16565b90611b70565b6000610aa960646124a5601254856121c990919063ffffffff16565b60006124d1611b4d565b905060006124df83836121c9565b306000908152600460205260409020549091506124fc9082611b7c565b3060009081526004602090815260408083209390935560089052205460ff1615611c7d573060009081526005602052604090205461253a9084611b7c565b30600090815260056020526040902055505050565b600b5461255c9083611bd7565b600b55600c5461256c9082611b7c565b600c555050565b8035801515811461258357600080fd5b919050565b60006020828403121561259a57600080fd5b8135610c15816128fb565b6000602082840312156125b757600080fd5b8151610c15816128fb565b600080604083850312156125d557600080fd5b82356125e0816128fb565b915060208301356125f0816128fb565b809150509250929050565b60008060006060848603121561261057600080fd5b833561261b816128fb565b9250602084013561262b816128fb565b929592945050506040919091013590565b6000806040838503121561264f57600080fd5b823561265a816128fb565b946020939093013593505050565b60006020828403121561267a57600080fd5b610c1582612573565b60006020828403121561269557600080fd5b5035919050565b600080604083850312156126af57600080fd5b823591506126bf60208401612573565b90509250929050565b600081518084526020808501945080840160005b838110156127015781516001600160a01b0316875295820195908201906001016126dc565b509495945050505050565b600060208083528351808285015260005b818110156127395785810183015185820160400152820161271d565b8181111561274b576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006127af60408301846126c8565b949350505050565b85815284602082015260a0604082015260006127d660a08301866126c8565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612806576128066128b9565b500190565b60008261282857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612847576128476128b9565b500290565b60008282101561285e5761285e6128b9565b500390565b600181811c9082168061287757607f821691505b6020821081141561289857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128b2576128b26128b9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461291057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fe380180148e096c40913f16c618c5a8f9e263788fe04a6e6010445e6688168664736f6c63430008070033
Deployed Bytecode Sourcemap
18674:21115:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37735:102;;;;;;;;;;-1:-1:-1;37735:102:0;;;;;:::i;:::-;;:::i;:::-;;21638:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39338:196;;;;;;;;;;;;;:::i;22610:167::-;;;;;;;;;;-1:-1:-1;22610:167:0;;;;;:::i;:::-;;:::i;:::-;;;3547:14:1;;3540:22;3522:41;;3510:2;3495:18;22610:167:0;3382:187:1;23781:91:0;;;;;;;;;;-1:-1:-1;23852:10:0;;23781:91;;;10066:25:1;;;10054:2;10039:18;23781:91:0;9920:177:1;20143:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3114:32:1;;;3096:51;;3084:2;3069:18;20143:51:0;2950:203:1;21939:99:0;;;;;;;;;;-1:-1:-1;22021:7:0;;21939:99;;22789:321;;;;;;;;;;-1:-1:-1;22789:321:0;;;;;:::i;:::-;;:::i;18922:81::-;;;;;;;;;;;;;;;38940:156;;;;;;;;;;-1:-1:-1;38940:156:0;;;;;:::i;:::-;;:::i;25031:261::-;;;;;;;;;;-1:-1:-1;25031:261:0;;;;;:::i;:::-;;:::i;21840:87::-;;;;;;;;;;-1:-1:-1;21908:9:0;;21840:87;;21908:9;;;;11168:36:1;;11156:2;11141:18;21840:87:0;11026:184:1;25667:501:0;;;;;;;;;;-1:-1:-1;25667:501:0;;;;;:::i;:::-;;:::i;23122:224::-;;;;;;;;;;-1:-1:-1;23122:224:0;;;;;:::i;:::-;;:::i;19698:26::-;;;;;;;;;;;;;;;;24156:391;;;;;;;;;;-1:-1:-1;24156:391:0;;;;;:::i;:::-;;:::i;37474:115::-;;;;;;;;;;-1:-1:-1;37474:115:0;;;;;:::i;:::-;;:::i;24565:454::-;;;;;;;;;;-1:-1:-1;24565:454:0;;;;;:::i;:::-;;:::i;20203:38::-;;;;;;;;;;;;;;;20288:40;;;;;;;;;;-1:-1:-1;20288:40:0;;;;;;;;;;;39112:210;;;;;;;;;;;;;:::i;25304:351::-;;;;;;;;;;-1:-1:-1;25304:351:0;;;;;:::i;:::-;;:::i;37331:127::-;;;;;;;;;;-1:-1:-1;37331:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;37421:27:0;37395:4;37421:27;;;:18;:27;;;;;;;;;37331:127;9604:94;;;;;;;;;;-1:-1:-1;9673:15:0;9604:94;;9494;;;;;;;;;;-1:-1:-1;9569:9:0;;9494:94;;20337:33;;;;;;;;;;-1:-1:-1;20337:33:0;;;;;;;;;;;19791:32;;;;;;;;;;;;;;;;22050:204;;;;;;;;;;-1:-1:-1;22050:204:0;;;;;:::i;:::-;;:::i;9064:154::-;;;;;;;;;;;;;:::i;19954:48::-;;;;;;;;;;;;;;;;38441:137;;;;;;;;;;-1:-1:-1;38441:137:0;;;;;:::i;:::-;;:::i;23645:124::-;;;;;;;;;;-1:-1:-1;23645:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;23739:20:0;23713:4;23739:20;;;:11;:20;;;;;;;;;23645:124;8821:83;;;;;;;;;;-1:-1:-1;8859:7:0;8888:6;-1:-1:-1;;;;;8888:6:0;8821:83;;37853:126;;;;;;;;;;-1:-1:-1;37853:126:0;;;;;:::i;:::-;;:::i;38590:145::-;;;;;;;;;;-1:-1:-1;38590:145:0;;;;;:::i;:::-;;:::i;21737:91::-;;;;;;;;;;;;;:::i;23888:124::-;;;;;;;;;;-1:-1:-1;23979:23:0;;23888:124;;23358:275;;;;;;;;;;-1:-1:-1;23358:275:0;;;;;:::i;:::-;;:::i;18805:93::-;;;;;;;;;;-1:-1:-1;18805:93:0;;;;-1:-1:-1;;;;;18805:93:0;;;9962:315;;;;;;;;;;;;;:::i;22266:173::-;;;;;;;;;;-1:-1:-1;22266:173:0;;;;;:::i;:::-;;:::i;38126:116::-;;;;;;;;;;-1:-1:-1;38126:116:0;;;;;:::i;:::-;;:::i;24028:112::-;;;;;;;;;;-1:-1:-1;24113:17:0;;24028:112;;38747:177;;;;;;;;;;-1:-1:-1;38747:177:0;;;;;:::i;:::-;;:::i;19902:35::-;;;;;;;;;;;;;;;;9710:236;;;;;;;;;;-1:-1:-1;9710:236:0;;;;;:::i;:::-;;:::i;22451:147::-;;;;;;;;;;-1:-1:-1;22451:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;22561:18:0;;;22532:7;22561:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22451:147;37605:114;;;;;;;;;;-1:-1:-1;37605:114:0;;;;;:::i;:::-;;:::i;37995:115::-;;;;;;;;;;-1:-1:-1;37995:115:0;;;;;:::i;:::-;;:::i;38254:170::-;;;;;;;;;;-1:-1:-1;38254:170:0;;;;;:::i;:::-;;:::i;9230:252::-;;;;;;;;;;-1:-1:-1;9230:252:0;;;;;:::i;:::-;;:::i;37735:102::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;;;;;;;;;37811:7:::1;:16:::0;37735:102::o;21638:87::-;21675:13;21710:5;21703:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21638:87;:::o;39338:196::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;39394:30:::1;39419:4;39394:24;:30::i;:::-;39447:1;39437:7;:11:::0;39477:1:::1;39461:13;:17:::0;39506:18:::1;39491:12;:33:::0;39338:196::o;22610:167::-;22685:4;22704:39;7386:10;22727:7;22736:6;22704:8;:39::i;:::-;-1:-1:-1;22763:4:0;22610:167;;;;;:::o;22789:321::-;22887:4;22906:36;22916:6;22924:9;22935:6;22906:9;:36::i;:::-;22955:121;22964:6;7386:10;22986:89;23024:6;22986:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22986:19:0;;;;;;:11;:19;;;;;;;;7386:10;22986:33;;;;;;;;;;:37;:89::i;:::-;22955:8;:121::i;:::-;-1:-1:-1;23096:4:0;22789:321;;;;;:::o;38940:156::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;39012:14:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39012:25:0;;::::1;;::::0;;39055:31:::1;::::0;::::1;::::0;::::1;::::0;39029:8;3547:14:1;3540:22;3522:41;;3510:2;3495:18;;3382:187;39055:31:0::1;;;;;;;;38940:156:::0;:::o;25031:261::-;25097:7;25138;;25127;:18;;25119:73;;;;-1:-1:-1;;;25119:73:0;;5017:2:1;25119:73:0;;;4999:21:1;5056:2;5036:18;;;5029:30;5095:34;5075:18;;;5068:62;-1:-1:-1;;;5146:18:1;;;5139:40;5196:19;;25119:73:0;4815:406:1;25119:73:0;25205:19;25228:10;:8;:10::i;:::-;25205:33;-1:-1:-1;25258:24:0;:7;25205:33;25258:11;:24::i;:::-;25251:31;25031:261;-1:-1:-1;;;25031:261:0:o;25667:501::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25751:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25743:60;;;::::0;-1:-1:-1;;;25743:60:0;;6238:2:1;25743:60:0::1;::::0;::::1;6220:21:1::0;6277:2;6257:18;;;6250:30;6316:29;6296:18;;;6289:57;6363:18;;25743:60:0::1;6036:351:1::0;25743:60:0::1;25821:9;25816:343;25840:9;:16:::0;25836:20;::::1;25816:343;;;25900:7;-1:-1:-1::0;;;;;25884:23:0::1;:9;25894:1;25884:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25884:12:0::1;:23;25880:266;;;25945:9;25955:16:::0;;:20:::1;::::0;25974:1:::1;::::0;25955:20:::1;:::i;:::-;25945:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25930:9:::1;:12:::0;;-1:-1:-1;;;;;25945:31:0;;::::1;::::0;25940:1;;25930:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25930:46:0::1;-1:-1:-1::0;;;;;25930:46:0;;::::1;;::::0;;25997:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;26038:11:::1;:20:::0;;;;:28;;-1:-1:-1;;26038:28:0::1;::::0;;26087:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;26087:15:0;;;;;-1:-1:-1;;;;;;26087:15:0::1;::::0;;;;;25816:343:::1;25667:501:::0;:::o;25880:266::-:1;25858:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25816:343;;;;25667:501:::0;:::o;23122:224::-;7386:10;23210:4;23261:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23261:34:0;;;;;;;;;;23210:4;;23229:83;;23252:7;;23261:50;;23300:10;23261:38;:50::i;24156:391::-;7386:10;24210:14;24261:19;;;:11;:19;;;;;;;;24260:20;24252:77;;;;-1:-1:-1;;;24252:77:0;;9305:2:1;24252:77:0;;;9287:21:1;9344:2;9324:18;;;9317:30;9383:34;9363:18;;;9356:62;-1:-1:-1;;;9434:18:1;;;9427:42;9486:19;;24252:77:0;9103:408:1;24252:77:0;24343:15;24367:19;24378:7;24367:10;:19::i;:::-;-1:-1:-1;;;;;;;;;24417:15:0;;;;;;:7;:15;;;;;;24342:44;;-1:-1:-1;24417:28:0;;:15;-1:-1:-1;24342:44:0;24417:19;:28::i;:::-;-1:-1:-1;;;;;24399:15:0;;;;;;:7;:15;;;;;:46;24468:7;;:20;;24480:7;24468:11;:20::i;:::-;24458:7;:30;24514:10;;:23;;24529:7;24514:14;:23::i;:::-;24501:10;:36;-1:-1:-1;;;24156:391:0:o;37474:115::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37545:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;37545:34:0::1;37575:4;37545:34;::::0;;37474:115::o;24565:454::-;24655:7;24696;;24685;:18;;24677:62;;;;-1:-1:-1;;;24677:62:0;;6594:2:1;24677:62:0;;;6576:21:1;6633:2;6613:18;;;6606:30;6672:33;6652:18;;;6645:61;6723:18;;24677:62:0;6392:355:1;24677:62:0;24757:17;24752:258;;24794:15;24818:19;24829:7;24818:10;:19::i;:::-;-1:-1:-1;24793:44:0;;-1:-1:-1;24854:14:0;;-1:-1:-1;;;;;24854:14:0;24752:258;24907:23;24938:19;24949:7;24938:10;:19::i;:::-;-1:-1:-1;24905:52:0;;-1:-1:-1;24974:22:0;;-1:-1:-1;;;;;24974:22:0;39112:210;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;39173:31:::1;39198:5;39173:24;:31::i;:::-;39227:1;39217:7;:11:::0;;;39241:13:::1;:17:::0;39286:26:::1;39271:12;:41:::0;39112:210::o;25304:351::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25393:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25392:21;25384:61;;;::::0;-1:-1:-1;;;25384:61:0;;6238:2:1;25384:61:0::1;::::0;::::1;6220:21:1::0;6277:2;6257:18;;;6250:30;6316:29;6296:18;;;6289:57;6363:18;;25384:61:0::1;6036:351:1::0;25384:61:0::1;-1:-1:-1::0;;;;;25461:16:0;::::1;25480:1;25461:16:::0;;;:7:::1;:16;::::0;;;;;:20;25458:112:::1;;-1:-1:-1::0;;;;;25539:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;25519:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;25500:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;25458:112:::1;-1:-1:-1::0;;;;;25582:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;25582:27:0::1;25605:4;25582:27:::0;;::::1;::::0;;;25622:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;25622:23:0::1;::::0;;::::1;::::0;;25304:351::o;22050:204::-;-1:-1:-1;;;;;22142:20:0;;22116:7;22142:20;;;:11;:20;;;;;;;;22138:49;;;-1:-1:-1;;;;;;22171:16:0;;;;;:7;:16;;;;;;;22050:204::o;22138:49::-;-1:-1:-1;;;;;22227:16:0;;;;;;:7;:16;;;;;;22207:37;;:19;:37::i;9064:154::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;9173:1:::1;9157:6:::0;;9136:40:::1;::::0;-1:-1:-1;;;;;9157:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;9136:40:0;9173:1;;9136:40:::1;9206:1;9189:19:::0;;-1:-1:-1;;;;;;9189:19:0::1;::::0;;9064:154::o;38441:137::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38547:21:::1;:12:::0;38562:6:::1;38547:21;:::i;:::-;38527:17;:41:::0;-1:-1:-1;38441:137:0:o;37853:126::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;37941:13:::1;:28:::0;37853:126::o;38590:145::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38680:16:::1;:45:::0;;-1:-1:-1;;;;;;38680:45:0::1;-1:-1:-1::0;;;;;38680:45:0;;;::::1;::::0;;;::::1;::::0;;38590:145::o;21737:91::-;21776:13;21811:7;21804:14;;;;;:::i;23358:275::-;23451:4;23470:129;7386:10;23493:7;23502:96;23541:15;23502:96;;;;;;;;;;;;;;;;;7386:10;23502:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23502:34:0;;;;;;;;;;;;:38;:96::i;9962:315::-;10016:14;;-1:-1:-1;;;;;10016:14:0;10034:10;10016:28;10008:76;;;;-1:-1:-1;;;10008:76:0;;9718:2:1;10008:76:0;;;9700:21:1;9757:2;9737:18;;;9730:30;9796:34;9776:18;;;9769:62;-1:-1:-1;;;9847:18:1;;;9840:33;9890:19;;10008:76:0;9516:399:1;10008:76:0;10123:9;;10105:15;:27;10097:72;;;;-1:-1:-1;;;10097:72:0;;8945:2:1;10097:72:0;;;8927:21:1;8984:2;8964:18;;;8957:30;9023:33;9003:18;;;8996:61;9074:18;;10097:72:0;8743:355:1;10097:72:0;10216:14;;;10208:6;;10187:44;;-1:-1:-1;;;;;10216:14:0;;;;10208:6;;;;-1:-1:-1;;;;;;;;;;;10187:44:0;;10253:14;;;10244:23;;-1:-1:-1;;;;;;10244:23:0;-1:-1:-1;;;;;10253:14:0;;;10244:23;;;;;;9962:315::o;22266:173::-;22344:4;22363:42;7386:10;22387:9;22398:6;22363:9;:42::i;38126:116::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38206:16:::1;:26:::0;38126:116::o;38747:177::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38826:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;38826:32:0;;::::1;;::::0;;38876:38:::1;::::0;::::1;::::0;::::1;::::0;38850:8;3547:14:1;3540:22;3522:41;;3510:2;3495:18;;3382:187;9710:236:0;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;9793:6:::1;::::0;;;9776:23;;-1:-1:-1;;;;;;9776:23:0;;::::1;-1:-1:-1::0;;;;;9793:6:0;::::1;9776:23;::::0;;;9812:19:::1;::::0;;9856:22:::1;9874:4:::0;9856:15:::1;:22;:::i;:::-;9844:9;:34:::0;9933:1:::1;9917:6:::0;;9896:40:::1;::::0;-1:-1:-1;;;;;9917:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;9896:40:0;9933:1;;9896:40:::1;9710:236:::0;:::o;37605:114::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37674:27:0::1;37704:5;37674:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;37674:35:0::1;::::0;;37605:114::o;37995:115::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38074:12:::1;:26:::0;37995:115::o;38254:170::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;38364:23:::1;:50:::0;38254:170::o;9230:252::-;8965:6;;-1:-1:-1;;;;;8965:6:0;7386:10;8965:22;8957:67;;;;-1:-1:-1;;;8957:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9321:22:0;::::1;9313:73;;;::::0;-1:-1:-1;;;9313:73:0;;5428:2:1;9313:73:0::1;::::0;::::1;5410:21:1::0;5467:2;5447:18;;;5440:30;5506:34;5486:18;;;5479:62;-1:-1:-1;;;5557:18:1;;;5550:36;5603:19;;9313:73:0::1;5226:402:1::0;9313:73:0::1;9425:6;::::0;;9404:38:::1;::::0;-1:-1:-1;;;;;9404:38:0;;::::1;::::0;9425:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;9404:38:0;::::1;9455:6;:17:::0;;-1:-1:-1;;;;;;9455:17:0::1;-1:-1:-1::0;;;;;9455:17:0;;;::::1;::::0;;;::::1;::::0;;9230:252::o;26180:349::-;-1:-1:-1;;;;;26275:19:0;;26267:68;;;;-1:-1:-1;;;26267:68:0;;8540:2:1;26267:68:0;;;8522:21:1;8579:2;8559:18;;;8552:30;8618:34;8598:18;;;8591:62;-1:-1:-1;;;8669:18:1;;;8662:34;8713:19;;26267:68:0;8338:400:1;26267:68:0;-1:-1:-1;;;;;26356:21:0;;26348:68;;;;-1:-1:-1;;;26348:68:0;;5835:2:1;26348:68:0;;;5817:21:1;5874:2;5854:18;;;5847:30;5913:34;5893:18;;;5886:62;-1:-1:-1;;;5964:18:1;;;5957:32;6006:19;;26348:68:0;5633:398:1;26348:68:0;-1:-1:-1;;;;;26433:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26487:32;;10066:25:1;;;26487:32:0;;10039:18:1;26487:32:0;;;;;;;26180:349;;;:::o;26541:1736::-;-1:-1:-1;;;;;26673:18:0;;26665:68;;;;-1:-1:-1;;;26665:68:0;;8134:2:1;26665:68:0;;;8116:21:1;8173:2;8153:18;;;8146:30;8212:34;8192:18;;;8185:62;-1:-1:-1;;;8263:18:1;;;8256:35;8308:19;;26665:68:0;7932:401:1;26665:68:0;-1:-1:-1;;;;;26754:16:0;;26746:64;;;;-1:-1:-1;;;26746:64:0;;4613:2:1;26746:64:0;;;4595:21:1;4652:2;4632:18;;;4625:30;4691:34;4671:18;;;4664:62;-1:-1:-1;;;4742:18:1;;;4735:33;4785:19;;26746:64:0;4411:399:1;26746:64:0;26840:1;26831:6;:10;26823:64;;;;-1:-1:-1;;;26823:64:0;;7724:2:1;26823:64:0;;;7706:21:1;7763:2;7743:18;;;7736:30;7802:34;7782:18;;;7775:62;-1:-1:-1;;;7853:18:1;;;7846:39;7902:19;;26823:64:0;7522:405:1;26823:64:0;8859:7;8888:6;-1:-1:-1;;;;;26911:15:0;;;8888:6;;26911:15;;;;:32;;-1:-1:-1;8859:7:0;8888:6;-1:-1:-1;;;;;26930:13:0;;;8888:6;;26930:13;;26911:32;26908:143;;;26980:12;;26970:6;:22;;26962:75;;;;-1:-1:-1;;;26962:75:0;;6954:2:1;26962:75:0;;;6936:21:1;6993:2;6973:18;;;6966:30;7032:34;7012:18;;;7005:62;-1:-1:-1;;;7083:18:1;;;7076:38;7131:19;;26962:75:0;6752:404:1;26962:75:0;27067:28;27098:24;27116:4;27098:9;:24::i;:::-;27190:23;;27243:16;;27067:55;;-1:-1:-1;27166:47:0;;;;27243:16;;27242:17;:42;;;;-1:-1:-1;27263:21:0;;;;;;;27242:42;:65;;;;;27294:13;-1:-1:-1;;;;;27288:19:0;:2;-1:-1:-1;;;;;27288:19:0;;27242:65;27238:713;;;27330:23;27326:171;;;27399:23;;27376:46;;27443:32;27454:20;27443:10;:32::i;:::-;27570:14;;27528:21;;27570:14;;;;;:47;;;;;27606:10;27588:7;:29;27570:47;27566:372;;;27674:17;;27664:7;:27;27660:83;;;-1:-1:-1;27726:17:0;;27660:83;27878:16;;27857:56;;-1:-1:-1;;;;;27878:16:0;27896;:7;27908:3;27896:11;:16::i;:::-;27857:20;:56::i;:::-;27309:642;27238:713;-1:-1:-1;;;;;28108:24:0;;27975:12;28108:24;;;:18;:24;;;;;;27990:4;;28108:24;;;:50;;-1:-1:-1;;;;;;28136:22:0;;;;;;:18;:22;;;;;;;;28108:50;28105:100;;;-1:-1:-1;28186:5:0;28105:100;28229:38;28244:4;28249:2;28252:6;28259:7;28229:14;:38::i;:::-;26652:1625;;;26541:1736;;;:::o;5141:240::-;5261:7;5322:12;5314:6;;;;5306:29;;;;-1:-1:-1;;;5306:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;5357:5:0;;;5141:240::o;35377:169::-;35418:7;35441:15;35458;35477:19;:17;:19::i;:::-;35440:56;;-1:-1:-1;35440:56:0;-1:-1:-1;35516:20:0;35440:56;;35516:11;:20::i;:::-;35509:27;;;;35377:169;:::o;3999:98::-;4057:7;4084:5;4088:1;4084;:5;:::i;2862:98::-;2920:7;2947:5;2951:1;2947;:5;:::i;34133:427::-;34192:7;34201;34210;34219;34228;34237;34260:23;34285:12;34299:18;34321:20;34333:7;34321:11;:20::i;:::-;34259:82;;;;;;34355:15;34372:23;34397:12;34413:50;34425:7;34434:4;34440:10;34452;:8;:10::i;:::-;34413:11;:50::i;:::-;34354:109;;;;-1:-1:-1;34354:109:0;;-1:-1:-1;34516:15:0;;-1:-1:-1;34533:4:0;;-1:-1:-1;34539:10:0;;-1:-1:-1;34133:427:0;;-1:-1:-1;;;;;34133:427:0:o;3243:98::-;3301:7;3328:5;3332:1;3328;:5;:::i;28289:451::-;20951:16;:23;;-1:-1:-1;;20951:23:0;20970:4;20951:23;;;28408:21:::1;28442:38;28459:20:::0;28442:16:::1;:38::i;:::-;28493:26;28522:41;:21;28548:14:::0;28522:25:::1;:41::i;:::-;28640:16;::::0;28700::::1;::::0;28681:13:::1;::::0;28493:70;;-1:-1:-1;28619:99:0::1;::::0;-1:-1:-1;;;;;28640:16:0;;::::1;::::0;28658:59:::1;::::0;28700:16;28658:37:::1;::::0;28493:70;;28658:22:::1;:37::i;:::-;:41:::0;::::1;:59::i;28619:99::-;-1:-1:-1::0;;21001:16:0;:24;;-1:-1:-1;;21001:24:0;;;-1:-1:-1;28289:451:0:o;39550:130::-;39644:26;;-1:-1:-1;;;;;39644:18:0;;;:26;;;;;39663:6;;39644:26;;;;39663:6;39644:18;:26;;;;;;;;;;;;;;;;;;;;;39550:130;;:::o;30812:736::-;30925:7;30921:42;;30949:14;:12;:14::i;:::-;-1:-1:-1;;;;;30992:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;31016:22:0;;;;;;:11;:22;;;;;;;;31015:23;30992:46;30988:483;;;31057:48;31079:6;31087:9;31098:6;31057:21;:48::i;:::-;30988:483;;;-1:-1:-1;;;;;31130:19:0;;;;;;:11;:19;;;;;;;;31129:20;:46;;;;-1:-1:-1;;;;;;31153:22:0;;;;;;:11;:22;;;;;;;;31129:46;31125:346;;;31194:46;31214:6;31222:9;31233:6;31194:19;:46::i;31125:346::-;-1:-1:-1;;;;;31264:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;31287:22:0;;;;;;:11;:22;;;;;;;;31264:45;31260:211;;;31328:48;31350:6;31358:9;31369:6;31328:21;:48::i;31260:211::-;31413:44;31431:6;31439:9;31450:6;31413:17;:44::i;:::-;31499:7;31495:43;;31523:15;37244;;37234:7;:25;37288:21;;37272:13;:37;37188:131;31523:15;30812:736;;;;:::o;35558:581::-;35657:7;;35695;;35608;;;;;35721:297;35745:9;:16;35741:20;;35721:297;;;35813:7;35789;:21;35797:9;35807:1;35797:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35797:12:0;35789:21;;;;;;;;;;;;;:31;;:66;;;35848:7;35824;:21;35832:9;35842:1;35832:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35832:12:0;35824:21;;;;;;;;;;;;;:31;35789:66;35785:97;;;35865:7;;35874;;35857:25;;;;;;;35558:581;;:::o;35785:97::-;35909:34;35921:7;:21;35929:9;35939:1;35929:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35929:12:0;35921:21;;;;;;;;;;;;;35909:7;;:11;:34::i;:::-;35899:44;;35970:34;35982:7;:21;35990:9;36000:1;35990:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35990:12:0;35982:21;;;;;;;;;;;;;35970:7;;:11;:34::i;:::-;35960:44;-1:-1:-1;35763:3:0;;;;:::i;:::-;;;;35721:297;;;-1:-1:-1;36056:7:0;;36044;;:20;;:11;:20::i;:::-;36034:7;:30;36030:61;;;36074:7;;36083;;36066:25;;;;;;35558:581;;:::o;36030:61::-;36112:7;;36121;;-1:-1:-1;35558:581:0;-1:-1:-1;35558:581:0:o;34572:340::-;34632:7;34641;34650;34672:12;34687:24;34703:7;34687:15;:24::i;:::-;34672:39;;34724:18;34745:30;34767:7;34745:21;:30::i;:::-;34724:51;-1:-1:-1;34788:23:0;34814:33;34724:51;34814:17;:7;34826:4;34814:11;:17::i;:::-;:21;;:33::i;:::-;34788:59;34885:4;;-1:-1:-1;34891:10:0;;-1:-1:-1;34572:340:0;;-1:-1:-1;;;34572:340:0:o;34924:441::-;35039:7;;;;35097:24;:7;35109:11;35097;:24::i;:::-;35079:42;-1:-1:-1;35134:12:0;35149:21;:4;35158:11;35149:8;:21::i;:::-;35134:36;-1:-1:-1;35183:18:0;35204:27;:10;35219:11;35204:14;:27::i;:::-;35183:48;-1:-1:-1;35244:23:0;35270:33;35183:48;35270:17;:7;35282:4;35270:11;:17::i;:33::-;35324:7;;;;-1:-1:-1;35350:4:0;;-1:-1:-1;34924:441:0;;-1:-1:-1;;;;;;;34924:441:0:o;28919:702::-;29073:16;;;29087:1;29073:16;;;;;;;;29049:21;;29073:16;;;;;;;;;;-1:-1:-1;29073:16:0;29049:40;;29120:4;29102;29107:1;29102:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29102:23:0;;;-1:-1:-1;;;;;29102:23:0;;;;;29148:15;-1:-1:-1;;;;;29148:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29138:4;29143:1;29138:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;29138:32:0;;;-1:-1:-1;;;;;29138:32:0;;;;;29187:62;29204:4;29219:15;29237:11;29187:8;:62::i;:::-;29294:252;;-1:-1:-1;;;29294:252:0;;-1:-1:-1;;;;;29294:15:0;:66;;;;:252;;29377:11;;29405:1;;29451:4;;29480;;29518:15;;29294:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29576:35;29593:11;29606:4;29576:35;;;;;;;:::i;:::-;;;;;;;;28974:647;28919:702;:::o;3600:98::-;3658:7;3685:5;3689:1;3685;:5;:::i;36906:266::-;36954:7;;:12;:34;;;;-1:-1:-1;36970:13:0;;:18;36954:34;36951:46;;;36906:266::o;36951:46::-;37039:7;;;37021:15;:25;37083:13;;;37059:21;:37;-1:-1:-1;37121:11:0;;;;37145:17;36906:266::o;32699:579::-;32804:15;32821:23;32846:12;32860:23;32885:12;32899:18;32921:19;32932:7;32921:10;:19::i;:::-;-1:-1:-1;;;;;32968:15:0;;;;;;:7;:15;;;;;;32803:137;;-1:-1:-1;32803:137:0;;-1:-1:-1;32803:137:0;;-1:-1:-1;32803:137:0;-1:-1:-1;32803:137:0;-1:-1:-1;32803:137:0;-1:-1:-1;32968:28:0;;32988:7;32968:19;:28::i;:::-;-1:-1:-1;;;;;32950:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33027:7;:15;;;;:28;;33047:7;33027:19;:28::i;:::-;-1:-1:-1;;;;;33009:15:0;;;;;;;:7;:15;;;;;;:46;;;;33089:18;;;;;;;:39;;33112:15;33089:22;:39::i;:::-;-1:-1:-1;;;;;33068:18:0;;;;;;:7;:18;;;;;:60;33144:26;33159:10;33144:14;:26::i;:::-;33183:23;33195:4;33201;33183:11;:23::i;:::-;33241:9;-1:-1:-1;;;;;33224:44:0;33233:6;-1:-1:-1;;;;;33224:44:0;;33252:15;33224:44;;;;10066:25:1;;10054:2;10039:18;;9920:177;33224:44:0;;;;;;;;32790:488;;;;;;32699:579;;;:::o;32088:599::-;32191:15;32208:23;32233:12;32247:23;32272:12;32286:18;32308:19;32319:7;32308:10;:19::i;:::-;-1:-1:-1;;;;;32355:15:0;;;;;;:7;:15;;;;;;32190:137;;-1:-1:-1;32190:137:0;;-1:-1:-1;32190:137:0;;-1:-1:-1;32190:137:0;-1:-1:-1;32190:137:0;-1:-1:-1;32190:137:0;-1:-1:-1;32355:28:0;;32190:137;32355:19;:28::i;:::-;-1:-1:-1;;;;;32337:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;32417:18;;;;;:7;:18;;;;;:39;;32440:15;32417:22;:39::i;:::-;-1:-1:-1;;;;;32396:18:0;;;;;;:7;:18;;;;;;;;:60;;;;32490:7;:18;;;;:39;;32513:15;32490:22;:39::i;33290:657::-;33395:15;33412:23;33437:12;33451:23;33476:12;33490:18;33512:19;33523:7;33512:10;:19::i;:::-;-1:-1:-1;;;;;33559:15:0;;;;;;:7;:15;;;;;;33394:137;;-1:-1:-1;33394:137:0;;-1:-1:-1;33394:137:0;;-1:-1:-1;33394:137:0;-1:-1:-1;33394:137:0;-1:-1:-1;33394:137:0;-1:-1:-1;33559:28:0;;33579:7;33559:19;:28::i;:::-;-1:-1:-1;;;;;33541:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33618:7;:15;;;;:28;;33638:7;33618:19;:28::i;31560:516::-;31661:15;31678:23;31703:12;31717:23;31742:12;31756:18;31778:19;31789:7;31778:10;:19::i;:::-;-1:-1:-1;;;;;31828:15:0;;;;;;:7;:15;;;;;;31660:137;;-1:-1:-1;31660:137:0;;-1:-1:-1;31660:137:0;;-1:-1:-1;31660:137:0;-1:-1:-1;31660:137:0;-1:-1:-1;31660:137:0;-1:-1:-1;31828:28:0;;31660:137;31828:19;:28::i;36538:162::-;36602:7;36631:59;36672:5;36631:20;36643:7;;36631;:11;;:20;;;;:::i;:::-;:24;;:59::i;36716:174::-;36786:7;36815:65;36862:5;36815:26;36827:13;;36815:7;:11;;:26;;;;:::i;36155:367::-;36220:19;36243:10;:8;:10::i;:::-;36220:33;-1:-1:-1;36266:18:0;36287:27;:10;36220:33;36287:14;:27::i;:::-;36368:4;36352:22;;;;:7;:22;;;;;;36266:48;;-1:-1:-1;36352:38:0;;36266:48;36352:26;:38::i;:::-;36343:4;36327:22;;;;:7;:22;;;;;;;;:63;;;;36406:11;:26;;;;;;36403:109;;;36490:4;36474:22;;;;:7;:22;;;;;;:38;;36501:10;36474:26;:38::i;:::-;36465:4;36449:22;;;;:7;:22;;;;;:63;36207:315;;36155:367;:::o;33959:153::-;34039:7;;:17;;34051:4;34039:11;:17::i;:::-;34029:7;:27;34082:10;;:20;;34097:4;34082:14;:20::i;:::-;34069:10;:33;-1:-1:-1;;33959:153:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1541:315:1:o;1861:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:26;2025:9;2009:26;:::i;2046:180::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:52;;;2174:1;2171;2164:12;2126:52;-1:-1:-1;2197:23:1;;2046:180;-1:-1:-1;2046:180:1:o;2231:248::-;2296:6;2304;2357:2;2345:9;2336:7;2332:23;2328:32;2325:52;;;2373:1;2370;2363:12;2325:52;2409:9;2396:23;2386:33;;2438:35;2469:2;2458:9;2454:18;2438:35;:::i;:::-;2428:45;;2231:248;;;;;:::o;2484:461::-;2537:3;2575:5;2569:12;2602:6;2597:3;2590:19;2628:4;2657:2;2652:3;2648:12;2641:19;;2694:2;2687:5;2683:14;2715:1;2725:195;2739:6;2736:1;2733:13;2725:195;;;2804:13;;-1:-1:-1;;;;;2800:39:1;2788:52;;2860:12;;;;2895:15;;;;2836:1;2754:9;2725:195;;;-1:-1:-1;2936:3:1;;2484:461;-1:-1:-1;;;;;2484:461:1:o;3809:597::-;3921:4;3950:2;3979;3968:9;3961:21;4011:6;4005:13;4054:6;4049:2;4038:9;4034:18;4027:34;4079:1;4089:140;4103:6;4100:1;4097:13;4089:140;;;4198:14;;;4194:23;;4188:30;4164:17;;;4183:2;4160:26;4153:66;4118:10;;4089:140;;;4247:6;4244:1;4241:13;4238:91;;;4317:1;4312:2;4303:6;4292:9;4288:22;4284:31;4277:42;4238:91;-1:-1:-1;4390:2:1;4369:15;-1:-1:-1;;4365:29:1;4350:45;;;;4397:2;4346:54;;3809:597;-1:-1:-1;;;3809:597:1:o;7161:356::-;7363:2;7345:21;;;7382:18;;;7375:30;7441:34;7436:2;7421:18;;7414:62;7508:2;7493:18;;7161:356::o;10102:332::-;10309:6;10298:9;10291:25;10352:2;10347;10336:9;10332:18;10325:30;10272:4;10372:56;10424:2;10413:9;10409:18;10401:6;10372:56;:::i;:::-;10364:64;10102:332;-1:-1:-1;;;;10102:332:1:o;10439:582::-;10738:6;10727:9;10720:25;10781:6;10776:2;10765:9;10761:18;10754:34;10824:3;10819:2;10808:9;10804:18;10797:31;10701:4;10845:57;10897:3;10886:9;10882:19;10874:6;10845:57;:::i;:::-;-1:-1:-1;;;;;10938:32:1;;;;10933:2;10918:18;;10911:60;-1:-1:-1;11002:3:1;10987:19;10980:35;10837:65;10439:582;-1:-1:-1;;;10439:582:1:o;11215:128::-;11255:3;11286:1;11282:6;11279:1;11276:13;11273:39;;;11292:18;;:::i;:::-;-1:-1:-1;11328:9:1;;11215:128::o;11348:217::-;11388:1;11414;11404:132;;11458:10;11453:3;11449:20;11446:1;11439:31;11493:4;11490:1;11483:15;11521:4;11518:1;11511:15;11404:132;-1:-1:-1;11550:9:1;;11348:217::o;11570:168::-;11610:7;11676:1;11672;11668:6;11664:14;11661:1;11658:21;11653:1;11646:9;11639:17;11635:45;11632:71;;;11683:18;;:::i;:::-;-1:-1:-1;11723:9:1;;11570:168::o;11743:125::-;11783:4;11811:1;11808;11805:8;11802:34;;;11816:18;;:::i;:::-;-1:-1:-1;11853:9:1;;11743:125::o;11873:380::-;11952:1;11948:12;;;;11995;;;12016:61;;12070:4;12062:6;12058:17;12048:27;;12016:61;12123:2;12115:6;12112:14;12092:18;12089:38;12086:161;;;12169:10;12164:3;12160:20;12157:1;12150:31;12204:4;12201:1;12194:15;12232:4;12229:1;12222:15;12086:161;;11873:380;;;:::o;12258:135::-;12297:3;-1:-1:-1;;12318:17:1;;12315:43;;;12338:18;;:::i;:::-;-1:-1:-1;12385:1:1;12374:13;;12258:135::o;12398:127::-;12459:10;12454:3;12450:20;12447:1;12440:31;12490:4;12487:1;12480:15;12514:4;12511:1;12504:15;12530:127;12591:10;12586:3;12582:20;12579:1;12572:31;12622:4;12619:1;12612:15;12646:4;12643:1;12636:15;12662:127;12723:10;12718:3;12714:20;12711:1;12704:31;12754:4;12751:1;12744:15;12778:4;12775:1;12768:15;12926:131;-1:-1:-1;;;;;13001:31:1;;12991:42;;12981:70;;13047:1;13044;13037:12;12981:70;12926:131;:::o
Swarm Source
ipfs://fe380180148e096c40913f16c618c5a8f9e263788fe04a6e6010445e66881686
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.