ERC-20
Overview
Max Total Supply
333,333,333,333,333 BabyCAW
Holders
39
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
548,571,428,571 BabyCAWValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BabyCAW
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-09 */ /* Website: https://babycawcoin.com/ Twitter: https://twitter.com/thebabycaw Telegram: https://t.me/babycawcoin Contract Name: BabyCAW Contract Version: 1.20 Contract Supply: 333,333,333,333,333 /333 Tillion Contract Tokenomics: 4% Buyback. 2% Liquidity. 4% Marketing. 10% Total Max Tax Deployed on Ethereum Blockchain under: Owner can't change max tx amount. Owner can’t blacklist an address. Owner can't pause trading. Owner can't mint tokens. Owner can’t set buy and sell fees higher than 10%. */ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.14; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } 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; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { // 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"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function getUnlockTime() public view returns (uint256) { return _lockTime; } function getTime() public view returns (uint256) { return block.timestamp; } function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract BabyCAW is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address payable public marketingWalletAddress = payable(0xDa876E778009A864d5286CDb4D7f9f20D539c132); // Marketing Wallet Address address payable public buybackWalletAddress = payable(0xbc2A0614f78dA5C8192E97191AAfE67950146bc2); // buyback Wallet Address address payable public devWalletAddress = payable(0x219Ffad28740628653DAa9447f33210267738D52); // dev Wallet Address address public deadWallet = 0x000000000000000000000000000000000000dEaD; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; event Log(string, uint256); event LogTokenApproval(address from, uint256 total); event LogTokenBulkSentETH(address from, uint256 total); event LogTokenBulkSent(address token, address from, uint256 total); mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 333_333_333_333_333 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "BabyCAW"; string private _symbol = "BabyCAW"; uint8 private _decimals = 18; uint256 public _taxFee = 0; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 2; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _devFee = 0; uint256 private _previousDevFee = _devFee; uint256 public _marketingFee = 4; uint256 private _previousMarketingFee = _marketingFee; uint256 public _buybackFee = 4; uint256 private _previousBuybackFee = _buybackFee; uint256 public totalSwapableFee = _liquidityFee.add(_devFee).add(_marketingFee).add(_buybackFee); uint256 public _saleTaxFee = 0; uint256 public _saleLiquidityFee = 2; uint256 public _saleDevFee = 0; uint256 public _saleMarketingFee = 4; uint256 public _saleBuybackFee = 4; uint256 public totalSwapableSaleFee = _saleLiquidityFee +_saleMarketingFee + _saleBuybackFee; bool public blacklistMode = true; mapping (address => bool) public isBlacklisted; uint256 public liquidityTokensCollected = 0; uint256 public devTokensCollected = 0; uint256 public marketingTokensCollected = 0; uint256 public buybackTokensCollected = 0; uint256 private minimumTokensBeforeSwap = 100_000 * 10**18; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool public inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; event RewardLiquidityProviders(uint256 tokenAmount); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapTokensForETH( uint256 amountIn, address[] path ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Pancake Routers //testnet 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3 //mainnet 0x10ED43C718714eb63d5aA57B78B54704E256024E //uniswap eth 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; //_isExcludedFromFee[uniswapV2Pair] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } function enable_blacklist(bool _status) public onlyOwner { blacklistMode = _status; } function manage_blacklist(address[] calldata addresses, bool status) public onlyOwner { for (uint256 i; i < addresses.length; ++i) { isBlacklisted[addresses[i]] = status; } } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); // Blacklist if(blacklistMode){ require(!isBlacklisted[from] && !isBlacklisted[to],"Blacklisted"); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if (!inSwapAndLiquify && swapAndLiquifyEnabled && from != uniswapV2Pair && from != owner()) { if (overMinimumTokenBalance) { swapAndLiquify(); } } if(to==uniswapV2Pair) { setSaleFee(); } bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify() public lockTheSwap { uint256 initialBalance = address(this).balance; uint256 halfLiquidityTokens = liquidityTokensCollected.div(2); swapTokensForEth(halfLiquidityTokens); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(halfLiquidityTokens, newBalance); emit SwapAndLiquify(halfLiquidityTokens, newBalance, halfLiquidityTokens); initialBalance = address(this).balance; uint256 totalTokens = balanceOf(address(this)); swapTokensForEth(totalTokens); newBalance = address(this).balance.sub(initialBalance); uint256 walletsTotal = devTokensCollected.add(marketingTokensCollected).add(buybackTokensCollected); uint256 ethForMarketing = newBalance.mul(marketingTokensCollected).div(walletsTotal); uint256 ethForBuyback = newBalance.mul(buybackTokensCollected).div(walletsTotal); uint256 ethForDev = newBalance.mul(devTokensCollected).div(walletsTotal); transferToAddressETH(marketingWalletAddress, ethForMarketing); transferToAddressETH(buybackWalletAddress, ethForBuyback); transferToAddressETH(devWalletAddress, ethForDev); liquidityTokensCollected = 0; devTokensCollected = 0; marketingTokensCollected = 0; buybackTokensCollected = 0; } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) { removeAllFee(); } countUpFeeShare(amount); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } restoreAllFee(); } function countUpFeeShare(uint256 amount) private { if(totalSwapableFee==0) { return; } liquidityTokensCollected += amount.mul(_liquidityFee).div(100); devTokensCollected += amount.mul(_devFee).div(100); marketingTokensCollected += amount.mul(_marketingFee).div(100); buybackTokensCollected += amount.mul(_buybackFee).div(100); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) { _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(totalSwapableFee).div(100); } function removeAllFee() private { _taxFee = 0; _liquidityFee = 0; _devFee = 0; _marketingFee = 0; _buybackFee = 0; totalSwapableFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _devFee = _previousDevFee; _marketingFee = _previousMarketingFee; _buybackFee = _previousBuybackFee; totalSwapableFee = _liquidityFee.add(_devFee).add(_marketingFee).add(_buybackFee); } function setSaleFee() private { _taxFee = _saleTaxFee; _liquidityFee = _saleLiquidityFee; _devFee = _saleDevFee; _marketingFee = _saleMarketingFee; _buybackFee = _saleBuybackFee; totalSwapableFee = _liquidityFee.add(_devFee).add(_marketingFee).add(_buybackFee); } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setAllFeePercent(uint256 taxFee, uint256 liquidityFee, uint256 devFee, uint256 marketingFee, uint256 buybackFee) external onlyOwner() { _taxFee = taxFee; _previousTaxFee = _taxFee; _liquidityFee = liquidityFee; _previousLiquidityFee = _liquidityFee; _devFee = devFee; _previousDevFee = _devFee; _marketingFee = marketingFee; _previousMarketingFee = _marketingFee; _buybackFee = buybackFee; _previousBuybackFee = _buybackFee; totalSwapableFee = _liquidityFee.add(_devFee).add(_marketingFee).add(_buybackFee); require(totalSwapableFee <= 10, "Must be less than 10% total"); } function setSaleFeePercent(uint256 taxFee, uint256 liquidityFee, uint256 devFee, uint256 marketingFee, uint256 buybackFee) external onlyOwner() { _saleTaxFee = taxFee; _saleLiquidityFee = liquidityFee; _saleDevFee = devFee; _saleMarketingFee = marketingFee; _saleBuybackFee = buybackFee; totalSwapableSaleFee = _saleLiquidityFee +_saleMarketingFee + _saleBuybackFee + _saleTaxFee + _saleDevFee; require(totalSwapableSaleFee <= 10, "Must be less than 10% total"); } function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() { minimumTokensBeforeSwap = _minimumTokensBeforeSwap; } function setMarketingWalletAddress(address _marketingWallet) external onlyOwner() { require(_marketingWallet != address(0), "setMarketingWalletAddress: ZERO"); marketingWalletAddress = payable(_marketingWallet); } function setBuybackWalletAddress(address _buybackWallet) external onlyOwner() { require(_buybackWallet != address(0), "setBuybackWalletAddress: ZERO"); buybackWalletAddress = payable(_buybackWallet); } function setDevWalletAddress(address _devWallet) external onlyOwner() { require(_devWallet != address(0), "setDevWalletAddress: ZERO"); devWalletAddress = payable(_devWallet); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} /////---dev----//// event SwapETHForTokens(uint256 amountIn, address[] path); address public deadAddress = 0x000000000000000000000000000000000000dEaD; function swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, deadAddress, // Burn address block.timestamp.add(300)); emit SwapETHForTokens(amount, path); } function manualBurn(uint256 burnAmount) public onlyOwner { removeAllFee(); _tTotal = _tTotal.sub(burnAmount); _transferStandard(owner(), deadWallet, burnAmount); restoreAllFee(); emit Log("We have manually burned a Total Of:", burnAmount); } }
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":"string","name":"","type":"string"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Log","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"LogTokenApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"LogTokenBulkSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"LogTokenBulkSentETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleTaxFee","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":[],"name":"blacklistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enable_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"manualBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"buybackFee","type":"uint256"}],"name":"setAllFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_buybackWallet","type":"address"}],"name":"setBuybackWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"buybackFee","type":"uint256"}],"name":"setSaleFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquify","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":"totalSwapableFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSwapableSaleFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600380546001600160a01b031990811673da876e778009a864d5286cdb4d7f9f20d539c1321790915560048054821673bc2a0614f78da5c8192e97191aafe67950146bc217905560058054821673219ffad28740628653daa9447f33210267738d521790556006805490911661dead1790556d106f4216d9dbb8f58c1cc8340000600d8190556200009890600019620005af565b620000a690600019620005e8565b600e55604080518082019091526007808252664261627943415760c81b6020909201918252620000d99160109162000509565b50604080518082019091526007808252664261627943415760c81b60209092019182526200010a9160119162000509565b506012805460ff1916811790556000601381905560148190556002601581905560168190556017829055601882905560046019819055601a819055601b819055601c819055620001859290916200017191839183916200049c602090811b62001d1017901c565b6200049c60201b62001d101790919060201c565b601d556000601e556002601f55600060205560046021556004602255602254602154601f54620001b6919062000602565b620001c2919062000602565b6023556024805460ff19166001179055600060268190556027819055602881905560295569152d02c7e14af6800000602a55602b805463dead0000610100600160b01b03199091161790553480156200021a57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e543360009081526007602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa158015620002c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e991906200061d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000337573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035d91906200061d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d191906200061d565b6001600160a01b0390811660a05281166080526001600a6000620003fd6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600a909252902080549091166001179055620004453390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040516200048d91815260200190565b60405180910390a35062000684565b600080620004ab838562000602565b905083811015620005025760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b9392505050565b828054620005179062000648565b90600052602060002090601f0160209004810192826200053b576000855562000586565b82601f106200055657805160ff191683800117855562000586565b8280016001018555821562000586579182015b828111156200058657825182559160200191906001019062000569565b506200059492915062000598565b5090565b5b8082111562000594576000815560010162000599565b600082620005cd57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620005fd57620005fd620005d2565b500390565b60008219821115620006185762000618620005d2565b500190565b6000602082840312156200063057600080fd5b81516001600160a01b03811681146200050257600080fd5b600181811c908216806200065d57607f821691505b6020821081036200067e57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516133ab620006db60003960008181610744015281816121f0015261225401526000818161050901528181612437015281816124f00152818161252c015281816125df015261260601526133ab6000f3fe6080604052600436106103dd5760003560e01c80635e562f3b116101fd578063a457c2d711610118578063d5588751116100ab578063ea2f0b371161007a578063ea2f0b3714610b4a578063ee207c0a14610b6a578063f0f165af14610b80578063f2fde38b14610ba0578063fe575a8714610bc057600080fd5b8063d558875114610aae578063db8715e514610ace578063dd46706414610ae4578063dd62ed3e14610b0457600080fd5b8063b29ad50a116100e7578063b29ad50a14610a43578063ba2c8f1614610a58578063c49b9a8014610a6e578063d158272d14610a8e57600080fd5b8063a457c2d7146109d8578063a69df4b5146109f8578063a9059cbb14610a0d578063aa45026b14610a2d57600080fd5b806385141a77116101905780638e2eee841161015f5780638e2eee841461096e57806395d89b411461098e5780639a89e44a146109a3578063a073d37f146109c357600080fd5b806385141a77146108dd57806388f82020146108fd578063896648c1146109365780638da5cb5b1461095057600080fd5b80636ca60bc6116101cc5780636ca60bc61461087c578063707a3b751461089257806370a08231146108a8578063715018a6146108c857600080fd5b80635e562f3b14610811578063602bc62b1461083157806364a012a0146108465780636bc87c3a1461086657600080fd5b806327c8f835116102f857806343614d281161028b5780634a74bb021161025a5780634a74bb02146107665780634cb80fd51461078557806352390c02146107a55780635342acb4146107c5578063557ed1ba146107fe57600080fd5b806343614d28146106dc578063437823ec146106f25780634549b0391461071257806349bd5a5e1461073257600080fd5b80633685d419116102c75780633685d4191461067057806339509351146106905780633b124fe7146106b057806340615b8b146106c657600080fd5b806327c8f835146105f25780632a1a2d6b146106185780632d8381191461062e578063313ce5671461064e57600080fd5b8063170dde6a11610370578063220f66961161033f578063220f66961461058257806322976e0d1461059c57806323b63585146105b257806323b872dd146105d257600080fd5b8063170dde6a1461052b57806318160ddd1461054157806319de79ab146105565780631bdb54d51461056c57600080fd5b80630e038813116103ac5780630e0388131461048a578063120a0612146104c257806313114a9d146104e25780631694505e146104f757600080fd5b806306e2fdfc146103e957806306fdde031461040b578063095ea7b3146104365780630971c53f1461046657600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50610409610404366004612e7e565b610bf0565b005b34801561041757600080fd5b50610420610cc3565b60405161042d9190612eb9565b60405180910390f35b34801561044257600080fd5b50610456610451366004612f26565b610d55565b604051901515815260200161042d565b34801561047257600080fd5b5061047c601e5481565b60405190815260200161042d565b34801561049657600080fd5b506005546104aa906001600160a01b031681565b6040516001600160a01b03909116815260200161042d565b3480156104ce57600080fd5b506104096104dd366004612f52565b610d6c565b3480156104ee57600080fd5b50600f5461047c565b34801561050357600080fd5b506104aa7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053757600080fd5b5061047c601f5481565b34801561054d57600080fd5b50600d5461047c565b34801561056257600080fd5b5061047c601b5481565b34801561057857600080fd5b5061047c60265481565b34801561058e57600080fd5b50602b546104569060ff1681565b3480156105a857600080fd5b5061047c60195481565b3480156105be57600080fd5b506104096105cd366004612f6f565b610e0e565b3480156105de57600080fd5b506104566105ed366004612f88565b610f14565b3480156105fe57600080fd5b50602b546104aa906201000090046001600160a01b031681565b34801561062457600080fd5b5061047c60235481565b34801561063a57600080fd5b5061047c610649366004612f6f565b610f7d565b34801561065a57600080fd5b5060125460405160ff909116815260200161042d565b34801561067c57600080fd5b5061040961068b366004612f52565b611001565b34801561069c57600080fd5b506104566106ab366004612f26565b6111b7565b3480156106bc57600080fd5b5061047c60135481565b3480156106d257600080fd5b5061047c60215481565b3480156106e857600080fd5b5061047c60205481565b3480156106fe57600080fd5b5061040961070d366004612f52565b6111ed565b34801561071e57600080fd5b5061047c61072d366004612fde565b61123b565b34801561073e57600080fd5b506104aa7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077257600080fd5b50602b5461045690610100900460ff1681565b34801561079157600080fd5b506104096107a0366004612f52565b6112c8565b3480156107b157600080fd5b506104096107c0366004612f52565b61136a565b3480156107d157600080fd5b506104566107e0366004612f52565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561080a57600080fd5b504261047c565b34801561081d57600080fd5b5061040961082c36600461300a565b6114bd565b34801561083d57600080fd5b5060025461047c565b34801561085257600080fd5b50610409610861366004612f52565b6114fa565b34801561087257600080fd5b5061047c60155481565b34801561088857600080fd5b5061047c60285481565b34801561089e57600080fd5b5061047c60295481565b3480156108b457600080fd5b5061047c6108c3366004612f52565b61159c565b3480156108d457600080fd5b506104096115fb565b3480156108e957600080fd5b506006546104aa906001600160a01b031681565b34801561090957600080fd5b50610456610918366004612f52565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561094257600080fd5b506024546104569060ff1681565b34801561095c57600080fd5b506000546001600160a01b03166104aa565b34801561097a57600080fd5b50610409610989366004613025565b61165d565b34801561099a57600080fd5b506104206116fc565b3480156109af57600080fd5b506104096109be366004612e7e565b61170b565b3480156109cf57600080fd5b50602a5461047c565b3480156109e457600080fd5b506104566109f3366004612f26565b6117d2565b348015610a0457600080fd5b50610409611821565b348015610a1957600080fd5b50610456610a28366004612f26565b611927565b348015610a3957600080fd5b5061047c60175481565b348015610a4f57600080fd5b50610409611934565b348015610a6457600080fd5b5061047c601d5481565b348015610a7a57600080fd5b50610409610a8936600461300a565b611ac6565b348015610a9a57600080fd5b506003546104aa906001600160a01b031681565b348015610aba57600080fd5b506004546104aa906001600160a01b031681565b348015610ada57600080fd5b5061047c60275481565b348015610af057600080fd5b50610409610aff366004612f6f565b611b39565b348015610b1057600080fd5b5061047c610b1f3660046130a9565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610b5657600080fd5b50610409610b65366004612f52565b611bbe565b348015610b7657600080fd5b5061047c60225481565b348015610b8c57600080fd5b50610409610b9b366004612f6f565b611c09565b348015610bac57600080fd5b50610409610bbb366004612f52565b611c38565b348015610bcc57600080fd5b50610456610bdb366004612f52565b60256020526000908152604090205460ff1681565b6000546001600160a01b03163314610c235760405162461bcd60e51b8152600401610c1a906130e2565b60405180910390fd5b601e859055601f849055602083905560218290556022819055828582610c49858861312d565b610c53919061312d565b610c5d919061312d565b610c67919061312d565b6023819055600a1015610cbc5760405162461bcd60e51b815260206004820152601b60248201527f4d757374206265206c657373207468616e2031302520746f74616c00000000006044820152606401610c1a565b5050505050565b606060108054610cd290613145565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfe90613145565b8015610d4b5780601f10610d2057610100808354040283529160200191610d4b565b820191906000526020600020905b815481529060010190602001808311610d2e57829003601f168201915b5050505050905090565b6000610d62338484611d6f565b5060015b92915050565b6000546001600160a01b03163314610d965760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b038116610dec5760405162461bcd60e51b815260206004820152601960248201527f73657444657657616c6c6574416464726573733a205a45524f000000000000006044820152606401610c1a565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e385760405162461bcd60e51b8152600401610c1a906130e2565b610e5b60006013819055601581905560178190556019819055601b819055601d55565b600d54610e689082611e93565b600d55610e92610e806000546001600160a01b031690565b6006546001600160a01b031683611ed5565b610e9a611fcc565b604080518181526023918101919091527f57652068617665206d616e75616c6c79206275726e6564206120546f74616c2060608201526227b31d60e91b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a0015b60405180910390a150565b6000610f21848484612009565b610f738433610f6e85604051806060016040528060288152602001613309602891396001600160a01b038a16600090815260096020908152604080832033845290915290205491906122f2565b611d6f565b5060019392505050565b6000600e54821115610fe45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c1a565b6000610fee61232c565b9050610ffa838261234f565b9392505050565b6000546001600160a01b0316331461102b5760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b0381166000908152600b602052604090205460ff166110935760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c1a565b60005b600c548110156111b357816001600160a01b0316600c82815481106110bd576110bd61317f565b6000918252602090912001546001600160a01b0316036111a157600c80546110e790600190613195565b815481106110f7576110f761317f565b600091825260209091200154600c80546001600160a01b0390921691839081106111235761112361317f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600b90925220805460ff19169055600c80548061117b5761117b6131ac565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111ab816131c2565b915050611096565b5050565b3360008181526009602090815260408083206001600160a01b03871684529091528120549091610d62918590610f6e9086611d10565b6000546001600160a01b031633146112175760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6000600d5483111561128f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c1a565b816112ae57600061129f84612391565b50939550610d66945050505050565b60006112b984612391565b50929550610d66945050505050565b6000546001600160a01b031633146112f25760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b0381166113485760405162461bcd60e51b815260206004820152601f60248201527f7365744d61726b6574696e6757616c6c6574416464726573733a205a45524f006044820152606401610c1a565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113945760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b0381166000908152600b602052604090205460ff16156113fd5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c1a565b6001600160a01b03811660009081526007602052604090205415611457576001600160a01b03811660009081526007602052604090205461143d90610f7d565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031633146114e75760405162461bcd60e51b8152600401610c1a906130e2565b6024805460ff1916911515919091179055565b6000546001600160a01b031633146115245760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b03811661157a5760405162461bcd60e51b815260206004820152601d60248201527f7365744275796261636b57616c6c6574416464726573733a205a45524f0000006044820152606401610c1a565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600b602052604081205460ff16156115d957506001600160a01b031660009081526008602052604090205490565b6001600160a01b038216600090815260076020526040902054610d6690610f7d565b6000546001600160a01b031633146116255760405162461bcd60e51b8152600401610c1a906130e2565b600080546040516001600160a01b0390911690600080516020613331833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116875760405162461bcd60e51b8152600401610c1a906130e2565b60005b828110156116f65781602560008686858181106116a9576116a961317f565b90506020020160208101906116be9190612f52565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116ef816131c2565b905061168a565b50505050565b606060118054610cd290613145565b6000546001600160a01b031633146117355760405162461bcd60e51b8152600401610c1a906130e2565b6013859055601485905560158490556016849055601783905560188390556019829055601a829055601b819055601c81905561177d8161177784818888611d10565b90611d10565b601d819055600a1015610cbc5760405162461bcd60e51b815260206004820152601b60248201527f4d757374206265206c657373207468616e2031302520746f74616c00000000006044820152606401610c1a565b6000610d623384610f6e85604051806060016040528060258152602001613351602591393360009081526009602090815260408083206001600160a01b038d16845290915290205491906122f2565b6001546001600160a01b031633146118875760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c1a565b60025442116118d85760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610c1a565b600154600080546040516001600160a01b03938416939091169160008051602061333183398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610d62338484612009565b602b805460ff19166001179055602654479060009061195490600261234f565b905061195f816123e0565b600061196b4784611e93565b905061197782826125d9565b60408051838152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a147925060006119c63061159c565b90506119d1816123e0565b6119db4785611e93565b915060006119fc602954611777602854602754611d1090919063ffffffff16565b90506000611a1f82611a19602854876126d890919063ffffffff16565b9061234f565b90506000611a3c83611a19602954886126d890919063ffffffff16565b90506000611a5984611a19602754896126d890919063ffffffff16565b600354909150611a72906001600160a01b03168461275a565b600454611a88906001600160a01b03168361275a565b600554611a9e906001600160a01b03168261275a565b505060006026819055602781905560288190556029555050602b805460ff1916905550505050565b6000546001600160a01b03163314611af05760405162461bcd60e51b8152600401610c1a906130e2565b602b80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610f0990831515815260200190565b6000546001600160a01b03163314611b635760405162461bcd60e51b8152600401610c1a906130e2565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611b92814261312d565b600255600080546040516001600160a01b0390911690600080516020613331833981519152908390a350565b6000546001600160a01b03163314611be85760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314611c335760405162461bcd60e51b8152600401610c1a906130e2565b602a55565b6000546001600160a01b03163314611c625760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b038116611cc75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c1a565b600080546040516001600160a01b038085169392169160008051602061333183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611d1d838561312d565b905083811015610ffa5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c1a565b6001600160a01b038316611dd15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c1a565b6001600160a01b038216611e325760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c1a565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610ffa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122f2565b600080600080600080611ee787612391565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150611f199087611e93565b6001600160a01b03808b1660009081526007602052604080822093909355908a1681522054611f489086611d10565b6001600160a01b038916600090815260076020526040902055611f6a81612795565b611f74848361281d565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611fb991815260200190565b60405180910390a3505050505050505050565b60145460135560165460158190556018546017819055601a546019819055601c54601b81905561200493909261177792918391611d10565b601d55565b6001600160a01b03831661206d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c1a565b6001600160a01b0382166120cf5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c1a565b600081116121315760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c1a565b60245460ff16156121b8576001600160a01b03831660009081526025602052604090205460ff1615801561217e57506001600160a01b03821660009081526025602052604090205460ff16155b6121b85760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610c1a565b60006121c33061159c565b602a54602b549192508210159060ff161580156121e75750602b54610100900460ff165b801561222557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b801561223f57506000546001600160a01b03868116911614155b1561225257801561225257612252611934565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03160361229357612293612841565b6001600160a01b0385166000908152600a602052604090205460019060ff16806122d557506001600160a01b0385166000908152600a602052604090205460ff165b156122de575060005b6122ea86868684612879565b505050505050565b600081848411156123165760405162461bcd60e51b8152600401610c1a9190612eb9565b5060006123238486613195565b95945050505050565b60008060006123396129b4565b9092509050612348828261234f565b9250505090565b6000610ffa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b36565b60008060008060008060008060006123a88a612b64565b92509250925060008060006123c68d86866123c161232c565b612ba6565b919f909e50909c50959a5093985091965092945050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124155761241561317f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b791906131db565b816001815181106124ca576124ca61317f565b60200260200101906001600160a01b031690816001600160a01b031681525050612515307f000000000000000000000000000000000000000000000000000000000000000084611d6f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061256a90859060009086903090429060040161323c565b600060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516125cd929190613278565b60405180910390a15050565b612604307f000000000000000000000000000000000000000000000000000000000000000084611d6f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d71982308560008061264b6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156126b3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cbc9190613299565b6000826000036126ea57506000610d66565b60006126f683856132c7565b90508261270385836132e6565b14610ffa5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c1a565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612790573d6000803e3d6000fd5b505050565b600061279f61232c565b905060006127ad83836126d8565b306000908152600760205260409020549091506127ca9082611d10565b30600090815260076020908152604080832093909355600b9052205460ff161561279057306000908152600860205260409020546128089084611d10565b30600090815260086020526040902055505050565b600e5461282a9083611e93565b600e55600f5461283a9082611d10565b600f555050565b601e54601355601f54601581905560205460178190556021546019819055602254601b81905561200493909261177792918391611d10565b806128a1576128a160006013819055601581905560178190556019819055601b819055601d55565b6128aa82612bf6565b6001600160a01b0384166000908152600b602052604090205460ff1680156128eb57506001600160a01b0383166000908152600b602052604090205460ff16155b15612900576128fb848484612cb7565b6129ac565b6001600160a01b0384166000908152600b602052604090205460ff1615801561294157506001600160a01b0383166000908152600b602052604090205460ff165b15612951576128fb848484612d2a565b6001600160a01b0384166000908152600b602052604090205460ff16801561299157506001600160a01b0383166000908152600b602052604090205460ff165b156129a1576128fb848484612dd3565b6129ac848484611ed5565b6116f6611fcc565b600e54600d546000918291825b600c54811015612b06578260076000600c84815481106129e3576129e361317f565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a4e57508160086000600c8481548110612a2757612a2761317f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a6457600e54600d54945094505050509091565b612aaa60076000600c8481548110612a7e57612a7e61317f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e93565b9250612af260086000600c8481548110612ac657612ac661317f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e93565b915080612afe816131c2565b9150506129c1565b50600d54600e54612b169161234f565b821015612b2d57600e54600d549350935050509091565b90939092509050565b60008183612b575760405162461bcd60e51b8152600401610c1a9190612eb9565b50600061232384866132e6565b600080600080612b7385612e46565b90506000612b8086612e62565b90506000612b9882612b928986611e93565b90611e93565b979296509094509092505050565b6000808080612bb588866126d8565b90506000612bc388876126d8565b90506000612bd188886126d8565b90506000612be382612b928686611e93565b939b939a50919850919650505050505050565b601d54600003612c035750565b612c1d6064611a19601554846126d890919063ffffffff16565b60266000828254612c2e919061312d565b9091555050601754612c4890606490611a199084906126d8565b60276000828254612c59919061312d565b9091555050601954612c7390606490611a199084906126d8565b60286000828254612c84919061312d565b9091555050601b54612c9e90606490611a199084906126d8565b60296000828254612caf919061312d565b909155505050565b600080600080600080612cc987612391565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612cfb9088611e93565b6001600160a01b038a16600090815260086020908152604080832093909355600790522054611f199087611e93565b600080600080600080612d3c87612391565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150612d6e9087611e93565b6001600160a01b03808b16600090815260076020908152604080832094909455918b16815260089091522054612da49084611d10565b6001600160a01b038916600090815260086020908152604080832093909355600790522054611f489086611d10565b600080600080600080612de587612391565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612e179088611e93565b6001600160a01b038a16600090815260086020908152604080832093909355600790522054612d6e9087611e93565b6000610d666064611a19601354856126d890919063ffffffff16565b6000610d666064611a19601d54856126d890919063ffffffff16565b600080600080600060a08688031215612e9657600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b81811015612ee657858101830151858201604001528201612eca565b81811115612ef8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612f2357600080fd5b50565b60008060408385031215612f3957600080fd5b8235612f4481612f0e565b946020939093013593505050565b600060208284031215612f6457600080fd5b8135610ffa81612f0e565b600060208284031215612f8157600080fd5b5035919050565b600080600060608486031215612f9d57600080fd5b8335612fa881612f0e565b92506020840135612fb881612f0e565b929592945050506040919091013590565b80358015158114612fd957600080fd5b919050565b60008060408385031215612ff157600080fd5b8235915061300160208401612fc9565b90509250929050565b60006020828403121561301c57600080fd5b610ffa82612fc9565b60008060006040848603121561303a57600080fd5b833567ffffffffffffffff8082111561305257600080fd5b818601915086601f83011261306657600080fd5b81358181111561307557600080fd5b8760208260051b850101111561308a57600080fd5b6020928301955093506130a09186019050612fc9565b90509250925092565b600080604083850312156130bc57600080fd5b82356130c781612f0e565b915060208301356130d781612f0e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561314057613140613117565b500190565b600181811c9082168061315957607f821691505b60208210810361317957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000828210156131a7576131a7613117565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016131d4576131d4613117565b5060010190565b6000602082840312156131ed57600080fd5b8151610ffa81612f0e565b600081518084526020808501945080840160005b838110156132315781516001600160a01b03168752958201959082019060010161320c565b509495945050505050565b85815284602082015260a06040820152600061325b60a08301866131f8565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061329160408301846131f8565b949350505050565b6000806000606084860312156132ae57600080fd5b8351925060208401519150604084015190509250925092565b60008160001904831182151516156132e1576132e1613117565b500290565b60008261330357634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b8de622dda03bd8d512fa90827b75f20f4c974bd196539b70df74dbd2c2ab08b64736f6c634300080e0033
Deployed Bytecode
0x6080604052600436106103dd5760003560e01c80635e562f3b116101fd578063a457c2d711610118578063d5588751116100ab578063ea2f0b371161007a578063ea2f0b3714610b4a578063ee207c0a14610b6a578063f0f165af14610b80578063f2fde38b14610ba0578063fe575a8714610bc057600080fd5b8063d558875114610aae578063db8715e514610ace578063dd46706414610ae4578063dd62ed3e14610b0457600080fd5b8063b29ad50a116100e7578063b29ad50a14610a43578063ba2c8f1614610a58578063c49b9a8014610a6e578063d158272d14610a8e57600080fd5b8063a457c2d7146109d8578063a69df4b5146109f8578063a9059cbb14610a0d578063aa45026b14610a2d57600080fd5b806385141a77116101905780638e2eee841161015f5780638e2eee841461096e57806395d89b411461098e5780639a89e44a146109a3578063a073d37f146109c357600080fd5b806385141a77146108dd57806388f82020146108fd578063896648c1146109365780638da5cb5b1461095057600080fd5b80636ca60bc6116101cc5780636ca60bc61461087c578063707a3b751461089257806370a08231146108a8578063715018a6146108c857600080fd5b80635e562f3b14610811578063602bc62b1461083157806364a012a0146108465780636bc87c3a1461086657600080fd5b806327c8f835116102f857806343614d281161028b5780634a74bb021161025a5780634a74bb02146107665780634cb80fd51461078557806352390c02146107a55780635342acb4146107c5578063557ed1ba146107fe57600080fd5b806343614d28146106dc578063437823ec146106f25780634549b0391461071257806349bd5a5e1461073257600080fd5b80633685d419116102c75780633685d4191461067057806339509351146106905780633b124fe7146106b057806340615b8b146106c657600080fd5b806327c8f835146105f25780632a1a2d6b146106185780632d8381191461062e578063313ce5671461064e57600080fd5b8063170dde6a11610370578063220f66961161033f578063220f66961461058257806322976e0d1461059c57806323b63585146105b257806323b872dd146105d257600080fd5b8063170dde6a1461052b57806318160ddd1461054157806319de79ab146105565780631bdb54d51461056c57600080fd5b80630e038813116103ac5780630e0388131461048a578063120a0612146104c257806313114a9d146104e25780631694505e146104f757600080fd5b806306e2fdfc146103e957806306fdde031461040b578063095ea7b3146104365780630971c53f1461046657600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50610409610404366004612e7e565b610bf0565b005b34801561041757600080fd5b50610420610cc3565b60405161042d9190612eb9565b60405180910390f35b34801561044257600080fd5b50610456610451366004612f26565b610d55565b604051901515815260200161042d565b34801561047257600080fd5b5061047c601e5481565b60405190815260200161042d565b34801561049657600080fd5b506005546104aa906001600160a01b031681565b6040516001600160a01b03909116815260200161042d565b3480156104ce57600080fd5b506104096104dd366004612f52565b610d6c565b3480156104ee57600080fd5b50600f5461047c565b34801561050357600080fd5b506104aa7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561053757600080fd5b5061047c601f5481565b34801561054d57600080fd5b50600d5461047c565b34801561056257600080fd5b5061047c601b5481565b34801561057857600080fd5b5061047c60265481565b34801561058e57600080fd5b50602b546104569060ff1681565b3480156105a857600080fd5b5061047c60195481565b3480156105be57600080fd5b506104096105cd366004612f6f565b610e0e565b3480156105de57600080fd5b506104566105ed366004612f88565b610f14565b3480156105fe57600080fd5b50602b546104aa906201000090046001600160a01b031681565b34801561062457600080fd5b5061047c60235481565b34801561063a57600080fd5b5061047c610649366004612f6f565b610f7d565b34801561065a57600080fd5b5060125460405160ff909116815260200161042d565b34801561067c57600080fd5b5061040961068b366004612f52565b611001565b34801561069c57600080fd5b506104566106ab366004612f26565b6111b7565b3480156106bc57600080fd5b5061047c60135481565b3480156106d257600080fd5b5061047c60215481565b3480156106e857600080fd5b5061047c60205481565b3480156106fe57600080fd5b5061040961070d366004612f52565b6111ed565b34801561071e57600080fd5b5061047c61072d366004612fde565b61123b565b34801561073e57600080fd5b506104aa7f000000000000000000000000bab09b106053633a8536c508e4172ebdf71708ff81565b34801561077257600080fd5b50602b5461045690610100900460ff1681565b34801561079157600080fd5b506104096107a0366004612f52565b6112c8565b3480156107b157600080fd5b506104096107c0366004612f52565b61136a565b3480156107d157600080fd5b506104566107e0366004612f52565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561080a57600080fd5b504261047c565b34801561081d57600080fd5b5061040961082c36600461300a565b6114bd565b34801561083d57600080fd5b5060025461047c565b34801561085257600080fd5b50610409610861366004612f52565b6114fa565b34801561087257600080fd5b5061047c60155481565b34801561088857600080fd5b5061047c60285481565b34801561089e57600080fd5b5061047c60295481565b3480156108b457600080fd5b5061047c6108c3366004612f52565b61159c565b3480156108d457600080fd5b506104096115fb565b3480156108e957600080fd5b506006546104aa906001600160a01b031681565b34801561090957600080fd5b50610456610918366004612f52565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561094257600080fd5b506024546104569060ff1681565b34801561095c57600080fd5b506000546001600160a01b03166104aa565b34801561097a57600080fd5b50610409610989366004613025565b61165d565b34801561099a57600080fd5b506104206116fc565b3480156109af57600080fd5b506104096109be366004612e7e565b61170b565b3480156109cf57600080fd5b50602a5461047c565b3480156109e457600080fd5b506104566109f3366004612f26565b6117d2565b348015610a0457600080fd5b50610409611821565b348015610a1957600080fd5b50610456610a28366004612f26565b611927565b348015610a3957600080fd5b5061047c60175481565b348015610a4f57600080fd5b50610409611934565b348015610a6457600080fd5b5061047c601d5481565b348015610a7a57600080fd5b50610409610a8936600461300a565b611ac6565b348015610a9a57600080fd5b506003546104aa906001600160a01b031681565b348015610aba57600080fd5b506004546104aa906001600160a01b031681565b348015610ada57600080fd5b5061047c60275481565b348015610af057600080fd5b50610409610aff366004612f6f565b611b39565b348015610b1057600080fd5b5061047c610b1f3660046130a9565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610b5657600080fd5b50610409610b65366004612f52565b611bbe565b348015610b7657600080fd5b5061047c60225481565b348015610b8c57600080fd5b50610409610b9b366004612f6f565b611c09565b348015610bac57600080fd5b50610409610bbb366004612f52565b611c38565b348015610bcc57600080fd5b50610456610bdb366004612f52565b60256020526000908152604090205460ff1681565b6000546001600160a01b03163314610c235760405162461bcd60e51b8152600401610c1a906130e2565b60405180910390fd5b601e859055601f849055602083905560218290556022819055828582610c49858861312d565b610c53919061312d565b610c5d919061312d565b610c67919061312d565b6023819055600a1015610cbc5760405162461bcd60e51b815260206004820152601b60248201527f4d757374206265206c657373207468616e2031302520746f74616c00000000006044820152606401610c1a565b5050505050565b606060108054610cd290613145565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfe90613145565b8015610d4b5780601f10610d2057610100808354040283529160200191610d4b565b820191906000526020600020905b815481529060010190602001808311610d2e57829003601f168201915b5050505050905090565b6000610d62338484611d6f565b5060015b92915050565b6000546001600160a01b03163314610d965760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b038116610dec5760405162461bcd60e51b815260206004820152601960248201527f73657444657657616c6c6574416464726573733a205a45524f000000000000006044820152606401610c1a565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e385760405162461bcd60e51b8152600401610c1a906130e2565b610e5b60006013819055601581905560178190556019819055601b819055601d55565b600d54610e689082611e93565b600d55610e92610e806000546001600160a01b031690565b6006546001600160a01b031683611ed5565b610e9a611fcc565b604080518181526023918101919091527f57652068617665206d616e75616c6c79206275726e6564206120546f74616c2060608201526227b31d60e91b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a0015b60405180910390a150565b6000610f21848484612009565b610f738433610f6e85604051806060016040528060288152602001613309602891396001600160a01b038a16600090815260096020908152604080832033845290915290205491906122f2565b611d6f565b5060019392505050565b6000600e54821115610fe45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c1a565b6000610fee61232c565b9050610ffa838261234f565b9392505050565b6000546001600160a01b0316331461102b5760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b0381166000908152600b602052604090205460ff166110935760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c1a565b60005b600c548110156111b357816001600160a01b0316600c82815481106110bd576110bd61317f565b6000918252602090912001546001600160a01b0316036111a157600c80546110e790600190613195565b815481106110f7576110f761317f565b600091825260209091200154600c80546001600160a01b0390921691839081106111235761112361317f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600b90925220805460ff19169055600c80548061117b5761117b6131ac565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111ab816131c2565b915050611096565b5050565b3360008181526009602090815260408083206001600160a01b03871684529091528120549091610d62918590610f6e9086611d10565b6000546001600160a01b031633146112175760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6000600d5483111561128f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c1a565b816112ae57600061129f84612391565b50939550610d66945050505050565b60006112b984612391565b50929550610d66945050505050565b6000546001600160a01b031633146112f25760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b0381166113485760405162461bcd60e51b815260206004820152601f60248201527f7365744d61726b6574696e6757616c6c6574416464726573733a205a45524f006044820152606401610c1a565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113945760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b0381166000908152600b602052604090205460ff16156113fd5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c1a565b6001600160a01b03811660009081526007602052604090205415611457576001600160a01b03811660009081526007602052604090205461143d90610f7d565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031633146114e75760405162461bcd60e51b8152600401610c1a906130e2565b6024805460ff1916911515919091179055565b6000546001600160a01b031633146115245760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b03811661157a5760405162461bcd60e51b815260206004820152601d60248201527f7365744275796261636b57616c6c6574416464726573733a205a45524f0000006044820152606401610c1a565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600b602052604081205460ff16156115d957506001600160a01b031660009081526008602052604090205490565b6001600160a01b038216600090815260076020526040902054610d6690610f7d565b6000546001600160a01b031633146116255760405162461bcd60e51b8152600401610c1a906130e2565b600080546040516001600160a01b0390911690600080516020613331833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116875760405162461bcd60e51b8152600401610c1a906130e2565b60005b828110156116f65781602560008686858181106116a9576116a961317f565b90506020020160208101906116be9190612f52565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116ef816131c2565b905061168a565b50505050565b606060118054610cd290613145565b6000546001600160a01b031633146117355760405162461bcd60e51b8152600401610c1a906130e2565b6013859055601485905560158490556016849055601783905560188390556019829055601a829055601b819055601c81905561177d8161177784818888611d10565b90611d10565b601d819055600a1015610cbc5760405162461bcd60e51b815260206004820152601b60248201527f4d757374206265206c657373207468616e2031302520746f74616c00000000006044820152606401610c1a565b6000610d623384610f6e85604051806060016040528060258152602001613351602591393360009081526009602090815260408083206001600160a01b038d16845290915290205491906122f2565b6001546001600160a01b031633146118875760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c1a565b60025442116118d85760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610c1a565b600154600080546040516001600160a01b03938416939091169160008051602061333183398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610d62338484612009565b602b805460ff19166001179055602654479060009061195490600261234f565b905061195f816123e0565b600061196b4784611e93565b905061197782826125d9565b60408051838152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a147925060006119c63061159c565b90506119d1816123e0565b6119db4785611e93565b915060006119fc602954611777602854602754611d1090919063ffffffff16565b90506000611a1f82611a19602854876126d890919063ffffffff16565b9061234f565b90506000611a3c83611a19602954886126d890919063ffffffff16565b90506000611a5984611a19602754896126d890919063ffffffff16565b600354909150611a72906001600160a01b03168461275a565b600454611a88906001600160a01b03168361275a565b600554611a9e906001600160a01b03168261275a565b505060006026819055602781905560288190556029555050602b805460ff1916905550505050565b6000546001600160a01b03163314611af05760405162461bcd60e51b8152600401610c1a906130e2565b602b80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610f0990831515815260200190565b6000546001600160a01b03163314611b635760405162461bcd60e51b8152600401610c1a906130e2565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611b92814261312d565b600255600080546040516001600160a01b0390911690600080516020613331833981519152908390a350565b6000546001600160a01b03163314611be85760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314611c335760405162461bcd60e51b8152600401610c1a906130e2565b602a55565b6000546001600160a01b03163314611c625760405162461bcd60e51b8152600401610c1a906130e2565b6001600160a01b038116611cc75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c1a565b600080546040516001600160a01b038085169392169160008051602061333183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611d1d838561312d565b905083811015610ffa5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c1a565b6001600160a01b038316611dd15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c1a565b6001600160a01b038216611e325760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c1a565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610ffa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122f2565b600080600080600080611ee787612391565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150611f199087611e93565b6001600160a01b03808b1660009081526007602052604080822093909355908a1681522054611f489086611d10565b6001600160a01b038916600090815260076020526040902055611f6a81612795565b611f74848361281d565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611fb991815260200190565b60405180910390a3505050505050505050565b60145460135560165460158190556018546017819055601a546019819055601c54601b81905561200493909261177792918391611d10565b601d55565b6001600160a01b03831661206d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c1a565b6001600160a01b0382166120cf5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c1a565b600081116121315760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c1a565b60245460ff16156121b8576001600160a01b03831660009081526025602052604090205460ff1615801561217e57506001600160a01b03821660009081526025602052604090205460ff16155b6121b85760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610c1a565b60006121c33061159c565b602a54602b549192508210159060ff161580156121e75750602b54610100900460ff165b801561222557507f000000000000000000000000bab09b106053633a8536c508e4172ebdf71708ff6001600160a01b0316856001600160a01b031614155b801561223f57506000546001600160a01b03868116911614155b1561225257801561225257612252611934565b7f000000000000000000000000bab09b106053633a8536c508e4172ebdf71708ff6001600160a01b0316846001600160a01b03160361229357612293612841565b6001600160a01b0385166000908152600a602052604090205460019060ff16806122d557506001600160a01b0385166000908152600a602052604090205460ff165b156122de575060005b6122ea86868684612879565b505050505050565b600081848411156123165760405162461bcd60e51b8152600401610c1a9190612eb9565b5060006123238486613195565b95945050505050565b60008060006123396129b4565b9092509050612348828261234f565b9250505090565b6000610ffa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b36565b60008060008060008060008060006123a88a612b64565b92509250925060008060006123c68d86866123c161232c565b612ba6565b919f909e50909c50959a5093985091965092945050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124155761241561317f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b791906131db565b816001815181106124ca576124ca61317f565b60200260200101906001600160a01b031690816001600160a01b031681525050612515307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d6f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061256a90859060009086903090429060040161323c565b600060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516125cd929190613278565b60405180910390a15050565b612604307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d6f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d71982308560008061264b6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156126b3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cbc9190613299565b6000826000036126ea57506000610d66565b60006126f683856132c7565b90508261270385836132e6565b14610ffa5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c1a565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612790573d6000803e3d6000fd5b505050565b600061279f61232c565b905060006127ad83836126d8565b306000908152600760205260409020549091506127ca9082611d10565b30600090815260076020908152604080832093909355600b9052205460ff161561279057306000908152600860205260409020546128089084611d10565b30600090815260086020526040902055505050565b600e5461282a9083611e93565b600e55600f5461283a9082611d10565b600f555050565b601e54601355601f54601581905560205460178190556021546019819055602254601b81905561200493909261177792918391611d10565b806128a1576128a160006013819055601581905560178190556019819055601b819055601d55565b6128aa82612bf6565b6001600160a01b0384166000908152600b602052604090205460ff1680156128eb57506001600160a01b0383166000908152600b602052604090205460ff16155b15612900576128fb848484612cb7565b6129ac565b6001600160a01b0384166000908152600b602052604090205460ff1615801561294157506001600160a01b0383166000908152600b602052604090205460ff165b15612951576128fb848484612d2a565b6001600160a01b0384166000908152600b602052604090205460ff16801561299157506001600160a01b0383166000908152600b602052604090205460ff165b156129a1576128fb848484612dd3565b6129ac848484611ed5565b6116f6611fcc565b600e54600d546000918291825b600c54811015612b06578260076000600c84815481106129e3576129e361317f565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a4e57508160086000600c8481548110612a2757612a2761317f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a6457600e54600d54945094505050509091565b612aaa60076000600c8481548110612a7e57612a7e61317f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e93565b9250612af260086000600c8481548110612ac657612ac661317f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e93565b915080612afe816131c2565b9150506129c1565b50600d54600e54612b169161234f565b821015612b2d57600e54600d549350935050509091565b90939092509050565b60008183612b575760405162461bcd60e51b8152600401610c1a9190612eb9565b50600061232384866132e6565b600080600080612b7385612e46565b90506000612b8086612e62565b90506000612b9882612b928986611e93565b90611e93565b979296509094509092505050565b6000808080612bb588866126d8565b90506000612bc388876126d8565b90506000612bd188886126d8565b90506000612be382612b928686611e93565b939b939a50919850919650505050505050565b601d54600003612c035750565b612c1d6064611a19601554846126d890919063ffffffff16565b60266000828254612c2e919061312d565b9091555050601754612c4890606490611a199084906126d8565b60276000828254612c59919061312d565b9091555050601954612c7390606490611a199084906126d8565b60286000828254612c84919061312d565b9091555050601b54612c9e90606490611a199084906126d8565b60296000828254612caf919061312d565b909155505050565b600080600080600080612cc987612391565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612cfb9088611e93565b6001600160a01b038a16600090815260086020908152604080832093909355600790522054611f199087611e93565b600080600080600080612d3c87612391565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150612d6e9087611e93565b6001600160a01b03808b16600090815260076020908152604080832094909455918b16815260089091522054612da49084611d10565b6001600160a01b038916600090815260086020908152604080832093909355600790522054611f489086611d10565b600080600080600080612de587612391565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612e179088611e93565b6001600160a01b038a16600090815260086020908152604080832093909355600790522054612d6e9087611e93565b6000610d666064611a19601354856126d890919063ffffffff16565b6000610d666064611a19601d54856126d890919063ffffffff16565b600080600080600060a08688031215612e9657600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b81811015612ee657858101830151858201604001528201612eca565b81811115612ef8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612f2357600080fd5b50565b60008060408385031215612f3957600080fd5b8235612f4481612f0e565b946020939093013593505050565b600060208284031215612f6457600080fd5b8135610ffa81612f0e565b600060208284031215612f8157600080fd5b5035919050565b600080600060608486031215612f9d57600080fd5b8335612fa881612f0e565b92506020840135612fb881612f0e565b929592945050506040919091013590565b80358015158114612fd957600080fd5b919050565b60008060408385031215612ff157600080fd5b8235915061300160208401612fc9565b90509250929050565b60006020828403121561301c57600080fd5b610ffa82612fc9565b60008060006040848603121561303a57600080fd5b833567ffffffffffffffff8082111561305257600080fd5b818601915086601f83011261306657600080fd5b81358181111561307557600080fd5b8760208260051b850101111561308a57600080fd5b6020928301955093506130a09186019050612fc9565b90509250925092565b600080604083850312156130bc57600080fd5b82356130c781612f0e565b915060208301356130d781612f0e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561314057613140613117565b500190565b600181811c9082168061315957607f821691505b60208210810361317957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000828210156131a7576131a7613117565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600182016131d4576131d4613117565b5060010190565b6000602082840312156131ed57600080fd5b8151610ffa81612f0e565b600081518084526020808501945080840160005b838110156132315781516001600160a01b03168752958201959082019060010161320c565b509495945050505050565b85815284602082015260a06040820152600061325b60a08301866131f8565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061329160408301846131f8565b949350505050565b6000806000606084860312156132ae57600080fd5b8351925060208401519150604084015190509250925092565b60008160001904831182151516156132e1576132e1613117565b500290565b60008261330357634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b8de622dda03bd8d512fa90827b75f20f4c974bd196539b70df74dbd2c2ab08b64736f6c634300080e0033
Deployed Bytecode Sourcemap
15772:23584:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36469:544;;;;;;;;;;-1:-1:-1;36469:544:0;;;;;:::i;:::-;;:::i;:::-;;19954:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20866:161;;;;;;;;;;-1:-1:-1;20866:161:0;;;;;:::i;:::-;;:::i;:::-;;;1696:14:1;;1689:22;1671:41;;1659:2;1644:18;20866:161:0;1531:187:1;17813:30:0;;;;;;;;;;;;;;;;;;;1869:25:1;;;1857:2;1842:18;17813:30:0;1723:177:1;16153:93:0;;;;;;;;;;-1:-1:-1;16153:93:0;;;;-1:-1:-1;;;;;16153:93:0;;;;;;-1:-1:-1;;;;;2085:32:1;;;2067:51;;2055:2;2040:18;16153:93:0;1905:219:1;37683:200:0;;;;;;;;;;-1:-1:-1;37683:200:0;;;;;:::i;:::-;;:::i;21987:87::-;;;;;;;;;;-1:-1:-1;22056:10:0;;21987:87;;18480:51;;;;;;;;;;;;;;;17850:36;;;;;;;;;;;;;;;;20231:95;;;;;;;;;;-1:-1:-1;20311:7:0;;20231:95;;17612:30;;;;;;;;;;;;;;;;18219:43;;;;;;;;;;;;;;;;18589:28;;;;;;;;;;-1:-1:-1;18589:28:0;;;;;;;;17510:32;;;;;;;;;;;;;;;;39048:303;;;;;;;;;;-1:-1:-1;39048:303:0;;;;;:::i;:::-;;:::i;21035:313::-;;;;;;;;;;-1:-1:-1;21035:313:0;;;;;:::i;:::-;;:::i;38405:71::-;;;;;;;;;;-1:-1:-1;38405:71:0;;;;;;;-1:-1:-1;;;;;38405:71:0;;;18016:92;;;;;;;;;;;;;;;;22989:253;;;;;;;;;;-1:-1:-1;22989:253:0;;;;;:::i;:::-;;:::i;20140:83::-;;;;;;;;;;-1:-1:-1;20206:9:0;;20140:83;;20206:9;;;;3612:36:1;;3600:2;3585:18;20140:83:0;3470:184:1;23593:479:0;;;;;;;;;;-1:-1:-1;23593:479:0;;;;;:::i;:::-;;:::i;21356:218::-;;;;;;;;;;-1:-1:-1;21356:218:0;;;;;:::i;:::-;;:::i;17232:26::-;;;;;;;;;;;;;;;;17930:36;;;;;;;;;;;;;;;;17893:30;;;;;;;;;;;;;;;;35509:111;;;;;;;;;;-1:-1:-1;35509:111:0;;;;;:::i;:::-;;:::i;22545:436::-;;;;;;;;;;-1:-1:-1;22545:436:0;;;;;:::i;:::-;;:::i;18538:38::-;;;;;;;;;;;;;;;18624:41;;;;;;;;;;-1:-1:-1;18624:41:0;;;;;;;;;;;37203:236;;;;;;;;;;-1:-1:-1;37203:236:0;;;;;:::i;:::-;;:::i;23250:335::-;;;;;;;;;;-1:-1:-1;23250:335:0;;;;;:::i;:::-;;:::i;35372:123::-;;;;;;;;;;-1:-1:-1;35372:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;35460:27:0;35436:4;35460:27;;;:18;:27;;;;;;;;;35372:123;7152:90;;;;;;;;;;-1:-1:-1;7219:15:0;7152:90;;22218:99;;;;;;;;;;-1:-1:-1;22218:99:0;;;;;:::i;:::-;;:::i;7050:90::-;;;;;;;;;;-1:-1:-1;7123:9:0;;7050:90;;37447:224;;;;;;;;;;-1:-1:-1;37447:224:0;;;;;:::i;:::-;;:::i;17319:32::-;;;;;;;;;;;;;;;;18313:43;;;;;;;;;;;;;;;;18363:41;;;;;;;;;;;;;;;;20334:198;;;;;;;;;;-1:-1:-1;20334:198:0;;;;;:::i;:::-;;:::i;6642:148::-;;;;;;;;;;;;;:::i;16275:71::-;;;;;;;;;;-1:-1:-1;16275:71:0;;;;-1:-1:-1;;;;;16275:71:0;;;21859:120;;;;;;;;;;-1:-1:-1;21859:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21951:20:0;21927:4;21951:20;;;:11;:20;;;;;;;;;21859:120;18117:32;;;;;;;;;;-1:-1:-1;18117:32:0;;;;;;;;6417:79;;;;;;;;;;-1:-1:-1;6455:7:0;6482:6;-1:-1:-1;;;;;6482:6:0;6417:79;;22325:210;;;;;;;;;;-1:-1:-1;22325:210:0;;;;;:::i;:::-;;:::i;20045:87::-;;;;;;;;;;;;;:::i;35754:707::-;;;;;;;;;;-1:-1:-1;35754:707:0;;;;;:::i;:::-;;:::i;22086:120::-;;;;;;;;;;-1:-1:-1;22175:23:0;;22086:120;;21582:269;;;;;;;;;;-1:-1:-1;21582:269:0;;;;;:::i;:::-;;:::i;7488:305::-;;;;;;;;;;;;;:::i;20540:167::-;;;;;;;;;;-1:-1:-1;20540:167:0;;;;;:::i;:::-;;:::i;17422:26::-;;;;;;;;;;;;;;;;25676:1412;;;;;;;;;;;;;:::i;17708:96::-;;;;;;;;;;;;;;;;37891:171;;;;;;;;;;-1:-1:-1;37891:171:0;;;;;:::i;:::-;;:::i;15889:99::-;;;;;;;;;;-1:-1:-1;15889:99:0;;;;-1:-1:-1;;;;;15889:99:0;;;16023:97;;;;;;;;;;-1:-1:-1;16023:97:0;;;;-1:-1:-1;;;;;16023:97:0;;;18269:37;;;;;;;;;;;;;;;;7250:226;;;;;;;;;;-1:-1:-1;7250:226:0;;;;;:::i;:::-;;:::i;20715:143::-;;;;;;;;;;-1:-1:-1;20715:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20823:18:0;;;20796:7;20823:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20715:143;35632:110;;;;;;;;;;-1:-1:-1;35632:110:0;;;;;:::i;:::-;;:::i;17973:34::-;;;;;;;;;;;;;;;;37029:166;;;;;;;;;;-1:-1:-1;37029:166:0;;;;;:::i;:::-;;:::i;6798:244::-;;;;;;;;;;-1:-1:-1;6798:244:0;;;;;:::i;:::-;;:::i;18156:46::-;;;;;;;;;;-1:-1:-1;18156:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36469:544;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;;;;;;;;;36636:11:::1;:20:::0;;;36667:17:::1;:32:::0;;;36710:11:::1;:20:::0;;;36741:17:::1;:32:::0;;;36784:15:::1;:28:::0;;;36724:6;36650;36802:10;36846:36:::1;36761:12:::0;36687;36846:36:::1;:::i;:::-;:54;;;;:::i;:::-;:68;;;;:::i;:::-;:82;;;;:::i;:::-;36823:20;:105:::0;;;36971:2:::1;-1:-1:-1::0;36947:26:0::1;36939:66;;;::::0;-1:-1:-1;;;36939:66:0;;6177:2:1;36939:66:0::1;::::0;::::1;6159:21:1::0;6216:2;6196:18;;;6189:30;6255:29;6235:18;;;6228:57;6302:18;;36939:66:0::1;5975:351:1::0;36939:66:0::1;36469:544:::0;;;;;:::o;19954:83::-;19991:13;20024:5;20017:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19954:83;:::o;20866:161::-;20941:4;20958:39;801:10;20981:7;20990:6;20958:8;:39::i;:::-;-1:-1:-1;21015:4:0;20866:161;;;;;:::o;37683:200::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37772:24:0;::::1;37764:62;;;::::0;-1:-1:-1;;;37764:62:0;;6918:2:1;37764:62:0::1;::::0;::::1;6900:21:1::0;6957:2;6937:18;;;6930:30;6996:27;6976:18;;;6969:55;7041:18;;37764:62:0::1;6716:349:1::0;37764:62:0::1;37837:16;:38:::0;;-1:-1:-1;;;;;;37837:38:0::1;-1:-1:-1::0;;;;;37837:38:0;;;::::1;::::0;;;::::1;::::0;;37683:200::o;39048:303::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;39121:14:::1;34537:1:::0;34527:7;:11;;;34549:13;:17;;;34577:7;:11;;;34599:13;:17;;;34627:11;:15;;;34653:16;:20;34478:203;39121:14:::1;39157:7;::::0;:23:::1;::::0;39169:10;39157:11:::1;:23::i;:::-;39147:7;:33:::0;39191:50:::1;39209:7;6455::::0;6482:6;-1:-1:-1;;;;;6482:6:0;;6417:79;39209:7:::1;39218:10;::::0;-1:-1:-1;;;;;39218:10:0::1;39230::::0;39191:17:::1;:50::i;:::-;39252:15;:13;:15::i;:::-;39283:54;::::0;;7282:21:1;;;7339:2;7319:18;;;7312:30;;;;7378:34;7373:2;7358:18;;7351:62;-1:-1:-1;;;7444:3:1;7429:19;;7422:34;7523:4;7508:20;;7501:36;;;39283:54:0::1;::::0;7488:3:1;7473:19;39283:54:0::1;;;;;;;;39048:303:::0;:::o;21035:313::-;21133:4;21150:36;21160:6;21168:9;21179:6;21150:9;:36::i;:::-;21197:121;21206:6;801:10;21228:89;21266:6;21228:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21228:19:0;;;;;;:11;:19;;;;;;;;801:10;21228:33;;;;;;;;;;:37;:89::i;:::-;21197:8;:121::i;:::-;-1:-1:-1;21336:4:0;21035:313;;;;;:::o;22989:253::-;23055:7;23094;;23083;:18;;23075:73;;;;-1:-1:-1;;;23075:73:0;;7750:2:1;23075:73:0;;;7732:21:1;7789:2;7769:18;;;7762:30;7828:34;7808:18;;;7801:62;-1:-1:-1;;;7879:18:1;;;7872:40;7929:19;;23075:73:0;7548:406:1;23075:73:0;23159:19;23182:10;:8;:10::i;:::-;23159:33;-1:-1:-1;23210:24:0;:7;23159:33;23210:11;:24::i;:::-;23203:31;22989:253;-1:-1:-1;;;22989:253:0:o;23593:479::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23675:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23667:60;;;::::0;-1:-1:-1;;;23667:60:0;;8161:2:1;23667:60:0::1;::::0;::::1;8143:21:1::0;8200:2;8180:18;;;8173:30;8239:29;8219:18;;;8212:57;8286:18;;23667:60:0::1;7959:351:1::0;23667:60:0::1;23743:9;23738:327;23762:9;:16:::0;23758:20;::::1;23738:327;;;23820:7;-1:-1:-1::0;;;;;23804:23:0::1;:9;23814:1;23804:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23804:12:0::1;:23:::0;23800:254:::1;;23863:9;23873:16:::0;;:20:::1;::::0;23892:1:::1;::::0;23873:20:::1;:::i;:::-;23863:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23848:9:::1;:12:::0;;-1:-1:-1;;;;;23863:31:0;;::::1;::::0;23858:1;;23848:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23848:46:0::1;-1:-1:-1::0;;;;;23848:46:0;;::::1;;::::0;;23913:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23952:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23952:28:0::1;::::0;;23999:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23999:15:0;;;;;-1:-1:-1;;;;;;23999:15:0::1;::::0;;;;;23738:327:::1;23593:479:::0;:::o;23800:254::-:1;23780:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23738:327;;;;23593:479:::0;:::o;21356:218::-;801:10;21444:4;21493:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21493:34:0;;;;;;;;;;21444:4;;21461:83;;21484:7;;21493:50;;21532:10;21493:38;:50::i;35509:111::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35578:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35578:34:0::1;35608:4;35578:34;::::0;;35509:111::o;22545:436::-;22635:7;22674;;22663;:18;;22655:62;;;;-1:-1:-1;;;22655:62:0;;9051:2:1;22655:62:0;;;9033:21:1;9090:2;9070:18;;;9063:30;9129:33;9109:18;;;9102:61;9180:18;;22655:62:0;8849:355:1;22655:62:0;22733:17;22728:246;;22768:15;22792:19;22803:7;22792:10;:19::i;:::-;-1:-1:-1;22767:44:0;;-1:-1:-1;22826:14:0;;-1:-1:-1;;;;;22826:14:0;22728:246;22875:23;22906:19;22917:7;22906:10;:19::i;:::-;-1:-1:-1;22873:52:0;;-1:-1:-1;22940:22:0;;-1:-1:-1;;;;;22940:22:0;37203:236;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37304:30:0;::::1;37296:74;;;::::0;-1:-1:-1;;;37296:74:0;;9411:2:1;37296:74:0::1;::::0;::::1;9393:21:1::0;9450:2;9430:18;;;9423:30;9489:33;9469:18;;;9462:61;9540:18;;37296:74:0::1;9209:355:1::0;37296:74:0::1;37381:22;:50:::0;;-1:-1:-1;;;;;;37381:50:0::1;-1:-1:-1::0;;;;;37381:50:0;;;::::1;::::0;;;::::1;::::0;;37203:236::o;23250:335::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23335:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23334:21;23326:61;;;::::0;-1:-1:-1;;;23326:61:0;;8161:2:1;23326:61:0::1;::::0;::::1;8143:21:1::0;8200:2;8180:18;;;8173:30;8239:29;8219:18;;;8212:57;8286:18;;23326:61:0::1;7959:351:1::0;23326:61:0::1;-1:-1:-1::0;;;;;23401:16:0;::::1;23420:1;23401:16:::0;;;:7:::1;:16;::::0;;;;;:20;23398:108:::1;;-1:-1:-1::0;;;;;23477:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23457:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23438:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23398:108:::1;-1:-1:-1::0;;;;;23516:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23516:27:0::1;23539:4;23516:27:::0;;::::1;::::0;;;23554:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23554:23:0::1;::::0;;::::1;::::0;;23250:335::o;22218:99::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;22286:13:::1;:23:::0;;-1:-1:-1;;22286:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22218:99::o;37447:224::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37544:28:0;::::1;37536:70;;;::::0;-1:-1:-1;;;37536:70:0;;9771:2:1;37536:70:0::1;::::0;::::1;9753:21:1::0;9810:2;9790:18;;;9783:30;9849:31;9829:18;;;9822:59;9898:18;;37536:70:0::1;9569:353:1::0;37536:70:0::1;37617:20;:46:::0;;-1:-1:-1;;;;;;37617:46:0::1;-1:-1:-1::0;;;;;37617:46:0;;;::::1;::::0;;;::::1;::::0;;37447:224::o;20334:198::-;-1:-1:-1;;;;;20424:20:0;;20400:7;20424:20;;;:11;:20;;;;;;;;20420:49;;;-1:-1:-1;;;;;;20453:16:0;;;;;:7;:16;;;;;;;20334:198::o;20420:49::-;-1:-1:-1;;;;;20507:16:0;;;;;;:7;:16;;;;;;20487:37;;:19;:37::i;6642:148::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;6749:1:::1;6733:6:::0;;6712:40:::1;::::0;-1:-1:-1;;;;;6733:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6712:40:0;6749:1;;6712:40:::1;6780:1;6763:19:::0;;-1:-1:-1;;;;;;6763:19:0::1;::::0;;6642:148::o;22325:210::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;22427:9:::1;22422:106;22438:20:::0;;::::1;22422:106;;;22510:6;22480:13;:27;22494:9;;22504:1;22494:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22480:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22480:27:0;:36;;-1:-1:-1;;22480:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22460:3:::1;::::0;::::1;:::i;:::-;;;22422:106;;;;22325:210:::0;;;:::o;20045:87::-;20084:13;20117:7;20110:14;;;;;:::i;35754:707::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;35920:7:::1;:16:::0;;;35947:15:::1;:25:::0;;;35983:13:::1;:28:::0;;;36022:21:::1;:37:::0;;;36070:7:::1;:16:::0;;;36097:15:::1;:25:::0;;;36133:13:::1;:28:::0;;;36172:21:::1;:37:::0;;;36220:11:::1;:24:::0;;;36255:19:::1;:33:::0;;;36318:62:::1;36234:10:::0;36318:45:::1;36149:12:::0;36318:45;35999:12;36080:6;36318:17:::1;:26::i;:::-;:30:::0;::::1;:45::i;:62::-;36299:16;:81:::0;;;36419:2:::1;-1:-1:-1::0;36399:22:0::1;36391:62;;;::::0;-1:-1:-1;;;36391:62:0;;6177:2:1;36391:62:0::1;::::0;::::1;6159:21:1::0;6216:2;6196:18;;;6189:30;6255:29;6235:18;;;6228:57;6302:18;;36391:62:0::1;5975:351:1::0;21582:269:0;21675:4;21692:129;801:10;21715:7;21724:96;21763:15;21724:96;;;;;;;;;;;;;;;;;801:10;21724:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21724:34:0;;;;;;;;;;;;:38;:96::i;7488:305::-;7540:14;;-1:-1:-1;;;;;7540:14:0;7558:10;7540:28;7532:76;;;;-1:-1:-1;;;7532:76:0;;10129:2:1;7532:76:0;;;10111:21:1;10168:2;10148:18;;;10141:30;10207:34;10187:18;;;10180:62;-1:-1:-1;;;10258:18:1;;;10251:33;10301:19;;7532:76:0;9927:399:1;7532:76:0;7645:9;;7627:15;:27;7619:72;;;;-1:-1:-1;;;7619:72:0;;10533:2:1;7619:72:0;;;10515:21:1;10572:2;10552:18;;;10545:30;10611:33;10591:18;;;10584:61;10662:18;;7619:72:0;10331:355:1;7619:72:0;7736:14;;;7728:6;;7707:44;;-1:-1:-1;;;;;7736:14:0;;;;7728:6;;;;-1:-1:-1;;;;;;;;;;;7707:44:0;;7771:14;;;7762:23;;-1:-1:-1;;;;;;7762:23:0;-1:-1:-1;;;;;7771:14:0;;;7762:23;;;;;;7488:305::o;20540:167::-;20618:4;20635:42;801:10;20659:9;20670:6;20635:9;:42::i;25676:1412::-;19058:16;:23;;-1:-1:-1;;19058:23:0;19077:4;19058:23;;;25828:24:::1;::::0;25766:21:::1;::::0;19058:16;;25828:31:::1;::::0;25857:1:::1;25828:28;:31::i;:::-;25798:61;;25870:37;25887:19;25870:16;:37::i;:::-;25928:18;25949:41;:21;25975:14:::0;25949:25:::1;:41::i;:::-;25928:62;;26001:45;26014:19;26035:10;26001:12;:45::i;:::-;26062:68;::::0;;10893:25:1;;;10949:2;10934:18;;10927:34;;;10977:18;;;10970:34;;;26062:68:0::1;::::0;10881:2:1;10866:18;26062:68:0::1;;;;;;;26160:21;26143:38;;26192:19;26214:24;26232:4;26214:9;:24::i;:::-;26192:46;;26249:29;26266:11;26249:16;:29::i;:::-;26302:41;:21;26328:14:::0;26302:25:::1;:41::i;:::-;26289:54;;26356:20;26379:76;26432:22;;26379:48;26402:24;;26379:18;;:22;;:48;;;;:::i;:76::-;26356:99;;26468:23;26494:58;26539:12;26494:40;26509:24;;26494:10;:14;;:40;;;;:::i;:::-;:44:::0;::::1;:58::i;:::-;26468:84;;26563:21;26587:56;26630:12;26587:38;26602:22;;26587:10;:14;;:38;;;;:::i;:56::-;26563:80;;26654:17;26674:52;26713:12;26674:34;26689:18;;26674:10;:14;;:34;;;;:::i;:52::-;26760:22;::::0;26654:72;;-1:-1:-1;26739:61:0::1;::::0;-1:-1:-1;;;;;26760:22:0::1;26784:15:::0;26739:20:::1;:61::i;:::-;26832:20;::::0;26811:57:::1;::::0;-1:-1:-1;;;;;26832:20:0::1;26854:13:::0;26811:20:::1;:57::i;:::-;26900:16;::::0;26879:49:::1;::::0;-1:-1:-1;;;;;26900:16:0::1;26918:9:::0;26879:20:::1;:49::i;:::-;-1:-1:-1::0;;26968:1:0::1;26941:24;:28:::0;;;26980:18:::1;:22:::0;;;27013:24:::1;:28:::0;;;27052:22:::1;:26:::0;-1:-1:-1;;19104:16:0;:24;;-1:-1:-1;;19104:24:0;;;-1:-1:-1;;;;25676:1412:0:o;37891:171::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;37968:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;37968:32:0;;::::1;;::::0;;38016:38:::1;::::0;::::1;::::0;::::1;::::0;37992:8;1696:14:1;1689:22;1671:41;;1659:2;1644:18;;1531:187;7250:226:0;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;7331:6:::1;::::0;;;7314:23;;-1:-1:-1;;;;;;7314:23:0;;::::1;-1:-1:-1::0;;;;;7331:6:0;::::1;7314:23;::::0;;;7348:19:::1;::::0;;7390:22:::1;7408:4:::0;7390:15:::1;:22;:::i;:::-;7378:9;:34:::0;7465:1:::1;7449:6:::0;;7428:40:::1;::::0;-1:-1:-1;;;;;7449:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7428:40:0;7465:1;;7428:40:::1;7250:226:::0;:::o;35632:110::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35699:27:0::1;35729:5;35699:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35699:35:0::1;::::0;;35632:110::o;37029:166::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;37137:23:::1;:50:::0;37029:166::o;6798:244::-;6551:6;;-1:-1:-1;;;;;6551:6:0;801:10;6551:22;6543:67;;;;-1:-1:-1;;;6543:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6887:22:0;::::1;6879:73;;;::::0;-1:-1:-1;;;6879:73:0;;11217:2:1;6879:73:0::1;::::0;::::1;11199:21:1::0;11256:2;11236:18;;;11229:30;11295:34;11275:18;;;11268:62;-1:-1:-1;;;11346:18:1;;;11339:36;11392:19;;6879:73:0::1;11015:402:1::0;6879:73:0::1;6989:6;::::0;;6968:38:::1;::::0;-1:-1:-1;;;;;6968:38:0;;::::1;::::0;6989:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6968:38:0;::::1;7017:6;:17:::0;;-1:-1:-1;;;;;;7017:17:0::1;-1:-1:-1::0;;;;;7017:17:0;;;::::1;::::0;;;::::1;::::0;;6798:244::o;1783:181::-;1841:7;;1873:5;1877:1;1873;:5;:::i;:::-;1861:17;;1902:1;1897;:6;;1889:46;;;;-1:-1:-1;;;1889:46:0;;11624:2:1;1889:46:0;;;11606:21:1;11663:2;11643:18;;;11636:30;11702:29;11682:18;;;11675:57;11749:18;;1889:46:0;11422:351:1;24080:337:0;-1:-1:-1;;;;;24173:19:0;;24165:68;;;;-1:-1:-1;;;24165:68:0;;11980:2:1;24165:68:0;;;11962:21:1;12019:2;11999:18;;;11992:30;12058:34;12038:18;;;12031:62;-1:-1:-1;;;12109:18:1;;;12102:34;12153:19;;24165:68:0;11778:400:1;24165:68:0;-1:-1:-1;;;;;24252:21:0;;24244:68;;;;-1:-1:-1;;;24244:68:0;;12385:2:1;24244:68:0;;;12367:21:1;12424:2;12404:18;;;12397:30;12463:34;12443:18;;;12436:62;-1:-1:-1;;;12514:18:1;;;12507:32;12556:19;;24244:68:0;12183:398:1;24244:68:0;-1:-1:-1;;;;;24325:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24377:32;;1869:25:1;;;24377:32:0;;1842:18:1;24377:32:0;;;;;;;24080:337;;;:::o;1972:136::-;2030:7;2057:43;2061:1;2064;2057:43;;;;;;;;;;;;;;;;;:3;:43::i;29394:502::-;29493:15;29510:23;29535:12;29549:23;29574:12;29588:18;29610:19;29621:7;29610:10;:19::i;:::-;-1:-1:-1;;;;;29658:15:0;;;;;;:7;:15;;;;;;29492:137;;-1:-1:-1;29492:137:0;;-1:-1:-1;29492:137:0;;-1:-1:-1;29492:137:0;-1:-1:-1;29492:137:0;-1:-1:-1;29492:137:0;-1:-1:-1;29658:28:0;;29492:137;29658:19;:28::i;:::-;-1:-1:-1;;;;;29640:15:0;;;;;;;:7;:15;;;;;;:46;;;;29718:18;;;;;;;:39;;29741:15;29718:22;:39::i;:::-;-1:-1:-1;;;;;29697:18:0;;;;;;:7;:18;;;;;:60;29768:26;29783:10;29768:14;:26::i;:::-;29805:23;29817:4;29823;29805:11;:23::i;:::-;29861:9;-1:-1:-1;;;;;29844:44:0;29853:6;-1:-1:-1;;;;;29844:44:0;;29872:15;29844:44;;;;1869:25:1;;1857:2;1842:18;;1723:177;29844:44:0;;;;;;;;29481:415;;;;;;29394:502;;;:::o;34689:345::-;34743:15;;34733:7;:25;34785:21;;34769:13;:37;;;34827:15;;34817:7;:25;;;34869:21;;34853:13;:37;;;34915:19;;34901:11;:33;;;34964:62;;34915:19;;34964:45;;34869:21;34964:45;;:17;:26::i;:62::-;34945:16;:81;34689:345::o;24425:1243::-;-1:-1:-1;;;;;24547:18:0;;24539:68;;;;-1:-1:-1;;;24539:68:0;;12788:2:1;24539:68:0;;;12770:21:1;12827:2;12807:18;;;12800:30;12866:34;12846:18;;;12839:62;-1:-1:-1;;;12917:18:1;;;12910:35;12962:19;;24539:68:0;12586:401:1;24539:68:0;-1:-1:-1;;;;;24626:16:0;;24618:64;;;;-1:-1:-1;;;24618:64:0;;13194:2:1;24618:64:0;;;13176:21:1;13233:2;13213:18;;;13206:30;13272:34;13252:18;;;13245:62;-1:-1:-1;;;13323:18:1;;;13316:33;13366:19;;24618:64:0;12992:399:1;24618:64:0;24710:1;24701:6;:10;24693:64;;;;-1:-1:-1;;;24693:64:0;;13598:2:1;24693:64:0;;;13580:21:1;13637:2;13617:18;;;13610:30;13676:34;13656:18;;;13649:62;-1:-1:-1;;;13727:18:1;;;13720:39;13776:19;;24693:64:0;13396:405:1;24693:64:0;24795:13;;;;24792:113;;;-1:-1:-1;;;;;24833:19:0;;;;;;:13;:19;;;;;;;;24832:20;:42;;;;-1:-1:-1;;;;;;24857:17:0;;;;;;:13;:17;;;;;;;;24856:18;24832:42;24824:65;;;;-1:-1:-1;;;24824:65:0;;14008:2:1;24824:65:0;;;13990:21:1;14047:2;14027:18;;;14020:30;-1:-1:-1;;;14066:18:1;;;14059:41;14117:18;;24824:65:0;13806:335:1;24824:65:0;24925:28;24956:24;24974:4;24956:9;:24::i;:::-;25046:23;;25095:16;;24925:55;;-1:-1:-1;25022:47:0;;;;25095:16;;25094:17;:42;;;;-1:-1:-1;25115:21:0;;;;;;;25094:42;:67;;;;;25148:13;-1:-1:-1;;;;;25140:21:0;:4;-1:-1:-1;;;;;25140:21:0;;;25094:67;:86;;;;-1:-1:-1;6455:7:0;6482:6;-1:-1:-1;;;;;25165:15:0;;;6482:6;;25165:15;;25094:86;25090:240;;;25225:23;25221:98;;;25283:16;:14;:16::i;:::-;25347:13;-1:-1:-1;;;;;25343:17:0;:2;-1:-1:-1;;;;;25343:17:0;;25340:39;;25364:12;:10;:12::i;:::-;-1:-1:-1;;;;;25509:24:0;;25392:12;25509:24;;;:18;:24;;;;;;25407:4;;25509:24;;;:50;;-1:-1:-1;;;;;;25537:22:0;;;;;;:18;:22;;;;;;;;25509:50;25506:106;;;-1:-1:-1;25595:5:0;25506:106;25622:38;25637:4;25642:2;25645:6;25652:7;25622:14;:38::i;:::-;24528:1140;;;24425:1243;;;:::o;2116:192::-;2202:7;2238:12;2230:6;;;;2222:29;;;;-1:-1:-1;;;2222:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2262:9:0;2274:5;2278:1;2274;:5;:::i;:::-;2262:17;2116:192;-1:-1:-1;;;;;2116:192:0:o;33079:163::-;33120:7;33141:15;33158;33177:19;:17;:19::i;:::-;33140:56;;-1:-1:-1;33140:56:0;-1:-1:-1;33214:20:0;33140:56;;33214:11;:20::i;:::-;33207:27;;;;33079:163;:::o;2576:132::-;2634:7;2661:39;2665:1;2668;2661:39;;;;;;;;;;;;;;;;;:3;:39::i;31877:419::-;31936:7;31945;31954;31963;31972;31981;32002:23;32027:12;32041:18;32063:20;32075:7;32063:11;:20::i;:::-;32001:82;;;;;;32095:15;32112:23;32137:12;32153:50;32165:7;32174:4;32180:10;32192;:8;:10::i;:::-;32153:11;:50::i;:::-;32094:109;;;;-1:-1:-1;32094:109:0;;-1:-1:-1;32254:15:0;;-1:-1:-1;32271:4:0;;-1:-1:-1;32277:10:0;;-1:-1:-1;31877:419:0;;-1:-1:-1;;;;;31877:419:0:o;27098:664::-;27248:16;;;27262:1;27248:16;;;;;;;;27224:21;;27248:16;;;;;;;;;;-1:-1:-1;27248:16:0;27224:40;;27293:4;27275;27280:1;27275:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27275:23:0;;;-1:-1:-1;;;;;27275:23:0;;;;;27319:15;-1:-1:-1;;;;;27319:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27309:4;27314:1;27309:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;27309:32:0;;;-1:-1:-1;;;;;27309:32:0;;;;;27352:62;27369:4;27384:15;27402:11;27352:8;:62::i;:::-;27453:240;;-1:-1:-1;;;27453:240:0;;-1:-1:-1;;;;;27453:15:0;:66;;;;:240;;27534:11;;27560:1;;27604:4;;27631;;27667:15;;27453:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27719:35;27736:11;27749:4;27719:35;;;;;;;:::i;:::-;;;;;;;;27153:609;27098:664;:::o;27772:513::-;27920:62;27937:4;27952:15;27970:11;27920:8;:62::i;:::-;28025:15;-1:-1:-1;;;;;28025:31:0;;28064:9;28097:4;28117:11;28143:1;28186;28229:7;6455;6482:6;-1:-1:-1;;;;;6482:6:0;;6417:79;28229:7;28025:252;;;;;;-1:-1:-1;;;;;;28025:252:0;;;-1:-1:-1;;;;;16283:15:1;;;28025:252:0;;;16265:34:1;16315:18;;;16308:34;;;;16358:18;;;16351:34;;;;16401:18;;;16394:34;16465:15;;;16444:19;;;16437:44;28251:15:0;16497:19:1;;;16490:35;16199:19;;28025:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2316:250::-;2374:7;2398:1;2403;2398:6;2394:47;;-1:-1:-1;2428:1:0;2421:8;;2394:47;2453:9;2465:5;2469:1;2465;:5;:::i;:::-;2453:17;-1:-1:-1;2498:1:0;2489:5;2493:1;2453:17;2489:5;:::i;:::-;:10;2481:56;;;;-1:-1:-1;;;2481:56:0;;17444:2:1;2481:56:0;;;17426:21:1;17483:2;17463:18;;;17456:30;17522:34;17502:18;;;17495:62;-1:-1:-1;;;17573:18:1;;;17566:31;17614:19;;2481:56:0;17242:397:1;38080:126:0;38172:26;;-1:-1:-1;;;;;38172:18:0;;;:26;;;;;38191:6;;38172:26;;;;38191:6;38172:18;:26;;;;;;;;;;;;;;;;;;;;;38080:126;;:::o;33823:346::-;33886:19;33909:10;:8;:10::i;:::-;33886:33;-1:-1:-1;33930:18:0;33951:27;:10;33886:33;33951:14;:27::i;:::-;34030:4;34014:22;;;;:7;:22;;;;;;33930:48;;-1:-1:-1;34014:38:0;;33930:48;34014:26;:38::i;:::-;34005:4;33989:22;;;;:7;:22;;;;;;;;:63;;;;34066:11;:26;;;;;;34063:99;;;34137:4;34121:22;;;;:7;:22;;;;;;:38;;34148:10;34121:26;:38::i;:::-;34112:4;34096:22;;;;:7;:22;;;;;:63;33875:294;;33823:346;:::o;31722:147::-;31800:7;;:17;;31812:4;31800:11;:17::i;:::-;31790:7;:27;31841:10;;:20;;31856:4;31841:14;:20::i;:::-;31828:10;:33;-1:-1:-1;;31722:147:0:o;35042:322::-;35093:11;;35083:7;:21;35131:17;;35115:13;:33;;;35169:11;;35159:7;:21;;;35207:17;;35191:13;:33;;;35249:15;;35235:11;:29;;;35294:62;;35249:15;;35294:45;;35207:17;35294:45;;:17;:26::i;28293:696::-;28404:7;28400:32;;28415:14;34537:1;34527:7;:11;;;34549:13;:17;;;34577:7;:11;;;34599:13;:17;;;34627:11;:15;;;34653:16;:20;34478:203;28415:14;28442:23;28458:6;28442:15;:23::i;:::-;-1:-1:-1;;;;;28480:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28504:22:0;;;;;;:11;:22;;;;;;;;28503:23;28480:46;28476:477;;;28543:48;28565:6;28573:9;28584:6;28543:21;:48::i;:::-;28476:477;;;-1:-1:-1;;;;;28614:19:0;;;;;;:11;:19;;;;;;;;28613:20;:46;;;;-1:-1:-1;;;;;;28637:22:0;;;;;;:11;:22;;;;;;;;28613:46;28609:344;;;28676:46;28696:6;28704:9;28715:6;28676:19;:46::i;28609:344::-;-1:-1:-1;;;;;28744:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28767:22:0;;;;;;:11;:22;;;;;;;;28744:45;28740:213;;;28806:48;28828:6;28836:9;28847:6;28806:21;:48::i;28740:213::-;28897:44;28915:6;28923:9;28934:6;28897:17;:44::i;:::-;28963:15;:13;:15::i;33250:561::-;33347:7;;33383;;33300;;;;;33407:289;33431:9;:16;33427:20;;33407:289;;;33497:7;33473;:21;33481:9;33491:1;33481:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33481:12:0;33473:21;;;;;;;;;;;;;:31;;:66;;;33532:7;33508;:21;33516:9;33526:1;33516:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33516:12:0;33508:21;;;;;;;;;;;;;:31;33473:66;33469:97;;;33549:7;;33558;;33541:25;;;;;;;33250:561;;:::o;33469:97::-;33591:34;33603:7;:21;33611:9;33621:1;33611:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33611:12:0;33603:21;;;;;;;;;;;;;33591:7;;:11;:34::i;:::-;33581:44;;33650:34;33662:7;:21;33670:9;33680:1;33670:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33670:12:0;33662:21;;;;;;;;;;;;;33650:7;;:11;:34::i;:::-;33640:44;-1:-1:-1;33449:3:0;;;;:::i;:::-;;;;33407:289;;;-1:-1:-1;33732:7:0;;33720;;:20;;:11;:20::i;:::-;33710:7;:30;33706:61;;;33750:7;;33759;;33742:25;;;;;;33250:561;;:::o;33706:61::-;33786:7;;33795;;-1:-1:-1;33250:561:0;-1:-1:-1;33250:561:0:o;2716:278::-;2802:7;2837:12;2830:5;2822:28;;;;-1:-1:-1;;;2822:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2861:9:0;2873:5;2877:1;2873;:5;:::i;32304:330::-;32364:7;32373;32382;32402:12;32417:24;32433:7;32417:15;:24::i;:::-;32402:39;;32452:18;32473:30;32495:7;32473:21;:30::i;:::-;32452:51;-1:-1:-1;32514:23:0;32540:33;32452:51;32540:17;:7;32552:4;32540:11;:17::i;:::-;:21;;:33::i;:::-;32514:59;32609:4;;-1:-1:-1;32615:10:0;;-1:-1:-1;32304:330:0;;-1:-1:-1;;;32304:330:0:o;32642:429::-;32757:7;;;;32813:24;:7;32825:11;32813;:24::i;:::-;32795:42;-1:-1:-1;32848:12:0;32863:21;:4;32872:11;32863:8;:21::i;:::-;32848:36;-1:-1:-1;32895:18:0;32916:27;:10;32931:11;32916:14;:27::i;:::-;32895:48;-1:-1:-1;32954:23:0;32980:33;32895:48;32980:17;:7;32992:4;32980:11;:17::i;:33::-;33032:7;;;;-1:-1:-1;33058:4:0;;-1:-1:-1;32642:429:0;;-1:-1:-1;;;;;;;32642:429:0:o;29001:383::-;29069:16;;29087:1;29069:19;29066:35;;29001:383;:::o;29066:35::-;29139:34;29169:3;29139:25;29150:13;;29139:6;:10;;:25;;;;:::i;:34::-;29111:24;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;29217:7:0;;29206:28;;29230:3;;29206:19;;:6;;:10;:19::i;:28::-;29184:18;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;;29284:13:0;;29273:34;;29303:3;;29273:25;;:6;;:10;:25::i;:34::-;29245:24;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;29355:11:0;;29344:32;;29372:3;;29344:23;;:6;;:10;:23::i;:32::-;29318:22;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;;29001:383:0:o;30498:566::-;30601:15;30618:23;30643:12;30657:23;30682:12;30696:18;30718:19;30729:7;30718:10;:19::i;:::-;-1:-1:-1;;;;;30766:15:0;;;;;;:7;:15;;;;;;30600:137;;-1:-1:-1;30600:137:0;;-1:-1:-1;30600:137:0;;-1:-1:-1;30600:137:0;-1:-1:-1;30600:137:0;-1:-1:-1;30600:137:0;-1:-1:-1;30766:28:0;;30786:7;30766:19;:28::i;:::-;-1:-1:-1;;;;;30748:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30823:7;:15;;;;:28;;30843:7;30823:19;:28::i;29904:586::-;30005:15;30022:23;30047:12;30061:23;30086:12;30100:18;30122:19;30133:7;30122:10;:19::i;:::-;-1:-1:-1;;;;;30170:15:0;;;;;;:7;:15;;;;;;30004:137;;-1:-1:-1;30004:137:0;;-1:-1:-1;30004:137:0;;-1:-1:-1;30004:137:0;-1:-1:-1;30004:137:0;-1:-1:-1;30004:137:0;-1:-1:-1;30170:28:0;;30004:137;30170:19;:28::i;:::-;-1:-1:-1;;;;;30152:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30230:18;;;;;:7;:18;;;;;:39;;30253:15;30230:22;:39::i;:::-;-1:-1:-1;;;;;30209:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30301:7;:18;;;;:39;;30324:15;30301:22;:39::i;31072:642::-;31175:15;31192:23;31217:12;31231:23;31256:12;31270:18;31292:19;31303:7;31292:10;:19::i;:::-;-1:-1:-1;;;;;31340:15:0;;;;;;:7;:15;;;;;;31174:137;;-1:-1:-1;31174:137:0;;-1:-1:-1;31174:137:0;;-1:-1:-1;31174:137:0;-1:-1:-1;31174:137:0;-1:-1:-1;31174:137:0;-1:-1:-1;31340:28:0;;31360:7;31340:19;:28::i;:::-;-1:-1:-1;;;;;31322:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31397:7;:15;;;;:28;;31417:7;31397:19;:28::i;34181:130::-;34245:7;34272:31;34297:5;34272:20;34284:7;;34272;:11;;:20;;;;:::i;34323:143::-;34393:7;34420:38;34454:3;34420:29;34432:16;;34420:7;:11;;:29;;;;:::i;14:454:1:-;109:6;117;125;133;141;194:3;182:9;173:7;169:23;165:33;162:53;;;211:1;208;201:12;162:53;-1:-1:-1;;234:23:1;;;304:2;289:18;;276:32;;-1:-1:-1;355:2:1;340:18;;327:32;;406:2;391:18;;378:32;;-1:-1:-1;457:3:1;442:19;429:33;;-1:-1:-1;14:454:1;-1:-1:-1;14:454:1:o;473:597::-;585:4;614:2;643;632:9;625:21;675:6;669:13;718:6;713:2;702:9;698:18;691:34;743:1;753:140;767:6;764:1;761:13;753:140;;;862:14;;;858:23;;852:30;828:17;;;847:2;824:26;817:66;782:10;;753:140;;;911:6;908:1;905:13;902:91;;;981:1;976:2;967:6;956:9;952:22;948:31;941:42;902:91;-1:-1:-1;1054:2:1;1033:15;-1:-1:-1;;1029:29:1;1014:45;;;;1061:2;1010:54;;473:597;-1:-1:-1;;;473:597:1:o;1075:131::-;-1:-1:-1;;;;;1150:31:1;;1140:42;;1130:70;;1196:1;1193;1186:12;1130:70;1075:131;:::o;1211:315::-;1279:6;1287;1340:2;1328:9;1319:7;1315:23;1311:32;1308:52;;;1356:1;1353;1346:12;1308:52;1395:9;1382:23;1414:31;1439:5;1414:31;:::i;:::-;1464:5;1516:2;1501:18;;;;1488:32;;-1:-1:-1;;;1211:315:1:o;2129:247::-;2188:6;2241:2;2229:9;2220:7;2216:23;2212:32;2209:52;;;2257:1;2254;2247:12;2209:52;2296:9;2283:23;2315:31;2340:5;2315:31;:::i;2616:180::-;2675:6;2728:2;2716:9;2707:7;2703:23;2699:32;2696:52;;;2744:1;2741;2734:12;2696:52;-1:-1:-1;2767:23:1;;2616:180;-1:-1:-1;2616:180:1:o;2801:456::-;2878:6;2886;2894;2947:2;2935:9;2926:7;2922:23;2918:32;2915:52;;;2963:1;2960;2953:12;2915:52;3002:9;2989:23;3021:31;3046:5;3021:31;:::i;:::-;3071:5;-1:-1:-1;3128:2:1;3113:18;;3100:32;3141:33;3100:32;3141:33;:::i;:::-;2801:456;;3193:7;;-1:-1:-1;;;3247:2:1;3232:18;;;;3219:32;;2801:456::o;3659:160::-;3724:20;;3780:13;;3773:21;3763:32;;3753:60;;3809:1;3806;3799:12;3753:60;3659:160;;;:::o;3824:248::-;3889:6;3897;3950:2;3938:9;3929:7;3925:23;3921:32;3918:52;;;3966:1;3963;3956:12;3918:52;4002:9;3989:23;3979:33;;4031:35;4062:2;4051:9;4047:18;4031:35;:::i;:::-;4021:45;;3824:248;;;;;:::o;4077:180::-;4133:6;4186:2;4174:9;4165:7;4161:23;4157:32;4154:52;;;4202:1;4199;4192:12;4154:52;4225:26;4241:9;4225:26;:::i;4262:689::-;4354:6;4362;4370;4423:2;4411:9;4402:7;4398:23;4394:32;4391:52;;;4439:1;4436;4429:12;4391:52;4479:9;4466:23;4508:18;4549:2;4541:6;4538:14;4535:34;;;4565:1;4562;4555:12;4535:34;4603:6;4592:9;4588:22;4578:32;;4648:7;4641:4;4637:2;4633:13;4629:27;4619:55;;4670:1;4667;4660:12;4619:55;4710:2;4697:16;4736:2;4728:6;4725:14;4722:34;;;4752:1;4749;4742:12;4722:34;4807:7;4800:4;4790:6;4787:1;4783:14;4779:2;4775:23;4771:34;4768:47;4765:67;;;4828:1;4825;4818:12;4765:67;4859:4;4851:13;;;;-1:-1:-1;4883:6:1;-1:-1:-1;4908:37:1;;4924:20;;;-1:-1:-1;4908:37:1;:::i;:::-;4898:47;;4262:689;;;;;:::o;4956:388::-;5024:6;5032;5085:2;5073:9;5064:7;5060:23;5056:32;5053:52;;;5101:1;5098;5091:12;5053:52;5140:9;5127:23;5159:31;5184:5;5159:31;:::i;:::-;5209:5;-1:-1:-1;5266:2:1;5251:18;;5238:32;5279:33;5238:32;5279:33;:::i;:::-;5331:7;5321:17;;;4956:388;;;;;:::o;5349:356::-;5551:2;5533:21;;;5570:18;;;5563:30;5629:34;5624:2;5609:18;;5602:62;5696:2;5681:18;;5349:356::o;5710:127::-;5771:10;5766:3;5762:20;5759:1;5752:31;5802:4;5799:1;5792:15;5826:4;5823:1;5816:15;5842:128;5882:3;5913:1;5909:6;5906:1;5903:13;5900:39;;;5919:18;;:::i;:::-;-1:-1:-1;5955:9:1;;5842:128::o;6331:380::-;6410:1;6406:12;;;;6453;;;6474:61;;6528:4;6520:6;6516:17;6506:27;;6474:61;6581:2;6573:6;6570:14;6550:18;6547:38;6544:161;;6627:10;6622:3;6618:20;6615:1;6608:31;6662:4;6659:1;6652:15;6690:4;6687:1;6680:15;6544:161;;6331:380;;;:::o;8315:127::-;8376:10;8371:3;8367:20;8364:1;8357:31;8407:4;8404:1;8397:15;8431:4;8428:1;8421:15;8447:125;8487:4;8515:1;8512;8509:8;8506:34;;;8520:18;;:::i;:::-;-1:-1:-1;8557:9:1;;8447:125::o;8577:127::-;8638:10;8633:3;8629:20;8626:1;8619:31;8669:4;8666:1;8659:15;8693:4;8690:1;8683:15;8709:135;8748:3;8769:17;;;8766:43;;8789:18;;:::i;:::-;-1:-1:-1;8836:1:1;8825:13;;8709:135::o;14278:251::-;14348:6;14401:2;14389:9;14380:7;14376:23;14372:32;14369:52;;;14417:1;14414;14407:12;14369:52;14449:9;14443:16;14468:31;14493:5;14468:31;:::i;14534:461::-;14587:3;14625:5;14619:12;14652:6;14647:3;14640:19;14678:4;14707:2;14702:3;14698:12;14691:19;;14744:2;14737:5;14733:14;14765:1;14775:195;14789:6;14786:1;14783:13;14775:195;;;14854:13;;-1:-1:-1;;;;;14850:39:1;14838:52;;14910:12;;;;14945:15;;;;14886:1;14804:9;14775:195;;;-1:-1:-1;14986:3:1;;14534:461;-1:-1:-1;;;;;14534:461:1:o;15000:582::-;15299:6;15288:9;15281:25;15342:6;15337:2;15326:9;15322:18;15315:34;15385:3;15380:2;15369:9;15365:18;15358:31;15262:4;15406:57;15458:3;15447:9;15443:19;15435:6;15406:57;:::i;:::-;-1:-1:-1;;;;;15499:32:1;;;;15494:2;15479:18;;15472:60;-1:-1:-1;15563:3:1;15548:19;15541:35;15398:65;15000:582;-1:-1:-1;;;15000:582:1:o;15587:332::-;15794:6;15783:9;15776:25;15837:2;15832;15821:9;15817:18;15810:30;15757:4;15857:56;15909:2;15898:9;15894:18;15886:6;15857:56;:::i;:::-;15849:64;15587:332;-1:-1:-1;;;;15587:332:1:o;16536:306::-;16624:6;16632;16640;16693:2;16681:9;16672:7;16668:23;16664:32;16661:52;;;16709:1;16706;16699:12;16661:52;16738:9;16732:16;16722:26;;16788:2;16777:9;16773:18;16767:25;16757:35;;16832:2;16821:9;16817:18;16811:25;16801:35;;16536:306;;;;;:::o;16847:168::-;16887:7;16953:1;16949;16945:6;16941:14;16938:1;16935:21;16930:1;16923:9;16916:17;16912:45;16909:71;;;16960:18;;:::i;:::-;-1:-1:-1;17000:9:1;;16847:168::o;17020:217::-;17060:1;17086;17076:132;;17130:10;17125:3;17121:20;17118:1;17111:31;17165:4;17162:1;17155:15;17193:4;17190:1;17183:15;17076:132;-1:-1:-1;17222:9:1;;17020:217::o
Swarm Source
ipfs://b8de622dda03bd8d512fa90827b75f20f4c974bd196539b70df74dbd2c2ab08b
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.