ERC-20
Overview
Max Total Supply
1,000,000,000,000 SAFEREUM2.0
Holders
140
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
2,676,423.51725214 SAFEREUM2.0Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SAFEREUM2
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-09 */ // ░██████╗░█████╗░███████╗██╗░░░██╗ ██████╗░██╗░░░██╗ // ██╔════╝██╔══██╗██╔════╝██║░░░██║ ██╔══██╗╚██╗░██╔╝ // ╚█████╗░███████║█████╗░░██║░░░██║ ██████╦╝░╚████╔╝░ // ░╚═══██╗██╔══██║██╔══╝░░██║░░░██║ ██╔══██╗░░╚██╔╝░░ // ██████╔╝██║░░██║██║░░░░░╚██████╔╝ ██████╦╝░░░██║░░░ // ╚═════╝░╚═╝░░╚═╝╚═╝░░░░░░╚═════╝░ ╚═════╝░░░░╚═╝░░░ // ░█████╗░░█████╗░██╗███╗░░██╗░██████╗██╗░░░██╗██╗░░░░░████████╗░░░███╗░░██╗███████╗████████╗ // ██╔══██╗██╔══██╗██║████╗░██║██╔════╝██║░░░██║██║░░░░░╚══██╔══╝░░░████╗░██║██╔════╝╚══██╔══╝ // ██║░░╚═╝██║░░██║██║██╔██╗██║╚█████╗░██║░░░██║██║░░░░░░░░██║░░░░░░██╔██╗██║█████╗░░░░░██║░░░ // ██║░░██╗██║░░██║██║██║╚████║░╚═══██╗██║░░░██║██║░░░░░░░░██║░░░░░░██║╚████║██╔══╝░░░░░██║░░░ // ╚█████╔╝╚█████╔╝██║██║░╚███║██████╔╝╚██████╔╝███████╗░░░██║░░░██╗██║░╚███║███████╗░░░██║░░░ // ░╚════╝░░╚════╝░╚═╝╚═╝░░╚══╝╚═════╝░░╚═════╝░╚══════╝░░░╚═╝░░░╚═╝╚═╝░░╚══╝╚══════╝░░░╚═╝░░░ // SAFU By Coinsult // SPDX-License-Identifier: MIT pragma solidity 0.8.17; 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; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal returns(bool){ require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); return success; } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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; } 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; } 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); } 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 SAFEREUM2 is Context, IERC20, Ownable { using Address for address; using Address for address payable; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) private _isExcluded; address[] private _excluded; string private _name = "Safereum2.0"; string private _symbol = "SAFEREUM2.0"; uint8 private _decimals = 9; uint256 private constant MAX = type(uint256).max; uint256 private _tTotal = 1e12 * (10 ** _decimals); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 private taxFeeonBuy; uint256 private taxFeeonSell; uint256 private liquidityFeeonBuy; uint256 private liquidityFeeonSell; uint256 private growthFundFeeonBuy; uint256 private growthFundFeeonSell; uint256 private _taxFee; uint256 private _liquidityFee; uint256 private _growthFundFee; uint256 public totalBuyFees; uint256 public totalSellFees; address public growthFundWallet; bool public walletToWalletTransferWithoutFee; address private DEAD = 0x000000000000000000000000000000000000dEaD; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private inSwapAndLiquify; bool public swapEnabled; bool public tradingEnabled; uint256 public swapTokensAtAmount; event ExcludeFromFees(address indexed account, bool isExcluded); event GrowthFundWalletChanged(address growthFundWallet); event SwapEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity); event SwapAndSendGrowthFund(uint256 tokensSwapped, uint256 bnbSend); event SwapTokensAtAmountUpdated(uint256 amount); event BuyFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 growthFundFee); event SellFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 growthFundFee); event WalletToWalletTransferWithoutFeeEnabled(bool enabled); constructor() { address router; if (block.chainid == 56) { router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; } else if (block.chainid == 97) { router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; } else if (block.chainid == 1 || block.chainid == 5) { router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else { revert(); } IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _approve(address(this), address(uniswapV2Router), MAX); taxFeeonBuy = 2; taxFeeonSell = 2; liquidityFeeonBuy = 0; liquidityFeeonSell = 0; growthFundFeeonBuy = 1; growthFundFeeonSell = 1; totalBuyFees = taxFeeonBuy + liquidityFeeonBuy + growthFundFeeonBuy; totalSellFees = taxFeeonSell + liquidityFeeonSell + growthFundFeeonSell; growthFundWallet = 0xEbB69Ad6a5de38Ba060DB3672a8F07459d31C412; swapEnabled = true; swapTokensAtAmount = _tTotal / 5000; walletToWalletTransferWithoutFee = false; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(0xdead)] = true; _isExcludedFromFees[address(this)] = true; _isExcluded[address(this)] = true; _isExcluded[address(0x5E5b9bE5fd939c578ABE5800a90C566eeEbA44a5)] = true; //pinklock _isExcluded[address(0xdead)] = true; _isExcluded[address(uniswapV2Pair)] = true; _rOwned[owner()] = _rTotal; _tOwned[owner()] = _tTotal; emit Transfer(address(0), owner(), _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()] - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalReflectionDistributed() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _rTotal = _rTotal - rAmount; _tFeeTotal = _tFeeTotal + 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 / 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 included"); 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; } } } receive() external payable {} function claimStuckTokens(address token) external onlyOwner { require(token != address(this), "Owner cannot claim native tokens"); if (token == address(0x0)) { payable(msg.sender).sendValue(address(this).balance); return; } IERC20 ERC20token = IERC20(token); uint256 balance = ERC20token.balanceOf(address(this)); ERC20token.transfer(msg.sender, balance); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal - rFee; _tFeeTotal = _tFeeTotal + tFee; } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tGrowthFund) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tGrowthFund, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tGrowthFund); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tGrowthFund = calculateGrowthFundFee(tAmount); uint256 tTransferAmount = tAmount - tFee - tLiquidity - tGrowthFund; return (tTransferAmount, tFee, tLiquidity, tGrowthFund); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tGrowthFund, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount * currentRate; uint256 rFee = tFee * currentRate; uint256 rLiquidity = tLiquidity * currentRate; uint256 rGrowthFund = tGrowthFund * currentRate; uint256 rTransferAmount = rAmount - rFee - rLiquidity - rGrowthFund; return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply / 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 - _rOwned[_excluded[i]]; tSupply = tSupply - _tOwned[_excluded[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { if (tLiquidity > 0) { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity * currentRate; _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity; if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity; } } function _takeGrowthFund(uint256 tGrowthFund) private { if (tGrowthFund > 0) { uint256 currentRate = _getRate(); uint256 rGrowthFund = tGrowthFund * currentRate; _rOwned[address(this)] = _rOwned[address(this)] + rGrowthFund; if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)] + tGrowthFund; } } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount * _taxFee / 100; } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount * _liquidityFee / 100; } function calculateGrowthFundFee(uint256 _amount) private view returns (uint256) { return _amount * _growthFundFee / 100; } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0 && _growthFundFee == 0) return; _taxFee = 0; _growthFundFee = 0; _liquidityFee = 0; } function setBuyFee() private{ if(_taxFee == taxFeeonBuy && _liquidityFee == liquidityFeeonBuy && _growthFundFee == growthFundFeeonBuy) return; _taxFee = taxFeeonBuy; _growthFundFee = growthFundFeeonBuy; _liquidityFee = liquidityFeeonBuy; } function setSellFee() private{ if(_taxFee == taxFeeonSell && _liquidityFee == liquidityFeeonSell && _growthFundFee == growthFundFeeonSell) return; _taxFee = taxFeeonSell; _growthFundFee = growthFundFeeonSell; _liquidityFee = liquidityFeeonSell; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function enableTrading() external onlyOwner{ require(tradingEnabled == false, "Trading is already enabled"); tradingEnabled = true; } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { require(tradingEnabled, "Trading is not enabled yet"); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if ( overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapEnabled ) { inSwapAndLiquify = true; uint256 growthFundShare = growthFundFeeonBuy + growthFundFeeonSell; uint256 liquidityShare = liquidityFeeonBuy + liquidityFeeonSell; uint256 totalShare = growthFundShare + liquidityShare; if(totalShare > 0) { if(liquidityShare > 0) { uint256 liquidityTokens = (contractTokenBalance * liquidityShare) / totalShare; swapAndLiquify(liquidityTokens); } if(growthFundShare > 0) { uint256 growthFundTokens = (contractTokenBalance * growthFundShare) / totalShare; swapAndSendGrowthFund(growthFundTokens); } } inSwapAndLiquify = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount); } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens / 2; uint256 otherHalf = tokens - half; uint256 initialBalance = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( half, 0, // accept any amount of ETH path, address(this), block.timestamp); uint256 newBalance = address(this).balance - initialBalance; uniswapV2Router.addLiquidityETH{value: newBalance}( address(this), otherHalf, 0, // slippage is unavoidable 0, // slippage is unavoidable DEAD, block.timestamp ); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapAndSendGrowthFund(uint256 tokenAmount) private { uint256 initialBalance = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp); uint256 newBalance = address(this).balance - initialBalance; payable(growthFundWallet).sendValue(newBalance); emit SwapAndSendGrowthFund(tokenAmount, newBalance); } function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner() { require(newAmount > totalSupply() / 1e5, "SwapTokensAtAmount must be greater than 0.001% of total supply"); swapTokensAtAmount = newAmount; emit SwapTokensAtAmountUpdated(newAmount); } function setSwapEnabled(bool _enabled) external onlyOwner { swapEnabled = _enabled; emit SwapEnabledUpdated(_enabled); } function _tokenTransfer(address sender, address recipient, uint256 amount) private { if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient] ) { removeAllFee(); }else if(recipient == uniswapV2Pair){ setSellFee(); }else if(sender == uniswapV2Pair){ setBuyFee(); }else if(walletToWalletTransferWithoutFee){ removeAllFee(); }else{ setSellFee(); } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tGrowthFund) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeGrowthFund(tGrowthFund); _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, uint256 tGrowthFund) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeGrowthFund(tGrowthFund); _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, uint256 tGrowthFund) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender] - tAmount; _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeGrowthFund(tGrowthFund); _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, uint256 tGrowthFund) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender] - tAmount; _rOwned[sender] = _rOwned[sender] - rAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeGrowthFund(tGrowthFund); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function changeGrowthFundWallet(address _growthFundWallet) external onlyOwner { require(_growthFundWallet != growthFundWallet, "GrowthFund wallet is already that address"); require(_growthFundWallet!=address(0), "GrowthFund wallet is the zero address"); growthFundWallet = _growthFundWallet; emit GrowthFundWalletChanged(growthFundWallet); } function setBuyFeePercentages(uint256 _taxFeeonBuy, uint256 _liquidityFeeonBuy, uint256 _growthFundFeeonBuy) external onlyOwner { taxFeeonBuy = _taxFeeonBuy; liquidityFeeonBuy = _liquidityFeeonBuy; growthFundFeeonBuy = _growthFundFeeonBuy; totalBuyFees = _taxFeeonBuy + _liquidityFeeonBuy + _growthFundFeeonBuy; require(totalBuyFees <= 10, "Buy fees cannot be greater than 10%"); emit BuyFeesChanged(taxFeeonBuy, liquidityFeeonBuy, growthFundFeeonBuy); } function setSellFeePercentages(uint256 _taxFeeonSell, uint256 _liquidityFeeonSell, uint256 _growthFundFeeonSell) external onlyOwner { taxFeeonSell = _taxFeeonSell; liquidityFeeonSell = _liquidityFeeonSell; growthFundFeeonSell = _growthFundFeeonSell; totalSellFees = _taxFeeonSell + _liquidityFeeonSell + _growthFundFeeonSell; require(totalSellFees <= 10, "Sell fees cannot be greater than 10%"); emit SellFeesChanged(taxFeeonSell, liquidityFeeonSell, growthFundFeeonSell); } function enableWalletToWalletTransferWithoutFee(bool enable) external onlyOwner { require(walletToWalletTransferWithoutFee != enable, "Wallet to wallet transfer without fee is already set to that value"); walletToWalletTransferWithoutFee = enable; emit WalletToWalletTransferWithoutFeeEnabled(enable); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"growthFundFee","type":"uint256"}],"name":"BuyFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"growthFundWallet","type":"address"}],"name":"GrowthFundWalletChanged","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":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"growthFundFee","type":"uint256"}],"name":"SellFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendGrowthFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"WalletToWalletTransferWithoutFeeEnabled","type":"event"},{"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":[{"internalType":"address","name":"_growthFundWallet","type":"address"}],"name":"changeGrowthFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableWalletToWalletTransferWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"growthFundWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonBuy","type":"uint256"},{"internalType":"uint256","name":"_growthFundFeeonBuy","type":"uint256"}],"name":"setBuyFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeonSell","type":"uint256"},{"internalType":"uint256","name":"_growthFundFeeonSell","type":"uint256"}],"name":"setSellFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"walletToWalletTransferWithoutFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600b60809081526a0536166657265756d322e360ac1b60a0526007906200002c908262000796565b5060408051808201909152600b81526a0534146455245554d322e360ac1b60208201526008906200005e908262000796565b506009805460ff1916811781556200007890600a62000977565b620000899064e8d4a510006200098f565b600a8190556200009c90600019620009bf565b620000aa90600019620009d6565b600b55601980546001600160a01b03191661dead179055348015620000ce57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000466038036200013757507310ed43c718714eb63d5aa57b78b54704e256024e62000193565b466061036200015c575073d99d1c33f9fc3444f8101754abc46c52416550d162000193565b46600114806200016c5750466005145b156200018e5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000193565b600080fd5b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd9190620009ec565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002719190620009ec565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e59190620009ec565b601b80546001600160a01b039283166001600160a01b031991821617909155601a8054928416929091168217905562000323903090600019620005b6565b6002600d819055600e8190556000600f81905560108190556001601181905560128190559162000354919062000a17565b62000360919062000a17565b601655601254601054600e5462000378919062000a17565b62000384919062000a17565b601755601880546001600160a01b03191673ebb69ad6a5de38ba060db3672a8f07459d31c412179055601b805460ff60a81b1916600160a81b179055600a54620003d2906113889062000a2d565b601c556018805460ff60a01b19169055600160046000620003fb6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600484527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054861660019081179091553082528382208054871682179055600590945282812080548616851790557ff82f0651e7e607eebff6c1d3d6f3f615f89d88d1b43fa353246ad10804ccc9e380548616851790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba8054861685179055601b54909116815290812080549093168217909255600b5491620004f66000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600a546002600062000531620006e260201b60201c565b6001600160a01b031681526020810191909152604001600020556200055e6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620005a691815260200190565b60405180910390a3505062000a44565b6001600160a01b0383166200061e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620006815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000615565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031690565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200071c57607f821691505b6020821081036200073d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200079157600081815260208120601f850160051c810160208610156200076c5750805b601f850160051c820191505b818110156200078d5782815560010162000778565b5050505b505050565b81516001600160401b03811115620007b257620007b2620006f1565b620007ca81620007c3845462000707565b8462000743565b602080601f831160018114620008025760008415620007e95750858301515b600019600386901b1c1916600185901b1785556200078d565b600085815260208120601f198616915b82811015620008335788860151825594840194600190910190840162000812565b5085821015620008525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008b95781600019048211156200089d576200089d62000862565b80851615620008ab57918102915b93841c93908002906200087d565b509250929050565b600082620008d25750600162000971565b81620008e15750600062000971565b8160018114620008fa5760028114620009055762000925565b600191505062000971565b60ff84111562000919576200091962000862565b50506001821b62000971565b5060208310610133831016604e8410600b84101617156200094a575081810a62000971565b62000956838362000878565b80600019048211156200096d576200096d62000862565b0290505b92915050565b60006200098860ff841683620008c1565b9392505050565b808202811582820484141762000971576200097162000862565b634e487b7160e01b600052601260045260246000fd5b600082620009d157620009d1620009a9565b500690565b8181038181111562000971576200097162000862565b600060208284031215620009ff57600080fd5b81516001600160a01b03811681146200098857600080fd5b8082018082111562000971576200097162000862565b60008262000a3f5762000a3f620009a9565b500490565b612e978062000a546000396000f3fe60806040526004361061023f5760003560e01c8063715018a61161012e578063b577554a116100ab578063dd62ed3e1161006f578063dd62ed3e146106d4578063e01af92c1461071a578063e2f456051461073a578063f2fde38b14610750578063f9d0831a1461077057600080fd5b8063b577554a14610653578063b9e9370014610668578063c02466681461067e578063d0a398141461069e578063d6a694f5146106b457600080fd5b806390a3dd9b116100f257806390a3dd9b146105be57806395d89b41146105de578063a457c2d7146105f3578063a9059cbb14610613578063afa4f3b21461063357600080fd5b8063715018a61461051d57806377725db01461053257806388f82020146105525780638a8c523c1461058b5780638da5cb5b146105a057600080fd5b80633bd5d173116101bc57806352390c021161018057806352390c02146104635780635342acb4146104835780635654d0b3146104bc5780636ddd1713146104dc57806370a08231146104fd57600080fd5b80633bd5d173146103c25780633e77bf7a146103e25780634549b0391461040257806349bd5a5e146104225780634ada218b1461044257600080fd5b806323b872dd1161020357806323b872dd1461031e5780632d8381191461033e578063313ce5671461035e5780633685d4191461038057806339509351146103a257600080fd5b806306fdde031461024b578063095ea7b3146102765780631529fbbf146102a65780631694505e146102c757806318160ddd146102ff57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b50610260610790565b60405161026d9190612a5d565b60405180910390f35b34801561028257600080fd5b50610296610291366004612ac0565b610822565b604051901515815260200161026d565b3480156102b257600080fd5b5060185461029690600160a01b900460ff1681565b3480156102d357600080fd5b50601a546102e7906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b34801561030b57600080fd5b50600a545b60405190815260200161026d565b34801561032a57600080fd5b50610296610339366004612aec565b610839565b34801561034a57600080fd5b50610310610359366004612b2d565b61088b565b34801561036a57600080fd5b5060095460405160ff909116815260200161026d565b34801561038c57600080fd5b506103a061039b366004612b46565b610914565b005b3480156103ae57600080fd5b506102966103bd366004612ac0565b610aca565b3480156103ce57600080fd5b506103a06103dd366004612b2d565b610b01565b3480156103ee57600080fd5b506103a06103fd366004612b46565b610bef565b34801561040e57600080fd5b5061031061041d366004612b71565b610d42565b34801561042e57600080fd5b50601b546102e7906001600160a01b031681565b34801561044e57600080fd5b50601b5461029690600160b01b900460ff1681565b34801561046f57600080fd5b506103a061047e366004612b46565b610dd1565b34801561048f57600080fd5b5061029661049e366004612b46565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104c857600080fd5b506103a06104d7366004612ba1565b610f24565b3480156104e857600080fd5b50601b5461029690600160a81b900460ff1681565b34801561050957600080fd5b50610310610518366004612b46565b61102e565b34801561052957600080fd5b506103a061108d565b34801561053e57600080fd5b506018546102e7906001600160a01b031681565b34801561055e57600080fd5b5061029661056d366004612b46565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561059757600080fd5b506103a0611101565b3480156105ac57600080fd5b506000546001600160a01b03166102e7565b3480156105ca57600080fd5b506103a06105d9366004612bbe565b61119a565b3480156105ea57600080fd5b50610260611298565b3480156105ff57600080fd5b5061029661060e366004612ac0565b6112a7565b34801561061f57600080fd5b5061029661062e366004612ac0565b6112de565b34801561063f57600080fd5b506103a061064e366004612b2d565b6112eb565b34801561065f57600080fd5b50600c54610310565b34801561067457600080fd5b5061031060165481565b34801561068a57600080fd5b506103a0610699366004612bea565b6113d5565b3480156106aa57600080fd5b5061031060175481565b3480156106c057600080fd5b506103a06106cf366004612bbe565b6114e1565b3480156106e057600080fd5b506103106106ef366004612c18565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561072657600080fd5b506103a0610735366004612ba1565b6115d6565b34801561074657600080fd5b50610310601c5481565b34801561075c57600080fd5b506103a061076b366004612b46565b61164d565b34801561077c57600080fd5b506103a061078b366004612b46565b611737565b60606007805461079f90612c46565b80601f01602080910402602001604051908101604052809291908181526020018280546107cb90612c46565b80156108185780601f106107ed57610100808354040283529160200191610818565b820191906000526020600020905b8154815290600101906020018083116107fb57829003601f168201915b5050505050905090565b600061082f3384846118b9565b5060015b92915050565b60006108468484846119dd565b6001600160a01b03841660009081526003602090815260408083203380855292529091205461088191869161087c908690612c96565b6118b9565b5060019392505050565b6000600b548211156108f75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610901611c68565b905061090d8184612ca9565b9392505050565b6000546001600160a01b0316331461093e5760405162461bcd60e51b81526004016108ee90612ccb565b6001600160a01b03811660009081526005602052604090205460ff166109a65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016108ee565b60005b600654811015610ac657816001600160a01b0316600682815481106109d0576109d0612d00565b6000918252602090912001546001600160a01b031603610ab457600680546109fa90600190612c96565b81548110610a0a57610a0a612d00565b600091825260209091200154600680546001600160a01b039092169183908110610a3657610a36612d00565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610a8e57610a8e612d16565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610abe81612d2c565b9150506109a9565b5050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161082f91859061087c908690612d45565b3360008181526005602052604090205460ff1615610b765760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108ee565b6000610b8183611c8b565b505050506001600160a01b038516600090815260016020526040902054929350610baf928492509050612c96565b6001600160a01b038316600090815260016020526040902055600b54610bd6908290612c96565b600b55600c54610be7908490612d45565b600c55505050565b6000546001600160a01b03163314610c195760405162461bcd60e51b81526004016108ee90612ccb565b6018546001600160a01b0390811690821603610c895760405162461bcd60e51b815260206004820152602960248201527f47726f77746846756e642077616c6c657420697320616c72656164792074686160448201526874206164647265737360b81b60648201526084016108ee565b6001600160a01b038116610ced5760405162461bcd60e51b815260206004820152602560248201527f47726f77746846756e642077616c6c657420697320746865207a65726f206164604482015264647265737360d81b60648201526084016108ee565b601880546001600160a01b0319166001600160a01b0383169081179091556040519081527f8d2c47128f031391f686a43788f815d4cd2403019e240762f2b1fda53b30c712906020015b60405180910390a150565b6000600a54831115610d965760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108ee565b81610db6576000610da684611c8b565b5094965061083395505050505050565b6000610dc184611c8b565b5093965061083395505050505050565b6000546001600160a01b03163314610dfb5760405162461bcd60e51b81526004016108ee90612ccb565b6001600160a01b03811660009081526005602052604090205460ff1615610e645760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ee565b6001600160a01b03811660009081526001602052604090205415610ebe576001600160a01b038116600090815260016020526040902054610ea49061088b565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b81526004016108ee90612ccb565b801515601860149054906101000a900460ff16151503610fe15760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a4016108ee565b60188054821515600160a01b0260ff60a01b199091161790556040517f77c1f4015c54df9478a364bf8fc1b76b03f0eda36c594de58b4023771cebb9e790610d3790831515815260200190565b6001600160a01b03811660009081526005602052604081205460ff161561106b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546108339061088b565b6000546001600160a01b031633146110b75760405162461bcd60e51b81526004016108ee90612ccb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461112b5760405162461bcd60e51b81526004016108ee90612ccb565b601b54600160b01b900460ff16156111855760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c656400000000000060448201526064016108ee565b601b805460ff60b01b1916600160b01b179055565b6000546001600160a01b031633146111c45760405162461bcd60e51b81526004016108ee90612ccb565b600d839055600f8290556011819055806111de8385612d45565b6111e89190612d45565b6016819055600a10156112495760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526231302560e81b60648201526084016108ee565b600d54600f54601154604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a1505050565b60606008805461079f90612c46565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161082f91859061087c908690612c96565b600061082f3384846119dd565b6000546001600160a01b031633146113155760405162461bcd60e51b81526004016108ee90612ccb565b620186a0611322600a5490565b61132c9190612ca9565b81116113a05760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c79000060648201526084016108ee565b601c8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610d37565b6000546001600160a01b031633146113ff5760405162461bcd60e51b81526004016108ee90612ccb565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036114825760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b60648201526084016108ee565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b0316331461150b5760405162461bcd60e51b81526004016108ee90612ccb565b600e83905560108290556012819055806115258385612d45565b61152f9190612d45565b6017819055600a10156115905760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632031302560e01b60648201526084016108ee565b600e54601054601254604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa579060600161128b565b6000546001600160a01b031633146116005760405162461bcd60e51b81526004016108ee90612ccb565b601b8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610d3790831515815260200190565b6000546001600160a01b031633146116775760405162461bcd60e51b81526004016108ee90612ccb565b6001600160a01b0381166116dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ee565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117615760405162461bcd60e51b81526004016108ee90612ccb565b306001600160a01b038216036117b95760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e7360448201526064016108ee565b6001600160a01b0381166117d157610ac63347611ce6565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190612d58565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561188e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b29190612d71565b5050505b50565b6001600160a01b03831661191b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ee565b6001600160a01b03821661197c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ee565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a415760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ee565b60008111611aa35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108ee565b6001600160a01b03831660009081526004602052604090205460ff16158015611ae557506001600160a01b03821660009081526004602052604090205460ff16155b15611b4357601b54600160b01b900460ff16611b435760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c65642079657400000000000060448201526064016108ee565b6000611b4e3061102e565b601c5490915081108015908190611b6f5750601b54600160a01b900460ff16155b8015611b885750601b546001600160a01b038581169116145b8015611b9d5750601b54600160a81b900460ff165b15611c5657601b805460ff60a01b1916600160a01b179055601254601154600091611bc791612d45565b90506000601054600f54611bdb9190612d45565b90506000611be98284612d45565b90508015611c45578115611c1b57600081611c048488612d8e565b611c0e9190612ca9565b9050611c1981611d95565b505b8215611c4557600081611c2e8588612d8e565b611c389190612ca9565b9050611c4381611fe3565b505b5050601b805460ff60a01b19169055505b611c6185858561218b565b5050505050565b6000806000611c7561238e565b9092509050611c848183612ca9565b9250505090565b6000806000806000806000806000806000611ca58c612511565b93509350935093506000806000611cc68f878787611cc1611c68565b612570565b919f509d509b509599509397509195509350505050919395979092949650565b600081471015611d385760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016108ee565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114611d85576040519150601f19603f3d011682016040523d82523d6000602084013e611d8a565b606091505b509095945050505050565b6000611da2600283612ca9565b90506000611db08284612c96565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110611dea57611dea612d00565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e679190612da5565b81600181518110611e7a57611e7a612d00565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790611ec0908790600090869030904290600401612dc2565b600060405180830381600087803b158015611eda57600080fd5b505af1158015611eee573d6000803e3d6000fd5b5050505060008247611f009190612c96565b601a5460195460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af1158015611f72573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f979190612e33565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061201c5761201c612d00565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120999190612da5565b816001815181106120ac576120ac612d00565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac947906120f2908690600090869030904290600401612dc2565b600060405180830381600087803b15801561210c57600080fd5b505af1158015612120573d6000803e3d6000fd5b50505050600082476121329190612c96565b60185490915061214b906001600160a01b031682611ce6565b5060408051858152602081018390527fc51cd45845360f24fa7b9d81aa3943dc20eaf5b1a8192906664bfd190001608a910160405180910390a150505050565b6001600160a01b03831660009081526004602052604090205460ff16806121ca57506001600160a01b03821660009081526004602052604090205460ff165b156121dc576121d76125e2565b61223a565b601b546001600160a01b03908116908316036121fa576121d7612616565b601b546001600160a01b0390811690841603612218576121d7612656565b601854600160a01b900460ff1615612232576121d76125e2565b61223a612616565b6001600160a01b03831660009081526005602052604090205460ff16801561227b57506001600160a01b03821660009081526005602052604090205460ff16155b156122905761228b838383612696565b505050565b6001600160a01b03831660009081526005602052604090205460ff161580156122d157506001600160a01b03821660009081526005602052604090205460ff165b156122e15761228b8383836127d7565b6001600160a01b03831660009081526005602052604090205460ff1615801561232357506001600160a01b03821660009081526005602052604090205460ff16155b156123335761228b838383612891565b6001600160a01b03831660009081526005602052604090205460ff16801561237357506001600160a01b03821660009081526005602052604090205460ff165b156123835761228b8383836128e4565b61228b838383612891565b600b54600a546000918291825b6006548110156124e0578260016000600684815481106123bd576123bd612d00565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612428575081600260006006848154811061240157612401612d00565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561243e57600b54600a54945094505050509091565b600160006006838154811061245557612455612d00565b60009182526020808320909101546001600160a01b031683528201929092526040019020546124849084612c96565b9250600260006006838154811061249d5761249d612d00565b60009182526020808320909101546001600160a01b031683528201929092526040019020546124cc9083612c96565b9150806124d881612d2c565b91505061239b565b50600a54600b546124f19190612ca9565b82101561250857600b54600a549350935050509091565b90939092509050565b600080600080600061252286612967565b9050600061252f87612983565b9050600061253c88612995565b90506000818361254c868c612c96565b6125569190612c96565b6125609190612c96565b9993985091965094509092505050565b600080808061257f858a612d8e565b9050600061258d868a612d8e565b9050600061259b878a612d8e565b905060006125a9888a612d8e565b9050600081836125b98688612c96565b6125c39190612c96565b6125cd9190612c96565b949d949c50929a509298505050505050505050565b6013541580156125f25750601454155b80156125fe5750601554155b1561260557565b600060138190556015819055601455565b600e5460135414801561262c5750601054601454145b801561263b5750601254601554145b1561264257565b600e54601355601254601555601054601455565b600d5460135414801561266c5750600f54601454145b801561267b5750601154601554145b1561268257565b600d54601355601154601555600f54601455565b60008060008060008060006126aa88611c8b565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546126e99190612c96565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612719908890612c96565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612749908790612d45565b6001600160a01b038a1660009081526001602052604090205561276b816129a7565b612774826129a7565b61277e8584612a37565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516127c391815260200190565b60405180910390a350505050505050505050565b60008060008060008060006127eb88611c8b565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b031681526020019081526020016000205461282a9190612c96565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612861908590612d45565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612749908790612d45565b60008060008060008060006128a588611c8b565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546127199190612c96565b60008060008060008060006128f888611c8b565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546129379190612c96565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461282a908890612c96565b60006064601354836129799190612d8e565b6108339190612ca9565b60006064601454836129799190612d8e565b60006064601554836129799190612d8e565b80156118b65760006129b7611c68565b905060006129c58284612d8e565b306000908152600160205260409020549091506129e3908290612d45565b3060009081526001602090815260408083209390935560059052205460ff161561228b5730600090815260026020526040902054612a22908490612d45565b30600090815260026020526040902055505050565b81600b54612a459190612c96565b600b55600c54612a56908290612d45565b600c555050565b600060208083528351808285015260005b81811015612a8a57858101830151858201604001528201612a6e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118b657600080fd5b60008060408385031215612ad357600080fd5b8235612ade81612aab565b946020939093013593505050565b600080600060608486031215612b0157600080fd5b8335612b0c81612aab565b92506020840135612b1c81612aab565b929592945050506040919091013590565b600060208284031215612b3f57600080fd5b5035919050565b600060208284031215612b5857600080fd5b813561090d81612aab565b80151581146118b657600080fd5b60008060408385031215612b8457600080fd5b823591506020830135612b9681612b63565b809150509250929050565b600060208284031215612bb357600080fd5b813561090d81612b63565b600080600060608486031215612bd357600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612bfd57600080fd5b8235612c0881612aab565b91506020830135612b9681612b63565b60008060408385031215612c2b57600080fd5b8235612c3681612aab565b91506020830135612b9681612aab565b600181811c90821680612c5a57607f821691505b602082108103612c7a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561083357610833612c80565b600082612cc657634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201612d3e57612d3e612c80565b5060010190565b8082018082111561083357610833612c80565b600060208284031215612d6a57600080fd5b5051919050565b600060208284031215612d8357600080fd5b815161090d81612b63565b808202811582820484141761083357610833612c80565b600060208284031215612db757600080fd5b815161090d81612aab565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e125784516001600160a01b031683529383019391830191600101612ded565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e4857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200be566990bab21b64906ab0408c7f5a604068aa0742780e6a59bdcf33b47086064736f6c63430008110033
Deployed Bytecode
0x60806040526004361061023f5760003560e01c8063715018a61161012e578063b577554a116100ab578063dd62ed3e1161006f578063dd62ed3e146106d4578063e01af92c1461071a578063e2f456051461073a578063f2fde38b14610750578063f9d0831a1461077057600080fd5b8063b577554a14610653578063b9e9370014610668578063c02466681461067e578063d0a398141461069e578063d6a694f5146106b457600080fd5b806390a3dd9b116100f257806390a3dd9b146105be57806395d89b41146105de578063a457c2d7146105f3578063a9059cbb14610613578063afa4f3b21461063357600080fd5b8063715018a61461051d57806377725db01461053257806388f82020146105525780638a8c523c1461058b5780638da5cb5b146105a057600080fd5b80633bd5d173116101bc57806352390c021161018057806352390c02146104635780635342acb4146104835780635654d0b3146104bc5780636ddd1713146104dc57806370a08231146104fd57600080fd5b80633bd5d173146103c25780633e77bf7a146103e25780634549b0391461040257806349bd5a5e146104225780634ada218b1461044257600080fd5b806323b872dd1161020357806323b872dd1461031e5780632d8381191461033e578063313ce5671461035e5780633685d4191461038057806339509351146103a257600080fd5b806306fdde031461024b578063095ea7b3146102765780631529fbbf146102a65780631694505e146102c757806318160ddd146102ff57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b50610260610790565b60405161026d9190612a5d565b60405180910390f35b34801561028257600080fd5b50610296610291366004612ac0565b610822565b604051901515815260200161026d565b3480156102b257600080fd5b5060185461029690600160a01b900460ff1681565b3480156102d357600080fd5b50601a546102e7906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b34801561030b57600080fd5b50600a545b60405190815260200161026d565b34801561032a57600080fd5b50610296610339366004612aec565b610839565b34801561034a57600080fd5b50610310610359366004612b2d565b61088b565b34801561036a57600080fd5b5060095460405160ff909116815260200161026d565b34801561038c57600080fd5b506103a061039b366004612b46565b610914565b005b3480156103ae57600080fd5b506102966103bd366004612ac0565b610aca565b3480156103ce57600080fd5b506103a06103dd366004612b2d565b610b01565b3480156103ee57600080fd5b506103a06103fd366004612b46565b610bef565b34801561040e57600080fd5b5061031061041d366004612b71565b610d42565b34801561042e57600080fd5b50601b546102e7906001600160a01b031681565b34801561044e57600080fd5b50601b5461029690600160b01b900460ff1681565b34801561046f57600080fd5b506103a061047e366004612b46565b610dd1565b34801561048f57600080fd5b5061029661049e366004612b46565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104c857600080fd5b506103a06104d7366004612ba1565b610f24565b3480156104e857600080fd5b50601b5461029690600160a81b900460ff1681565b34801561050957600080fd5b50610310610518366004612b46565b61102e565b34801561052957600080fd5b506103a061108d565b34801561053e57600080fd5b506018546102e7906001600160a01b031681565b34801561055e57600080fd5b5061029661056d366004612b46565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561059757600080fd5b506103a0611101565b3480156105ac57600080fd5b506000546001600160a01b03166102e7565b3480156105ca57600080fd5b506103a06105d9366004612bbe565b61119a565b3480156105ea57600080fd5b50610260611298565b3480156105ff57600080fd5b5061029661060e366004612ac0565b6112a7565b34801561061f57600080fd5b5061029661062e366004612ac0565b6112de565b34801561063f57600080fd5b506103a061064e366004612b2d565b6112eb565b34801561065f57600080fd5b50600c54610310565b34801561067457600080fd5b5061031060165481565b34801561068a57600080fd5b506103a0610699366004612bea565b6113d5565b3480156106aa57600080fd5b5061031060175481565b3480156106c057600080fd5b506103a06106cf366004612bbe565b6114e1565b3480156106e057600080fd5b506103106106ef366004612c18565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561072657600080fd5b506103a0610735366004612ba1565b6115d6565b34801561074657600080fd5b50610310601c5481565b34801561075c57600080fd5b506103a061076b366004612b46565b61164d565b34801561077c57600080fd5b506103a061078b366004612b46565b611737565b60606007805461079f90612c46565b80601f01602080910402602001604051908101604052809291908181526020018280546107cb90612c46565b80156108185780601f106107ed57610100808354040283529160200191610818565b820191906000526020600020905b8154815290600101906020018083116107fb57829003601f168201915b5050505050905090565b600061082f3384846118b9565b5060015b92915050565b60006108468484846119dd565b6001600160a01b03841660009081526003602090815260408083203380855292529091205461088191869161087c908690612c96565b6118b9565b5060019392505050565b6000600b548211156108f75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610901611c68565b905061090d8184612ca9565b9392505050565b6000546001600160a01b0316331461093e5760405162461bcd60e51b81526004016108ee90612ccb565b6001600160a01b03811660009081526005602052604090205460ff166109a65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016108ee565b60005b600654811015610ac657816001600160a01b0316600682815481106109d0576109d0612d00565b6000918252602090912001546001600160a01b031603610ab457600680546109fa90600190612c96565b81548110610a0a57610a0a612d00565b600091825260209091200154600680546001600160a01b039092169183908110610a3657610a36612d00565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610a8e57610a8e612d16565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610abe81612d2c565b9150506109a9565b5050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161082f91859061087c908690612d45565b3360008181526005602052604090205460ff1615610b765760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108ee565b6000610b8183611c8b565b505050506001600160a01b038516600090815260016020526040902054929350610baf928492509050612c96565b6001600160a01b038316600090815260016020526040902055600b54610bd6908290612c96565b600b55600c54610be7908490612d45565b600c55505050565b6000546001600160a01b03163314610c195760405162461bcd60e51b81526004016108ee90612ccb565b6018546001600160a01b0390811690821603610c895760405162461bcd60e51b815260206004820152602960248201527f47726f77746846756e642077616c6c657420697320616c72656164792074686160448201526874206164647265737360b81b60648201526084016108ee565b6001600160a01b038116610ced5760405162461bcd60e51b815260206004820152602560248201527f47726f77746846756e642077616c6c657420697320746865207a65726f206164604482015264647265737360d81b60648201526084016108ee565b601880546001600160a01b0319166001600160a01b0383169081179091556040519081527f8d2c47128f031391f686a43788f815d4cd2403019e240762f2b1fda53b30c712906020015b60405180910390a150565b6000600a54831115610d965760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108ee565b81610db6576000610da684611c8b565b5094965061083395505050505050565b6000610dc184611c8b565b5093965061083395505050505050565b6000546001600160a01b03163314610dfb5760405162461bcd60e51b81526004016108ee90612ccb565b6001600160a01b03811660009081526005602052604090205460ff1615610e645760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ee565b6001600160a01b03811660009081526001602052604090205415610ebe576001600160a01b038116600090815260016020526040902054610ea49061088b565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b81526004016108ee90612ccb565b801515601860149054906101000a900460ff16151503610fe15760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a4016108ee565b60188054821515600160a01b0260ff60a01b199091161790556040517f77c1f4015c54df9478a364bf8fc1b76b03f0eda36c594de58b4023771cebb9e790610d3790831515815260200190565b6001600160a01b03811660009081526005602052604081205460ff161561106b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546108339061088b565b6000546001600160a01b031633146110b75760405162461bcd60e51b81526004016108ee90612ccb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461112b5760405162461bcd60e51b81526004016108ee90612ccb565b601b54600160b01b900460ff16156111855760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c656400000000000060448201526064016108ee565b601b805460ff60b01b1916600160b01b179055565b6000546001600160a01b031633146111c45760405162461bcd60e51b81526004016108ee90612ccb565b600d839055600f8290556011819055806111de8385612d45565b6111e89190612d45565b6016819055600a10156112495760405162461bcd60e51b815260206004820152602360248201527f42757920666565732063616e6e6f742062652067726561746572207468616e2060448201526231302560e81b60648201526084016108ee565b600d54600f54601154604080519384526020840192909252908201527ff12a090a464a491e1614a62b7d86a6f8d3fae25361d5af0911f39bd4fd7ea64d906060015b60405180910390a1505050565b60606008805461079f90612c46565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161082f91859061087c908690612c96565b600061082f3384846119dd565b6000546001600160a01b031633146113155760405162461bcd60e51b81526004016108ee90612ccb565b620186a0611322600a5490565b61132c9190612ca9565b81116113a05760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c79000060648201526084016108ee565b601c8190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610d37565b6000546001600160a01b031633146113ff5760405162461bcd60e51b81526004016108ee90612ccb565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036114825760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b60648201526084016108ee565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b0316331461150b5760405162461bcd60e51b81526004016108ee90612ccb565b600e83905560108290556012819055806115258385612d45565b61152f9190612d45565b6017819055600a10156115905760405162461bcd60e51b8152602060048201526024808201527f53656c6c20666565732063616e6e6f742062652067726561746572207468616e6044820152632031302560e01b60648201526084016108ee565b600e54601054601254604080519384526020840192909252908201527f969e8ecd326f5fe41e2a3cd9798553fbecef5705da23954426a09c9360c7aa579060600161128b565b6000546001600160a01b031633146116005760405162461bcd60e51b81526004016108ee90612ccb565b601b8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610d3790831515815260200190565b6000546001600160a01b031633146116775760405162461bcd60e51b81526004016108ee90612ccb565b6001600160a01b0381166116dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ee565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117615760405162461bcd60e51b81526004016108ee90612ccb565b306001600160a01b038216036117b95760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e7360448201526064016108ee565b6001600160a01b0381166117d157610ac63347611ce6565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190612d58565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561188e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b29190612d71565b5050505b50565b6001600160a01b03831661191b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ee565b6001600160a01b03821661197c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ee565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a415760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ee565b60008111611aa35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108ee565b6001600160a01b03831660009081526004602052604090205460ff16158015611ae557506001600160a01b03821660009081526004602052604090205460ff16155b15611b4357601b54600160b01b900460ff16611b435760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c65642079657400000000000060448201526064016108ee565b6000611b4e3061102e565b601c5490915081108015908190611b6f5750601b54600160a01b900460ff16155b8015611b885750601b546001600160a01b038581169116145b8015611b9d5750601b54600160a81b900460ff165b15611c5657601b805460ff60a01b1916600160a01b179055601254601154600091611bc791612d45565b90506000601054600f54611bdb9190612d45565b90506000611be98284612d45565b90508015611c45578115611c1b57600081611c048488612d8e565b611c0e9190612ca9565b9050611c1981611d95565b505b8215611c4557600081611c2e8588612d8e565b611c389190612ca9565b9050611c4381611fe3565b505b5050601b805460ff60a01b19169055505b611c6185858561218b565b5050505050565b6000806000611c7561238e565b9092509050611c848183612ca9565b9250505090565b6000806000806000806000806000806000611ca58c612511565b93509350935093506000806000611cc68f878787611cc1611c68565b612570565b919f509d509b509599509397509195509350505050919395979092949650565b600081471015611d385760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016108ee565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114611d85576040519150601f19603f3d011682016040523d82523d6000602084013e611d8a565b606091505b509095945050505050565b6000611da2600283612ca9565b90506000611db08284612c96565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110611dea57611dea612d00565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e679190612da5565b81600181518110611e7a57611e7a612d00565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790611ec0908790600090869030904290600401612dc2565b600060405180830381600087803b158015611eda57600080fd5b505af1158015611eee573d6000803e3d6000fd5b5050505060008247611f009190612c96565b601a5460195460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c40160606040518083038185885af1158015611f72573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f979190612e33565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061201c5761201c612d00565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120999190612da5565b816001815181106120ac576120ac612d00565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac947906120f2908690600090869030904290600401612dc2565b600060405180830381600087803b15801561210c57600080fd5b505af1158015612120573d6000803e3d6000fd5b50505050600082476121329190612c96565b60185490915061214b906001600160a01b031682611ce6565b5060408051858152602081018390527fc51cd45845360f24fa7b9d81aa3943dc20eaf5b1a8192906664bfd190001608a910160405180910390a150505050565b6001600160a01b03831660009081526004602052604090205460ff16806121ca57506001600160a01b03821660009081526004602052604090205460ff165b156121dc576121d76125e2565b61223a565b601b546001600160a01b03908116908316036121fa576121d7612616565b601b546001600160a01b0390811690841603612218576121d7612656565b601854600160a01b900460ff1615612232576121d76125e2565b61223a612616565b6001600160a01b03831660009081526005602052604090205460ff16801561227b57506001600160a01b03821660009081526005602052604090205460ff16155b156122905761228b838383612696565b505050565b6001600160a01b03831660009081526005602052604090205460ff161580156122d157506001600160a01b03821660009081526005602052604090205460ff165b156122e15761228b8383836127d7565b6001600160a01b03831660009081526005602052604090205460ff1615801561232357506001600160a01b03821660009081526005602052604090205460ff16155b156123335761228b838383612891565b6001600160a01b03831660009081526005602052604090205460ff16801561237357506001600160a01b03821660009081526005602052604090205460ff165b156123835761228b8383836128e4565b61228b838383612891565b600b54600a546000918291825b6006548110156124e0578260016000600684815481106123bd576123bd612d00565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612428575081600260006006848154811061240157612401612d00565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561243e57600b54600a54945094505050509091565b600160006006838154811061245557612455612d00565b60009182526020808320909101546001600160a01b031683528201929092526040019020546124849084612c96565b9250600260006006838154811061249d5761249d612d00565b60009182526020808320909101546001600160a01b031683528201929092526040019020546124cc9083612c96565b9150806124d881612d2c565b91505061239b565b50600a54600b546124f19190612ca9565b82101561250857600b54600a549350935050509091565b90939092509050565b600080600080600061252286612967565b9050600061252f87612983565b9050600061253c88612995565b90506000818361254c868c612c96565b6125569190612c96565b6125609190612c96565b9993985091965094509092505050565b600080808061257f858a612d8e565b9050600061258d868a612d8e565b9050600061259b878a612d8e565b905060006125a9888a612d8e565b9050600081836125b98688612c96565b6125c39190612c96565b6125cd9190612c96565b949d949c50929a509298505050505050505050565b6013541580156125f25750601454155b80156125fe5750601554155b1561260557565b600060138190556015819055601455565b600e5460135414801561262c5750601054601454145b801561263b5750601254601554145b1561264257565b600e54601355601254601555601054601455565b600d5460135414801561266c5750600f54601454145b801561267b5750601154601554145b1561268257565b600d54601355601154601555600f54601455565b60008060008060008060006126aa88611c8b565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546126e99190612c96565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612719908890612c96565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612749908790612d45565b6001600160a01b038a1660009081526001602052604090205561276b816129a7565b612774826129a7565b61277e8584612a37565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516127c391815260200190565b60405180910390a350505050505050505050565b60008060008060008060006127eb88611c8b565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b031681526020019081526020016000205461282a9190612c96565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612861908590612d45565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612749908790612d45565b60008060008060008060006128a588611c8b565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546127199190612c96565b60008060008060008060006128f888611c8b565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546129379190612c96565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461282a908890612c96565b60006064601354836129799190612d8e565b6108339190612ca9565b60006064601454836129799190612d8e565b60006064601554836129799190612d8e565b80156118b65760006129b7611c68565b905060006129c58284612d8e565b306000908152600160205260409020549091506129e3908290612d45565b3060009081526001602090815260408083209390935560059052205460ff161561228b5730600090815260026020526040902054612a22908490612d45565b30600090815260026020526040902055505050565b81600b54612a459190612c96565b600b55600c54612a56908290612d45565b600c555050565b600060208083528351808285015260005b81811015612a8a57858101830151858201604001528201612a6e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118b657600080fd5b60008060408385031215612ad357600080fd5b8235612ade81612aab565b946020939093013593505050565b600080600060608486031215612b0157600080fd5b8335612b0c81612aab565b92506020840135612b1c81612aab565b929592945050506040919091013590565b600060208284031215612b3f57600080fd5b5035919050565b600060208284031215612b5857600080fd5b813561090d81612aab565b80151581146118b657600080fd5b60008060408385031215612b8457600080fd5b823591506020830135612b9681612b63565b809150509250929050565b600060208284031215612bb357600080fd5b813561090d81612b63565b600080600060608486031215612bd357600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612bfd57600080fd5b8235612c0881612aab565b91506020830135612b9681612b63565b60008060408385031215612c2b57600080fd5b8235612c3681612aab565b91506020830135612b9681612aab565b600181811c90821680612c5a57607f821691505b602082108103612c7a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561083357610833612c80565b600082612cc657634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060018201612d3e57612d3e612c80565b5060010190565b8082018082111561083357610833612c80565b600060208284031215612d6a57600080fd5b5051919050565b600060208284031215612d8357600080fd5b815161090d81612b63565b808202811582820484141761083357610833612c80565b600060208284031215612db757600080fd5b815161090d81612aab565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e125784516001600160a01b031683529383019391830191600101612ded565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e4857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200be566990bab21b64906ab0408c7f5a604068aa0742780e6a59bdcf33b47086064736f6c63430008110033
Deployed Bytecode Sourcemap
15546:23179:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19703:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20615:161;;;;;;;;;;-1:-1:-1;20615:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;20615:161:0;1023:187:1;16794:44:0;;;;;;;;;;-1:-1:-1;16794:44:0;;;;-1:-1:-1;;;16794:44:0;;;;;;16925:42;;;;;;;;;;-1:-1:-1;16925:42:0;;;;-1:-1:-1;;;;;16925:42:0;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;16925:42:0;1215:230:1;19980:95:0;;;;;;;;;;-1:-1:-1;20060:7:0;;19980:95;;;1596:25:1;;;1584:2;1569:18;19980:95:0;1450:177:1;20784:266:0;;;;;;;;;;-1:-1:-1;20784:266:0;;;;;:::i;:::-;;:::i;22577:250::-;;;;;;;;;;-1:-1:-1;22577:250:0;;;;;:::i;:::-;;:::i;19889:83::-;;;;;;;;;;-1:-1:-1;19955:9:0;;19889:83;;19955:9;;;;2420:36:1;;2408:2;2393:18;19889:83:0;2278:184:1;23176:479:0;;;;;;;;;;-1:-1:-1;23176:479:0;;;;;:::i;:::-;;:::i;:::-;;21058:215;;;;;;;;;;-1:-1:-1;21058:215:0;;;;;:::i;:::-;;:::i;21754:369::-;;;;;;;;;;-1:-1:-1;21754:369:0;;;;;:::i;:::-;;:::i;36935:382::-;;;;;;;;;;-1:-1:-1;36935:382:0;;;;;:::i;:::-;;:::i;22131:438::-;;;;;;;;;;-1:-1:-1;22131:438:0;;;;;:::i;:::-;;:::i;16974:29::-;;;;;;;;;;-1:-1:-1;16974:29:0;;;;-1:-1:-1;;;;;16974:29:0;;;17078:26;;;;;;;;;;-1:-1:-1;17078:26:0;;;;-1:-1:-1;;;17078:26:0;;;;;;22835:333;;;;;;;;;;-1:-1:-1;22835:333:0;;;;;:::i;:::-;;:::i;28539:124::-;;;;;;;;;;-1:-1:-1;28539:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;28627:28:0;28603:4;28627:28;;;:19;:28;;;;;;;;;28539:124;38387:335;;;;;;;;;;-1:-1:-1;38387:335:0;;;;;:::i;:::-;;:::i;17048:23::-;;;;;;;;;;-1:-1:-1;17048:23:0;;;;-1:-1:-1;;;17048:23:0;;;;;;20083:198;;;;;;;;;;-1:-1:-1;20083:198:0;;;;;:::i;:::-;;:::i;3662:148::-;;;;;;;;;;;;;:::i;16754:31::-;;;;;;;;;;-1:-1:-1;16754:31:0;;;;-1:-1:-1;;;;;16754:31:0;;;21514:120;;;;;;;;;;-1:-1:-1;21514:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21606:20:0;21582:4;21606:20;;;:11;:20;;;;;;;;;21514:120;29016:156;;;;;;;;;;;;;:::i;3448:79::-;;;;;;;;;;-1:-1:-1;3486:7:0;3513:6;-1:-1:-1;;;;;3513:6:0;3448:79;;37325:513;;;;;;;;;;-1:-1:-1;37325:513:0;;;;;:::i;:::-;;:::i;19794:87::-;;;;;;;;;;;;;:::i;21281:225::-;;;;;;;;;;-1:-1:-1;21281:225:0;;;;;:::i;:::-;;:::i;20289:167::-;;;;;;;;;;-1:-1:-1;20289:167:0;;;;;:::i;:::-;;:::i;32520:289::-;;;;;;;;;;-1:-1:-1;32520:289:0;;;;;:::i;:::-;;:::i;21642:104::-;;;;;;;;;;-1:-1:-1;21728:10:0;;21642:104;;16683:27;;;;;;;;;;;;;;;;36631:292;;;;;;;;;;-1:-1:-1;36631:292:0;;;;;:::i;:::-;;:::i;16717:28::-;;;;;;;;;;;;;;;;37846:533;;;;;;;;;;-1:-1:-1;37846:533:0;;;;;:::i;:::-;;:::i;20464:143::-;;;;;;;;;;-1:-1:-1;20464:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20572:18:0;;;20545:7;20572:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20464:143;32821;;;;;;;;;;-1:-1:-1;32821:143:0;;;;;:::i;:::-;;:::i;17111:33::-;;;;;;;;;;;;;;;;3818:244;;;;;;;;;;-1:-1:-1;3818:244:0;;;;;:::i;:::-;;:::i;23700:442::-;;;;;;;;;;-1:-1:-1;23700:442:0;;;;;:::i;:::-;;:::i;19703:83::-;19740:13;19773:5;19766:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19703:83;:::o;20615:161::-;20690:4;20707:39;2852:10;20730:7;20739:6;20707:8;:39::i;:::-;-1:-1:-1;20764:4:0;20615:161;;;;;:::o;20784:266::-;20882:4;20899:36;20909:6;20917:9;20928:6;20899:9;:36::i;:::-;-1:-1:-1;;;;;20977:19:0;;;;;;:11;:19;;;;;;;;2852:10;20977:33;;;;;;;;;20946:74;;20955:6;;20977:42;;21013:6;;20977:42;:::i;:::-;20946:8;:74::i;:::-;-1:-1:-1;21038:4:0;20784:266;;;;;:::o;22577:250::-;22643:7;22682;;22671;:18;;22663:73;;;;-1:-1:-1;;;22663:73:0;;5563:2:1;22663:73:0;;;5545:21:1;5602:2;5582:18;;;5575:30;5641:34;5621:18;;;5614:62;-1:-1:-1;;;5692:18:1;;;5685:40;5742:19;;22663:73:0;;;;;;;;;22747:19;22770:10;:8;:10::i;:::-;22747:33;-1:-1:-1;22798:21:0;22747:33;22798:7;:21;:::i;:::-;22791:28;22577:250;-1:-1:-1;;;22577:250:0:o;23176:479::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23258:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23250:60;;;::::0;-1:-1:-1;;;23250:60:0;;6557:2:1;23250:60:0::1;::::0;::::1;6539:21:1::0;6596:2;6576:18;;;6569:30;6635:29;6615:18;;;6608:57;6682:18;;23250:60:0::1;6355:351:1::0;23250:60:0::1;23326:9;23321:327;23345:9;:16:::0;23341:20;::::1;23321:327;;;23403:7;-1:-1:-1::0;;;;;23387:23:0::1;:9;23397:1;23387:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23387:12:0::1;:23:::0;23383:254:::1;;23446:9;23456:16:::0;;:20:::1;::::0;23475:1:::1;::::0;23456:20:::1;:::i;:::-;23446:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23431:9:::1;:12:::0;;-1:-1:-1;;;;;23446:31:0;;::::1;::::0;23441:1;;23431:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23431:46:0::1;-1:-1:-1::0;;;;;23431:46:0;;::::1;;::::0;;23496:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23535:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23535:28:0::1;::::0;;23582:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23582:15:0;;;;;-1:-1:-1;;;;;;23582:15:0::1;::::0;;;;;23321:327:::1;23176:479:::0;:::o;23383:254::-:1;23363:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23321:327;;;;23176:479:::0;:::o;21058:215::-;2852:10;21146:4;21195:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21195:34:0;;;;;;;;;;21146:4;;21163:80;;21186:7;;21195:47;;21232:10;;21195:47;:::i;21754:369::-;2852:10;21806:14;21855:19;;;:11;:19;;;;;;;;21854:20;21846:77;;;;-1:-1:-1;;;21846:77:0;;7447:2:1;21846:77:0;;;7429:21:1;7486:2;7466:18;;;7459:30;7525:34;7505:18;;;7498:62;-1:-1:-1;;;7576:18:1;;;7569:42;7628:19;;21846:77:0;7245:408:1;21846:77:0;21935:15;21960:19;21971:7;21960:10;:19::i;:::-;-1:-1:-1;;;;;;;;;22008:15:0;;;;;;:7;:15;;;;;;21934:45;;-1:-1:-1;22008:25:0;;21934:45;;-1:-1:-1;22008:15:0;-1:-1:-1;22008:25:0;:::i;:::-;-1:-1:-1;;;;;21990:15:0;;;;;;:7;:15;;;;;:43;22054:7;;:17;;22064:7;;22054:17;:::i;:::-;22044:7;:27;22095:10;;:20;;22108:7;;22095:20;:::i;:::-;22082:10;:33;-1:-1:-1;;;21754:369:0:o;36935:382::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;37053:16:::1;::::0;-1:-1:-1;;;;;37053:16:0;;::::1;37032:37:::0;;::::1;::::0;37024:91:::1;;;::::0;-1:-1:-1;;;37024:91:0;;7860:2:1;37024:91:0::1;::::0;::::1;7842:21:1::0;7899:2;7879:18;;;7872:30;7938:34;7918:18;;;7911:62;-1:-1:-1;;;7989:18:1;;;7982:39;8038:19;;37024:91:0::1;7658:405:1::0;37024:91:0::1;-1:-1:-1::0;;;;;37134:29:0;::::1;37126:79;;;::::0;-1:-1:-1;;;37126:79:0;;8270:2:1;37126:79:0::1;::::0;::::1;8252:21:1::0;8309:2;8289:18;;;8282:30;8348:34;8328:18;;;8321:62;-1:-1:-1;;;8399:18:1;;;8392:35;8444:19;;37126:79:0::1;8068:401:1::0;37126:79:0::1;37216:16;:36:::0;;-1:-1:-1;;;;;;37216:36:0::1;-1:-1:-1::0;;;;;37216:36:0;::::1;::::0;;::::1;::::0;;;37268:41:::1;::::0;1388:51:1;;;37268:41:0::1;::::0;1376:2:1;1361:18;37268:41:0::1;;;;;;;;36935:382:::0;:::o;22131:438::-;22221:7;22260;;22249;:18;;22241:62;;;;-1:-1:-1;;;22241:62:0;;8676:2:1;22241:62:0;;;8658:21:1;8715:2;8695:18;;;8688:30;8754:33;8734:18;;;8727:61;8805:18;;22241:62:0;8474:355:1;22241:62:0;22319:17;22314:248;;22354:15;22379:19;22390:7;22379:10;:19::i;:::-;-1:-1:-1;22353:45:0;;-1:-1:-1;22413:14:0;;-1:-1:-1;;;;;;22413:14:0;22314:248;22462:23;22494:19;22505:7;22494:10;:19::i;:::-;-1:-1:-1;22460:53:0;;-1:-1:-1;22528:22:0;;-1:-1:-1;;;;;;22528:22:0;22835:333;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22918:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22917:21;22909:61;;;::::0;-1:-1:-1;;;22909:61:0;;9036:2:1;22909:61:0::1;::::0;::::1;9018:21:1::0;9075:2;9055:18;;;9048:30;9114:29;9094:18;;;9087:57;9161:18;;22909:61:0::1;8834:351:1::0;22909:61:0::1;-1:-1:-1::0;;;;;22984:16:0;::::1;23003:1;22984:16:::0;;;:7:::1;:16;::::0;;;;;:20;22981:108:::1;;-1:-1:-1::0;;;;;23060:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23040:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23021:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22981:108:::1;-1:-1:-1::0;;;;;23099:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23099:27:0::1;23122:4;23099:27:::0;;::::1;::::0;;;23137:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23137:23:0::1;::::0;;::::1;::::0;;22835:333::o;38387:335::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;38522:6:::1;38486:42;;:32;;;;;;;;;;;:42;;::::0;38478:121:::1;;;::::0;-1:-1:-1;;;38478:121:0;;9392:2:1;38478:121:0::1;::::0;::::1;9374:21:1::0;9431:2;9411:18;;;9404:30;9470:34;9450:18;;;9443:62;9541:34;9521:18;;;9514:62;-1:-1:-1;;;9592:19:1;;;9585:33;9635:19;;38478:121:0::1;9190:470:1::0;38478:121:0::1;38610:32;:41:::0;;;::::1;;-1:-1:-1::0;;;38610:41:0::1;-1:-1:-1::0;;;;38610:41:0;;::::1;;::::0;;38667:47:::1;::::0;::::1;::::0;::::1;::::0;38645:6;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;20083:198:0;-1:-1:-1;;;;;20173:20:0;;20149:7;20173:20;;;:11;:20;;;;;;;;20169:49;;;-1:-1:-1;;;;;;20202:16:0;;;;;:7;:16;;;;;;;20083:198::o;20169:49::-;-1:-1:-1;;;;;20256:16:0;;;;;;:7;:16;;;;;;20236:37;;:19;:37::i;3662:148::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;3769:1:::1;3753:6:::0;;3732:40:::1;::::0;-1:-1:-1;;;;;3753:6:0;;::::1;::::0;3732:40:::1;::::0;3769:1;;3732:40:::1;3800:1;3783:19:::0;;-1:-1:-1;;;;;;3783:19:0::1;::::0;;3662:148::o;29016:156::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;29078:14:::1;::::0;-1:-1:-1;;;29078:14:0;::::1;;;:23;29070:62;;;::::0;-1:-1:-1;;;29070:62:0;;9867:2:1;29070:62:0::1;::::0;::::1;9849:21:1::0;9906:2;9886:18;;;9879:30;9945:28;9925:18;;;9918:56;9991:18;;29070:62:0::1;9665:350:1::0;29070:62:0::1;29143:14;:21:::0;;-1:-1:-1;;;;29143:21:0::1;-1:-1:-1::0;;;29143:21:0::1;::::0;;29016:156::o;37325:513::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;37464:11:::1;:26:::0;;;37501:17:::1;:38:::0;;;37550:18:::1;:40:::0;;;37571:19;37616:33:::1;37521:18:::0;37478:12;37616:33:::1;:::i;:::-;:55;;;;:::i;:::-;37601:12;:70:::0;;;37706:2:::1;-1:-1:-1::0;37690:18:0::1;37682:66;;;::::0;-1:-1:-1;;;37682:66:0;;10222:2:1;37682:66:0::1;::::0;::::1;10204:21:1::0;10261:2;10241:18;;;10234:30;10300:34;10280:18;;;10273:62;-1:-1:-1;;;10351:18:1;;;10344:33;10394:19;;37682:66:0::1;10020:399:1::0;37682:66:0::1;37779:11;::::0;37792:17:::1;::::0;37811:18:::1;::::0;37764:66:::1;::::0;;10626:25:1;;;10682:2;10667:18;;10660:34;;;;10710:18;;;10703:34;37764:66:0::1;::::0;10614:2:1;10599:18;37764:66:0::1;;;;;;;;37325:513:::0;;;:::o;19794:87::-;19833:13;19866:7;19859:14;;;;;:::i;21281:225::-;2852:10;21374:4;21423:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21423:34:0;;;;;;;;;;21374:4;;21391:85;;21414:7;;21423:52;;21460:15;;21423:52;:::i;20289:167::-;20367:4;20384:42;2852:10;20408:9;20419:6;20384:9;:42::i;32520:289::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;32638:3:::1;32622:13;20060:7:::0;;;19980:95;32622:13:::1;:19;;;;:::i;:::-;32610:9;:31;32602:106;;;::::0;-1:-1:-1;;;32602:106:0;;10950:2:1;32602:106:0::1;::::0;::::1;10932:21:1::0;10989:2;10969:18;;;10962:30;11028:34;11008:18;;;11001:62;11099:32;11079:18;;;11072:60;11149:19;;32602:106:0::1;10748:426:1::0;32602:106:0::1;32719:18;:30:::0;;;32765:36:::1;::::0;1596:25:1;;;32765:36:0::1;::::0;1584:2:1;1569:18;32765:36:0::1;1450:177:1::0;36631:292:0;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36726:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;36718:95:::1;;;::::0;-1:-1:-1;;;36718:95:0;;11381:2:1;36718:95:0::1;::::0;::::1;11363:21:1::0;11420:2;11400:18;;;11393:30;11459:34;11439:18;;;11432:62;-1:-1:-1;;;11510:18:1;;;11503:40;11560:19;;36718:95:0::1;11179:406:1::0;36718:95:0::1;-1:-1:-1::0;;;;;36824:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36824:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36881:34;;1163:41:1;;;36881:34:0::1;::::0;1136:18:1;36881:34:0::1;;;;;;;36631:292:::0;;:::o;37846:533::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;37989:12:::1;:28:::0;;;38028:18:::1;:40:::0;;;38079:19:::1;:42:::0;;;38101:20;38148:35:::1;38049:19:::0;38004:13;38148:35:::1;:::i;:::-;:58;;;;:::i;:::-;38132:13;:74:::0;;;38242:2:::1;-1:-1:-1::0;38225:19:0::1;38217:68;;;::::0;-1:-1:-1;;;38217:68:0;;11792:2:1;38217:68:0::1;::::0;::::1;11774:21:1::0;11831:2;11811:18;;;11804:30;11870:34;11850:18;;;11843:62;-1:-1:-1;;;11921:18:1;;;11914:34;11965:19;;38217:68:0::1;11590:400:1::0;38217:68:0::1;38317:12;::::0;38331:18:::1;::::0;38351:19:::1;::::0;38301:70:::1;::::0;;10626:25:1;;;10682:2;10667:18;;10660:34;;;;10710:18;;;10703:34;38301:70:0::1;::::0;10614:2:1;10599:18;38301:70:0::1;10424:319:1::0;32821:143:0;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;32890:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;32890:22:0::1;-1:-1:-1::0;;;;32890:22:0;;::::1;;::::0;;32928:28:::1;::::0;::::1;::::0;::::1;::::0;32904:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;3818:244:0;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3907:22:0;::::1;3899:73;;;::::0;-1:-1:-1;;;3899:73:0;;12197:2:1;3899:73:0::1;::::0;::::1;12179:21:1::0;12236:2;12216:18;;;12209:30;12275:34;12255:18;;;12248:62;-1:-1:-1;;;12326:18:1;;;12319:36;12372:19;;3899:73:0::1;11995:402:1::0;3899:73:0::1;4009:6;::::0;;3988:38:::1;::::0;-1:-1:-1;;;;;3988:38:0;;::::1;::::0;4009:6;::::1;::::0;3988:38:::1;::::0;::::1;4037:6;:17:::0;;-1:-1:-1;;;;;;4037:17:0::1;-1:-1:-1::0;;;;;4037:17:0;;;::::1;::::0;;;::::1;::::0;;3818:244::o;23700:442::-;3575:6;;-1:-1:-1;;;;;3575:6:0;2852:10;3575:22;3567:67;;;;-1:-1:-1;;;3567:67:0;;;;;;;:::i;:::-;23796:4:::1;-1:-1:-1::0;;;;;23779:22:0;::::1;::::0;23771:67:::1;;;::::0;-1:-1:-1;;;23771:67:0;;12604:2:1;23771:67:0::1;::::0;::::1;12586:21:1::0;;;12623:18;;;12616:30;12682:34;12662:18;;;12655:62;12734:18;;23771:67:0::1;12402:356:1::0;23771:67:0::1;-1:-1:-1::0;;;;;23853:21:0;::::1;23849:127;;23891:52;23899:10;23921:21;23891:29;:52::i;23849:127::-;24048:35;::::0;-1:-1:-1;;;24048:35:0;;24077:4:::1;24048:35;::::0;::::1;1388:51:1::0;24013:5:0;;23986:17:::1;::::0;-1:-1:-1;;;;;24048:20:0;::::1;::::0;::::1;::::0;1361:18:1;;24048:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24094:40;::::0;-1:-1:-1;;;24094:40:0;;24114:10:::1;24094:40;::::0;::::1;13126:51:1::0;13193:18;;;13186:34;;;24030:53:0;;-1:-1:-1;;;;;;24094:19:0;::::1;::::0;::::1;::::0;13099:18:1;;24094:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23760:382;;3645:1;23700:442:::0;:::o;28671:337::-;-1:-1:-1;;;;;28764:19:0;;28756:68;;;;-1:-1:-1;;;28756:68:0;;13683:2:1;28756:68:0;;;13665:21:1;13722:2;13702:18;;;13695:30;13761:34;13741:18;;;13734:62;-1:-1:-1;;;13812:18:1;;;13805:34;13856:19;;28756:68:0;13481:400:1;28756:68:0;-1:-1:-1;;;;;28843:21:0;;28835:68;;;;-1:-1:-1;;;28835:68:0;;14088:2:1;28835:68:0;;;14070:21:1;14127:2;14107:18;;;14100:30;14166:34;14146:18;;;14139:62;-1:-1:-1;;;14217:18:1;;;14210:32;14259:19;;28835:68:0;13886:398:1;28835:68:0;-1:-1:-1;;;;;28916:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28968:32;;1596:25:1;;;28968:32:0;;1569:18:1;28968:32:0;;;;;;;28671:337;;;:::o;29184:1687::-;-1:-1:-1;;;;;29306:18:0;;29298:68;;;;-1:-1:-1;;;29298:68:0;;14491:2:1;29298:68:0;;;14473:21:1;14530:2;14510:18;;;14503:30;14569:34;14549:18;;;14542:62;-1:-1:-1;;;14620:18:1;;;14613:35;14665:19;;29298:68:0;14289:401:1;29298:68:0;29394:1;29385:6;:10;29377:64;;;;-1:-1:-1;;;29377:64:0;;14897:2:1;29377:64:0;;;14879:21:1;14936:2;14916:18;;;14909:30;14975:34;14955:18;;;14948:62;-1:-1:-1;;;15026:18:1;;;15019:39;15075:19;;29377:64:0;14695:405:1;29377:64:0;-1:-1:-1;;;;;29458:25:0;;;;;;:19;:25;;;;;;;;29457:26;:54;;;;-1:-1:-1;;;;;;29488:23:0;;;;;;:19;:23;;;;;;;;29487:24;29457:54;29454:139;;;29536:14;;-1:-1:-1;;;29536:14:0;;;;29528:53;;;;-1:-1:-1;;;29528:53:0;;15307:2:1;29528:53:0;;;15289:21:1;15346:2;15326:18;;;15319:30;15385:28;15365:18;;;15358:56;15431:18;;29528:53:0;15105:350:1;29528:53:0;29605:28;29636:24;29654:4;29636:9;:24::i;:::-;29730:18;;29605:55;;-1:-1:-1;29706:42:0;;;;;;;29777:53;;-1:-1:-1;29814:16:0;;-1:-1:-1;;;29814:16:0;;;;29813:17;29777:53;:89;;;;-1:-1:-1;29853:13:0;;-1:-1:-1;;;;;29847:19:0;;;29853:13;;29847:19;29777:89;:117;;;;-1:-1:-1;29883:11:0;;-1:-1:-1;;;29883:11:0;;;;29777:117;29759:988;;;29921:16;:23;;-1:-1:-1;;;;29921:23:0;-1:-1:-1;;;29921:23:0;;;30020:19;;29999:18;;29921:23;;29999:40;;;:::i;:::-;29973:66;;30054:22;30099:18;;30079:17;;:38;;;;:::i;:::-;30054:63;-1:-1:-1;30132:18:0;30153:32;30054:63;30153:15;:32;:::i;:::-;30132:53;-1:-1:-1;30203:14:0;;30200:497;;30241:18;;30238:198;;30284:23;30352:10;30311:37;30334:14;30311:20;:37;:::i;:::-;30310:52;;;;:::i;:::-;30284:78;;30385:31;30400:15;30385:14;:31::i;:::-;30261:175;30238:198;30475:19;;30472:209;;30519:24;30589:10;30547:38;30570:15;30547:20;:38;:::i;:::-;30546:53;;;;:::i;:::-;30519:80;;30622:39;30644:16;30622:21;:39::i;:::-;30496:185;30472:209;-1:-1:-1;;30711:16:0;:24;;-1:-1:-1;;;;30711:24:0;;;-1:-1:-1;29759:988:0;30833:30;30848:4;30853:2;30856:6;30833:14;:30::i;:::-;29287:1584;;29184:1687;;;:::o;25729:160::-;25770:7;25791:15;25808;25827:19;:17;:19::i;:::-;25790:56;;-1:-1:-1;25790:56:0;-1:-1:-1;25864:17:0;25790:56;;25864:17;:::i;:::-;25857:24;;;;25729:160;:::o;24299:475::-;24358:7;24367;24376;24385;24394;24403;24412;24433:23;24458:12;24472:18;24492:19;24515:20;24527:7;24515:11;:20::i;:::-;24432:103;;;;;;;;24547:15;24564:23;24589:12;24605:63;24617:7;24626:4;24632:10;24644:11;24657:10;:8;:10::i;:::-;24605:11;:63::i;:::-;24546:122;;-1:-1:-1;24546:122:0;-1:-1:-1;24546:122:0;-1:-1:-1;24719:15:0;;-1:-1:-1;24736:4:0;;-1:-1:-1;24742:10:0;;-1:-1:-1;24754:11:0;-1:-1:-1;;;;24299:475:0;;;;;;;;;:::o;5435:346::-;5514:4;5563:6;5538:21;:31;;5530:73;;;;-1:-1:-1;;;5530:73:0;;15835:2:1;5530:73:0;;;15817:21:1;15874:2;15854:18;;;15847:30;15913:31;15893:18;;;15886:59;15962:18;;5530:73:0;15633:353:1;5530:73:0;5695:12;5713:9;-1:-1:-1;;;;;5713:14:0;5736:6;5713:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5694:54:0;;5435:346;-1:-1:-1;;;;;5435:346:0:o;30879:947::-;30938:12;30953:10;30962:1;30953:6;:10;:::i;:::-;30938:25;-1:-1:-1;30974:17:0;30994:13;30938:25;30994:6;:13;:::i;:::-;31103:16;;;31117:1;31103:16;;;;;;;;30974:33;;-1:-1:-1;31045:21:0;;31020:22;;31103:16;;;;;;;;;;-1:-1:-1;31103:16:0;31079:40;;31148:4;31130;31135:1;31130:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31130:23:0;;;:7;;;;;;;;;;:23;;;;31174:15;;:22;;;-1:-1:-1;;;31174:22:0;;;;:15;;;;;:20;;:22;;;;;31130:7;;31174:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31164:4;31169:1;31164:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31164:32:0;;;:7;;;;;;;;;:32;31209:15;;:207;;-1:-1:-1;;;31209:207:0;;:15;;;:66;;:207;;31290:4;;31209:15;;31353:4;;31380;;31400:15;;31209:207;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31437:18;31482:14;31458:21;:38;;;;:::i;:::-;31509:15;;31712:4;;31509:248;;-1:-1:-1;;;31509:248:0;;31582:4;31509:248;;;17915:34:1;17965:18;;;17958:34;;;31509:15:0;18008:18:1;;;18001:34;;;18051:18;;;18044:34;-1:-1:-1;;;;;31712:4:0;;;18094:19:1;;;18087:44;31731:15:0;18147:19:1;;;18140:35;31437:59:0;;-1:-1:-1;31509:15:0;;:31;;31437:59;;17849:19:1;;31509:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;31775:43:0;;;10626:25:1;;;10682:2;10667:18;;10660:34;;;10710:18;;;10703:34;;;31775:43:0;;-1:-1:-1;10614:2:1;10599:18;31775:43:0;;;;;;;30927:899;;;;;30879:947;:::o;31834:678::-;31988:16;;;32002:1;31988:16;;;;;;;;31930:21;;31905:22;;31988:16;32002:1;31988:16;;;;;;;;;;-1:-1:-1;31988:16:0;31964:40;;32033:4;32015;32020:1;32015:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32015:23:0;;;:7;;;;;;;;;;:23;;;;32059:15;;:22;;;-1:-1:-1;;;32059:22:0;;;;:15;;;;;:20;;:22;;;;;32015:7;;32059:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32049:4;32054:1;32049:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32049:32:0;;;:7;;;;;;;;;:32;32094:15;;:214;;-1:-1:-1;;;32094:214:0;;:15;;;:66;;:214;;32175:11;;32094:15;;32245:4;;32272;;32292:15;;32094:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32321:18;32366:14;32342:21;:38;;;;:::i;:::-;32401:16;;32321:59;;-1:-1:-1;32393:47:0;;-1:-1:-1;;;;;32401:16:0;32321:59;32393:35;:47::i;:::-;-1:-1:-1;32458:46:0;;;18671:25:1;;;18727:2;18712:18;;18705:34;;;32458:46:0;;18644:18:1;32458:46:0;;;;;;;31894:618;;;31834:678;:::o;32972:1119::-;-1:-1:-1;;;;;33071:27:0;;;;;;:19;:27;;;;;;;;;:75;;-1:-1:-1;;;;;;33116:30:0;;;;;;:19;:30;;;;;;;;33071:75;33067:406;;;33178:14;:12;:14::i;:::-;33067:406;;;33225:13;;-1:-1:-1;;;;;33225:13:0;;;33212:26;;;;33209:264;;33254:12;:10;:12::i;33209:264::-;33296:13;;-1:-1:-1;;;;;33296:13:0;;;33286:23;;;;33283:190;;33325:11;:9;:11::i;33283:190::-;33356:32;;-1:-1:-1;;;33356:32:0;;;;33353:120;;;33404:14;:12;:14::i;33353:120::-;33449:12;:10;:12::i;:::-;-1:-1:-1;;;;;33489:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;33513:22:0;;;;;;:11;:22;;;;;;;;33512:23;33489:46;33485:597;;;33552:48;33574:6;33582:9;33593:6;33552:21;:48::i;:::-;32972:1119;;;:::o;33485:597::-;-1:-1:-1;;;;;33623:19:0;;;;;;:11;:19;;;;;;;;33622:20;:46;;;;-1:-1:-1;;;;;;33646:22:0;;;;;;:11;:22;;;;;;;;33622:46;33618:464;;;33685:46;33705:6;33713:9;33724:6;33685:19;:46::i;33618:464::-;-1:-1:-1;;;;;33754:19:0;;;;;;:11;:19;;;;;;;;33753:20;:47;;;;-1:-1:-1;;;;;;33778:22:0;;;;;;:11;:22;;;;;;;;33777:23;33753:47;33749:333;;;33817:44;33835:6;33843:9;33854:6;33817:17;:44::i;33749:333::-;-1:-1:-1;;;;;33883:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33906:22:0;;;;;;:11;:22;;;;;;;;33883:45;33879:203;;;33945:48;33967:6;33975:9;33986:6;33945:21;:48::i;33879:203::-;34026:44;34044:6;34052:9;34063:6;34026:17;:44::i;25897:552::-;25994:7;;26030;;25947;;;;;26054:283;26078:9;:16;26074:20;;26054:283;;;26144:7;26120;:21;26128:9;26138:1;26128:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26128:12:0;26120:21;;;;;;;;;;;;;:31;;:66;;;26179:7;26155;:21;26163:9;26173:1;26163:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26163:12:0;26155:21;;;;;;;;;;;;;:31;26120:66;26116:97;;;26196:7;;26205;;26188:25;;;;;;;25897:552;;:::o;26116:97::-;26248:7;:21;26256:9;26266:1;26256:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26256:12:0;26248:21;;;;;;;;;;;;;26238:31;;:7;:31;:::i;:::-;26228:41;;26304:7;:21;26312:9;26322:1;26312:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26312:12:0;26304:21;;;;;;;;;;;;;26294:31;;:7;:31;:::i;:::-;26284:41;-1:-1:-1;26096:3:0;;;;:::i;:::-;;;;26054:283;;;;26371:7;;26361;;:17;;;;:::i;:::-;26351:7;:27;26347:58;;;26388:7;;26397;;26380:25;;;;;;25897:552;;:::o;26347:58::-;26424:7;;26433;;-1:-1:-1;25897:552:0;-1:-1:-1;25897:552:0:o;24782:424::-;24842:7;24851;24860;24869;24889:12;24904:24;24920:7;24904:15;:24::i;:::-;24889:39;;24939:18;24960:30;24982:7;24960:21;:30::i;:::-;24939:51;;25001:19;25023:31;25046:7;25023:22;:31::i;:::-;25001:53;-1:-1:-1;25065:23:0;25001:53;25108:10;25091:14;25101:4;25091:7;:14;:::i;:::-;:27;;;;:::i;:::-;:41;;;;:::i;:::-;25065:67;25168:4;;-1:-1:-1;25174:10:0;;-1:-1:-1;25174:10:0;-1:-1:-1;24782:424:0;;-1:-1:-1;;;24782:424:0:o;25214:507::-;25350:7;;;;25406:21;25416:11;25406:7;:21;:::i;:::-;25388:39;-1:-1:-1;25438:12:0;25453:18;25460:11;25453:4;:18;:::i;:::-;25438:33;-1:-1:-1;25482:18:0;25503:24;25516:11;25503:10;:24;:::i;:::-;25482:45;-1:-1:-1;25538:19:0;25560:25;25574:11;25560;:25;:::i;:::-;25538:47;-1:-1:-1;25596:23:0;25538:47;25639:10;25622:14;25632:4;25622:7;:14;:::i;:::-;:27;;;;:::i;:::-;:41;;;;:::i;:::-;25682:7;;;;-1:-1:-1;25708:4:0;;-1:-1:-1;25214:507:0;;-1:-1:-1;;;;;;;;;25214:507:0:o;27728:208::-;27774:7;;:12;:34;;;;-1:-1:-1;27790:13:0;;:18;27774:34;:57;;;;-1:-1:-1;27812:14:0;;:19;27774:57;27771:69;;;27728:208::o;27771:69::-;27870:1;27860:7;:11;;;27882:14;:18;;;27911:13;:17;27728:208::o;28238:289::-;28292:12;;28281:7;;:23;:62;;;;;28325:18;;28308:13;;:35;28281:62;:103;;;;;28365:19;;28347:14;;:37;28281:103;28278:115;;;28238:289::o;28278:115::-;28415:12;;28405:7;:22;28455:19;;28438:14;:36;28501:18;;28485:13;:34;28238:289::o;27948:282::-;28001:11;;27990:7;;:22;:60;;;;;28033:17;;28016:13;;:34;27990:60;:100;;;;;28072:18;;28054:14;;:36;27990:100;27987:112;;;27948:282::o;27987:112::-;28121:11;;28111:7;:21;28160:18;;28143:14;:35;28205:17;;28189:13;:33;27948:282::o;35308:617::-;35411:15;35428:23;35453:12;35467:23;35492:12;35506:18;35526:19;35549;35560:7;35549:10;:19::i;:::-;35410:158;;;;;;;;;;;;;;35615:7;35597;:15;35605:6;-1:-1:-1;;;;;35597:15:0;-1:-1:-1;;;;;35597:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;35579:15:0;;;;;;:7;:15;;;;;;;;:43;;;;35651:7;:15;;;;:25;;35669:7;;35651:25;:::i;:::-;-1:-1:-1;;;;;35633:15:0;;;;;;;:7;:15;;;;;;:43;;;;35708:18;;;;;;;:36;;35729:15;;35708:36;:::i;:::-;-1:-1:-1;;;;;35687:18:0;;;;;;:7;:18;;;;;:57;35756:28;35772:11;35756:15;:28::i;:::-;35797:26;35812:10;35797:14;:26::i;:::-;35834:23;35846:4;35852;35834:11;:23::i;:::-;35890:9;-1:-1:-1;;;;;35873:44:0;35882:6;-1:-1:-1;;;;;35873:44:0;;35901:15;35873:44;;;;1596:25:1;;1584:2;1569:18;;1450:177;35873:44:0;;;;;;;;35399:526;;;;;;;35308:617;;;:::o;34663:637::-;34764:15;34781:23;34806:12;34820:23;34845:12;34859:18;34879:19;34902;34913:7;34902:10;:19::i;:::-;34763:158;;;;;;;;;;;;;;34968:7;34950;:15;34958:6;-1:-1:-1;;;;;34950:15:0;-1:-1:-1;;;;;34950:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;34932:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;35007:18;;;;;:7;:18;;;;;:36;;35028:15;;35007:36;:::i;:::-;-1:-1:-1;;;;;34986:18:0;;;;;;:7;:18;;;;;;;;:57;;;;35075:7;:18;;;;:36;;35096:15;;35075:36;:::i;34099:556::-;34198:15;34215:23;34240:12;34254:23;34279:12;34293:18;34313:19;34336;34347:7;34336:10;:19::i;:::-;34197:158;;;;;;;;;;;;;;34402:7;34384;:15;34392:6;-1:-1:-1;;;;;34384:15:0;-1:-1:-1;;;;;34384:15:0;;;;;;;;;;;;;:25;;;;:::i;35933:690::-;36036:15;36053:23;36078:12;36092:23;36117:12;36131:18;36151:19;36174;36185:7;36174:10;:19::i;:::-;36035:158;;;;;;;;;;;;;;36240:7;36222;:15;36230:6;-1:-1:-1;;;;;36222:15:0;-1:-1:-1;;;;;36222:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;36204:15:0;;;;;;:7;:15;;;;;;;;:43;;;;36276:7;:15;;;;:25;;36294:7;;36276:25;:::i;27304:122::-;27368:7;27415:3;27405:7;;27395;:17;;;;:::i;:::-;:23;;;;:::i;27434:134::-;27504:7;27557:3;27541:13;;27531:7;:23;;;;:::i;27580:136::-;27651:7;27705:3;27688:14;;27678:7;:24;;;;:::i;26877:415::-;26946:15;;26942:343;;26978:19;27001:10;:8;:10::i;:::-;26978:33;-1:-1:-1;27026:19:0;27048:25;26978:33;27048:11;:25;:::i;:::-;27129:4;27113:22;;;;:7;:22;;;;;;27026:47;;-1:-1:-1;27113:36:0;;27026:47;;27113:36;:::i;:::-;27104:4;27088:22;;;;:7;:22;;;;;;;;:61;;;;27167:11;:26;;;;;;27164:109;;;27253:4;27237:22;;;;:7;:22;;;;;;:36;;27262:11;;27237:36;:::i;:::-;27228:4;27212:22;;;;:7;:22;;;;;:61;26963:322;;26877:415;:::o;24150:141::-;24238:4;24228:7;;:14;;;;:::i;:::-;24218:7;:24;24266:10;;:17;;24279:4;;24266:17;:::i;:::-;24253:10;:30;-1:-1:-1;;24150:141:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2093:180::-;2152:6;2205:2;2193:9;2184:7;2180:23;2176:32;2173:52;;;2221:1;2218;2211:12;2173:52;-1:-1:-1;2244:23:1;;2093:180;-1:-1:-1;2093:180:1:o;2467:247::-;2526:6;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2634:9;2621:23;2653:31;2678:5;2653:31;:::i;2719:118::-;2805:5;2798:13;2791:21;2784:5;2781:32;2771:60;;2827:1;2824;2817:12;2842:309;2907:6;2915;2968:2;2956:9;2947:7;2943:23;2939:32;2936:52;;;2984:1;2981;2974:12;2936:52;3020:9;3007:23;2997:33;;3080:2;3069:9;3065:18;3052:32;3093:28;3115:5;3093:28;:::i;:::-;3140:5;3130:15;;;2842:309;;;;;:::o;3364:241::-;3420:6;3473:2;3461:9;3452:7;3448:23;3444:32;3441:52;;;3489:1;3486;3479:12;3441:52;3528:9;3515:23;3547:28;3569:5;3547:28;:::i;3610:316::-;3687:6;3695;3703;3756:2;3744:9;3735:7;3731:23;3727:32;3724:52;;;3772:1;3769;3762:12;3724:52;-1:-1:-1;;3795:23:1;;;3865:2;3850:18;;3837:32;;-1:-1:-1;3916:2:1;3901:18;;;3888:32;;3610:316;-1:-1:-1;3610:316:1:o;3931:382::-;3996:6;4004;4057:2;4045:9;4036:7;4032:23;4028:32;4025:52;;;4073:1;4070;4063:12;4025:52;4112:9;4099:23;4131:31;4156:5;4131:31;:::i;:::-;4181:5;-1:-1:-1;4238:2:1;4223:18;;4210:32;4251:30;4210:32;4251:30;:::i;4318:388::-;4386:6;4394;4447:2;4435:9;4426:7;4422:23;4418:32;4415:52;;;4463:1;4460;4453:12;4415:52;4502:9;4489:23;4521:31;4546:5;4521:31;:::i;:::-;4571:5;-1:-1:-1;4628:2:1;4613:18;;4600:32;4641:33;4600:32;4641:33;:::i;4711:380::-;4790:1;4786:12;;;;4833;;;4854:61;;4908:4;4900:6;4896:17;4886:27;;4854:61;4961:2;4953:6;4950:14;4930:18;4927:38;4924:161;;5007:10;5002:3;4998:20;4995:1;4988:31;5042:4;5039:1;5032:15;5070:4;5067:1;5060:15;4924:161;;4711:380;;;:::o;5096:127::-;5157:10;5152:3;5148:20;5145:1;5138:31;5188:4;5185:1;5178:15;5212:4;5209:1;5202:15;5228:128;5295:9;;;5316:11;;;5313:37;;;5330:18;;:::i;5772:217::-;5812:1;5838;5828:132;;5882:10;5877:3;5873:20;5870:1;5863:31;5917:4;5914:1;5907:15;5945:4;5942:1;5935:15;5828:132;-1:-1:-1;5974:9:1;;5772:217::o;5994:356::-;6196:2;6178:21;;;6215:18;;;6208:30;6274:34;6269:2;6254:18;;6247:62;6341:2;6326:18;;5994:356::o;6711:127::-;6772:10;6767:3;6763:20;6760:1;6753:31;6803:4;6800:1;6793:15;6827:4;6824:1;6817:15;6843:127;6904:10;6899:3;6895:20;6892:1;6885:31;6935:4;6932:1;6925:15;6959:4;6956:1;6949:15;6975:135;7014:3;7035:17;;;7032:43;;7055:18;;:::i;:::-;-1:-1:-1;7102:1:1;7091:13;;6975:135::o;7115:125::-;7180:9;;;7201:10;;;7198:36;;;7214:18;;:::i;12763:184::-;12833:6;12886:2;12874:9;12865:7;12861:23;12857:32;12854:52;;;12902:1;12899;12892:12;12854:52;-1:-1:-1;12925:16:1;;12763:184;-1:-1:-1;12763:184:1:o;13231:245::-;13298:6;13351:2;13339:9;13330:7;13326:23;13322:32;13319:52;;;13367:1;13364;13357:12;13319:52;13399:9;13393:16;13418:28;13440:5;13418:28;:::i;15460:168::-;15533:9;;;15564;;15581:15;;;15575:22;;15561:37;15551:71;;15602:18;;:::i;16333:251::-;16403:6;16456:2;16444:9;16435:7;16431:23;16427:32;16424:52;;;16472:1;16469;16462:12;16424:52;16504:9;16498:16;16523:31;16548:5;16523:31;:::i;16589:980::-;16851:4;16899:3;16888:9;16884:19;16930:6;16919:9;16912:25;16956:2;16994:6;16989:2;16978:9;16974:18;16967:34;17037:3;17032:2;17021:9;17017:18;17010:31;17061:6;17096;17090:13;17127:6;17119;17112:22;17165:3;17154:9;17150:19;17143:26;;17204:2;17196:6;17192:15;17178:29;;17225:1;17235:195;17249:6;17246:1;17243:13;17235:195;;;17314:13;;-1:-1:-1;;;;;17310:39:1;17298:52;;17405:15;;;;17370:12;;;;17346:1;17264:9;17235:195;;;-1:-1:-1;;;;;;;17486:32:1;;;;17481:2;17466:18;;17459:60;-1:-1:-1;;;17550:3:1;17535:19;17528:35;17447:3;16589:980;-1:-1:-1;;;16589:980:1:o;18186:306::-;18274:6;18282;18290;18343:2;18331:9;18322:7;18318:23;18314:32;18311:52;;;18359:1;18356;18349:12;18311:52;18388:9;18382:16;18372:26;;18438:2;18427:9;18423:18;18417:25;18407:35;;18482:2;18471:9;18467:18;18461:25;18451:35;;18186:306;;;;;:::o
Swarm Source
ipfs://0be566990bab21b64906ab0408c7f5a604068aa0742780e6a59bdcf33b470860
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.