Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 ICHIGO
Holders
45
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
622,953.614473615 ICHIGOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ICHIGO
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; 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 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; } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract ICHIGO is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address payable public marketingAddress; address payable public infrastructure; address payable public liquidityAddress; mapping(address => uint256) private _holders; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1000000000 * 1e9; string private constant _name = "ICHIGO"; string private constant _symbol = "ICHIGO"; uint8 private constant _decimals = 9; uint256 private _taxFee; uint256 private _previousTaxFee = _taxFee; uint256 private _marketingFee; uint256 private _liquidityFee; uint256 private _previousLiquidityFee = _liquidityFee; uint256 private constant BUY = 1; uint256 private constant SELL = 2; uint256 private constant TRANSFER = 3; uint256 private buyOrSellSwitch; uint256 public _buyTaxFee = 3; uint256 public _buyLiquidityFee = 1; uint256 public _buyMarketingFee = 2; uint256 public _sellTaxFee = 3; uint256 public _sellLiquidityFee = 1; uint256 public _sellMarketingFee = 2; uint256 public maxHoldAmount; mapping (address => bool) public _isExcludedMaxHoldAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; uint256 private minimumTokensBeforeSwap; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; bool public tradingActive = false; event SwapAndLiquifyEnabledUpdated(bool enabled); event TransferForeignToken(address token, uint256 amount); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _holders[_msgSender()] = _tTotal; maxHoldAmount = _tTotal.mul(4).div(100); minimumTokensBeforeSwap = 2000000 * 1e9; marketingAddress = payable(0x67FD71b8e33600f44E05cD16E9507d98CEfB0F84); infrastructure = payable(0x5A2919010Be09a61Ed1a7985ef6A1DC136CeA9bE); liquidityAddress = _msgSender(); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromFee[infrastructure] = true; excludeFromMaxHold(owner(), true); excludeFromMaxHold(address(0xdead), true); excludeFromMaxHold(address(0), true); excludeFromMaxHold(address(this), true); emit Transfer(address(0), _msgSender(), _tTotal); } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _holders[account]; } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external 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 ) external 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) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function excludeFromMaxHold(address account, bool status) public onlyOwner { _isExcludedMaxHoldAmount[account] = status; } // once enabled, can never be turned off function enableTrading() internal onlyOwner { tradingActive = true; swapAndLiquifyEnabled = true; } function launch(address[] memory airdropWallets, uint256[] memory amounts) external onlyOwner returns (bool){ require(!tradingActive, "trading is already active"); require(airdropWallets.length < 100, "max 100 wallets"); for(uint256 i = 0; i < airdropWallets.length; i++){ address wallet = airdropWallets[i]; uint256 amount = amounts[i]; _transfer(msg.sender, wallet, amount); } enableTrading(); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxHold(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; _approve(address(this), address(uniswapV2Router), _tTotal); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxHold(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); require(address(this).balance > 0, "ETH required for launch"); addLiquidity(balanceOf(address(this)), address(this).balance); swapAndLiquifyEnabled = true; return true; } function minimumTokensBeforeSwapAmount() external view returns (uint256) { return minimumTokensBeforeSwap; } function setMinimumTokensBeforeSwapAmount(uint256 amount) external onlyOwner { minimumTokensBeforeSwap = amount; } function setMaxHoldAmount(uint256 amount) external onlyOwner { maxHoldAmount = amount; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; _isExcludedMaxHoldAmount[pair] = value; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(!tradingActive){ require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet."); } if (!_isExcludedMaxHoldAmount[to]) { uint256 toBalance = balanceOf(to); require(toBalance.add(amount) <= maxHoldAmount, "Exceeded max hold"); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; // swap and liquify if ( !inSwapAndLiquify && swapAndLiquifyEnabled && balanceOf(uniswapV2Pair) > 0 && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && automatedMarketMakerPairs[to] && overMinimumTokenBalance ) { swapBack(); } bool takeFee = true; // If any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; buyOrSellSwitch = TRANSFER; // zero tax } else { // Buy if (automatedMarketMakerPairs[from]) { removeAllFee(); _taxFee = _buyTaxFee; _liquidityFee = _buyLiquidityFee + _buyMarketingFee; buyOrSellSwitch = BUY; } // Sell else if (automatedMarketMakerPairs[to]) { removeAllFee(); _taxFee = _sellTaxFee; _liquidityFee = _sellLiquidityFee + _sellMarketingFee; buyOrSellSwitch = SELL; } else { removeAllFee(); buyOrSellSwitch = TRANSFER; // zero tax } } _tokenTransfer(from, to, amount, takeFee); } function swapBack() private lockTheSwap { uint256 contractBalance = balanceOf(address(this)); uint256 _totalFee = _buyTaxFee + _buyLiquidityFee + _buyMarketingFee; // totalFees must not be zero _totalFee = _totalFee > 0 ? _totalFee : 6; uint256 _infrastructureTokensToSwap = contractBalance.mul(_buyTaxFee > 0? _buyTaxFee : 3).div(_totalFee); uint256 _liquidityTokensToSwap = contractBalance.mul(_buyLiquidityFee > 0 ? _buyLiquidityFee : 1).div(_totalFee); uint256 _marketingTokensToSwap = contractBalance.mul(_buyMarketingFee > 0? _buyMarketingFee : 2).div(_totalFee); uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap + _infrastructureTokensToSwap; // Halve the amount of liquidity tokens uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2); uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity); uint256 initialETHBalance = address(this).balance; swapTokensForETH(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(_marketingTokensToSwap).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance.mul(_liquidityTokensToSwap).div(totalTokensToSwap); uint256 ethForDev = ethBalance.sub(ethForMarketing + ethForLiquidity); (bool success,) = address(marketingAddress).call{value: ethForMarketing}(""); (success,) = address(infrastructure).call{value: ethForDev}(""); addLiquidity(tokensForLiquidity, ethForLiquidity); // send remaining eth if(address(this).balance > 1e17){ (success,) = address(infrastructure).call{value: address(this).balance}(""); } } function forceSwapBack() external onlyOwner { uint256 contractBalance = balanceOf(address(this)); require(contractBalance >= 500000 * 1e9, " < 0.05% of tokens stuck"); swapBack(); } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityAddress, block.timestamp ); } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); ( uint256 transferAmount, uint256 tFee ) = _getValues(amount); _holders[sender] = _holders[sender].sub(amount); _holders[address(this)] = _holders[address(this)].add(tFee); _holders[recipient] = _holders[recipient].add(transferAmount); emit Transfer(sender, recipient, transferAmount); if (!takeFee) restoreAllFee(); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256 ) { uint256 tFee = calculateTaxFee(tAmount); uint256 liquidityAmount = calculateLiquidityFee(tAmount); uint256 transferAmount = tAmount.sub(tFee).sub(liquidityAmount); uint256 fees = tFee.add(liquidityAmount); return (transferAmount, fees); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) external view returns (bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; } function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyMarketingFee) external onlyOwner { _buyTaxFee = buyTaxFee; _buyLiquidityFee = buyLiquidityFee; _buyMarketingFee = buyMarketingFee; require(_buyTaxFee + _buyLiquidityFee + _buyMarketingFee <= 10, " > 10%"); } function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellMarketingFee) external onlyOwner { _sellTaxFee = sellTaxFee; _sellLiquidityFee = sellLiquidityFee; _sellMarketingFee = sellMarketingFee; require(_sellTaxFee + _sellLiquidityFee + _sellMarketingFee <= 15, " > 15%"); } function setMarketingAddress(address _marketingAddress) external onlyOwner { require(_marketingAddress != address(0), "0 address"); _isExcludedFromFee[marketingAddress] = false; marketingAddress = payable(_marketingAddress); _isExcludedFromFee[marketingAddress] = true; } function setLiquidityAddress(address _liquidityAddress) public onlyOwner { require(_liquidityAddress != address(0), "0 address"); liquidityAddress = payable(_liquidityAddress); _isExcludedFromFee[liquidityAddress] = true; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } // To receive ETH from uniswapV2Router when swapping receive() external payable {} function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); require(_token != address(this), "ICHIGO not allowed"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); emit TransferForeignToken(_token, _contractBalance); } function withdrawStuckETH() external onlyOwner { require(!tradingActive, "Can only withdraw if trading hasn't started"); bool success; (success,) = address(msg.sender).call{value: address(this).balance}(""); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
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":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":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxHoldAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"excludeFromMaxHold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"infrastructure","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"launch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxHoldAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinimumTokensBeforeSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600954600a55600c54600d556003600f55600160105560026011556003601255600160135560026014556000601a60156101000a81548160ff0219169083151502179055506000601a60166101000a81548160ff0219169083151502179055503480156200007157600080fd5b506000620000846200055e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350670de0b6b3a7640000600660006200013f6200055e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001ba6064620001a66004670de0b6b3a76400006200056660201b620028d91790919060201c565b620005e960201b620029531790919060201c565b60158190555066071afd498d00006018819055507367fd71b8e33600f44e05cd16e9507d98cefb0f84600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735a2919010be09a61ed1a7985ef6a1dc136cea9be600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002886200055e60201b60201c565b600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000620002de6200063b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200049d6200048f6200063b60201b60201c565b60016200066460201b60201c565b620004b261dead60016200066460201b60201c565b620004c6600060016200066460201b60201c565b620004d93060016200066460201b60201c565b620004e96200055e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a7640000604051620005509190620007e2565b60405180910390a362000aa8565b600033905090565b60008083036200057a5760009050620005e3565b600082846200058a91906200082e565b90508284826200059b9190620008a8565b14620005de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d59062000967565b60405180910390fd5b809150505b92915050565b60006200063383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200075f60201b60201c565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006746200055e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000704576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fb90620009d9565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008083118290620007a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a0919062000a84565b60405180910390fd5b5060008385620007ba9190620008a8565b9050809150509392505050565b6000819050919050565b620007dc81620007c7565b82525050565b6000602082019050620007f96000830184620007d1565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200083b82620007c7565b91506200084883620007c7565b92508282026200085881620007c7565b91508282048414831517620008725762000871620007ff565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620008b582620007c7565b9150620008c283620007c7565b925082620008d557620008d462000879565b5b828204905092915050565b600082825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006200094f602183620008e0565b91506200095c82620008f1565b604082019050919050565b60006020820190508181036000830152620009828162000940565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620009c1602083620008e0565b9150620009ce8262000989565b602082019050919050565b60006020820190508181036000830152620009f481620009b2565b9050919050565b600081519050919050565b60005b8381101562000a2657808201518184015260208101905062000a09565b60008484015250505050565b6000601f19601f8301169050919050565b600062000a5082620009fb565b62000a5c8185620008e0565b935062000a6e81856020860162000a06565b62000a798162000a32565b840191505092915050565b6000602082019050818103600083015262000aa0818462000a43565b905092915050565b6156e58062000ab86000396000f3fe6080604052600436106102975760003560e01c8063906e9dd01161015a578063c8607952116100c1578063ea2f0b371161007a578063ea2f0b3714610a51578063ef10fb9714610a7a578063efcc52de14610ab7578063f2fde38b14610ae2578063f5648a4f14610b0b578063fb02f76f14610b225761029e565b8063c860795214610941578063cd03425c1461096c578063d8b6004014610997578063dc44b6a0146109c0578063dd62ed3e146109eb578063df4fd51514610a285761029e565b8063a5ece94111610113578063a5ece9411461081d578063a9059cbb14610848578063b62496f514610885578063bbc0c742146108c2578063c49b9a80146108ed578063c5d24189146109165761029e565b8063906e9dd01461070d57806395d89b41146107365780639a7a23d6146107615780639bd565d61461078a578063a073d37f146107b5578063a457c2d7146107e05761029e565b806349bd5a5e116101fe578063602bc62b116101b7578063602bc62b146105d557806370a08231146106005780638366e79a1461063d578063837917581461067a57806388790a68146106b75780638da5cb5b146106e25761029e565b806349bd5a5e146104d75780634a74bb021461050257806351f205e41461052d578063525fa81f146105445780635342acb41461056d578063557ed1ba146105aa5761029e565b806323b872dd1161025057806323b872dd146103b557806325519cf2146103f2578063313ce5671461041b5780633221c93f146104465780633950935114610471578063437823ec146104ae5761029e565b806306fdde03146102a3578063095ea7b3146102ce5780631694505e1461030b57806318160ddd146103365780631d865c3014610361578063200a692d1461038a5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b4b565b6040516102c59190613fd7565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906140a1565b610b88565b60405161030291906140fc565b60405180910390f35b34801561031757600080fd5b50610320610ba6565b60405161032d9190614176565b60405180910390f35b34801561034257600080fd5b5061034b610bcc565b60405161035891906141a0565b60405180910390f35b34801561036d57600080fd5b50610388600480360381019061038391906141bb565b610bdc565b005b34801561039657600080fd5b5061039f610ceb565b6040516103ac91906141a0565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d7919061420e565b610cf1565b6040516103e991906140fc565b60405180910390f35b3480156103fe57600080fd5b50610419600480360381019061041491906141bb565b610dca565b005b34801561042757600080fd5b50610430610ed9565b60405161043d919061427d565b60405180910390f35b34801561045257600080fd5b5061045b610ee2565b60405161046891906142b9565b60405180910390f35b34801561047d57600080fd5b50610498600480360381019061049391906140a1565b610f08565b6040516104a591906140fc565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d091906142d4565b610fbb565b005b3480156104e357600080fd5b506104ec6110ab565b6040516104f99190614310565b60405180910390f35b34801561050e57600080fd5b506105176110d1565b60405161052491906140fc565b60405180910390f35b34801561053957600080fd5b506105426110e4565b005b34801561055057600080fd5b5061056b600480360381019061056691906142d4565b6111db565b005b34801561057957600080fd5b50610594600480360381019061058f91906142d4565b61139d565b6040516105a191906140fc565b60405180910390f35b3480156105b657600080fd5b506105bf6113f3565b6040516105cc91906141a0565b60405180910390f35b3480156105e157600080fd5b506105ea6113fb565b6040516105f791906141a0565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906142d4565b611405565b60405161063491906141a0565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f919061432b565b61144e565b60405161067191906140fc565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190614576565b611700565b6040516106ae91906140fc565b60405180910390f35b3480156106c357600080fd5b506106cc611ba7565b6040516106d991906141a0565b60405180910390f35b3480156106ee57600080fd5b506106f7611bad565b6040516107049190614310565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f91906142d4565b611bd6565b005b34801561074257600080fd5b5061074b611e12565b6040516107589190613fd7565b60405180910390f35b34801561076d57600080fd5b506107886004803603810190610783919061461a565b611e4f565b005b34801561079657600080fd5b5061079f611f82565b6040516107ac91906142b9565b60405180910390f35b3480156107c157600080fd5b506107ca611fa8565b6040516107d791906141a0565b60405180910390f35b3480156107ec57600080fd5b50610807600480360381019061080291906140a1565b611fb2565b60405161081491906140fc565b60405180910390f35b34801561082957600080fd5b5061083261207f565b60405161083f91906142b9565b60405180910390f35b34801561085457600080fd5b5061086f600480360381019061086a91906140a1565b6120a5565b60405161087c91906140fc565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a791906142d4565b6120c3565b6040516108b991906140fc565b60405180910390f35b3480156108ce57600080fd5b506108d76120e3565b6040516108e491906140fc565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f919061465a565b6120f6565b005b34801561092257600080fd5b5061092b6121df565b60405161093891906141a0565b60405180910390f35b34801561094d57600080fd5b506109566121e5565b60405161096391906141a0565b60405180910390f35b34801561097857600080fd5b506109816121eb565b60405161098e91906141a0565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b99190614687565b6121f1565b005b3480156109cc57600080fd5b506109d5612290565b6040516109e291906141a0565b60405180910390f35b3480156109f757600080fd5b50610a126004803603810190610a0d919061432b565b612296565b604051610a1f91906141a0565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190614687565b61231d565b005b348015610a5d57600080fd5b50610a786004803603810190610a7391906142d4565b6123bc565b005b348015610a8657600080fd5b50610aa16004803603810190610a9c91906142d4565b6124ac565b604051610aae91906140fc565b60405180910390f35b348015610ac357600080fd5b50610acc6124cc565b604051610ad991906141a0565b60405180910390f35b348015610aee57600080fd5b50610b096004803603810190610b0491906142d4565b6124d2565b005b348015610b1757600080fd5b50610b20612693565b005b348015610b2e57600080fd5b50610b496004803603810190610b44919061461a565b6127e9565b005b60606040518060400160405280600681526020017f49434849474f0000000000000000000000000000000000000000000000000000815250905090565b6000610b9c610b9561299d565b84846129a5565b6001905092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000670de0b6b3a7640000905090565b610be461299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890614700565b60405180910390fd5b826012819055508160138190555080601481905550600f601454601354601254610c9b919061474f565b610ca5919061474f565b1115610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd906147cf565b60405180910390fd5b505050565b60125481565b6000610cfe848484612b6e565b610dbf84610d0a61299d565b610dba8560405180606001604052806028815260200161566360289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d7061299d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131b99092919063ffffffff16565b6129a5565b600190509392505050565b610dd261299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690614700565b60405180910390fd5b82600f819055508160108190555080601181905550600a601154601054600f54610e89919061474f565b610e93919061474f565b1115610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb9061483b565b60405180910390fd5b505050565b60006009905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610fb1610f1561299d565b84610fac8560076000610f2661299d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321d90919063ffffffff16565b6129a5565b6001905092915050565b610fc361299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790614700565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60159054906101000a900460ff1681565b6110ec61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117090614700565b60405180910390fd5b600061118430611405565b90506601c6bf526340008110156111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c7906148a7565b60405180910390fd5b6111d861327b565b50565b6111e361299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790614700565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690614913565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061145861299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90614700565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061497f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b9906149eb565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115fd9190614310565b602060405180830381865afa15801561161a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163e9190614a20565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161167b929190614a4d565b6020604051808303816000875af115801561169a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116be9190614a8b565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e43884826040516116f1929190614a4d565b60405180910390a15092915050565b600061170a61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614700565b60405180910390fd5b601a60169054906101000a900460ff16156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614b04565b60405180910390fd5b606483511061182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290614b70565b60405180910390fd5b60005b835181101561189557600084828151811061184c5761184b614b90565b5b60200260200101519050600084838151811061186b5761186a614b90565b5b60200260200101519050611880338383612b6e565b5050808061188d90614bbf565b91505061182e565b5061189e613661565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506118c28160016127e9565b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061193830601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a76400006129a5565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a79190614c1c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a329190614c1c565b6040518363ffffffff1660e01b8152600401611a4f929190614c49565b6020604051808303816000875af1158015611a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a929190614c1c565b601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611aff601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016127e9565b611b2c601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161372e565b60004711611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6690614cbe565b60405180910390fd5b611b81611b7b30611405565b476137e0565b6001601a60156101000a81548160ff021916908315150217905550600191505092915050565b60135481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bde61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6290614700565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614913565b60405180910390fd5b600060086000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600681526020017f49434849474f0000000000000000000000000000000000000000000000000000815250905090565b611e5761299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90614700565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90614d2a565b60405180910390fd5b611f7e828261372e565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b6000612075611fbf61299d565b846120708560405180606001604052806025815260200161568b6025913960076000611fe961299d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131b99092919063ffffffff16565b6129a5565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006120b96120b261299d565b8484612b6e565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b601a60169054906101000a900460ff1681565b6120fe61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614700565b60405180910390fd5b80601a60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516121d491906140fc565b60405180910390a150565b60115481565b60145481565b60155481565b6121f961299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90614700565b60405180910390fd5b8060158190555050565b60105481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61232561299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a990614700565b60405180910390fd5b8060188190555050565b6123c461299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244890614700565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60166020528060005260406000206000915054906101000a900460ff1681565b600f5481565b6124da61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255e90614700565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cd90614dbc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61269b61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90614700565b60405180910390fd5b601a60169054906101000a900460ff1615612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276f90614e4e565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161279e90614e9f565b60006040518083038185875af1925050503d80600081146127db576040519150601f19603f3d011682016040523d82523d6000602084013e6127e0565b606091505b50508091505050565b6127f161299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614700565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008083036128eb576000905061294d565b600082846128f99190614eb4565b90508284826129089190614f25565b14612948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293f90614fc8565b60405180910390fd5b809150505b92915050565b600061299583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138e0565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b9061505a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7a906150ec565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b6191906141a0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd49061517e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4390615210565b60405180910390fd5b60008111612c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c86906152a2565b60405180910390fd5b601a60169054906101000a900460ff16612d8457600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d445750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a9061530e565b60405180910390fd5b5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e3b576000612de083611405565b9050601554612df8838361321d90919063ffffffff16565b1115612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e309061537a565b60405180910390fd5b505b6000612e4630611405565b905060006018548210159050601a60149054906101000a900460ff16158015612e7b5750601a60159054906101000a900460ff165b8015612eb157506000612eaf601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611405565b115b8015612f075750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f5d5750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fb25750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612fbb5750805b15612fc957612fc861327b565b5b600060019050600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130705750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561308657600090506003600e819055506131a5565b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561310c576130e0613943565b600f546009819055506011546010546130f9919061474f565b600c819055506001600e819055506131a4565b601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561319257613166613943565b60125460098190555060145460135461317f919061474f565b600c819055506002600e819055506131a3565b61319a613943565b6003600e819055505b5b5b6131b186868684613980565b505050505050565b6000838311158290613201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f89190613fd7565b60405180910390fd5b5060008385613210919061539a565b9050809150509392505050565b600080828461322c919061474f565b905083811015613271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132689061541a565b60405180910390fd5b8091505092915050565b6001601a60146101000a81548160ff02191690831515021790555060006132a130611405565b90506000601154601054600f546132b8919061474f565b6132c2919061474f565b9050600081116132d35760066132d5565b805b90506000613312826133046000600f54116132f15760036132f5565b600f545b866128d990919063ffffffff16565b61295390919063ffffffff16565b9050600061334f8361334160006010541161332e576001613332565b6010545b876128d990919063ffffffff16565b61295390919063ffffffff16565b9050600061338c8461337e60006011541161336b57600261336f565b6011545b886128d990919063ffffffff16565b61295390919063ffffffff16565b9050600083828461339d919061474f565b6133a7919061474f565b905060006133bf60028561295390919063ffffffff16565b905060006133d68289613bd890919063ffffffff16565b905060004790506133e682613c22565b60006133fb8247613bd890919063ffffffff16565b905060006134248661341689856128d990919063ffffffff16565b61295390919063ffffffff16565b9050600061344d8761343f8b866128d990919063ffffffff16565b61295390919063ffffffff16565b9050600061346f8284613460919061474f565b85613bd890919063ffffffff16565b90506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516134b990614e9f565b60006040518083038185875af1925050503d80600081146134f6576040519150601f19603f3d011682016040523d82523d6000602084013e6134fb565b606091505b50509050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161354590614e9f565b60006040518083038185875af1925050503d8060008114613582576040519150601f19603f3d011682016040523d82523d6000602084013e613587565b606091505b50508091505061359788846137e0565b67016345785d8a000047111561363657600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135ed90614e9f565b60006040518083038185875af1925050503d806000811461362a576040519150601f19603f3d011682016040523d82523d6000602084013e61362f565b606091505b5050809150505b50505050505050505050505050506000601a60146101000a81548160ff021916908315150217905550565b61366961299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146136f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ed90614700565b60405180910390fd5b6001601a60166101000a81548160ff0219169083151502179055506001601a60156101000a81548160ff021916908315150217905550565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61380d30601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129a5565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161389696959493929190615496565b60606040518083038185885af11580156138b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138d991906154f7565b5050505050565b60008083118290613927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391e9190613fd7565b60405180910390fd5b50600083856139369190614f25565b9050809150509392505050565b600060095414801561395757506000600c54145b61397e57600954600a81905550600c54600d8190555060006009819055506000600c819055505b565b8061398e5761398d613943565b5b60008061399a84613e65565b915091506139f084600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd890919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a8581600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321d90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1a82600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321d90919063ffffffff16565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613bba91906141a0565b60405180910390a382613bd057613bcf613ed1565b5b505050505050565b6000613c1a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131b9565b905092915050565b6000600267ffffffffffffffff811115613c3f57613c3e614370565b5b604051908082528060200260200182016040528015613c6d5781602001602082028036833780820191505090505b5090503081600081518110613c8557613c84614b90565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d509190614c1c565b81600181518110613d6457613d63614b90565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613dcb30601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129a5565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e2f959493929190615608565b600060405180830381600087803b158015613e4957600080fd5b505af1158015613e5d573d6000803e3d6000fd5b505050505050565b6000806000613e7384613ee5565b90506000613e8085613f16565b90506000613ea982613e9b8589613bd890919063ffffffff16565b613bd890919063ffffffff16565b90506000613ec0838561321d90919063ffffffff16565b905081819550955050505050915091565b600a54600981905550600d54600c81905550565b6000613f0f6064613f01600954856128d990919063ffffffff16565b61295390919063ffffffff16565b9050919050565b6000613f406064613f32600c54856128d990919063ffffffff16565b61295390919063ffffffff16565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f81578082015181840152602081019050613f66565b60008484015250505050565b6000601f19601f8301169050919050565b6000613fa982613f47565b613fb38185613f52565b9350613fc3818560208601613f63565b613fcc81613f8d565b840191505092915050565b60006020820190508181036000830152613ff18184613f9e565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140388261400d565b9050919050565b6140488161402d565b811461405357600080fd5b50565b6000813590506140658161403f565b92915050565b6000819050919050565b61407e8161406b565b811461408957600080fd5b50565b60008135905061409b81614075565b92915050565b600080604083850312156140b8576140b7614003565b5b60006140c685828601614056565b92505060206140d78582860161408c565b9150509250929050565b60008115159050919050565b6140f6816140e1565b82525050565b600060208201905061411160008301846140ed565b92915050565b6000819050919050565b600061413c6141376141328461400d565b614117565b61400d565b9050919050565b600061414e82614121565b9050919050565b600061416082614143565b9050919050565b61417081614155565b82525050565b600060208201905061418b6000830184614167565b92915050565b61419a8161406b565b82525050565b60006020820190506141b56000830184614191565b92915050565b6000806000606084860312156141d4576141d3614003565b5b60006141e28682870161408c565b93505060206141f38682870161408c565b92505060406142048682870161408c565b9150509250925092565b60008060006060848603121561422757614226614003565b5b600061423586828701614056565b935050602061424686828701614056565b92505060406142578682870161408c565b9150509250925092565b600060ff82169050919050565b61427781614261565b82525050565b6000602082019050614292600083018461426e565b92915050565b60006142a38261400d565b9050919050565b6142b381614298565b82525050565b60006020820190506142ce60008301846142aa565b92915050565b6000602082840312156142ea576142e9614003565b5b60006142f884828501614056565b91505092915050565b61430a8161402d565b82525050565b60006020820190506143256000830184614301565b92915050565b6000806040838503121561434257614341614003565b5b600061435085828601614056565b925050602061436185828601614056565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6143a882613f8d565b810181811067ffffffffffffffff821117156143c7576143c6614370565b5b80604052505050565b60006143da613ff9565b90506143e6828261439f565b919050565b600067ffffffffffffffff82111561440657614405614370565b5b602082029050602081019050919050565b600080fd5b600061442f61442a846143eb565b6143d0565b9050808382526020820190506020840283018581111561445257614451614417565b5b835b8181101561447b57806144678882614056565b845260208401935050602081019050614454565b5050509392505050565b600082601f83011261449a5761449961436b565b5b81356144aa84826020860161441c565b91505092915050565b600067ffffffffffffffff8211156144ce576144cd614370565b5b602082029050602081019050919050565b60006144f26144ed846144b3565b6143d0565b9050808382526020820190506020840283018581111561451557614514614417565b5b835b8181101561453e578061452a888261408c565b845260208401935050602081019050614517565b5050509392505050565b600082601f83011261455d5761455c61436b565b5b813561456d8482602086016144df565b91505092915050565b6000806040838503121561458d5761458c614003565b5b600083013567ffffffffffffffff8111156145ab576145aa614008565b5b6145b785828601614485565b925050602083013567ffffffffffffffff8111156145d8576145d7614008565b5b6145e485828601614548565b9150509250929050565b6145f7816140e1565b811461460257600080fd5b50565b600081359050614614816145ee565b92915050565b6000806040838503121561463157614630614003565b5b600061463f85828601614056565b925050602061465085828601614605565b9150509250929050565b6000602082840312156146705761466f614003565b5b600061467e84828501614605565b91505092915050565b60006020828403121561469d5761469c614003565b5b60006146ab8482850161408c565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146ea602083613f52565b91506146f5826146b4565b602082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061475a8261406b565b91506147658361406b565b925082820190508082111561477d5761477c614720565b5b92915050565b7f203e203135250000000000000000000000000000000000000000000000000000600082015250565b60006147b9600683613f52565b91506147c482614783565b602082019050919050565b600060208201905081810360008301526147e8816147ac565b9050919050565b7f203e203130250000000000000000000000000000000000000000000000000000600082015250565b6000614825600683613f52565b9150614830826147ef565b602082019050919050565b6000602082019050818103600083015261485481614818565b9050919050565b7f203c20302e303525206f6620746f6b656e7320737475636b0000000000000000600082015250565b6000614891601883613f52565b915061489c8261485b565b602082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f3020616464726573730000000000000000000000000000000000000000000000600082015250565b60006148fd600983613f52565b9150614908826148c7565b602082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614969601a83613f52565b915061497482614933565b602082019050919050565b600060208201905081810360008301526149988161495c565b9050919050565b7f49434849474f206e6f7420616c6c6f7765640000000000000000000000000000600082015250565b60006149d5601283613f52565b91506149e08261499f565b602082019050919050565b60006020820190508181036000830152614a04816149c8565b9050919050565b600081519050614a1a81614075565b92915050565b600060208284031215614a3657614a35614003565b5b6000614a4484828501614a0b565b91505092915050565b6000604082019050614a626000830185614301565b614a6f6020830184614191565b9392505050565b600081519050614a85816145ee565b92915050565b600060208284031215614aa157614aa0614003565b5b6000614aaf84828501614a76565b91505092915050565b7f74726164696e6720697320616c72656164792061637469766500000000000000600082015250565b6000614aee601983613f52565b9150614af982614ab8565b602082019050919050565b60006020820190508181036000830152614b1d81614ae1565b9050919050565b7f6d6178203130302077616c6c6574730000000000000000000000000000000000600082015250565b6000614b5a600f83613f52565b9150614b6582614b24565b602082019050919050565b60006020820190508181036000830152614b8981614b4d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614bca8261406b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bfc57614bfb614720565b5b600182019050919050565b600081519050614c168161403f565b92915050565b600060208284031215614c3257614c31614003565b5b6000614c4084828501614c07565b91505092915050565b6000604082019050614c5e6000830185614301565b614c6b6020830184614301565b9392505050565b7f45544820726571756972656420666f72206c61756e6368000000000000000000600082015250565b6000614ca8601783613f52565b9150614cb382614c72565b602082019050919050565b60006020820190508181036000830152614cd781614c9b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f766564000000000000600082015250565b6000614d14601a83613f52565b9150614d1f82614cde565b602082019050919050565b60006020820190508181036000830152614d4381614d07565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614da6602683613f52565b9150614db182614d4a565b604082019050919050565b60006020820190508181036000830152614dd581614d99565b9050919050565b7f43616e206f6e6c792077697468647261772069662074726164696e672068617360008201527f6e27742073746172746564000000000000000000000000000000000000000000602082015250565b6000614e38602b83613f52565b9150614e4382614ddc565b604082019050919050565b60006020820190508181036000830152614e6781614e2b565b9050919050565b600081905092915050565b50565b6000614e89600083614e6e565b9150614e9482614e79565b600082019050919050565b6000614eaa82614e7c565b9150819050919050565b6000614ebf8261406b565b9150614eca8361406b565b9250828202614ed88161406b565b91508282048414831517614eef57614eee614720565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f308261406b565b9150614f3b8361406b565b925082614f4b57614f4a614ef6565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fb2602183613f52565b9150614fbd82614f56565b604082019050919050565b60006020820190508181036000830152614fe181614fa5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615044602483613f52565b915061504f82614fe8565b604082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150d6602283613f52565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615168602583613f52565b91506151738261510c565b604082019050919050565b600060208201905081810360008301526151978161515b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151fa602383613f52565b91506152058261519e565b604082019050919050565b60006020820190508181036000830152615229816151ed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061528c602983613f52565b915061529782615230565b604082019050919050565b600060208201905081810360008301526152bb8161527f565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006152f8601a83613f52565b9150615303826152c2565b602082019050919050565b60006020820190508181036000830152615327816152eb565b9050919050565b7f4578636565646564206d617820686f6c64000000000000000000000000000000600082015250565b6000615364601183613f52565b915061536f8261532e565b602082019050919050565b6000602082019050818103600083015261539381615357565b9050919050565b60006153a58261406b565b91506153b08361406b565b92508282039050818111156153c8576153c7614720565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615404601b83613f52565b915061540f826153ce565b602082019050919050565b60006020820190508181036000830152615433816153f7565b9050919050565b6000819050919050565b600061545f61545a6154558461543a565b614117565b61406b565b9050919050565b61546f81615444565b82525050565b600061548082614143565b9050919050565b61549081615475565b82525050565b600060c0820190506154ab6000830189614301565b6154b86020830188614191565b6154c56040830187615466565b6154d26060830186615466565b6154df6080830185615487565b6154ec60a0830184614191565b979650505050505050565b6000806000606084860312156155105761550f614003565b5b600061551e86828701614a0b565b935050602061552f86828701614a0b565b925050604061554086828701614a0b565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61557f8161402d565b82525050565b60006155918383615576565b60208301905092915050565b6000602082019050919050565b60006155b58261554a565b6155bf8185615555565b93506155ca83615566565b8060005b838110156155fb5781516155e28882615585565b97506155ed8361559d565b9250506001810190506155ce565b5085935050505092915050565b600060a08201905061561d6000830188614191565b61562a6020830187615466565b818103604083015261563c81866155aa565b905061564b6060830185614301565b6156586080830184614191565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207678e9edd3c827b24b25e092f5f2d487d6df07eb7c638d4884ed99196468633964736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102975760003560e01c8063906e9dd01161015a578063c8607952116100c1578063ea2f0b371161007a578063ea2f0b3714610a51578063ef10fb9714610a7a578063efcc52de14610ab7578063f2fde38b14610ae2578063f5648a4f14610b0b578063fb02f76f14610b225761029e565b8063c860795214610941578063cd03425c1461096c578063d8b6004014610997578063dc44b6a0146109c0578063dd62ed3e146109eb578063df4fd51514610a285761029e565b8063a5ece94111610113578063a5ece9411461081d578063a9059cbb14610848578063b62496f514610885578063bbc0c742146108c2578063c49b9a80146108ed578063c5d24189146109165761029e565b8063906e9dd01461070d57806395d89b41146107365780639a7a23d6146107615780639bd565d61461078a578063a073d37f146107b5578063a457c2d7146107e05761029e565b806349bd5a5e116101fe578063602bc62b116101b7578063602bc62b146105d557806370a08231146106005780638366e79a1461063d578063837917581461067a57806388790a68146106b75780638da5cb5b146106e25761029e565b806349bd5a5e146104d75780634a74bb021461050257806351f205e41461052d578063525fa81f146105445780635342acb41461056d578063557ed1ba146105aa5761029e565b806323b872dd1161025057806323b872dd146103b557806325519cf2146103f2578063313ce5671461041b5780633221c93f146104465780633950935114610471578063437823ec146104ae5761029e565b806306fdde03146102a3578063095ea7b3146102ce5780631694505e1461030b57806318160ddd146103365780631d865c3014610361578063200a692d1461038a5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b4b565b6040516102c59190613fd7565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906140a1565b610b88565b60405161030291906140fc565b60405180910390f35b34801561031757600080fd5b50610320610ba6565b60405161032d9190614176565b60405180910390f35b34801561034257600080fd5b5061034b610bcc565b60405161035891906141a0565b60405180910390f35b34801561036d57600080fd5b50610388600480360381019061038391906141bb565b610bdc565b005b34801561039657600080fd5b5061039f610ceb565b6040516103ac91906141a0565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d7919061420e565b610cf1565b6040516103e991906140fc565b60405180910390f35b3480156103fe57600080fd5b50610419600480360381019061041491906141bb565b610dca565b005b34801561042757600080fd5b50610430610ed9565b60405161043d919061427d565b60405180910390f35b34801561045257600080fd5b5061045b610ee2565b60405161046891906142b9565b60405180910390f35b34801561047d57600080fd5b50610498600480360381019061049391906140a1565b610f08565b6040516104a591906140fc565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d091906142d4565b610fbb565b005b3480156104e357600080fd5b506104ec6110ab565b6040516104f99190614310565b60405180910390f35b34801561050e57600080fd5b506105176110d1565b60405161052491906140fc565b60405180910390f35b34801561053957600080fd5b506105426110e4565b005b34801561055057600080fd5b5061056b600480360381019061056691906142d4565b6111db565b005b34801561057957600080fd5b50610594600480360381019061058f91906142d4565b61139d565b6040516105a191906140fc565b60405180910390f35b3480156105b657600080fd5b506105bf6113f3565b6040516105cc91906141a0565b60405180910390f35b3480156105e157600080fd5b506105ea6113fb565b6040516105f791906141a0565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906142d4565b611405565b60405161063491906141a0565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f919061432b565b61144e565b60405161067191906140fc565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190614576565b611700565b6040516106ae91906140fc565b60405180910390f35b3480156106c357600080fd5b506106cc611ba7565b6040516106d991906141a0565b60405180910390f35b3480156106ee57600080fd5b506106f7611bad565b6040516107049190614310565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f91906142d4565b611bd6565b005b34801561074257600080fd5b5061074b611e12565b6040516107589190613fd7565b60405180910390f35b34801561076d57600080fd5b506107886004803603810190610783919061461a565b611e4f565b005b34801561079657600080fd5b5061079f611f82565b6040516107ac91906142b9565b60405180910390f35b3480156107c157600080fd5b506107ca611fa8565b6040516107d791906141a0565b60405180910390f35b3480156107ec57600080fd5b50610807600480360381019061080291906140a1565b611fb2565b60405161081491906140fc565b60405180910390f35b34801561082957600080fd5b5061083261207f565b60405161083f91906142b9565b60405180910390f35b34801561085457600080fd5b5061086f600480360381019061086a91906140a1565b6120a5565b60405161087c91906140fc565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a791906142d4565b6120c3565b6040516108b991906140fc565b60405180910390f35b3480156108ce57600080fd5b506108d76120e3565b6040516108e491906140fc565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f919061465a565b6120f6565b005b34801561092257600080fd5b5061092b6121df565b60405161093891906141a0565b60405180910390f35b34801561094d57600080fd5b506109566121e5565b60405161096391906141a0565b60405180910390f35b34801561097857600080fd5b506109816121eb565b60405161098e91906141a0565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b99190614687565b6121f1565b005b3480156109cc57600080fd5b506109d5612290565b6040516109e291906141a0565b60405180910390f35b3480156109f757600080fd5b50610a126004803603810190610a0d919061432b565b612296565b604051610a1f91906141a0565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190614687565b61231d565b005b348015610a5d57600080fd5b50610a786004803603810190610a7391906142d4565b6123bc565b005b348015610a8657600080fd5b50610aa16004803603810190610a9c91906142d4565b6124ac565b604051610aae91906140fc565b60405180910390f35b348015610ac357600080fd5b50610acc6124cc565b604051610ad991906141a0565b60405180910390f35b348015610aee57600080fd5b50610b096004803603810190610b0491906142d4565b6124d2565b005b348015610b1757600080fd5b50610b20612693565b005b348015610b2e57600080fd5b50610b496004803603810190610b44919061461a565b6127e9565b005b60606040518060400160405280600681526020017f49434849474f0000000000000000000000000000000000000000000000000000815250905090565b6000610b9c610b9561299d565b84846129a5565b6001905092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000670de0b6b3a7640000905090565b610be461299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890614700565b60405180910390fd5b826012819055508160138190555080601481905550600f601454601354601254610c9b919061474f565b610ca5919061474f565b1115610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd906147cf565b60405180910390fd5b505050565b60125481565b6000610cfe848484612b6e565b610dbf84610d0a61299d565b610dba8560405180606001604052806028815260200161566360289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d7061299d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131b99092919063ffffffff16565b6129a5565b600190509392505050565b610dd261299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690614700565b60405180910390fd5b82600f819055508160108190555080601181905550600a601154601054600f54610e89919061474f565b610e93919061474f565b1115610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb9061483b565b60405180910390fd5b505050565b60006009905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610fb1610f1561299d565b84610fac8560076000610f2661299d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321d90919063ffffffff16565b6129a5565b6001905092915050565b610fc361299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790614700565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60159054906101000a900460ff1681565b6110ec61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117090614700565b60405180910390fd5b600061118430611405565b90506601c6bf526340008110156111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c7906148a7565b60405180910390fd5b6111d861327b565b50565b6111e361299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790614700565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690614913565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061145861299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90614700565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061497f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b9906149eb565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115fd9190614310565b602060405180830381865afa15801561161a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163e9190614a20565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161167b929190614a4d565b6020604051808303816000875af115801561169a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116be9190614a8b565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e43884826040516116f1929190614a4d565b60405180910390a15092915050565b600061170a61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614700565b60405180910390fd5b601a60169054906101000a900460ff16156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614b04565b60405180910390fd5b606483511061182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290614b70565b60405180910390fd5b60005b835181101561189557600084828151811061184c5761184b614b90565b5b60200260200101519050600084838151811061186b5761186a614b90565b5b60200260200101519050611880338383612b6e565b5050808061188d90614bbf565b91505061182e565b5061189e613661565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506118c28160016127e9565b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061193830601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a76400006129a5565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a79190614c1c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a329190614c1c565b6040518363ffffffff1660e01b8152600401611a4f929190614c49565b6020604051808303816000875af1158015611a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a929190614c1c565b601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611aff601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016127e9565b611b2c601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161372e565b60004711611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6690614cbe565b60405180910390fd5b611b81611b7b30611405565b476137e0565b6001601a60156101000a81548160ff021916908315150217905550600191505092915050565b60135481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bde61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6290614700565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614913565b60405180910390fd5b600060086000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600681526020017f49434849474f0000000000000000000000000000000000000000000000000000815250905090565b611e5761299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90614700565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90614d2a565b60405180910390fd5b611f7e828261372e565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b6000612075611fbf61299d565b846120708560405180606001604052806025815260200161568b6025913960076000611fe961299d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131b99092919063ffffffff16565b6129a5565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006120b96120b261299d565b8484612b6e565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b601a60169054906101000a900460ff1681565b6120fe61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614700565b60405180910390fd5b80601a60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516121d491906140fc565b60405180910390a150565b60115481565b60145481565b60155481565b6121f961299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90614700565b60405180910390fd5b8060158190555050565b60105481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61232561299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a990614700565b60405180910390fd5b8060188190555050565b6123c461299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244890614700565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60166020528060005260406000206000915054906101000a900460ff1681565b600f5481565b6124da61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255e90614700565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cd90614dbc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61269b61299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90614700565b60405180910390fd5b601a60169054906101000a900460ff1615612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276f90614e4e565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161279e90614e9f565b60006040518083038185875af1925050503d80600081146127db576040519150601f19603f3d011682016040523d82523d6000602084013e6127e0565b606091505b50508091505050565b6127f161299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614700565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008083036128eb576000905061294d565b600082846128f99190614eb4565b90508284826129089190614f25565b14612948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293f90614fc8565b60405180910390fd5b809150505b92915050565b600061299583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138e0565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b9061505a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7a906150ec565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b6191906141a0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd49061517e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4390615210565b60405180910390fd5b60008111612c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c86906152a2565b60405180910390fd5b601a60169054906101000a900460ff16612d8457600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d445750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a9061530e565b60405180910390fd5b5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e3b576000612de083611405565b9050601554612df8838361321d90919063ffffffff16565b1115612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e309061537a565b60405180910390fd5b505b6000612e4630611405565b905060006018548210159050601a60149054906101000a900460ff16158015612e7b5750601a60159054906101000a900460ff165b8015612eb157506000612eaf601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611405565b115b8015612f075750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f5d5750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fb25750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612fbb5750805b15612fc957612fc861327b565b5b600060019050600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130705750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561308657600090506003600e819055506131a5565b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561310c576130e0613943565b600f546009819055506011546010546130f9919061474f565b600c819055506001600e819055506131a4565b601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561319257613166613943565b60125460098190555060145460135461317f919061474f565b600c819055506002600e819055506131a3565b61319a613943565b6003600e819055505b5b5b6131b186868684613980565b505050505050565b6000838311158290613201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f89190613fd7565b60405180910390fd5b5060008385613210919061539a565b9050809150509392505050565b600080828461322c919061474f565b905083811015613271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132689061541a565b60405180910390fd5b8091505092915050565b6001601a60146101000a81548160ff02191690831515021790555060006132a130611405565b90506000601154601054600f546132b8919061474f565b6132c2919061474f565b9050600081116132d35760066132d5565b805b90506000613312826133046000600f54116132f15760036132f5565b600f545b866128d990919063ffffffff16565b61295390919063ffffffff16565b9050600061334f8361334160006010541161332e576001613332565b6010545b876128d990919063ffffffff16565b61295390919063ffffffff16565b9050600061338c8461337e60006011541161336b57600261336f565b6011545b886128d990919063ffffffff16565b61295390919063ffffffff16565b9050600083828461339d919061474f565b6133a7919061474f565b905060006133bf60028561295390919063ffffffff16565b905060006133d68289613bd890919063ffffffff16565b905060004790506133e682613c22565b60006133fb8247613bd890919063ffffffff16565b905060006134248661341689856128d990919063ffffffff16565b61295390919063ffffffff16565b9050600061344d8761343f8b866128d990919063ffffffff16565b61295390919063ffffffff16565b9050600061346f8284613460919061474f565b85613bd890919063ffffffff16565b90506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516134b990614e9f565b60006040518083038185875af1925050503d80600081146134f6576040519150601f19603f3d011682016040523d82523d6000602084013e6134fb565b606091505b50509050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161354590614e9f565b60006040518083038185875af1925050503d8060008114613582576040519150601f19603f3d011682016040523d82523d6000602084013e613587565b606091505b50508091505061359788846137e0565b67016345785d8a000047111561363657600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135ed90614e9f565b60006040518083038185875af1925050503d806000811461362a576040519150601f19603f3d011682016040523d82523d6000602084013e61362f565b606091505b5050809150505b50505050505050505050505050506000601a60146101000a81548160ff021916908315150217905550565b61366961299d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146136f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ed90614700565b60405180910390fd5b6001601a60166101000a81548160ff0219169083151502179055506001601a60156101000a81548160ff021916908315150217905550565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61380d30601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129a5565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161389696959493929190615496565b60606040518083038185885af11580156138b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138d991906154f7565b5050505050565b60008083118290613927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391e9190613fd7565b60405180910390fd5b50600083856139369190614f25565b9050809150509392505050565b600060095414801561395757506000600c54145b61397e57600954600a81905550600c54600d8190555060006009819055506000600c819055505b565b8061398e5761398d613943565b5b60008061399a84613e65565b915091506139f084600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd890919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a8581600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321d90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1a82600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321d90919063ffffffff16565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613bba91906141a0565b60405180910390a382613bd057613bcf613ed1565b5b505050505050565b6000613c1a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131b9565b905092915050565b6000600267ffffffffffffffff811115613c3f57613c3e614370565b5b604051908082528060200260200182016040528015613c6d5781602001602082028036833780820191505090505b5090503081600081518110613c8557613c84614b90565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d509190614c1c565b81600181518110613d6457613d63614b90565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613dcb30601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129a5565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e2f959493929190615608565b600060405180830381600087803b158015613e4957600080fd5b505af1158015613e5d573d6000803e3d6000fd5b505050505050565b6000806000613e7384613ee5565b90506000613e8085613f16565b90506000613ea982613e9b8589613bd890919063ffffffff16565b613bd890919063ffffffff16565b90506000613ec0838561321d90919063ffffffff16565b905081819550955050505050915091565b600a54600981905550600d54600c81905550565b6000613f0f6064613f01600954856128d990919063ffffffff16565b61295390919063ffffffff16565b9050919050565b6000613f406064613f32600c54856128d990919063ffffffff16565b61295390919063ffffffff16565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f81578082015181840152602081019050613f66565b60008484015250505050565b6000601f19601f8301169050919050565b6000613fa982613f47565b613fb38185613f52565b9350613fc3818560208601613f63565b613fcc81613f8d565b840191505092915050565b60006020820190508181036000830152613ff18184613f9e565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140388261400d565b9050919050565b6140488161402d565b811461405357600080fd5b50565b6000813590506140658161403f565b92915050565b6000819050919050565b61407e8161406b565b811461408957600080fd5b50565b60008135905061409b81614075565b92915050565b600080604083850312156140b8576140b7614003565b5b60006140c685828601614056565b92505060206140d78582860161408c565b9150509250929050565b60008115159050919050565b6140f6816140e1565b82525050565b600060208201905061411160008301846140ed565b92915050565b6000819050919050565b600061413c6141376141328461400d565b614117565b61400d565b9050919050565b600061414e82614121565b9050919050565b600061416082614143565b9050919050565b61417081614155565b82525050565b600060208201905061418b6000830184614167565b92915050565b61419a8161406b565b82525050565b60006020820190506141b56000830184614191565b92915050565b6000806000606084860312156141d4576141d3614003565b5b60006141e28682870161408c565b93505060206141f38682870161408c565b92505060406142048682870161408c565b9150509250925092565b60008060006060848603121561422757614226614003565b5b600061423586828701614056565b935050602061424686828701614056565b92505060406142578682870161408c565b9150509250925092565b600060ff82169050919050565b61427781614261565b82525050565b6000602082019050614292600083018461426e565b92915050565b60006142a38261400d565b9050919050565b6142b381614298565b82525050565b60006020820190506142ce60008301846142aa565b92915050565b6000602082840312156142ea576142e9614003565b5b60006142f884828501614056565b91505092915050565b61430a8161402d565b82525050565b60006020820190506143256000830184614301565b92915050565b6000806040838503121561434257614341614003565b5b600061435085828601614056565b925050602061436185828601614056565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6143a882613f8d565b810181811067ffffffffffffffff821117156143c7576143c6614370565b5b80604052505050565b60006143da613ff9565b90506143e6828261439f565b919050565b600067ffffffffffffffff82111561440657614405614370565b5b602082029050602081019050919050565b600080fd5b600061442f61442a846143eb565b6143d0565b9050808382526020820190506020840283018581111561445257614451614417565b5b835b8181101561447b57806144678882614056565b845260208401935050602081019050614454565b5050509392505050565b600082601f83011261449a5761449961436b565b5b81356144aa84826020860161441c565b91505092915050565b600067ffffffffffffffff8211156144ce576144cd614370565b5b602082029050602081019050919050565b60006144f26144ed846144b3565b6143d0565b9050808382526020820190506020840283018581111561451557614514614417565b5b835b8181101561453e578061452a888261408c565b845260208401935050602081019050614517565b5050509392505050565b600082601f83011261455d5761455c61436b565b5b813561456d8482602086016144df565b91505092915050565b6000806040838503121561458d5761458c614003565b5b600083013567ffffffffffffffff8111156145ab576145aa614008565b5b6145b785828601614485565b925050602083013567ffffffffffffffff8111156145d8576145d7614008565b5b6145e485828601614548565b9150509250929050565b6145f7816140e1565b811461460257600080fd5b50565b600081359050614614816145ee565b92915050565b6000806040838503121561463157614630614003565b5b600061463f85828601614056565b925050602061465085828601614605565b9150509250929050565b6000602082840312156146705761466f614003565b5b600061467e84828501614605565b91505092915050565b60006020828403121561469d5761469c614003565b5b60006146ab8482850161408c565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146ea602083613f52565b91506146f5826146b4565b602082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061475a8261406b565b91506147658361406b565b925082820190508082111561477d5761477c614720565b5b92915050565b7f203e203135250000000000000000000000000000000000000000000000000000600082015250565b60006147b9600683613f52565b91506147c482614783565b602082019050919050565b600060208201905081810360008301526147e8816147ac565b9050919050565b7f203e203130250000000000000000000000000000000000000000000000000000600082015250565b6000614825600683613f52565b9150614830826147ef565b602082019050919050565b6000602082019050818103600083015261485481614818565b9050919050565b7f203c20302e303525206f6620746f6b656e7320737475636b0000000000000000600082015250565b6000614891601883613f52565b915061489c8261485b565b602082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f3020616464726573730000000000000000000000000000000000000000000000600082015250565b60006148fd600983613f52565b9150614908826148c7565b602082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614969601a83613f52565b915061497482614933565b602082019050919050565b600060208201905081810360008301526149988161495c565b9050919050565b7f49434849474f206e6f7420616c6c6f7765640000000000000000000000000000600082015250565b60006149d5601283613f52565b91506149e08261499f565b602082019050919050565b60006020820190508181036000830152614a04816149c8565b9050919050565b600081519050614a1a81614075565b92915050565b600060208284031215614a3657614a35614003565b5b6000614a4484828501614a0b565b91505092915050565b6000604082019050614a626000830185614301565b614a6f6020830184614191565b9392505050565b600081519050614a85816145ee565b92915050565b600060208284031215614aa157614aa0614003565b5b6000614aaf84828501614a76565b91505092915050565b7f74726164696e6720697320616c72656164792061637469766500000000000000600082015250565b6000614aee601983613f52565b9150614af982614ab8565b602082019050919050565b60006020820190508181036000830152614b1d81614ae1565b9050919050565b7f6d6178203130302077616c6c6574730000000000000000000000000000000000600082015250565b6000614b5a600f83613f52565b9150614b6582614b24565b602082019050919050565b60006020820190508181036000830152614b8981614b4d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614bca8261406b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bfc57614bfb614720565b5b600182019050919050565b600081519050614c168161403f565b92915050565b600060208284031215614c3257614c31614003565b5b6000614c4084828501614c07565b91505092915050565b6000604082019050614c5e6000830185614301565b614c6b6020830184614301565b9392505050565b7f45544820726571756972656420666f72206c61756e6368000000000000000000600082015250565b6000614ca8601783613f52565b9150614cb382614c72565b602082019050919050565b60006020820190508181036000830152614cd781614c9b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f766564000000000000600082015250565b6000614d14601a83613f52565b9150614d1f82614cde565b602082019050919050565b60006020820190508181036000830152614d4381614d07565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614da6602683613f52565b9150614db182614d4a565b604082019050919050565b60006020820190508181036000830152614dd581614d99565b9050919050565b7f43616e206f6e6c792077697468647261772069662074726164696e672068617360008201527f6e27742073746172746564000000000000000000000000000000000000000000602082015250565b6000614e38602b83613f52565b9150614e4382614ddc565b604082019050919050565b60006020820190508181036000830152614e6781614e2b565b9050919050565b600081905092915050565b50565b6000614e89600083614e6e565b9150614e9482614e79565b600082019050919050565b6000614eaa82614e7c565b9150819050919050565b6000614ebf8261406b565b9150614eca8361406b565b9250828202614ed88161406b565b91508282048414831517614eef57614eee614720565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f308261406b565b9150614f3b8361406b565b925082614f4b57614f4a614ef6565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fb2602183613f52565b9150614fbd82614f56565b604082019050919050565b60006020820190508181036000830152614fe181614fa5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615044602483613f52565b915061504f82614fe8565b604082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150d6602283613f52565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615168602583613f52565b91506151738261510c565b604082019050919050565b600060208201905081810360008301526151978161515b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151fa602383613f52565b91506152058261519e565b604082019050919050565b60006020820190508181036000830152615229816151ed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061528c602983613f52565b915061529782615230565b604082019050919050565b600060208201905081810360008301526152bb8161527f565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006152f8601a83613f52565b9150615303826152c2565b602082019050919050565b60006020820190508181036000830152615327816152eb565b9050919050565b7f4578636565646564206d617820686f6c64000000000000000000000000000000600082015250565b6000615364601183613f52565b915061536f8261532e565b602082019050919050565b6000602082019050818103600083015261539381615357565b9050919050565b60006153a58261406b565b91506153b08361406b565b92508282039050818111156153c8576153c7614720565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615404601b83613f52565b915061540f826153ce565b602082019050919050565b60006020820190508181036000830152615433816153f7565b9050919050565b6000819050919050565b600061545f61545a6154558461543a565b614117565b61406b565b9050919050565b61546f81615444565b82525050565b600061548082614143565b9050919050565b61549081615475565b82525050565b600060c0820190506154ab6000830189614301565b6154b86020830188614191565b6154c56040830187615466565b6154d26060830186615466565b6154df6080830185615487565b6154ec60a0830184614191565b979650505050505050565b6000806000606084860312156155105761550f614003565b5b600061551e86828701614a0b565b935050602061552f86828701614a0b565b925050604061554086828701614a0b565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61557f8161402d565b82525050565b60006155918383615576565b60208301905092915050565b6000602082019050919050565b60006155b58261554a565b6155bf8185615555565b93506155ca83615566565b8060005b838110156155fb5781516155e28882615585565b97506155ed8361559d565b9250506001810190506155ce565b5085935050505092915050565b600060a08201905061561d6000830188614191565b61562a6020830187615466565b818103604083015261563c81866155aa565b905061564b6060830185614301565b6156586080830184614191565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207678e9edd3c827b24b25e092f5f2d487d6df07eb7c638d4884ed99196468633964736f6c63430008110033
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.