ERC-20
Overview
Max Total Supply
100,000,000 GAI
Holders
8
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000008102138 GAIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GAI
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-05 */ /* 🏆GOLDEN AI $GAI 🏆 Setting the gold precedent in artificial intelligence. Our utilities will consist of the following; Leverage Trading Bot Safe Live New Pairs Bot Chat Bot (Extreme Protection) OpenAI NFT Generator AI Friend ( You’re Buddy Basically ) Built by and worked on by the team who developed DALL-E2, which essentially built a computer that can draw anything you ask of it. Full Website will go live 06/02/2023 with all bot mechanisms workable on telegram and Java script web browsers. This is the golden generation of AI, be at one with us today. 💬: https://t.me/goldenGAI 🐦: https://twitter.com/goldenAI_ */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.9; 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 SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { //function _msgSender() internal view virtual returns (address payable) { function _msgSender() internal view virtual returns (address) { return 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; } } 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 { 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 }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // 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); } } } } 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 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 Mint(address indexed sender, uint amount0, uint amount1); 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 mint(address to) external returns (uint liquidity); 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 GAI is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; mapping(address => bool) private _isSniper; address[] private _confirmedSnipers; address public marketingWallet = payable(0x30C9F256A74B64e916f1557Ae083d83A9d9B0Bd8); address public devWallet = payable(0x30C9F256A74B64e916f1557Ae083d83A9d9B0Bd8); bool public tradingOpen = false; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 public maxWalletamount = 2000000 * 10**18; uint256 public launchTime; string private _name = "GOLDEN AI"; string private _symbol = "GAI"; uint8 private _decimals = 18; uint256 public _taxFee = 0; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 12; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 2000000 * 10**18; uint256 public numTokensSellToAddToLiquidity = 10000 * 10**18; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setMarketingWallet(address marketingwalletAddress) public onlyOwner { marketingWallet = marketingwalletAddress; } function setDevWallet(address devwalletAddress) public onlyOwner { devWallet = devwalletAddress; } function normalizeTxAmount() external onlyOwner() { _maxTxAmount = 100000000 * 10**18; } function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() { numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**18; } function clearStuckBalance() public { payable(marketingWallet).transfer(address(this).balance); } function setTradingEnabled() external onlyOwner() { tradingOpen = true; launchTime = block.timestamp; } function setMaxWalletAmount(uint256 _maxwalletamount) public onlyOwner { require(_maxwalletamount > 500000 * 10**18, "Max wallet amount should be greater than 0.5% of the total supply"); maxWalletamount = _maxwalletamount; } function clearERCtokens(IERC20 tokenAddress) external { tokenAddress.transfer(marketingWallet, tokenAddress.balanceOf(address(this))); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isSniper[to], 'You have no power here!'); require(!_isSniper[msg.sender], 'You have no power here!'); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); if (to != owner() && from == uniswapV2Pair) { uint256 BalanceRecepient = balanceOf(to); require( BalanceRecepient + amount <= maxWalletamount, "Transfer exceeds maximum wallet token amount." ); } // buy if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) { require(tradingOpen, 'Trading not yet enabled.'); //antibot if (block.timestamp == launchTime) { _isSniper[to] = true; _confirmedSnipers.push(to); } } uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = balanceOf(address(this)); //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into liquidity, marketing and dev quotas uint256 convertQuota = contractTokenBalance.div(6).mul(5); uint256 liquHalf = contractTokenBalance.sub(convertQuota); uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(convertQuota); // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketingshare = newBalance.div(5).mul(2); payable(marketingWallet).transfer(marketingshare); uint256 afterMarketBalance = newBalance.sub(marketingshare); uint256 devshare = afterMarketBalance.div(3).mul(2); payable(devWallet).transfer(devshare); uint256 afterDevBalance = afterMarketBalance.sub(devshare); // add liquidity to uniswap addLiquidity(liquHalf, afterDevBalance); emit SwapAndLiquify(liquHalf, afterDevBalance, liquHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable marketingWallet, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!tradingOpen){ require(sender == owner()); // only owner allowed to trade or add liquidity } if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function isSniper(address account) public view returns (bool) { return _isSniper[account]; } function _amnestySniper(address account) external onlyOwner { require(_isSniper[account], 'Account is not blacklisted'); for (uint256 i = 0; i < _confirmedSnipers.length; i++) { if (_confirmedSnipers[i] == account) { _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1]; _isSniper[account] = false; _confirmedSnipers.pop(); break; } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_amnestySniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"}],"name":"clearERCtokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckBalance","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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletamount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"normalizeTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"devwalletAddress","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingwalletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxwalletamount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600980546001600160a01b0319167330c9f256a74b64e916f1557ae083d83a9d9b0bd8908117909155600a80546001600160a81b03191690911790556a52b7d2dcc80cd2e4000000600b8190556200005f9060001962000490565b6200006d90600019620004b3565b600c556a01a784379d99db42000000600e5560408051808201909152600980825268474f4c44454e20414960b81b6020909201918252620000b191601091620003ea565b506040805180820190915260038082526247414960e81b6020909201918252620000de91601191620003ea565b506012805460ff19168117905560006013819055601455600c60158190556016556017805461ff0019166101001790556a01a784379d99db4200000060185569021e19e0c9bab24000006019553480156200013857600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526001602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001dc57600080fd5b505afa158015620001f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002179190620004d9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026057600080fd5b505afa15801562000275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029b9190620004d9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002e457600080fd5b505af1158015620002f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031f9190620004d9565b6001600160a01b0390811660a05281166080526001600460006200034b6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003933390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620003db91815260200190565b60405180910390a35062000548565b828054620003f8906200050b565b90600052602060002090601f0160209004810192826200041c576000855562000467565b82601f106200043757805160ff191683800117855562000467565b8280016001018555821562000467579182015b82811115620004675782518255916020019190600101906200044a565b506200047592915062000479565b5090565b5b808211156200047557600081556001016200047a565b600082620004ae57634e487b7160e01b600052601260045260246000fd5b500690565b600082821015620004d457634e487b7160e01b600052601160045260246000fd5b500390565b600060208284031215620004ec57600080fd5b81516001600160a01b03811681146200050457600080fd5b9392505050565b600181811c908216806200052057607f821691505b602082108114156200054257634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051613003620005ad6000396000818161058d01528181611ae801528181611ba40152611d4301526000818161035d01528181611be0015281816125b70152818161267f015281816126bb0152818161272d015261279501526130036000f3fe60806040526004361061028c5760003560e01c806352390c021161015a57806395d89b41116100c1578063dc4b7f2a1161007a578063dc4b7f2a146107f5578063dd62ed3e1461080b578063e156afd514610851578063ea2f0b3714610866578063f2fde38b14610886578063ffb54a99146108a657600080fd5b806395d89b4114610755578063a457c2d71461076a578063a9059cbb1461078a578063ade176f3146107aa578063c49b9a80146107bf578063d12a7688146107df57600080fd5b806375f0a8741161011357806375f0a87414610692578063790ca413146106b25780637d1db4a5146106c857806388f82020146106de5780638da5cb5b146107175780638ea5220f1461073557600080fd5b806352390c02146105ce5780635342acb4146105ee5780635d098b38146106275780636bc87c3a1461064757806370a082311461065d578063715018a61461067d57600080fd5b80632d838119116101fe5780633b124fe7116101b75780633b124fe7146105055780633bd5d1731461051b578063437823ec1461053b5780634549b0391461055b57806349bd5a5e1461057b5780634a74bb02146105af57600080fd5b80632d8381191461044e578063313ce5671461046e578063362a3c5d14610490578063364333f4146104b05780633685d419146104c557806339509351146104e557600080fd5b806318160ddd1161025057806318160ddd146103975780631f53ac02146103ac57806323b872dd146103ce57806327a14fc2146103ee57806328c7157d1461040e57806329e04b4a1461042e57600080fd5b806306fdde0314610298578063095ea7b3146102c35780630f3a325f146102f357806313114a9d1461032c5780631694505e1461034b57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6108c7565b6040516102ba9190612bbb565b60405180910390f35b3480156102cf57600080fd5b506102e36102de366004612c25565b610959565b60405190151581526020016102ba565b3480156102ff57600080fd5b506102e361030e366004612c51565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561033857600080fd5b50600d545b6040519081526020016102ba565b34801561035757600080fd5b5061037f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ba565b3480156103a357600080fd5b50600b5461033d565b3480156103b857600080fd5b506103cc6103c7366004612c51565b610970565b005b3480156103da57600080fd5b506102e36103e9366004612c6e565b6109c5565b3480156103fa57600080fd5b506103cc610409366004612caf565b610a2e565b34801561041a57600080fd5b506103cc610429366004612c51565b610ae6565b34801561043a57600080fd5b506103cc610449366004612caf565b610bee565b34801561045a57600080fd5b5061033d610469366004612caf565b610c30565b34801561047a57600080fd5b5060125460405160ff90911681526020016102ba565b34801561049c57600080fd5b506103cc6104ab366004612c51565b610cb4565b3480156104bc57600080fd5b506103cc610e5e565b3480156104d157600080fd5b506103cc6104e0366004612c51565b610e9a565b3480156104f157600080fd5b506102e3610500366004612c25565b611027565b34801561051157600080fd5b5061033d60135481565b34801561052757600080fd5b506103cc610536366004612caf565b61105d565b34801561054757600080fd5b506103cc610556366004612c51565b611147565b34801561056757600080fd5b5061033d610576366004612cd6565b611195565b34801561058757600080fd5b5061037f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105bb57600080fd5b506017546102e390610100900460ff1681565b3480156105da57600080fd5b506103cc6105e9366004612c51565b611222565b3480156105fa57600080fd5b506102e3610609366004612c51565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063357600080fd5b506103cc610642366004612c51565b611375565b34801561065357600080fd5b5061033d60155481565b34801561066957600080fd5b5061033d610678366004612c51565b6113c1565b34801561068957600080fd5b506103cc611420565b34801561069e57600080fd5b5060095461037f906001600160a01b031681565b3480156106be57600080fd5b5061033d600f5481565b3480156106d457600080fd5b5061033d60185481565b3480156106ea57600080fd5b506102e36106f9366004612c51565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561072357600080fd5b506000546001600160a01b031661037f565b34801561074157600080fd5b50600a5461037f906001600160a01b031681565b34801561076157600080fd5b506102ad611494565b34801561077657600080fd5b506102e3610785366004612c25565b6114a3565b34801561079657600080fd5b506102e36107a5366004612c25565b6114f2565b3480156107b657600080fd5b506103cc6114ff565b3480156107cb57600080fd5b506103cc6107da366004612d06565b61153a565b3480156107eb57600080fd5b5061033d60195481565b34801561080157600080fd5b5061033d600e5481565b34801561081757600080fd5b5061033d610826366004612d23565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561085d57600080fd5b506103cc6115b8565b34801561087257600080fd5b506103cc610881366004612c51565b6115fb565b34801561089257600080fd5b506103cc6108a1366004612c51565b611646565b3480156108b257600080fd5b50600a546102e390600160a01b900460ff1681565b6060601080546108d690612d51565b80601f016020809104026020016040519081016040528092919081815260200182805461090290612d51565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b5050505050905090565b6000610966338484611730565b5060015b92915050565b6000546001600160a01b031633146109a35760405162461bcd60e51b815260040161099a90612d8c565b60405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006109d2848484611854565b610a248433610a1f85604051806060016040528060288152602001612f81602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611e03565b611730565b5060019392505050565b6000546001600160a01b03163314610a585760405162461bcd60e51b815260040161099a90612d8c565b6969e10de76676d08000008111610ae15760405162461bcd60e51b815260206004820152604160248201527f4d61782077616c6c657420616d6f756e742073686f756c64206265206772656160448201527f746572207468616e20302e3525206f662074686520746f74616c20737570706c6064820152607960f81b608482015260a40161099a565b600e55565b6009546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610b3457600080fd5b505afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190612dc1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610bb257600080fd5b505af1158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612dda565b5050565b6000546001600160a01b03163314610c185760405162461bcd60e51b815260040161099a90612d8c565b610c2a81670de0b6b3a7640000612e0d565b60195550565b6000600c54821115610c975760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161099a565b6000610ca1611e3d565b9050610cad8382611e60565b9392505050565b6000546001600160a01b03163314610cde5760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b03811660009081526007602052604090205460ff16610d465760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015260640161099a565b60005b600854811015610bea57816001600160a01b031660088281548110610d7057610d70612e2c565b6000918252602090912001546001600160a01b03161415610e4c5760088054610d9b90600190612e42565b81548110610dab57610dab612e2c565b600091825260209091200154600880546001600160a01b039092169183908110610dd757610dd7612e2c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600790915260409020805460ff191690556008805480610e2657610e26612e59565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e5681612e6f565b915050610d49565b6009546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610e97573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610ec45760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b03811660009081526005602052604090205460ff16610f2c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161099a565b60005b600654811015610bea57816001600160a01b031660068281548110610f5657610f56612e2c565b6000918252602090912001546001600160a01b031614156110155760068054610f8190600190612e42565b81548110610f9157610f91612e2c565b600091825260209091200154600680546001600160a01b039092169183908110610fbd57610fbd612e2c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e2657610e26612e59565b8061101f81612e6f565b915050610f2f565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610966918590610a1f9086611ea2565b3360008181526005602052604090205460ff16156110d25760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161099a565b60006110dd83611f01565b505050506001600160a01b03841660009081526001602052604090205491925061110991905082611f50565b6001600160a01b038316600090815260016020526040902055600c5461112f9082611f50565b600c55600d5461113f9084611ea2565b600d55505050565b6000546001600160a01b031633146111715760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600b548311156111e95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161099a565b816112085760006111f984611f01565b5093955061096a945050505050565b600061121384611f01565b5092955061096a945050505050565b6000546001600160a01b0316331461124c5760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b03811660009081526005602052604090205460ff16156112b55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161099a565b6001600160a01b0381166000908152600160205260409020541561130f576001600160a01b0381166000908152600160205260409020546112f590610c30565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461139f5760405162461bcd60e51b815260040161099a90612d8c565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156113fe57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461096a90610c30565b6000546001600160a01b0316331461144a5760405162461bcd60e51b815260040161099a90612d8c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060601180546108d690612d51565b60006109663384610a1f85604051806060016040528060258152602001612fa9602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611e03565b6000610966338484611854565b6000546001600160a01b031633146115295760405162461bcd60e51b815260040161099a90612d8c565b6a52b7d2dcc80cd2e4000000601855565b6000546001600160a01b031633146115645760405162461bcd60e51b815260040161099a90612d8c565b601780548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115ad90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115e25760405162461bcd60e51b815260040161099a90612d8c565b600a805460ff60a01b1916600160a01b17905542600f55565b6000546001600160a01b031633146116255760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146116705760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b0381166116d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117925760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099a565b6001600160a01b0382166117f35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118b85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161099a565b6001600160a01b03821661191a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161099a565b6000811161197c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161099a565b6001600160a01b03821660009081526007602052604090205460ff16156119df5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161099a565b3360009081526007602052604090205460ff1615611a395760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161099a565b6000546001600160a01b03848116911614801590611a6557506000546001600160a01b03838116911614155b15611acd57601854811115611acd5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161099a565b6000546001600160a01b03838116911614801590611b1c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15611ba2576000611b2c836113c1565b600e54909150611b3c8383612e8a565b1115611ba05760405162461bcd60e51b815260206004820152602d60248201527f5472616e736665722065786365656473206d6178696d756d2077616c6c65742060448201526c3a37b5b2b71030b6b7bab73a1760991b606482015260840161099a565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015611c1557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611c3a57506001600160a01b03821660009081526004602052604090205460ff16155b15611d0857600a54600160a01b900460ff16611c985760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604482015260640161099a565b600f54421415611d08576001600160a01b0382166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b03191690911790555b6000611d13306113c1565b90506018548110611d2357506018545b60195481108015908190611d3a575060175460ff16155b8015611d7857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611d8b5750601754610100900460ff165b15611da457611d99306113c1565b9150611da482611f92565b6001600160a01b03851660009081526004602052604090205460019060ff1680611de657506001600160a01b03851660009081526004602052604090205460ff165b15611def575060005b611dfb868686846120f7565b505050505050565b60008184841115611e275760405162461bcd60e51b815260040161099a9190612bbb565b506000611e348486612e42565b95945050505050565b6000806000611e4a61229f565b9092509050611e598282611e60565b9250505090565b6000610cad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612421565b600080611eaf8385612e8a565b905083811015610cad5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161099a565b6000806000806000806000806000611f188a61244f565b9250925092506000806000611f368d8686611f31611e3d565b612491565b919f909e50909c50959a5093985091965092945050505050565b6000610cad83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e03565b6017805460ff191660011790556000611fb76005611fb1846006611e60565b906124e1565b90506000611fc58383611f50565b905047611fd183612560565b6000611fdd4783611f50565b90506000611ff16002611fb1846005611e60565b6009546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561202c573d6000803e3d6000fd5b5060006120398383611f50565b9050600061204d6002611fb1846003611e60565b600a546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612088573d6000803e3d6000fd5b5060006120958383611f50565b90506120a18782612727565b60408051888152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506017805460ff1916905550505050505050565b600a54600160a01b900460ff16612122576000546001600160a01b0385811691161461212257600080fd5b8061212f5761212f61281c565b6001600160a01b03841660009081526005602052604090205460ff16801561217057506001600160a01b03831660009081526005602052604090205460ff16155b156121855761218084848461284a565b612283565b6001600160a01b03841660009081526005602052604090205460ff161580156121c657506001600160a01b03831660009081526005602052604090205460ff165b156121d657612180848484612970565b6001600160a01b03841660009081526005602052604090205460ff1615801561221857506001600160a01b03831660009081526005602052604090205460ff16155b1561222857612180848484612a19565b6001600160a01b03841660009081526005602052604090205460ff16801561226857506001600160a01b03831660009081526005602052604090205460ff165b1561227857612180848484612a5d565b612283848484612a19565b8061229957612299601454601355601654601555565b50505050565b600c54600b546000918291825b6006548110156123f1578260016000600684815481106122ce576122ce612e2c565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612339575081600260006006848154811061231257612312612e2c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561234f57600c54600b54945094505050509091565b612395600160006006848154811061236957612369612e2c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f50565b92506123dd60026000600684815481106123b1576123b1612e2c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f50565b9150806123e981612e6f565b9150506122ac565b50600b54600c5461240191611e60565b82101561241857600c54600b549350935050509091565b90939092509050565b600081836124425760405162461bcd60e51b815260040161099a9190612bbb565b506000611e348486612ea2565b60008060008061245e85612ad0565b9050600061246b86612af2565b905060006124838261247d8986611f50565b90611f50565b979296509094509092505050565b60008080806124a088866124e1565b905060006124ae88876124e1565b905060006124bc88886124e1565b905060006124ce8261247d8686611f50565b939b939a50919850919650505050505050565b6000826124f05750600061096a565b60006124fc8385612e0d565b9050826125098583612ea2565b14610cad5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161099a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061259557612595612e2c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561260e57600080fd5b505afa158015612622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126469190612ec4565b8160018151811061265957612659612e2c565b60200260200101906001600160a01b031690816001600160a01b0316815250506126a4307f000000000000000000000000000000000000000000000000000000000000000084611730565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906126f9908590600090869030904290600401612ee1565b600060405180830381600087803b15801561271357600080fd5b505af1158015611dfb573d6000803e3d6000fd5b612752307f000000000000000000000000000000000000000000000000000000000000000084611730565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b1580156127dc57600080fd5b505af11580156127f0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128159190612f52565b5050505050565b60135415801561282c5750601554155b1561283357565b601380546014556015805460165560009182905555565b60008060008060008061285c87611f01565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061288e9088611f50565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546128bd9087611f50565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546128ec9086611ea2565b6001600160a01b03891660009081526001602052604090205561290e81612b0e565b6129188483612b97565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161295d91815260200190565b60405180910390a3505050505050505050565b60008060008060008061298287611f01565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506129b49087611f50565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546129ea9084611ea2565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546128ec9086611ea2565b600080600080600080612a2b87611f01565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506128bd9087611f50565b600080600080600080612a6f87611f01565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612aa19088611f50565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546129b49087611f50565b600061096a6064612aec601354856124e190919063ffffffff16565b90611e60565b600061096a6064612aec601554856124e190919063ffffffff16565b6000612b18611e3d565b90506000612b2683836124e1565b30600090815260016020526040902054909150612b439082611ea2565b3060009081526001602090815260408083209390935560059052205460ff1615612b925730600090815260026020526040902054612b819084611ea2565b306000908152600260205260409020555b505050565b600c54612ba49083611f50565b600c55600d54612bb49082611ea2565b600d555050565b600060208083528351808285015260005b81811015612be857858101830151858201604001528201612bcc565b81811115612bfa576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e9757600080fd5b60008060408385031215612c3857600080fd5b8235612c4381612c10565b946020939093013593505050565b600060208284031215612c6357600080fd5b8135610cad81612c10565b600080600060608486031215612c8357600080fd5b8335612c8e81612c10565b92506020840135612c9e81612c10565b929592945050506040919091013590565b600060208284031215612cc157600080fd5b5035919050565b8015158114610e9757600080fd5b60008060408385031215612ce957600080fd5b823591506020830135612cfb81612cc8565b809150509250929050565b600060208284031215612d1857600080fd5b8135610cad81612cc8565b60008060408385031215612d3657600080fd5b8235612d4181612c10565b91506020830135612cfb81612c10565b600181811c90821680612d6557607f821691505b60208210811415612d8657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612dd357600080fd5b5051919050565b600060208284031215612dec57600080fd5b8151610cad81612cc8565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612e2757612e27612df7565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612e5457612e54612df7565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612e8357612e83612df7565b5060010190565b60008219821115612e9d57612e9d612df7565b500190565b600082612ebf57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612ed657600080fd5b8151610cad81612c10565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f315784516001600160a01b031683529383019391830191600101612f0c565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f6757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220513a1d85c1d569513989ca3ce9a173e2c8b78c04e19e1cc0a3f10cb3256a88e864736f6c63430008090033
Deployed Bytecode
0x60806040526004361061028c5760003560e01c806352390c021161015a57806395d89b41116100c1578063dc4b7f2a1161007a578063dc4b7f2a146107f5578063dd62ed3e1461080b578063e156afd514610851578063ea2f0b3714610866578063f2fde38b14610886578063ffb54a99146108a657600080fd5b806395d89b4114610755578063a457c2d71461076a578063a9059cbb1461078a578063ade176f3146107aa578063c49b9a80146107bf578063d12a7688146107df57600080fd5b806375f0a8741161011357806375f0a87414610692578063790ca413146106b25780637d1db4a5146106c857806388f82020146106de5780638da5cb5b146107175780638ea5220f1461073557600080fd5b806352390c02146105ce5780635342acb4146105ee5780635d098b38146106275780636bc87c3a1461064757806370a082311461065d578063715018a61461067d57600080fd5b80632d838119116101fe5780633b124fe7116101b75780633b124fe7146105055780633bd5d1731461051b578063437823ec1461053b5780634549b0391461055b57806349bd5a5e1461057b5780634a74bb02146105af57600080fd5b80632d8381191461044e578063313ce5671461046e578063362a3c5d14610490578063364333f4146104b05780633685d419146104c557806339509351146104e557600080fd5b806318160ddd1161025057806318160ddd146103975780631f53ac02146103ac57806323b872dd146103ce57806327a14fc2146103ee57806328c7157d1461040e57806329e04b4a1461042e57600080fd5b806306fdde0314610298578063095ea7b3146102c35780630f3a325f146102f357806313114a9d1461032c5780631694505e1461034b57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6108c7565b6040516102ba9190612bbb565b60405180910390f35b3480156102cf57600080fd5b506102e36102de366004612c25565b610959565b60405190151581526020016102ba565b3480156102ff57600080fd5b506102e361030e366004612c51565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561033857600080fd5b50600d545b6040519081526020016102ba565b34801561035757600080fd5b5061037f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102ba565b3480156103a357600080fd5b50600b5461033d565b3480156103b857600080fd5b506103cc6103c7366004612c51565b610970565b005b3480156103da57600080fd5b506102e36103e9366004612c6e565b6109c5565b3480156103fa57600080fd5b506103cc610409366004612caf565b610a2e565b34801561041a57600080fd5b506103cc610429366004612c51565b610ae6565b34801561043a57600080fd5b506103cc610449366004612caf565b610bee565b34801561045a57600080fd5b5061033d610469366004612caf565b610c30565b34801561047a57600080fd5b5060125460405160ff90911681526020016102ba565b34801561049c57600080fd5b506103cc6104ab366004612c51565b610cb4565b3480156104bc57600080fd5b506103cc610e5e565b3480156104d157600080fd5b506103cc6104e0366004612c51565b610e9a565b3480156104f157600080fd5b506102e3610500366004612c25565b611027565b34801561051157600080fd5b5061033d60135481565b34801561052757600080fd5b506103cc610536366004612caf565b61105d565b34801561054757600080fd5b506103cc610556366004612c51565b611147565b34801561056757600080fd5b5061033d610576366004612cd6565b611195565b34801561058757600080fd5b5061037f7f0000000000000000000000007f31bb75f95cae9bc7a9ad5d8620605f17bd1a7581565b3480156105bb57600080fd5b506017546102e390610100900460ff1681565b3480156105da57600080fd5b506103cc6105e9366004612c51565b611222565b3480156105fa57600080fd5b506102e3610609366004612c51565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063357600080fd5b506103cc610642366004612c51565b611375565b34801561065357600080fd5b5061033d60155481565b34801561066957600080fd5b5061033d610678366004612c51565b6113c1565b34801561068957600080fd5b506103cc611420565b34801561069e57600080fd5b5060095461037f906001600160a01b031681565b3480156106be57600080fd5b5061033d600f5481565b3480156106d457600080fd5b5061033d60185481565b3480156106ea57600080fd5b506102e36106f9366004612c51565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561072357600080fd5b506000546001600160a01b031661037f565b34801561074157600080fd5b50600a5461037f906001600160a01b031681565b34801561076157600080fd5b506102ad611494565b34801561077657600080fd5b506102e3610785366004612c25565b6114a3565b34801561079657600080fd5b506102e36107a5366004612c25565b6114f2565b3480156107b657600080fd5b506103cc6114ff565b3480156107cb57600080fd5b506103cc6107da366004612d06565b61153a565b3480156107eb57600080fd5b5061033d60195481565b34801561080157600080fd5b5061033d600e5481565b34801561081757600080fd5b5061033d610826366004612d23565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561085d57600080fd5b506103cc6115b8565b34801561087257600080fd5b506103cc610881366004612c51565b6115fb565b34801561089257600080fd5b506103cc6108a1366004612c51565b611646565b3480156108b257600080fd5b50600a546102e390600160a01b900460ff1681565b6060601080546108d690612d51565b80601f016020809104026020016040519081016040528092919081815260200182805461090290612d51565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b5050505050905090565b6000610966338484611730565b5060015b92915050565b6000546001600160a01b031633146109a35760405162461bcd60e51b815260040161099a90612d8c565b60405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006109d2848484611854565b610a248433610a1f85604051806060016040528060288152602001612f81602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611e03565b611730565b5060019392505050565b6000546001600160a01b03163314610a585760405162461bcd60e51b815260040161099a90612d8c565b6969e10de76676d08000008111610ae15760405162461bcd60e51b815260206004820152604160248201527f4d61782077616c6c657420616d6f756e742073686f756c64206265206772656160448201527f746572207468616e20302e3525206f662074686520746f74616c20737570706c6064820152607960f81b608482015260a40161099a565b600e55565b6009546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610b3457600080fd5b505afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190612dc1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610bb257600080fd5b505af1158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612dda565b5050565b6000546001600160a01b03163314610c185760405162461bcd60e51b815260040161099a90612d8c565b610c2a81670de0b6b3a7640000612e0d565b60195550565b6000600c54821115610c975760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161099a565b6000610ca1611e3d565b9050610cad8382611e60565b9392505050565b6000546001600160a01b03163314610cde5760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b03811660009081526007602052604090205460ff16610d465760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015260640161099a565b60005b600854811015610bea57816001600160a01b031660088281548110610d7057610d70612e2c565b6000918252602090912001546001600160a01b03161415610e4c5760088054610d9b90600190612e42565b81548110610dab57610dab612e2c565b600091825260209091200154600880546001600160a01b039092169183908110610dd757610dd7612e2c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600790915260409020805460ff191690556008805480610e2657610e26612e59565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e5681612e6f565b915050610d49565b6009546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610e97573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610ec45760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b03811660009081526005602052604090205460ff16610f2c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161099a565b60005b600654811015610bea57816001600160a01b031660068281548110610f5657610f56612e2c565b6000918252602090912001546001600160a01b031614156110155760068054610f8190600190612e42565b81548110610f9157610f91612e2c565b600091825260209091200154600680546001600160a01b039092169183908110610fbd57610fbd612e2c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e2657610e26612e59565b8061101f81612e6f565b915050610f2f565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610966918590610a1f9086611ea2565b3360008181526005602052604090205460ff16156110d25760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161099a565b60006110dd83611f01565b505050506001600160a01b03841660009081526001602052604090205491925061110991905082611f50565b6001600160a01b038316600090815260016020526040902055600c5461112f9082611f50565b600c55600d5461113f9084611ea2565b600d55505050565b6000546001600160a01b031633146111715760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600b548311156111e95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161099a565b816112085760006111f984611f01565b5093955061096a945050505050565b600061121384611f01565b5092955061096a945050505050565b6000546001600160a01b0316331461124c5760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b03811660009081526005602052604090205460ff16156112b55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161099a565b6001600160a01b0381166000908152600160205260409020541561130f576001600160a01b0381166000908152600160205260409020546112f590610c30565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461139f5760405162461bcd60e51b815260040161099a90612d8c565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156113fe57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461096a90610c30565b6000546001600160a01b0316331461144a5760405162461bcd60e51b815260040161099a90612d8c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060601180546108d690612d51565b60006109663384610a1f85604051806060016040528060258152602001612fa9602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611e03565b6000610966338484611854565b6000546001600160a01b031633146115295760405162461bcd60e51b815260040161099a90612d8c565b6a52b7d2dcc80cd2e4000000601855565b6000546001600160a01b031633146115645760405162461bcd60e51b815260040161099a90612d8c565b601780548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115ad90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115e25760405162461bcd60e51b815260040161099a90612d8c565b600a805460ff60a01b1916600160a01b17905542600f55565b6000546001600160a01b031633146116255760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146116705760405162461bcd60e51b815260040161099a90612d8c565b6001600160a01b0381166116d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117925760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099a565b6001600160a01b0382166117f35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118b85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161099a565b6001600160a01b03821661191a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161099a565b6000811161197c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161099a565b6001600160a01b03821660009081526007602052604090205460ff16156119df5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161099a565b3360009081526007602052604090205460ff1615611a395760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161099a565b6000546001600160a01b03848116911614801590611a6557506000546001600160a01b03838116911614155b15611acd57601854811115611acd5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161099a565b6000546001600160a01b03838116911614801590611b1c57507f0000000000000000000000007f31bb75f95cae9bc7a9ad5d8620605f17bd1a756001600160a01b0316836001600160a01b0316145b15611ba2576000611b2c836113c1565b600e54909150611b3c8383612e8a565b1115611ba05760405162461bcd60e51b815260206004820152602d60248201527f5472616e736665722065786365656473206d6178696d756d2077616c6c65742060448201526c3a37b5b2b71030b6b7bab73a1760991b606482015260840161099a565b505b7f0000000000000000000000007f31bb75f95cae9bc7a9ad5d8620605f17bd1a756001600160a01b0316836001600160a01b0316148015611c1557507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611c3a57506001600160a01b03821660009081526004602052604090205460ff16155b15611d0857600a54600160a01b900460ff16611c985760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604482015260640161099a565b600f54421415611d08576001600160a01b0382166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b03191690911790555b6000611d13306113c1565b90506018548110611d2357506018545b60195481108015908190611d3a575060175460ff16155b8015611d7857507f0000000000000000000000007f31bb75f95cae9bc7a9ad5d8620605f17bd1a756001600160a01b0316856001600160a01b031614155b8015611d8b5750601754610100900460ff165b15611da457611d99306113c1565b9150611da482611f92565b6001600160a01b03851660009081526004602052604090205460019060ff1680611de657506001600160a01b03851660009081526004602052604090205460ff165b15611def575060005b611dfb868686846120f7565b505050505050565b60008184841115611e275760405162461bcd60e51b815260040161099a9190612bbb565b506000611e348486612e42565b95945050505050565b6000806000611e4a61229f565b9092509050611e598282611e60565b9250505090565b6000610cad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612421565b600080611eaf8385612e8a565b905083811015610cad5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161099a565b6000806000806000806000806000611f188a61244f565b9250925092506000806000611f368d8686611f31611e3d565b612491565b919f909e50909c50959a5093985091965092945050505050565b6000610cad83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e03565b6017805460ff191660011790556000611fb76005611fb1846006611e60565b906124e1565b90506000611fc58383611f50565b905047611fd183612560565b6000611fdd4783611f50565b90506000611ff16002611fb1846005611e60565b6009546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561202c573d6000803e3d6000fd5b5060006120398383611f50565b9050600061204d6002611fb1846003611e60565b600a546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612088573d6000803e3d6000fd5b5060006120958383611f50565b90506120a18782612727565b60408051888152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506017805460ff1916905550505050505050565b600a54600160a01b900460ff16612122576000546001600160a01b0385811691161461212257600080fd5b8061212f5761212f61281c565b6001600160a01b03841660009081526005602052604090205460ff16801561217057506001600160a01b03831660009081526005602052604090205460ff16155b156121855761218084848461284a565b612283565b6001600160a01b03841660009081526005602052604090205460ff161580156121c657506001600160a01b03831660009081526005602052604090205460ff165b156121d657612180848484612970565b6001600160a01b03841660009081526005602052604090205460ff1615801561221857506001600160a01b03831660009081526005602052604090205460ff16155b1561222857612180848484612a19565b6001600160a01b03841660009081526005602052604090205460ff16801561226857506001600160a01b03831660009081526005602052604090205460ff165b1561227857612180848484612a5d565b612283848484612a19565b8061229957612299601454601355601654601555565b50505050565b600c54600b546000918291825b6006548110156123f1578260016000600684815481106122ce576122ce612e2c565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612339575081600260006006848154811061231257612312612e2c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561234f57600c54600b54945094505050509091565b612395600160006006848154811061236957612369612e2c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f50565b92506123dd60026000600684815481106123b1576123b1612e2c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f50565b9150806123e981612e6f565b9150506122ac565b50600b54600c5461240191611e60565b82101561241857600c54600b549350935050509091565b90939092509050565b600081836124425760405162461bcd60e51b815260040161099a9190612bbb565b506000611e348486612ea2565b60008060008061245e85612ad0565b9050600061246b86612af2565b905060006124838261247d8986611f50565b90611f50565b979296509094509092505050565b60008080806124a088866124e1565b905060006124ae88876124e1565b905060006124bc88886124e1565b905060006124ce8261247d8686611f50565b939b939a50919850919650505050505050565b6000826124f05750600061096a565b60006124fc8385612e0d565b9050826125098583612ea2565b14610cad5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161099a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061259557612595612e2c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561260e57600080fd5b505afa158015612622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126469190612ec4565b8160018151811061265957612659612e2c565b60200260200101906001600160a01b031690816001600160a01b0316815250506126a4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611730565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906126f9908590600090869030904290600401612ee1565b600060405180830381600087803b15801561271357600080fd5b505af1158015611dfb573d6000803e3d6000fd5b612752307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611730565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b1580156127dc57600080fd5b505af11580156127f0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128159190612f52565b5050505050565b60135415801561282c5750601554155b1561283357565b601380546014556015805460165560009182905555565b60008060008060008061285c87611f01565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061288e9088611f50565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546128bd9087611f50565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546128ec9086611ea2565b6001600160a01b03891660009081526001602052604090205561290e81612b0e565b6129188483612b97565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161295d91815260200190565b60405180910390a3505050505050505050565b60008060008060008061298287611f01565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506129b49087611f50565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546129ea9084611ea2565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546128ec9086611ea2565b600080600080600080612a2b87611f01565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506128bd9087611f50565b600080600080600080612a6f87611f01565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612aa19088611f50565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546129b49087611f50565b600061096a6064612aec601354856124e190919063ffffffff16565b90611e60565b600061096a6064612aec601554856124e190919063ffffffff16565b6000612b18611e3d565b90506000612b2683836124e1565b30600090815260016020526040902054909150612b439082611ea2565b3060009081526001602090815260408083209390935560059052205460ff1615612b925730600090815260026020526040902054612b819084611ea2565b306000908152600260205260409020555b505050565b600c54612ba49083611f50565b600c55600d54612bb49082611ea2565b600d555050565b600060208083528351808285015260005b81811015612be857858101830151858201604001528201612bcc565b81811115612bfa576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e9757600080fd5b60008060408385031215612c3857600080fd5b8235612c4381612c10565b946020939093013593505050565b600060208284031215612c6357600080fd5b8135610cad81612c10565b600080600060608486031215612c8357600080fd5b8335612c8e81612c10565b92506020840135612c9e81612c10565b929592945050506040919091013590565b600060208284031215612cc157600080fd5b5035919050565b8015158114610e9757600080fd5b60008060408385031215612ce957600080fd5b823591506020830135612cfb81612cc8565b809150509250929050565b600060208284031215612d1857600080fd5b8135610cad81612cc8565b60008060408385031215612d3657600080fd5b8235612d4181612c10565b91506020830135612cfb81612c10565b600181811c90821680612d6557607f821691505b60208210811415612d8657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612dd357600080fd5b5051919050565b600060208284031215612dec57600080fd5b8151610cad81612cc8565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612e2757612e27612df7565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612e5457612e54612df7565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612e8357612e83612df7565b5060010190565b60008219821115612e9d57612e9d612df7565b500190565b600082612ebf57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612ed657600080fd5b8151610cad81612c10565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f315784516001600160a01b031683529383019391830191600101612f0c565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f6757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220513a1d85c1d569513989ca3ce9a173e2c8b78c04e19e1cc0a3f10cb3256a88e864736f6c63430008090033
Deployed Bytecode Sourcemap
15275:20914:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18052:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18964:161;;;;;;;;;;-1:-1:-1;18964:161:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;18964:161:0;1072:187:1;35590:106:0;;;;;;;;;;-1:-1:-1;35590:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;35670:18:0;35646:4;35670:18;;;:9;:18;;;;;;;;;35590:106;20085:87;;;;;;;;;;-1:-1:-1;20154:10:0;;20085:87;;;1662:25:1;;;1650:2;1635:18;20085:87:0;1516:177:1;16617:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;16617:51:0;1698:230:1;18329:95:0;;;;;;;;;;-1:-1:-1;18409:7:0;;18329:95;;23253:112;;;;;;;;;;-1:-1:-1;23253:112:0;;;;;:::i;:::-;;:::i;:::-;;19133:313;;;;;;;;;;-1:-1:-1;19133:313:0;;;;;:::i;:::-;;:::i;23921:247::-;;;;;;;;;;-1:-1:-1;23921:247:0;;;;;:::i;:::-;;:::i;24176:150::-;;;;;;;;;;-1:-1:-1;24176:150:0;;;;;:::i;:::-;;:::i;23487:161::-;;;;;;;;;;-1:-1:-1;23487:161:0;;;;;:::i;:::-;;:::i;21009:253::-;;;;;;;;;;-1:-1:-1;21009:253:0;;;;;:::i;:::-;;:::i;18238:83::-;;;;;;;;;;-1:-1:-1;18304:9:0;;18238:83;;18304:9;;;;2986:36:1;;2974:2;2959:18;18238:83:0;2844:184:1;35704:480:0;;;;;;;;;;-1:-1:-1;35704:480:0;;;;;:::i;:::-;;:::i;23660:111::-;;;;;;;;;;;;;:::i;21725:479::-;;;;;;;;;;-1:-1:-1;21725:479:0;;;;;:::i;:::-;;:::i;19454:218::-;;;;;;;;;;-1:-1:-1;19454:218:0;;;;;:::i;:::-;;:::i;16428:26::-;;;;;;;;;;;;;;;;20180:377;;;;;;;;;;-1:-1:-1;20180:377:0;;;;;:::i;:::-;;:::i;22868:111::-;;;;;;;;;;-1:-1:-1;22868:111:0;;;;;:::i;:::-;;:::i;20565:436::-;;;;;;;;;;-1:-1:-1;20565:436:0;;;;;:::i;:::-;;:::i;16675:38::-;;;;;;;;;;;;;;;16754:40;;;;;;;;;;-1:-1:-1;16754:40:0;;;;;;;;;;;21270:447;;;;;;;;;;-1:-1:-1;21270:447:0;;;;;:::i;:::-;;:::i;27822:123::-;;;;;;;;;;-1:-1:-1;27822:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;27910:27:0;27886:4;27910:27;;;:18;:27;;;;;;;;;27822:123;23109:136;;;;;;;;;;-1:-1:-1;23109:136:0;;;;;:::i;:::-;;:::i;16515:33::-;;;;;;;;;;;;;;;;18432:198;;;;;;;;;;-1:-1:-1;18432:198:0;;;;;:::i;:::-;;:::i;6887:148::-;;;;;;;;;;;;;:::i;15810:84::-;;;;;;;;;;-1:-1:-1;15810:84:0;;;;-1:-1:-1;;;;;15810:84:0;;;16271:25;;;;;;;;;;;;;;;;16807:46;;;;;;;;;;;;;;;;19957:120;;;;;;;;;;-1:-1:-1;19957:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20049:20:0;20025:4;20049:20;;;:11;:20;;;;;;;;;19957:120;6673:79;;;;;;;;;;-1:-1:-1;6711:7:0;6738:6;-1:-1:-1;;;;;6738:6:0;6673:79;;15898:78;;;;;;;;;;-1:-1:-1;15898:78:0;;;;-1:-1:-1;;;;;15898:78:0;;;18143:87;;;;;;;;;;;;;:::i;19680:269::-;;;;;;;;;;-1:-1:-1;19680:269:0;;;;;:::i;:::-;;:::i;18638:167::-;;;;;;;;;;-1:-1:-1;18638:167:0;;;;;:::i;:::-;;:::i;23373:102::-;;;;;;;;;;;;;:::i;24338:171::-;;;;;;;;;;-1:-1:-1;24338:171:0;;;;;:::i;:::-;;:::i;16860:61::-;;;;;;;;;;;;;;;;16215:49;;;;;;;;;;;;;;;;18813:143;;;;;;;;;;-1:-1:-1;18813:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18921:18:0;;;18894:7;18921:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18813:143;23783:126;;;;;;;;;;;;;:::i;22991:110::-;;;;;;;;;;-1:-1:-1;22991:110:0;;;;;:::i;:::-;;:::i;7043:244::-;;;;;;;;;;-1:-1:-1;7043:244:0;;;;;:::i;:::-;;:::i;15983:31::-;;;;;;;;;;-1:-1:-1;15983:31:0;;;;-1:-1:-1;;;15983:31:0;;;;;;18052:83;18089:13;18122:5;18115:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18052:83;:::o;18964:161::-;19039:4;19056:39;3089:10;19079:7;19088:6;19056:8;:39::i;:::-;-1:-1:-1;19113:4:0;18964:161;;;;;:::o;23253:112::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;;;;;;;;;23329:9:::1;:28:::0;;-1:-1:-1;;;;;;23329:28:0::1;-1:-1:-1::0;;;;;23329:28:0;;;::::1;::::0;;;::::1;::::0;;23253:112::o;19133:313::-;19231:4;19248:36;19258:6;19266:9;19277:6;19248:9;:36::i;:::-;19295:121;19304:6;3089:10;19326:89;19364:6;19326:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19326:19:0;;;;;;:11;:19;;;;;;;;3089:10;19326:33;;;;;;;;;;:37;:89::i;:::-;19295:8;:121::i;:::-;-1:-1:-1;19434:4:0;19133:313;;;;;:::o;23921:247::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;24030:15:::1;24011:16;:34;24003:112;;;::::0;-1:-1:-1;;;24003:112:0;;5265:2:1;24003:112:0::1;::::0;::::1;5247:21:1::0;5304:2;5284:18;;;5277:30;5343:34;5323:18;;;5316:62;5414:34;5394:18;;;5387:62;-1:-1:-1;;;5465:19:1;;;5458:32;5507:19;;24003:112:0::1;5063:469:1::0;24003:112:0::1;24126:15;:34:::0;23921:247::o;24176:150::-;24263:15;;24280:37;;-1:-1:-1;;;24280:37:0;;24311:4;24280:37;;;1871:51:1;-1:-1:-1;;;;;24241:21:0;;;;;;24263:15;;;24241:21;;24280:22;;1844:18:1;;24280:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24241:77;;-1:-1:-1;;;;;;24241:77:0;;;;;;;-1:-1:-1;;;;;5918:32:1;;;24241:77:0;;;5900:51:1;5967:18;;;5960:34;5873:18;;24241:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24176:150;:::o;23487:161::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;23612:28:::1;:19:::0;23634:6:::1;23612:28;:::i;:::-;23580:29;:60:::0;-1:-1:-1;23487:161:0:o;21009:253::-;21075:7;21114;;21103;:18;;21095:73;;;;-1:-1:-1;;;21095:73:0;;6762:2:1;21095:73:0;;;6744:21:1;6801:2;6781:18;;;6774:30;6840:34;6820:18;;;6813:62;-1:-1:-1;;;6891:18:1;;;6884:40;6941:19;;21095:73:0;6560:406:1;21095:73:0;21179:19;21202:10;:8;:10::i;:::-;21179:33;-1:-1:-1;21230:24:0;:7;21179:33;21230:11;:24::i;:::-;21223:31;21009:253;-1:-1:-1;;;21009:253:0:o;35704:480::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35783:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;35775:57;;;::::0;-1:-1:-1;;;35775:57:0;;7173:2:1;35775:57:0::1;::::0;::::1;7155:21:1::0;7212:2;7192:18;;;7185:30;7251:28;7231:18;;;7224:56;7297:18;;35775:57:0::1;6971:350:1::0;35775:57:0::1;35848:9;35843:334;35867:17;:24:::0;35863:28;::::1;35843:334;;;35941:7;-1:-1:-1::0;;;;;35917:31:0::1;:17;35935:1;35917:20;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;35917:20:0::1;:31;35913:253;;;35992:17;36010:24:::0;;:28:::1;::::0;36037:1:::1;::::0;36010:28:::1;:::i;:::-;35992:47;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;35969:17:::1;:20:::0;;-1:-1:-1;;;;;35992:47:0;;::::1;::::0;35987:1;;35969:20;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:70:::0;;-1:-1:-1;;;;;;35969:70:0::1;-1:-1:-1::0;;;;;35969:70:0;;::::1;;::::0;;36058:18;;::::1;::::0;;:9:::1;:18:::0;;;;;;:26;;-1:-1:-1;;36058:26:0::1;::::0;;36103:17:::1;:23:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;36103:23:0;;;;;-1:-1:-1;;;;;;36103:23:0::1;::::0;;;;;24241:77;24176:150;:::o;35913:253::-:1;35893:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35843:334;;23660:111:::0;23715:15;;23707:56;;-1:-1:-1;;;;;23715:15:0;;;;23741:21;23707:56;;;;;23715:15;23707:56;23715:15;23707:56;23741:21;23715:15;23707:56;;;;;;;;;;;;;;;;;;;;;23660:111::o;21725:479::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21807:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21799:60;;;::::0;-1:-1:-1;;;21799:60:0;;8062:2:1;21799:60:0::1;::::0;::::1;8044:21:1::0;8101:2;8081:18;;;8074:30;8140:29;8120:18;;;8113:57;8187:18;;21799:60:0::1;7860:351:1::0;21799:60:0::1;21875:9;21870:327;21894:9;:16:::0;21890:20;::::1;21870:327;;;21952:7;-1:-1:-1::0;;;;;21936:23:0::1;:9;21946:1;21936:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21936:12:0::1;:23;21932:254;;;21995:9;22005:16:::0;;:20:::1;::::0;22024:1:::1;::::0;22005:20:::1;:::i;:::-;21995:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21980:9:::1;:12:::0;;-1:-1:-1;;;;;21995:31:0;;::::1;::::0;21990:1;;21980:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21980:46:0::1;-1:-1:-1::0;;;;;21980:46:0;;::::1;;::::0;;22045:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22084:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22084:28:0::1;::::0;;22131:9:::1;:15:::0;;;::::1;;;;:::i;21932:254::-;21912:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21870:327;;19454:218:::0;3089:10;19542:4;19591:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19591:34:0;;;;;;;;;;19542:4;;19559:83;;19582:7;;19591:50;;19630:10;19591:38;:50::i;20180:377::-;3089:10;20232:14;20281:19;;;:11;:19;;;;;;;;20280:20;20272:77;;;;-1:-1:-1;;;20272:77:0;;8418:2:1;20272:77:0;;;8400:21:1;8457:2;8437:18;;;8430:30;8496:34;8476:18;;;8469:62;-1:-1:-1;;;8547:18:1;;;8540:42;8599:19;;20272:77:0;8216:408:1;20272:77:0;20361:15;20385:19;20396:7;20385:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20433:15:0;;;;;;:7;:15;;;;;;20360:44;;-1:-1:-1;20433:28:0;;:15;-1:-1:-1;20360:44:0;20433:19;:28::i;:::-;-1:-1:-1;;;;;20415:15:0;;;;;;:7;:15;;;;;:46;20482:7;;:20;;20494:7;20482:11;:20::i;:::-;20472:7;:30;20526:10;;:23;;20541:7;20526:14;:23::i;:::-;20513:10;:36;-1:-1:-1;;;20180:377:0:o;22868:111::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22937:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;22937:34:0::1;22967:4;22937:34;::::0;;22868:111::o;20565:436::-;20655:7;20694;;20683;:18;;20675:62;;;;-1:-1:-1;;;20675:62:0;;8831:2:1;20675:62:0;;;8813:21:1;8870:2;8850:18;;;8843:30;8909:33;8889:18;;;8882:61;8960:18;;20675:62:0;8629:355:1;20675:62:0;20753:17;20748:246;;20788:15;20812:19;20823:7;20812:10;:19::i;:::-;-1:-1:-1;20787:44:0;;-1:-1:-1;20846:14:0;;-1:-1:-1;;;;;20846:14:0;20748:246;20895:23;20926:19;20937:7;20926:10;:19::i;:::-;-1:-1:-1;20893:52:0;;-1:-1:-1;20960:22:0;;-1:-1:-1;;;;;20960:22:0;21270:447;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21467:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21466:21;21458:61;;;::::0;-1:-1:-1;;;21458:61:0;;8062:2:1;21458:61:0::1;::::0;::::1;8044:21:1::0;8101:2;8081:18;;;8074:30;8140:29;8120:18;;;8113:57;8187:18;;21458:61:0::1;7860:351:1::0;21458:61:0::1;-1:-1:-1::0;;;;;21533:16:0;::::1;21552:1;21533:16:::0;;;:7:::1;:16;::::0;;;;;:20;21530:108:::1;;-1:-1:-1::0;;;;;21609:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21589:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21570:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21530:108:::1;-1:-1:-1::0;;;;;21648:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21648:27:0::1;21671:4;21648:27:::0;;::::1;::::0;;;21686:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21686:23:0::1;::::0;;::::1;::::0;;21270:447::o;23109:136::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;23197:15:::1;:40:::0;;-1:-1:-1;;;;;;23197:40:0::1;-1:-1:-1::0;;;;;23197:40:0;;;::::1;::::0;;;::::1;::::0;;23109:136::o;18432:198::-;-1:-1:-1;;;;;18522:20:0;;18498:7;18522:20;;;:11;:20;;;;;;;;18518:49;;;-1:-1:-1;;;;;;18551:16:0;;;;;:7;:16;;;;;;;18432:198::o;18518:49::-;-1:-1:-1;;;;;18605:16:0;;;;;;:7;:16;;;;;;18585:37;;:19;:37::i;6887:148::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;6994:1:::1;6978:6:::0;;6957:40:::1;::::0;-1:-1:-1;;;;;6978:6:0;;::::1;::::0;6957:40:::1;::::0;6994:1;;6957:40:::1;7025:1;7008:19:::0;;-1:-1:-1;;;;;;7008:19:0::1;::::0;;6887:148::o;18143:87::-;18182:13;18215:7;18208:14;;;;;:::i;19680:269::-;19773:4;19790:129;3089:10;19813:7;19822:96;19861:15;19822:96;;;;;;;;;;;;;;;;;3089:10;19822:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19822:34:0;;;;;;;;;;;;:38;:96::i;18638:167::-;18716:4;18733:42;3089:10;18757:9;18768:6;18733:9;:42::i;23373:102::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;23449:18:::1;23434:12;:33:::0;23373:102::o;24338:171::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;24415:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;24415:32:0;;::::1;;::::0;;24463:38:::1;::::0;::::1;::::0;::::1;::::0;24439:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;24463:38:0::1;;;;;;;;24338:171:::0;:::o;23783:126::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;23844:11:::1;:18:::0;;-1:-1:-1;;;;23844:18:0::1;-1:-1:-1::0;;;23844:18:0::1;::::0;;23886:15:::1;23873:10;:28:::0;23783:126::o;22991:110::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23058:27:0::1;23088:5;23058:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;23058:35:0::1;::::0;;22991:110::o;7043:244::-;6800:6;;-1:-1:-1;;;;;6800:6:0;3089:10;6800:22;6792:67;;;;-1:-1:-1;;;6792:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7132:22:0;::::1;7124:73;;;::::0;-1:-1:-1;;;7124:73:0;;9191:2:1;7124:73:0::1;::::0;::::1;9173:21:1::0;9230:2;9210:18;;;9203:30;9269:34;9249:18;;;9242:62;-1:-1:-1;;;9320:18:1;;;9313:36;9366:19;;7124:73:0::1;8989:402:1::0;7124:73:0::1;7234:6;::::0;;7213:38:::1;::::0;-1:-1:-1;;;;;7213:38:0;;::::1;::::0;7234:6;::::1;::::0;7213:38:::1;::::0;::::1;7262:6;:17:::0;;-1:-1:-1;;;;;;7262:17:0::1;-1:-1:-1::0;;;;;7262:17:0;;;::::1;::::0;;;::::1;::::0;;7043:244::o;27953:337::-;-1:-1:-1;;;;;28046:19:0;;28038:68;;;;-1:-1:-1;;;28038:68:0;;9598:2:1;28038:68:0;;;9580:21:1;9637:2;9617:18;;;9610:30;9676:34;9656:18;;;9649:62;-1:-1:-1;;;9727:18:1;;;9720:34;9771:19;;28038:68:0;9396:400:1;28038:68:0;-1:-1:-1;;;;;28125:21:0;;28117:68;;;;-1:-1:-1;;;28117:68:0;;10003:2:1;28117:68:0;;;9985:21:1;10042:2;10022:18;;;10015:30;10081:34;10061:18;;;10054:62;-1:-1:-1;;;10132:18:1;;;10125:32;10174:19;;28117:68:0;9801:398:1;28117:68:0;-1:-1:-1;;;;;28198:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28250:32;;1662:25:1;;;28250:32:0;;1635:18:1;28250:32:0;;;;;;;27953:337;;;:::o;28298:2323::-;-1:-1:-1;;;;;28420:18:0;;28412:68;;;;-1:-1:-1;;;28412:68:0;;10406:2:1;28412:68:0;;;10388:21:1;10445:2;10425:18;;;10418:30;10484:34;10464:18;;;10457:62;-1:-1:-1;;;10535:18:1;;;10528:35;10580:19;;28412:68:0;10204:401:1;28412:68:0;-1:-1:-1;;;;;28499:16:0;;28491:64;;;;-1:-1:-1;;;28491:64:0;;10812:2:1;28491:64:0;;;10794:21:1;10851:2;10831:18;;;10824:30;10890:34;10870:18;;;10863:62;-1:-1:-1;;;10941:18:1;;;10934:33;10984:19;;28491:64:0;10610:399:1;28491:64:0;28583:1;28574:6;:10;28566:64;;;;-1:-1:-1;;;28566:64:0;;11216:2:1;28566:64:0;;;11198:21:1;11255:2;11235:18;;;11228:30;11294:34;11274:18;;;11267:62;-1:-1:-1;;;11345:18:1;;;11338:39;11394:19;;28566:64:0;11014:405:1;28566:64:0;-1:-1:-1;;;;;28650:13:0;;;;;;:9;:13;;;;;;;;28649:14;28641:50;;;;-1:-1:-1;;;28641:50:0;;11626:2:1;28641:50:0;;;11608:21:1;11665:2;11645:18;;;11638:30;-1:-1:-1;;;11684:18:1;;;11677:53;11747:18;;28641:50:0;11424:347:1;28641:50:0;28721:10;28711:21;;;;:9;:21;;;;;;;;28710:22;28702:58;;;;-1:-1:-1;;;28702:58:0;;11626:2:1;28702:58:0;;;11608:21:1;11665:2;11645:18;;;11638:30;-1:-1:-1;;;11684:18:1;;;11677:53;11747:18;;28702:58:0;11424:347:1;28702:58:0;6711:7;6738:6;-1:-1:-1;;;;;28774:15:0;;;6738:6;;28774:15;;;;:32;;-1:-1:-1;6711:7:0;6738:6;-1:-1:-1;;;;;28793:13:0;;;6738:6;;28793:13;;28774:32;28771:125;;;28839:12;;28829:6;:22;;28821:75;;;;-1:-1:-1;;;28821:75:0;;11978:2:1;28821:75:0;;;11960:21:1;12017:2;11997:18;;;11990:30;12056:34;12036:18;;;12029:62;-1:-1:-1;;;12107:18:1;;;12100:38;12155:19;;28821:75:0;11776:404:1;28821:75:0;6711:7;6738:6;-1:-1:-1;;;;;28921:13:0;;;6738:6;;28921:13;;;;:38;;;28946:13;-1:-1:-1;;;;;28938:21:0;:4;-1:-1:-1;;;;;28938:21:0;;28921:38;28917:277;;;28976:24;29003:13;29013:2;29003:9;:13::i;:::-;29086:15;;28976:40;;-1:-1:-1;29057:25:0;29076:6;28976:40;29057:25;:::i;:::-;:44;;29031:151;;;;-1:-1:-1;;;29031:151:0;;12520:2:1;29031:151:0;;;12502:21:1;12559:2;12539:18;;;12532:30;12598:34;12578:18;;;12571:62;-1:-1:-1;;;12649:18:1;;;12642:43;12702:19;;29031:151:0;12318:409:1;29031:151:0;28961:233;28917:277;29235:13;-1:-1:-1;;;;;29227:21:0;:4;-1:-1:-1;;;;;29227:21:0;;:55;;;;;29266:15;-1:-1:-1;;;;;29252:30:0;:2;-1:-1:-1;;;;;29252:30:0;;;29227:55;:82;;;;-1:-1:-1;;;;;;29287:22:0;;;;;;:18;:22;;;;;;;;29286:23;29227:82;29223:337;;;29334:11;;-1:-1:-1;;;29334:11:0;;;;29326:48;;;;-1:-1:-1;;;29326:48:0;;12934:2:1;29326:48:0;;;12916:21:1;12973:2;12953:18;;;12946:30;13012:26;12992:18;;;12985:54;13056:18;;29326:48:0;12732:348:1;29326:48:0;29437:10;;29418:15;:29;29414:135;;;-1:-1:-1;;;;;29468:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;29468:20:0;29484:4;29468:20;;;;;;29507:17;:26;;;;;;;;;;;;;;-1:-1:-1;;;;;;29507:26:0;;;;;;29414:135;29576:28;29607:24;29625:4;29607:9;:24::i;:::-;29576:55;;29679:12;;29655:20;:36;29652:112;;-1:-1:-1;29740:12:0;;29652:112;29835:29;;29811:53;;;;;;;29893;;-1:-1:-1;29930:16:0;;;;29929:17;29893:53;:91;;;;;29971:13;-1:-1:-1;;;;;29963:21:0;:4;-1:-1:-1;;;;;29963:21:0;;;29893:91;:129;;;;-1:-1:-1;30001:21:0;;;;;;;29893:129;29875:313;;;30072:24;30090:4;30072:9;:24::i;:::-;30049:47;;30140:36;30155:20;30140:14;:36::i;:::-;-1:-1:-1;;;;;30396:24:0;;30269:12;30396:24;;;:18;:24;;;;;;30284:4;;30396:24;;;:50;;-1:-1:-1;;;;;;30424:22:0;;;;;;:18;:22;;;;;;;;30396:50;30393:96;;;-1:-1:-1;30472:5:0;30393:96;30575:38;30590:4;30595:2;30598:6;30605:7;30575:14;:38::i;:::-;28401:2220;;;28298:2323;;;:::o;1782:192::-;1868:7;1904:12;1896:6;;;;1888:29;;;;-1:-1:-1;;;1888:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1928:9:0;1940:5;1944:1;1940;:5;:::i;:::-;1928:17;1782:192;-1:-1:-1;;;;;1782:192:0:o;25972:163::-;26013:7;26034:15;26051;26070:19;:17;:19::i;:::-;26033:56;;-1:-1:-1;26033:56:0;-1:-1:-1;26107:20:0;26033:56;;26107:11;:20::i;:::-;26100:27;;;;25972:163;:::o;2245:132::-;2303:7;2330:39;2334:1;2337;2330:39;;;;;;;;;;;;;;;;;:3;:39::i;1448:181::-;1506:7;;1538:5;1542:1;1538;:5;:::i;:::-;1526:17;;1567:1;1562;:6;;1554:46;;;;-1:-1:-1;;;1554:46:0;;13287:2:1;1554:46:0;;;13269:21:1;13326:2;13306:18;;;13299:30;13365:29;13345:18;;;13338:57;13412:18;;1554:46:0;13085:351:1;24770:419:0;24829:7;24838;24847;24856;24865;24874;24895:23;24920:12;24934:18;24956:20;24968:7;24956:11;:20::i;:::-;24894:82;;;;;;24988:15;25005:23;25030:12;25046:50;25058:7;25067:4;25073:10;25085;:8;:10::i;:::-;25046:11;:50::i;:::-;24987:109;;;;-1:-1:-1;24987:109:0;;-1:-1:-1;25147:15:0;;-1:-1:-1;25164:4:0;;-1:-1:-1;25170:10:0;;-1:-1:-1;24770:419:0;;-1:-1:-1;;;;;24770:419:0:o;1637:136::-;1695:7;1722:43;1726:1;1729;1722:43;;;;;;;;;;;;;;;;;:3;:43::i;30631:1091::-;17228:16;:23;;-1:-1:-1;;17228:23:0;17247:4;17228:23;;;:16;30823:34:::1;30855:1;30823:27;:20:::0;30848:1:::1;30823:24;:27::i;:::-;:31:::0;::::1;:34::i;:::-;30800:57:::0;-1:-1:-1;30868:16:0::1;30887:38;:20:::0;30800:57;30887:24:::1;:38::i;:::-;30868:57:::0;-1:-1:-1;30967:21:0::1;31037:30;31054:12:::0;31037:16:::1;:30::i;:::-;31129:18;31150:41;:21;31176:14:::0;31150:25:::1;:41::i;:::-;31129:62:::0;-1:-1:-1;31202:22:0::1;31227:24;31249:1;31227:17;31129:62:::0;31242:1:::1;31227:14;:17::i;:24::-;31270:15;::::0;31262:49:::1;::::0;31202;;-1:-1:-1;;;;;;31270:15:0::1;::::0;31262:49;::::1;;;::::0;31202;;31270:15:::1;31262:49:::0;31270:15;31262:49;31202;31270:15;31262:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;31316:26:0::1;31345:30;:10:::0;31360:14;31345::::1;:30::i;:::-;31316:59:::0;-1:-1:-1;31380:16:0::1;31399:32;31429:1;31399:25;31316:59:::0;31422:1:::1;31399:22;:25::i;:32::-;31444:9;::::0;31436:37:::1;::::0;31380:51;;-1:-1:-1;;;;;;31444:9:0::1;::::0;31436:37;::::1;;;::::0;31380:51;;31444:9:::1;31436:37:::0;31444:9;31436:37;31380:51;31444:9;31436:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;31478:23:0::1;31504:32;:18:::0;31527:8;31504:22:::1;:32::i;:::-;31478:58;;31598:39;31611:8;31621:15;31598:12;:39::i;:::-;31663:51;::::0;;13643:25:1;;;13699:2;13684:18;;13677:34;;;13727:18;;;13720:34;;;31663:51:0::1;::::0;13631:2:1;13616:18;31663:51:0::1;;;;;;;-1:-1:-1::0;;17274:16:0;:24;;-1:-1:-1;;17274:24:0;;;-1:-1:-1;;;;;;;30631:1091:0:o;32929:975::-;33040:11;;-1:-1:-1;;;33040:11:0;;;;33036:117;;6711:7;6738:6;-1:-1:-1;;;;;33075:17:0;;;6738:6;;33075:17;33067:26;;;;;;33177:7;33173:40;;33199:14;:12;:14::i;:::-;-1:-1:-1;;;;;33242:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;33266:22:0;;;;;;:11;:22;;;;;;;;33265:23;33242:46;33238:597;;;33305:48;33327:6;33335:9;33346:6;33305:21;:48::i;:::-;33238:597;;;-1:-1:-1;;;;;33376:19:0;;;;;;:11;:19;;;;;;;;33375:20;:46;;;;-1:-1:-1;;;;;;33399:22:0;;;;;;:11;:22;;;;;;;;33375:46;33371:464;;;33438:46;33458:6;33466:9;33477:6;33438:19;:46::i;33371:464::-;-1:-1:-1;;;;;33507:19:0;;;;;;:11;:19;;;;;;;;33506:20;:47;;;;-1:-1:-1;;;;;;33531:22:0;;;;;;:11;:22;;;;;;;;33530:23;33506:47;33502:333;;;33570:44;33588:6;33596:9;33607:6;33570:17;:44::i;33502:333::-;-1:-1:-1;;;;;33636:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33659:22:0;;;;;;:11;:22;;;;;;;;33636:45;33632:203;;;33698:48;33720:6;33728:9;33739:6;33698:21;:48::i;33632:203::-;33779:44;33797:6;33805:9;33816:6;33779:17;:44::i;:::-;33859:7;33855:41;;33881:15;27739;;27729:7;:25;27781:21;;27765:13;:37;27685:125;33881:15;32929:975;;;;:::o;26143:561::-;26240:7;;26276;;26193;;;;;26300:289;26324:9;:16;26320:20;;26300:289;;;26390:7;26366;:21;26374:9;26384:1;26374:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26374:12:0;26366:21;;;;;;;;;;;;;:31;;:66;;;26425:7;26401;:21;26409:9;26419:1;26409:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26409:12:0;26401:21;;;;;;;;;;;;;:31;26366:66;26362:97;;;26442:7;;26451;;26434:25;;;;;;;26143:561;;:::o;26362:97::-;26484:34;26496:7;:21;26504:9;26514:1;26504:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26504:12:0;26496:21;;;;;;;;;;;;;26484:7;;:11;:34::i;:::-;26474:44;;26543:34;26555:7;:21;26563:9;26573:1;26563:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26563:12:0;26555:21;;;;;;;;;;;;;26543:7;;:11;:34::i;:::-;26533:44;-1:-1:-1;26342:3:0;;;;:::i;:::-;;;;26300:289;;;-1:-1:-1;26625:7:0;;26613;;:20;;:11;:20::i;:::-;26603:7;:30;26599:61;;;26643:7;;26652;;26635:25;;;;;;26143:561;;:::o;26599:61::-;26679:7;;26688;;-1:-1:-1;26143:561:0;-1:-1:-1;26143:561:0:o;2385:189::-;2471:7;2506:12;2499:5;2491:28;;;;-1:-1:-1;;;2491:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2530:9:0;2542:5;2546:1;2542;:5;:::i;25197:330::-;25257:7;25266;25275;25295:12;25310:24;25326:7;25310:15;:24::i;:::-;25295:39;;25345:18;25366:30;25388:7;25366:21;:30::i;:::-;25345:51;-1:-1:-1;25407:23:0;25433:33;25345:51;25433:17;:7;25445:4;25433:11;:17::i;:::-;:21;;:33::i;:::-;25407:59;25502:4;;-1:-1:-1;25508:10:0;;-1:-1:-1;25197:330:0;;-1:-1:-1;;;25197:330:0:o;25535:429::-;25650:7;;;;25706:24;:7;25718:11;25706;:24::i;:::-;25688:42;-1:-1:-1;25741:12:0;25756:21;:4;25765:11;25756:8;:21::i;:::-;25741:36;-1:-1:-1;25788:18:0;25809:27;:10;25824:11;25809:14;:27::i;:::-;25788:48;-1:-1:-1;25847:23:0;25873:33;25788:48;25873:17;:7;25885:4;25873:11;:17::i;:33::-;25925:7;;;;-1:-1:-1;25951:4:0;;-1:-1:-1;25535:429:0;;-1:-1:-1;;;;;;;25535:429:0:o;1982:250::-;2040:7;2064:6;2060:47;;-1:-1:-1;2094:1:0;2087:8;;2060:47;2119:9;2131:5;2135:1;2131;:5;:::i;:::-;2119:17;-1:-1:-1;2164:1:0;2155:5;2159:1;2119:17;2155:5;:::i;:::-;:10;2147:56;;;;-1:-1:-1;;;2147:56:0;;14189:2:1;2147:56:0;;;14171:21:1;14228:2;14208:18;;;14201:30;14267:34;14247:18;;;14240:62;-1:-1:-1;;;14318:18:1;;;14311:31;14359:19;;2147:56:0;13987:397:1;31730:589:0;31880:16;;;31894:1;31880:16;;;;;;;;31856:21;;31880:16;;;;;;;;;;-1:-1:-1;31880:16:0;31856:40;;31925:4;31907;31912:1;31907:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31907:23:0;;;-1:-1:-1;;;;;31907:23:0;;;;;31951:15;-1:-1:-1;;;;;31951:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31941:4;31946:1;31941:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31941:32:0;;;-1:-1:-1;;;;;31941:32:0;;;;;31986:62;32003:4;32018:15;32036:11;31986:8;:62::i;:::-;32087:224;;-1:-1:-1;;;32087:224:0;;-1:-1:-1;;;;;32087:15:0;:66;;;;:224;;32168:11;;32194:1;;32238:4;;32265;;32285:15;;32087:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32327:521;32475:62;32492:4;32507:15;32525:11;32475:8;:62::i;:::-;32784:15;;32580:260;;-1:-1:-1;;;32580:260:0;;32652:4;32580:260;;;16103:34:1;16153:18;;;16146:34;;;32698:1:0;16196:18:1;;;16189:34;;;16239:18;;;16232:34;-1:-1:-1;;;;;32784:15:0;;;16282:19:1;;;16275:44;32814:15:0;16335:19:1;;;16328:35;32580:15:0;:31;;;;;;32619:9;;16037:19:1;;32580:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32327:521;;:::o;27423:250::-;27469:7;;:12;:34;;;;-1:-1:-1;27485:13:0;;:18;27469:34;27466:46;;;27423:250::o;27466:46::-;27550:7;;;27532:15;:25;27592:13;;;27568:21;:37;-1:-1:-1;27626:11:0;;;;27648:17;27423:250::o;35016:566::-;35119:15;35136:23;35161:12;35175:23;35200:12;35214:18;35236:19;35247:7;35236:10;:19::i;:::-;-1:-1:-1;;;;;35284:15:0;;;;;;:7;:15;;;;;;35118:137;;-1:-1:-1;35118:137:0;;-1:-1:-1;35118:137:0;;-1:-1:-1;35118:137:0;-1:-1:-1;35118:137:0;-1:-1:-1;35118:137:0;-1:-1:-1;35284:28:0;;35304:7;35284:19;:28::i;:::-;-1:-1:-1;;;;;35266:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35341:7;:15;;;;:28;;35361:7;35341:19;:28::i;:::-;-1:-1:-1;;;;;35323:15:0;;;;;;;:7;:15;;;;;;:46;;;;35401:18;;;;;;;:39;;35424:15;35401:22;:39::i;:::-;-1:-1:-1;;;;;35380:18:0;;;;;;:7;:18;;;;;:60;35454:26;35469:10;35454:14;:26::i;:::-;35491:23;35503:4;35509;35491:11;:23::i;:::-;35547:9;-1:-1:-1;;;;;35530:44:0;35539:6;-1:-1:-1;;;;;35530:44:0;;35558:15;35530:44;;;;1662:25:1;;1650:2;1635:18;;1516:177;35530:44:0;;;;;;;;35107:475;;;;;;35016:566;;;:::o;34422:586::-;34523:15;34540:23;34565:12;34579:23;34604:12;34618:18;34640:19;34651:7;34640:10;:19::i;:::-;-1:-1:-1;;;;;34688:15:0;;;;;;:7;:15;;;;;;34522:137;;-1:-1:-1;34522:137:0;;-1:-1:-1;34522:137:0;;-1:-1:-1;34522:137:0;-1:-1:-1;34522:137:0;-1:-1:-1;34522:137:0;-1:-1:-1;34688:28:0;;34522:137;34688:19;:28::i;:::-;-1:-1:-1;;;;;34670:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;34748:18;;;;;:7;:18;;;;;:39;;34771:15;34748:22;:39::i;:::-;-1:-1:-1;;;;;34727:18:0;;;;;;:7;:18;;;;;;;;:60;;;;34819:7;:18;;;;:39;;34842:15;34819:22;:39::i;33912:502::-;34011:15;34028:23;34053:12;34067:23;34092:12;34106:18;34128:19;34139:7;34128:10;:19::i;:::-;-1:-1:-1;;;;;34176:15:0;;;;;;:7;:15;;;;;;34010:137;;-1:-1:-1;34010:137:0;;-1:-1:-1;34010:137:0;;-1:-1:-1;34010:137:0;-1:-1:-1;34010:137:0;-1:-1:-1;34010:137:0;-1:-1:-1;34176:28:0;;34010:137;34176:19;:28::i;22214:642::-;22317:15;22334:23;22359:12;22373:23;22398:12;22412:18;22434:19;22445:7;22434:10;:19::i;:::-;-1:-1:-1;;;;;22482:15:0;;;;;;:7;:15;;;;;;22316:137;;-1:-1:-1;22316:137:0;;-1:-1:-1;22316:137:0;;-1:-1:-1;22316:137:0;-1:-1:-1;22316:137:0;-1:-1:-1;22316:137:0;-1:-1:-1;22482:28:0;;22502:7;22482:19;:28::i;:::-;-1:-1:-1;;;;;22464:15:0;;;;;;:7;:15;;;;;;;;:46;;;;22539:7;:15;;;;:28;;22559:7;22539:19;:28::i;27083:154::-;27147:7;27174:55;27213:5;27174:20;27186:7;;27174;:11;;:20;;;;:::i;:::-;:24;;:55::i;27245:166::-;27315:7;27342:61;27387:5;27342:26;27354:13;;27342:7;:11;;:26;;;;:::i;26716:355::-;26779:19;26802:10;:8;:10::i;:::-;26779:33;-1:-1:-1;26823:18:0;26844:27;:10;26779:33;26844:14;:27::i;:::-;26923:4;26907:22;;;;:7;:22;;;;;;26823:48;;-1:-1:-1;26907:38:0;;26823:48;26907:26;:38::i;:::-;26898:4;26882:22;;;;:7;:22;;;;;;;;:63;;;;26959:11;:26;;;;;;26956:107;;;27041:4;27025:22;;;;:7;:22;;;;;;:38;;27052:10;27025:26;:38::i;:::-;27016:4;27000:22;;;;:7;:22;;;;;:63;26956:107;26768:303;;26716:355;:::o;24615:147::-;24693:7;;:17;;24705:4;24693:11;:17::i;:::-;24683:7;:27;24734:10;;:20;;24749:4;24734:14;:20::i;:::-;24721:10;:33;-1:-1:-1;;24615:147:0:o;14:597: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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2394:180::-;2453:6;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;-1:-1:-1;2545:23:1;;2394:180;-1:-1:-1;2394:180:1:o;3033:118::-;3119:5;3112:13;3105:21;3098:5;3095:32;3085:60;;3141:1;3138;3131:12;3156:309;3221:6;3229;3282:2;3270:9;3261:7;3257:23;3253:32;3250:52;;;3298:1;3295;3288:12;3250:52;3334:9;3321:23;3311:33;;3394:2;3383:9;3379:18;3366:32;3407:28;3429:5;3407:28;:::i;:::-;3454:5;3444:15;;;3156:309;;;;;:::o;3678:241::-;3734:6;3787:2;3775:9;3766:7;3762:23;3758:32;3755:52;;;3803:1;3800;3793:12;3755:52;3842:9;3829:23;3861:28;3883:5;3861:28;:::i;3924:388::-;3992:6;4000;4053:2;4041:9;4032:7;4028:23;4024:32;4021:52;;;4069:1;4066;4059:12;4021:52;4108:9;4095:23;4127:31;4152:5;4127:31;:::i;:::-;4177:5;-1:-1:-1;4234:2:1;4219:18;;4206:32;4247:33;4206:32;4247:33;:::i;4317:380::-;4396:1;4392:12;;;;4439;;;4460:61;;4514:4;4506:6;4502:17;4492:27;;4460:61;4567:2;4559:6;4556:14;4536:18;4533:38;4530:161;;;4613:10;4608:3;4604:20;4601:1;4594:31;4648:4;4645:1;4638:15;4676:4;4673:1;4666:15;4530:161;;4317:380;;;:::o;4702:356::-;4904:2;4886:21;;;4923:18;;;4916:30;4982:34;4977:2;4962:18;;4955:62;5049:2;5034:18;;4702:356::o;5537:184::-;5607:6;5660:2;5648:9;5639:7;5635:23;5631:32;5628:52;;;5676:1;5673;5666:12;5628:52;-1:-1:-1;5699:16:1;;5537:184;-1:-1:-1;5537:184:1:o;6005:245::-;6072:6;6125:2;6113:9;6104:7;6100:23;6096:32;6093:52;;;6141:1;6138;6131:12;6093:52;6173:9;6167:16;6192:28;6214:5;6192:28;:::i;6255:127::-;6316:10;6311:3;6307:20;6304:1;6297:31;6347:4;6344:1;6337:15;6371:4;6368:1;6361:15;6387:168;6427:7;6493:1;6489;6485:6;6481:14;6478:1;6475:21;6470:1;6463:9;6456:17;6452:45;6449:71;;;6500:18;;:::i;:::-;-1:-1:-1;6540:9:1;;6387:168::o;7326:127::-;7387:10;7382:3;7378:20;7375:1;7368:31;7418:4;7415:1;7408:15;7442:4;7439:1;7432:15;7458:125;7498:4;7526:1;7523;7520:8;7517:34;;;7531:18;;:::i;:::-;-1:-1:-1;7568:9:1;;7458:125::o;7588:127::-;7649:10;7644:3;7640:20;7637:1;7630:31;7680:4;7677:1;7670:15;7704:4;7701:1;7694:15;7720:135;7759:3;-1:-1:-1;;7780:17:1;;7777:43;;;7800:18;;:::i;:::-;-1:-1:-1;7847:1:1;7836:13;;7720:135::o;12185:128::-;12225:3;12256:1;12252:6;12249:1;12246:13;12243:39;;;12262:18;;:::i;:::-;-1:-1:-1;12298:9:1;;12185:128::o;13765:217::-;13805:1;13831;13821:132;;13875:10;13870:3;13866:20;13863:1;13856:31;13910:4;13907:1;13900:15;13938:4;13935:1;13928:15;13821:132;-1:-1:-1;13967:9:1;;13765:217::o;14521:251::-;14591:6;14644:2;14632:9;14623:7;14619:23;14615:32;14612:52;;;14660:1;14657;14650:12;14612:52;14692:9;14686:16;14711:31;14736:5;14711:31;:::i;14777:980::-;15039:4;15087:3;15076:9;15072:19;15118:6;15107:9;15100:25;15144:2;15182:6;15177:2;15166:9;15162:18;15155:34;15225:3;15220:2;15209:9;15205:18;15198:31;15249:6;15284;15278:13;15315:6;15307;15300:22;15353:3;15342:9;15338:19;15331:26;;15392:2;15384:6;15380:15;15366:29;;15413:1;15423:195;15437:6;15434:1;15431:13;15423:195;;;15502:13;;-1:-1:-1;;;;;15498:39:1;15486:52;;15593:15;;;;15558:12;;;;15534:1;15452:9;15423:195;;;-1:-1:-1;;;;;;;15674:32:1;;;;15669:2;15654:18;;15647:60;-1:-1:-1;;;15738:3:1;15723:19;15716:35;15635:3;14777:980;-1:-1:-1;;;14777:980:1:o;16374:306::-;16462:6;16470;16478;16531:2;16519:9;16510:7;16506:23;16502:32;16499:52;;;16547:1;16544;16537:12;16499:52;16576:9;16570:16;16560:26;;16626:2;16615:9;16611:18;16605:25;16595:35;;16670:2;16659:9;16655:18;16649:25;16639:35;;16374:306;;;;;:::o
Swarm Source
ipfs://513a1d85c1d569513989ca3ce9a173e2c8b78c04e19e1cc0a3f10cb3256a88e8
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.