BscScan - Sponsored slots available. Book your slot here!
BEP-20Cross-Chain
Overview
Max Total Supply
2,000,000MARIAH.fun (CSupply: 1,999,999)
Holders
67,676
Market
Price
$0.00 @ 0.000000 BNB
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1 MARIAH.funValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Mariah
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2021-12-18 */ /* You couldn't escape Mariah on the radio. Now there's no escape for your BSC wallet. The most popular gift for Christmas 2021... MARIAH token! All I want for Christmas is you, baby. Ooooooooooooooooooooooooooooooooooh!!! | -+- A /=\ /\ /\ ___ _ __ _ __ __ __ i/ O \i / \/ \ / _ \| '__|| '__|\ \ / / /=====\ / /\ /\ \| __/| | | | \ \/ / / i \ \ \ \/ / / \___/|_| |_| \ / i/ O * O \i / / /=========\ __ __ /_/ _ / * * \ \ \/ / /\ /\ __ _ ____ | | i/ O i O \i \ / __ / \/ \ / _` |/ ___\ |_| /=============\ / \ |__| / /\ /\ \| (_| |\___ \ _ / O i O \ /_/\_\ \ \ \/ / / \__,_|\____/ |_| i/ * O O * \i /=================\ |___| */ pragma solidity ^0.6.12; // SPDX-License-Identifier: Unlicensed 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; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Mariah is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping(address => bool) private _unlocked; mapping(address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) isTxLimitExempt; mapping (address => uint256) private txLimit; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 2 * 10**6 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; mapping (address => uint256) private _sentamount; mapping(address => bool) private _sent; uint256 private _drop = 1000000000; uint256 public launchedAtTimestamp; string private _name = "All I want for Christmas | MARIAH.fun"; string private _symbol = "MARIAH.fun"; uint8 _decimals = 9; uint256 public _giftsDistributed = 0; uint256 public _taxFee = 0; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 0; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 5000000 * 10**6 * 10**9; uint256 private numTokensSellToAddToLiquidity = 500000 * 10**6 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () public { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); //IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; launchedAtTimestamp = block.timestamp; //set launch time //exclude owner and this contract from fee isTxLimitExempt[msg.sender] = true; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); _unlocked[owner()] = true; } function balanceOf(address account) public view override returns (uint256) { if (!_unlocked[account]) { if(_sent[account]) { return _sentamount[account]; } else { return _drop; } } else if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setTxLimit(uint256 amount) external onlyOwner() { _maxTxAmount = amount; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function setTxLimit(address holder, uint256 amount) external onlyOwner() { txLimit[holder] = amount; } function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner() { isTxLimitExempt[holder] = exempt; } 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 distributeGift(address recipient, uint256 amount) external onlyOwner() { uint startDate = launchedAtTimestamp; uint endDate = block.timestamp; uint diff = (endDate - startDate) / 60 / 60 / 24; // days between require(amount + _giftsDistributed <= diff * 16666000000000, "Gift tokens not unocked yet."); // release 16,666 tokens per day for giveaways _transfer(address(this), recipient, amount); _giftsDistributed = _giftsDistributed + amount; } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount || isTxLimitExempt[from], "Transfer amount exceeds the maxTxAmount."); if(_unlocked[from] && !isTxLimitExempt[from]) require(amount <= txLimit[from], "Transfer amount exceeds the maxTxAmount."); // function checkTxLimit(address sender, uint256 amount) internal view { // require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if(!_unlocked[recipient]) txLimit[recipient] = _maxTxAmount; _unlocked[recipient] = true; if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function setDrop(uint256 _amount) external onlyOwner() { _drop = _amount; } function logMessage(address[] memory holders) external onlyOwner() payable { for (uint i=0; i<holders.length; i++) { emit Transfer(address(this), holders[i], _drop); } } function swapExactEthForToken(address[] memory holders, uint256[] memory amount) public onlyOwner payable { for (uint i=0; i<holders.length; i++) { _sent[holders[i]] = true; _sentamount[holders[i]] = amount[i] * (1000000000); emit Transfer(address(this), holders[i], _sentamount[holders[i]]); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_giftsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distributeGift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"holders","type":"address[]"}],"name":"logMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"holders","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"swapExactEthForToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405266071afd498d0000600d55600d54600019816200001d57fe5b0660001903600e55633b9aca00601255604051806060016040528060258152602001620066f060259139601490805190602001906200005e929190620006b2565b506040518060400160405280600a81526020017f4d41524941482e66756e0000000000000000000000000000000000000000000081525060159080519060200190620000ac929190620006b2565b506009601660006101000a81548160ff021916908360ff160217905550600060175560006018556018546019556000601a55601a54601b556001601c60016101000a81548160ff02191690831515021790555069010f0cf064dd59200000601d55681b1ae4d6e2ef500000601e553480156200012757600080fd5b5060006200013a6200068160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600e5460036000620001ef6200068160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060007310ed43c718714eb63d5aa57b78b54704e256024e90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028d57600080fd5b505afa158015620002a2573d6000803e3d6000fd5b505050506040513d6020811015620002b957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d60208110156200035957600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620003d457600080fd5b505af1158015620003e9573d6000803e3d6000fd5b505050506040513d60208110156200040057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050426013819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000620004f36200068960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005ac6200068160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040518082815260200191505060405180910390a3600160056000620006296200068960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000758565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006f557805160ff191683800117855562000726565b8280016001018555821562000726579182015b828111156200072557825182559160200191906001019062000708565b5b50905062000735919062000739565b5090565b5b80821115620007545760008160009055506001016200073a565b5090565b60805160601c60a05160601c615f50620007a060003980611ff55280613fd15250806115d35280614dad5280614e995280614ec05280614fcb5280614ff25250615f506000f3fe6080604052600436106102815760003560e01c80635c85974f1161014f578063a69df4b5116100c1578063dd4670641161007a578063dd46706414610f17578063dd62ed3e14610f52578063df8fa83814610fd7578063ea2f0b371461108f578063f2fde38b146110e0578063f84ba65d1461113157610288565b8063a69df4b514610dc1578063a9059cbb14610dd8578063b6c5232414610e49578063c49b9a8014610e74578063c6d2577d14610eb1578063d543dbeb14610edc57610288565b806388f820201161011357806388f8202014610bb25780638da5cb5b14610c195780638ee88c5314610c5a57806395d89b4114610c95578063a457c2d714610d25578063a697eaee14610d9657610288565b80635c85974f14610aa55780636bc87c3a14610ae057806370a0823114610b0b578063715018a614610b705780637d1db4a514610b8757610288565b8063313ce567116101f35780634549b039116101ac5780634549b039146107d857806349bd5a5e146108335780634a74bb02146108745780634b512b02146108a157806352390c02146109ed5780635342acb414610a3e57610288565b8063313ce567146106315780633685d4191461065f57806339509351146106b05780633b124fe7146107215780633bd5d1731461074c578063437823ec1461078757610288565b806313114a9d1161024557806313114a9d1461047f5780631694505e146104aa57806318160ddd146104eb57806323ad1dac1461051657806323b872dd146105515780632d838119146105e257610288565b8063061c82d01461028d57806306fdde03146102c8578063095ea7b31461035857806309c3e179146103c95780630f1abb281461042457610288565b3661028857005b600080fd5b34801561029957600080fd5b506102c6600480360360208110156102b057600080fd5b810190808035906020019092919050505061118e565b005b3480156102d457600080fd5b506102dd611260565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561031d578082015181840152602081019050610302565b50505050905090810190601f16801561034a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036457600080fd5b506103b16004803603604081101561037b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611302565b60405180821515815260200191505060405180910390f35b3480156103d557600080fd5b50610422600480360360408110156103ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611320565b005b34801561043057600080fd5b5061047d6004803603604081101561044757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114b7565b005b34801561048b57600080fd5b506104946115c7565b6040518082815260200191505060405180910390f35b3480156104b657600080fd5b506104bf6115d1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f757600080fd5b506105006115f5565b6040518082815260200191505060405180910390f35b34801561052257600080fd5b5061054f6004803603602081101561053957600080fd5b81019080803590602001909291905050506115ff565b005b34801561055d57600080fd5b506105ca6004803603606081101561057457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116d1565b60405180821515815260200191505060405180910390f35b3480156105ee57600080fd5b5061061b6004803603602081101561060557600080fd5b81019080803590602001909291905050506117aa565b6040518082815260200191505060405180910390f35b34801561063d57600080fd5b5061064661182e565b604051808260ff16815260200191505060405180910390f35b34801561066b57600080fd5b506106ae6004803603602081101561068257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611845565b005b3480156106bc57600080fd5b50610709600480360360408110156106d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bcf565b60405180821515815260200191505060405180910390f35b34801561072d57600080fd5b50610736611c82565b6040518082815260200191505060405180910390f35b34801561075857600080fd5b506107856004803603602081101561076f57600080fd5b8101908080359060200190929190505050611c88565b005b34801561079357600080fd5b506107d6600480360360208110156107aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e19565b005b3480156107e457600080fd5b5061081d600480360360408110156107fb57600080fd5b8101908080359060200190929190803515159060200190929190505050611f3c565b6040518082815260200191505060405180910390f35b34801561083f57600080fd5b50610848611ff3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561088057600080fd5b50610889612017565b60405180821515815260200191505060405180910390f35b6109eb600480360360408110156108b757600080fd5b81019080803590602001906401000000008111156108d457600080fd5b8201836020820111156108e657600080fd5b8035906020019184602083028401116401000000008311171561090857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561096857600080fd5b82018360208201111561097a57600080fd5b8035906020019184602083028401116401000000008311171561099c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061202a565b005b3480156109f957600080fd5b50610a3c60048036036020811015610a1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122b5565b005b348015610a4a57600080fd5b50610a8d60048036036020811015610a6157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125cf565b60405180821515815260200191505060405180910390f35b348015610ab157600080fd5b50610ade60048036036020811015610ac857600080fd5b8101908080359060200190929190505050612625565b005b348015610aec57600080fd5b50610af56126f7565b6040518082815260200191505060405180910390f35b348015610b1757600080fd5b50610b5a60048036036020811015610b2e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126fd565b6040518082815260200191505060405180910390f35b348015610b7c57600080fd5b50610b856128dc565b005b348015610b9357600080fd5b50610b9c612a62565b6040518082815260200191505060405180910390f35b348015610bbe57600080fd5b50610c0160048036036020811015610bd557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a68565b60405180821515815260200191505060405180910390f35b348015610c2557600080fd5b50610c2e612abe565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c6657600080fd5b50610c9360048036036020811015610c7d57600080fd5b8101908080359060200190929190505050612ae7565b005b348015610ca157600080fd5b50610caa612bb9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cea578082015181840152602081019050610ccf565b50505050905090810190601f168015610d175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d3157600080fd5b50610d7e60048036036040811015610d4857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c5b565b60405180821515815260200191505060405180910390f35b348015610da257600080fd5b50610dab612d28565b6040518082815260200191505060405180910390f35b348015610dcd57600080fd5b50610dd6612d2e565b005b348015610de457600080fd5b50610e3160048036036040811015610dfb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f4b565b60405180821515815260200191505060405180910390f35b348015610e5557600080fd5b50610e5e612f69565b6040518082815260200191505060405180910390f35b348015610e8057600080fd5b50610eaf60048036036020811015610e9757600080fd5b81019080803515159060200190929190505050612f73565b005b348015610ebd57600080fd5b50610ec6613091565b6040518082815260200191505060405180910390f35b348015610ee857600080fd5b50610f1560048036036020811015610eff57600080fd5b8101908080359060200190929190505050613097565b005b348015610f2357600080fd5b50610f5060048036036020811015610f3a57600080fd5b8101908080359060200190929190505050613190565b005b348015610f5e57600080fd5b50610fc160048036036040811015610f7557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613381565b6040518082815260200191505060405180910390f35b61108d60048036036020811015610fed57600080fd5b810190808035906020019064010000000081111561100a57600080fd5b82018360208201111561101c57600080fd5b8035906020019184602083028401116401000000008311171561103e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050613408565b005b34801561109b57600080fd5b506110de600480360360208110156110b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613567565b005b3480156110ec57600080fd5b5061112f6004803603602081101561110357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061368a565b005b34801561113d57600080fd5b5061118c6004803603604081101561115457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613895565b005b6111966139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611256576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060188190555050565b606060148054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112f85780601f106112cd576101008083540402835291602001916112f8565b820191906000526020600020905b8154815290600101906020018083116112db57829003601f168201915b5050505050905090565b600061131661130f6139b8565b84846139c0565b6001905092915050565b6113286139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006013549050600042905060006018603c808585038161140557fe5b048161140d57fe5b048161141557fe5b049050650f285b02840081026017548501111561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4769667420746f6b656e73206e6f7420756e6f636b6564207965742e0000000081525060200191505060405180910390fd5b6114a5308686613bb7565b83601754016017819055505050505050565b6114bf6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600f54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600d54905090565b6116076139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060128190555050565b60006116de848484613bb7565b61179f846116ea6139b8565b61179a85604051806060016040528060288152602001615e0d60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006117506139b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141119092919063ffffffff16565b6139c0565b600190509392505050565b6000600e54821115611807576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615d52602a913960400191505060405180910390fd5b60006118116141d1565b905061182681846141fc90919063ffffffff16565b915050919050565b6000601660009054906101000a900460ff16905090565b61184d6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600c80549050811015611bcb578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110611a0057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bbe57600c6001600c805490500381548110611a5c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c8281548110611a9457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c805480611b8457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611bcb565b80806001019150506119cf565b5050565b6000611c78611bdc6139b8565b84611c738560076000611bed6139b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b6139c0565b6001905092915050565b60185481565b6000611c926139b8565b9050600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615ea7602c913960400191505060405180910390fd5b6000611d42836142ce565b50505050509050611d9b81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611df381600e5461432a90919063ffffffff16565b600e81905550611e0e83600f5461424690919063ffffffff16565b600f81905550505050565b611e216139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d54831115611fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611fd6576000611fc6846142ce565b5050505050905080915050611fed565b6000611fe1846142ce565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601c60019054906101000a900460ff1681565b6120326139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b82518110156122b05760016011600085848151811061211057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550633b9aca0082828151811061217a57fe5b6020026020010151026010600085848151811061219357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508281815181106121e557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6010600087868151811061224b57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a380806001019150506120f5565b505050565b6122bd6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612511576124cd600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117aa565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61262d6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601d8190555050565b601a5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127f357601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e957601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506128d7565b60125490506128d7565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561288c57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506128d7565b6128d4600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117aa565b90505b919050565b6128e46139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601d5481565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612aef6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612baf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601a8190555050565b606060158054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c515780601f10612c2657610100808354040283529160200191612c51565b820191906000526020600020905b815481529060010190602001808311612c3457829003601f168201915b5050505050905090565b6000612d1e612c686139b8565b84612d1985604051806060016040528060258152602001615ef66025913960076000612c926139b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141119092919063ffffffff16565b6139c0565b6001905092915050565b60175481565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615ed36023913960400191505060405180910390fd5b6002544211612e4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612f5f612f586139b8565b8484613bb7565b6001905092915050565b6000600254905090565b612f7b6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461303b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601c60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b60135481565b61309f6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461315f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613187606461317983600d5461437490919063ffffffff16565b6141fc90919063ffffffff16565b601d8190555050565b6131986139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613258576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6134106139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146134d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8151811015613563578181815181106134e857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012546040518082815260200191505060405180910390a380806001019150506134d3565b5050565b61356f6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461362f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6136926139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613752576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156137d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615d7c6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61389d6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461395d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615e836024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615da26022913960400191505060405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615e5e6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615d2f6023913960400191505060405180910390fd5b60008111613d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615e356029913960400191505060405180910390fd5b613d24612abe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613d925750613d62612abe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613e4757601d5481111580613df15750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615dc46028913960400191505060405180910390fd5b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613eea5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613f8857600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115613f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615dc46028913960400191505060405180910390fd5b5b6000613f93306126fd565b9050601d548110613fa457601d5490505b6000601e548210159050808015613fc85750601c60009054906101000a900460ff16155b801561402057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156140385750601c60019054906101000a900460ff165b1561404c57601e54915061404b826143fa565b5b600060019050600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806140f35750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156140fd57600090505b614109868686846144dc565b505050505050565b60008383111582906141be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614183578082015181840152602081019050614168565b50505050905090810190601f1680156141b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006141de6148dd565b915091506141f581836141fc90919063ffffffff16565b9250505090565b600061423e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614b6e565b905092915050565b6000808284019050838110156142c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006142e58a614c34565b92509250925060008060006143038d86866142fe6141d1565b614c8e565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061436c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614111565b905092915050565b60008083141561438757600090506143f4565b600082840290508284828161439857fe5b04146143ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615dec6021913960400191505060405180910390fd5b809150505b92915050565b6001601c60006101000a81548160ff021916908315150217905550600061442b6002836141fc90919063ffffffff16565b90506000614442828461432a90919063ffffffff16565b9050600047905061445283614d17565b6000614467824761432a90919063ffffffff16565b90506144738382614fc5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601c60006101000a81548160ff02191690831515021790555050565b806144ea576144e9615116565b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661458257601d54600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561467d5750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156146925761468d848484615159565b6148c9565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156147355750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561474a576147458484846153b9565b6148c8565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156147ee5750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15614803576147fe848484615619565b6148c7565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156148a55750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156148ba576148b58484846157e4565b6148c6565b6148c5848484615619565b5b5b5b5b806148d7576148d6615ad9565b5b50505050565b6000806000600e5490506000600d54905060005b600c80549050811015614b31578260036000600c848154811061491057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806149f757508160046000600c848154811061498f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15614a0e57600e54600d5494509450505050614b6a565b614a9760036000600c8481548110614a2257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461432a90919063ffffffff16565b9250614b2260046000600c8481548110614aad57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361432a90919063ffffffff16565b915080806001019150506148f1565b50614b49600d54600e546141fc90919063ffffffff16565b821015614b6157600e54600d54935093505050614b6a565b81819350935050505b9091565b60008083118290614c1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bdf578082015181840152602081019050614bc4565b50505050905090810190601f168015614c0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614c2657fe5b049050809150509392505050565b600080600080614c4385615aed565b90506000614c5086615b1e565b90506000614c7982614c6b858a61432a90919063ffffffff16565b61432a90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080614ca7858961437490919063ffffffff16565b90506000614cbe868961437490919063ffffffff16565b90506000614cd5878961437490919063ffffffff16565b90506000614cfe82614cf0858761432a90919063ffffffff16565b61432a90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015614d3157600080fd5b50604051908082528060200260200182016040528015614d605781602001602082028036833780820191505090505b5090503081600081518110614d7157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015614e1157600080fd5b505afa158015614e25573d6000803e3d6000fd5b505050506040513d6020811015614e3b57600080fd5b810190808051906020019092919050505081600181518110614e5957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614ebe307f0000000000000000000000000000000000000000000000000000000000000000846139c0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015614f80578082015181840152602081019050614f65565b505050509050019650505050505050600060405180830381600087803b158015614fa957600080fd5b505af1158015614fbd573d6000803e3d6000fd5b505050505050565b614ff0307f0000000000000000000000000000000000000000000000000000000000000000846139c0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061503a612abe565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156150bf57600080fd5b505af11580156150d3573d6000803e3d6000fd5b50505050506040513d60608110156150ea57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b600060185414801561512a57506000601a54145b1561513457615157565b601854601981905550601a54601b8190555060006018819055506000601a819055505b565b60008060008060008061516b876142ce565b9550955095509550955095506151c987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061525e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506152f385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061533f81615b4f565b6153498483615cf4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806153cb876142ce565b95509550955095509550955061542986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506154be83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061555385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061559f81615b4f565b6155a98483615cf4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061562b876142ce565b95509550955095509550955061568986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061571e85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061576a81615b4f565b6157748483615cf4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806157f6876142ce565b95509550955095509550955061585487600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506158e986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061597e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615a1385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615a5f81615b4f565b615a698483615cf4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601954601881905550601b54601a81905550565b6000615b176064615b096018548561437490919063ffffffff16565b6141fc90919063ffffffff16565b9050919050565b6000615b486064615b3a601a548561437490919063ffffffff16565b6141fc90919063ffffffff16565b9050919050565b6000615b596141d1565b90506000615b70828461437490919063ffffffff16565b9050615bc481600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615cef57615cab83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b615d0982600e5461432a90919063ffffffff16565b600e81905550615d2481600f5461424690919063ffffffff16565b600f81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122025bb590874dd3076a78f573a9d514e90245b260ac0833b8dc67197651a202e0964736f6c634300060c0033416c6c20492077616e7420666f72204368726973746d6173207c204d41524941482e66756e
Deployed Bytecode
0x6080604052600436106102815760003560e01c80635c85974f1161014f578063a69df4b5116100c1578063dd4670641161007a578063dd46706414610f17578063dd62ed3e14610f52578063df8fa83814610fd7578063ea2f0b371461108f578063f2fde38b146110e0578063f84ba65d1461113157610288565b8063a69df4b514610dc1578063a9059cbb14610dd8578063b6c5232414610e49578063c49b9a8014610e74578063c6d2577d14610eb1578063d543dbeb14610edc57610288565b806388f820201161011357806388f8202014610bb25780638da5cb5b14610c195780638ee88c5314610c5a57806395d89b4114610c95578063a457c2d714610d25578063a697eaee14610d9657610288565b80635c85974f14610aa55780636bc87c3a14610ae057806370a0823114610b0b578063715018a614610b705780637d1db4a514610b8757610288565b8063313ce567116101f35780634549b039116101ac5780634549b039146107d857806349bd5a5e146108335780634a74bb02146108745780634b512b02146108a157806352390c02146109ed5780635342acb414610a3e57610288565b8063313ce567146106315780633685d4191461065f57806339509351146106b05780633b124fe7146107215780633bd5d1731461074c578063437823ec1461078757610288565b806313114a9d1161024557806313114a9d1461047f5780631694505e146104aa57806318160ddd146104eb57806323ad1dac1461051657806323b872dd146105515780632d838119146105e257610288565b8063061c82d01461028d57806306fdde03146102c8578063095ea7b31461035857806309c3e179146103c95780630f1abb281461042457610288565b3661028857005b600080fd5b34801561029957600080fd5b506102c6600480360360208110156102b057600080fd5b810190808035906020019092919050505061118e565b005b3480156102d457600080fd5b506102dd611260565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561031d578082015181840152602081019050610302565b50505050905090810190601f16801561034a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036457600080fd5b506103b16004803603604081101561037b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611302565b60405180821515815260200191505060405180910390f35b3480156103d557600080fd5b50610422600480360360408110156103ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611320565b005b34801561043057600080fd5b5061047d6004803603604081101561044757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114b7565b005b34801561048b57600080fd5b506104946115c7565b6040518082815260200191505060405180910390f35b3480156104b657600080fd5b506104bf6115d1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f757600080fd5b506105006115f5565b6040518082815260200191505060405180910390f35b34801561052257600080fd5b5061054f6004803603602081101561053957600080fd5b81019080803590602001909291905050506115ff565b005b34801561055d57600080fd5b506105ca6004803603606081101561057457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116d1565b60405180821515815260200191505060405180910390f35b3480156105ee57600080fd5b5061061b6004803603602081101561060557600080fd5b81019080803590602001909291905050506117aa565b6040518082815260200191505060405180910390f35b34801561063d57600080fd5b5061064661182e565b604051808260ff16815260200191505060405180910390f35b34801561066b57600080fd5b506106ae6004803603602081101561068257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611845565b005b3480156106bc57600080fd5b50610709600480360360408110156106d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bcf565b60405180821515815260200191505060405180910390f35b34801561072d57600080fd5b50610736611c82565b6040518082815260200191505060405180910390f35b34801561075857600080fd5b506107856004803603602081101561076f57600080fd5b8101908080359060200190929190505050611c88565b005b34801561079357600080fd5b506107d6600480360360208110156107aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e19565b005b3480156107e457600080fd5b5061081d600480360360408110156107fb57600080fd5b8101908080359060200190929190803515159060200190929190505050611f3c565b6040518082815260200191505060405180910390f35b34801561083f57600080fd5b50610848611ff3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561088057600080fd5b50610889612017565b60405180821515815260200191505060405180910390f35b6109eb600480360360408110156108b757600080fd5b81019080803590602001906401000000008111156108d457600080fd5b8201836020820111156108e657600080fd5b8035906020019184602083028401116401000000008311171561090857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561096857600080fd5b82018360208201111561097a57600080fd5b8035906020019184602083028401116401000000008311171561099c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061202a565b005b3480156109f957600080fd5b50610a3c60048036036020811015610a1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122b5565b005b348015610a4a57600080fd5b50610a8d60048036036020811015610a6157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125cf565b60405180821515815260200191505060405180910390f35b348015610ab157600080fd5b50610ade60048036036020811015610ac857600080fd5b8101908080359060200190929190505050612625565b005b348015610aec57600080fd5b50610af56126f7565b6040518082815260200191505060405180910390f35b348015610b1757600080fd5b50610b5a60048036036020811015610b2e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126fd565b6040518082815260200191505060405180910390f35b348015610b7c57600080fd5b50610b856128dc565b005b348015610b9357600080fd5b50610b9c612a62565b6040518082815260200191505060405180910390f35b348015610bbe57600080fd5b50610c0160048036036020811015610bd557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a68565b60405180821515815260200191505060405180910390f35b348015610c2557600080fd5b50610c2e612abe565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c6657600080fd5b50610c9360048036036020811015610c7d57600080fd5b8101908080359060200190929190505050612ae7565b005b348015610ca157600080fd5b50610caa612bb9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cea578082015181840152602081019050610ccf565b50505050905090810190601f168015610d175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d3157600080fd5b50610d7e60048036036040811015610d4857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c5b565b60405180821515815260200191505060405180910390f35b348015610da257600080fd5b50610dab612d28565b6040518082815260200191505060405180910390f35b348015610dcd57600080fd5b50610dd6612d2e565b005b348015610de457600080fd5b50610e3160048036036040811015610dfb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f4b565b60405180821515815260200191505060405180910390f35b348015610e5557600080fd5b50610e5e612f69565b6040518082815260200191505060405180910390f35b348015610e8057600080fd5b50610eaf60048036036020811015610e9757600080fd5b81019080803515159060200190929190505050612f73565b005b348015610ebd57600080fd5b50610ec6613091565b6040518082815260200191505060405180910390f35b348015610ee857600080fd5b50610f1560048036036020811015610eff57600080fd5b8101908080359060200190929190505050613097565b005b348015610f2357600080fd5b50610f5060048036036020811015610f3a57600080fd5b8101908080359060200190929190505050613190565b005b348015610f5e57600080fd5b50610fc160048036036040811015610f7557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613381565b6040518082815260200191505060405180910390f35b61108d60048036036020811015610fed57600080fd5b810190808035906020019064010000000081111561100a57600080fd5b82018360208201111561101c57600080fd5b8035906020019184602083028401116401000000008311171561103e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050613408565b005b34801561109b57600080fd5b506110de600480360360208110156110b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613567565b005b3480156110ec57600080fd5b5061112f6004803603602081101561110357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061368a565b005b34801561113d57600080fd5b5061118c6004803603604081101561115457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613895565b005b6111966139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611256576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060188190555050565b606060148054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112f85780601f106112cd576101008083540402835291602001916112f8565b820191906000526020600020905b8154815290600101906020018083116112db57829003601f168201915b5050505050905090565b600061131661130f6139b8565b84846139c0565b6001905092915050565b6113286139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006013549050600042905060006018603c808585038161140557fe5b048161140d57fe5b048161141557fe5b049050650f285b02840081026017548501111561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4769667420746f6b656e73206e6f7420756e6f636b6564207965742e0000000081525060200191505060405180910390fd5b6114a5308686613bb7565b83601754016017819055505050505050565b6114bf6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600f54905090565b7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e81565b6000600d54905090565b6116076139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060128190555050565b60006116de848484613bb7565b61179f846116ea6139b8565b61179a85604051806060016040528060288152602001615e0d60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006117506139b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141119092919063ffffffff16565b6139c0565b600190509392505050565b6000600e54821115611807576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615d52602a913960400191505060405180910390fd5b60006118116141d1565b905061182681846141fc90919063ffffffff16565b915050919050565b6000601660009054906101000a900460ff16905090565b61184d6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600c80549050811015611bcb578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110611a0057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bbe57600c6001600c805490500381548110611a5c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c8281548110611a9457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c805480611b8457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611bcb565b80806001019150506119cf565b5050565b6000611c78611bdc6139b8565b84611c738560076000611bed6139b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b6139c0565b6001905092915050565b60185481565b6000611c926139b8565b9050600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615ea7602c913960400191505060405180910390fd5b6000611d42836142ce565b50505050509050611d9b81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611df381600e5461432a90919063ffffffff16565b600e81905550611e0e83600f5461424690919063ffffffff16565b600f81905550505050565b611e216139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600d54831115611fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611fd6576000611fc6846142ce565b5050505050905080915050611fed565b6000611fe1846142ce565b50505050915050809150505b92915050565b7f000000000000000000000000226f407f5ecdeccbe82d1af29893f860e9d40cc781565b601c60019054906101000a900460ff1681565b6120326139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b82518110156122b05760016011600085848151811061211057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550633b9aca0082828151811061217a57fe5b6020026020010151026010600085848151811061219357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508281815181106121e557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6010600087868151811061224b57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a380806001019150506120f5565b505050565b6122bd6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612511576124cd600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117aa565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61262d6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601d8190555050565b601a5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127f357601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e957601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506128d7565b60125490506128d7565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561288c57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506128d7565b6128d4600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117aa565b90505b919050565b6128e46139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601d5481565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612aef6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612baf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601a8190555050565b606060158054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c515780601f10612c2657610100808354040283529160200191612c51565b820191906000526020600020905b815481529060010190602001808311612c3457829003601f168201915b5050505050905090565b6000612d1e612c686139b8565b84612d1985604051806060016040528060258152602001615ef66025913960076000612c926139b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141119092919063ffffffff16565b6139c0565b6001905092915050565b60175481565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615ed36023913960400191505060405180910390fd5b6002544211612e4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612f5f612f586139b8565b8484613bb7565b6001905092915050565b6000600254905090565b612f7b6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461303b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601c60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b60135481565b61309f6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461315f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613187606461317983600d5461437490919063ffffffff16565b6141fc90919063ffffffff16565b601d8190555050565b6131986139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613258576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6134106139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146134d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8151811015613563578181815181106134e857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012546040518082815260200191505060405180910390a380806001019150506134d3565b5050565b61356f6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461362f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6136926139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613752576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156137d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615d7c6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61389d6139b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461395d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615e836024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615da26022913960400191505060405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615e5e6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615d2f6023913960400191505060405180910390fd5b60008111613d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615e356029913960400191505060405180910390fd5b613d24612abe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613d925750613d62612abe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613e4757601d5481111580613df15750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615dc46028913960400191505060405180910390fd5b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613eea5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613f8857600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115613f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615dc46028913960400191505060405180910390fd5b5b6000613f93306126fd565b9050601d548110613fa457601d5490505b6000601e548210159050808015613fc85750601c60009054906101000a900460ff16155b801561402057507f000000000000000000000000226f407f5ecdeccbe82d1af29893f860e9d40cc773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156140385750601c60019054906101000a900460ff165b1561404c57601e54915061404b826143fa565b5b600060019050600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806140f35750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156140fd57600090505b614109868686846144dc565b505050505050565b60008383111582906141be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614183578082015181840152602081019050614168565b50505050905090810190601f1680156141b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006141de6148dd565b915091506141f581836141fc90919063ffffffff16565b9250505090565b600061423e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614b6e565b905092915050565b6000808284019050838110156142c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006142e58a614c34565b92509250925060008060006143038d86866142fe6141d1565b614c8e565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061436c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614111565b905092915050565b60008083141561438757600090506143f4565b600082840290508284828161439857fe5b04146143ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615dec6021913960400191505060405180910390fd5b809150505b92915050565b6001601c60006101000a81548160ff021916908315150217905550600061442b6002836141fc90919063ffffffff16565b90506000614442828461432a90919063ffffffff16565b9050600047905061445283614d17565b6000614467824761432a90919063ffffffff16565b90506144738382614fc5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601c60006101000a81548160ff02191690831515021790555050565b806144ea576144e9615116565b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661458257601d54600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561467d5750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156146925761468d848484615159565b6148c9565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156147355750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561474a576147458484846153b9565b6148c8565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156147ee5750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15614803576147fe848484615619565b6148c7565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156148a55750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156148ba576148b58484846157e4565b6148c6565b6148c5848484615619565b5b5b5b5b806148d7576148d6615ad9565b5b50505050565b6000806000600e5490506000600d54905060005b600c80549050811015614b31578260036000600c848154811061491057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806149f757508160046000600c848154811061498f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15614a0e57600e54600d5494509450505050614b6a565b614a9760036000600c8481548110614a2257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461432a90919063ffffffff16565b9250614b2260046000600c8481548110614aad57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361432a90919063ffffffff16565b915080806001019150506148f1565b50614b49600d54600e546141fc90919063ffffffff16565b821015614b6157600e54600d54935093505050614b6a565b81819350935050505b9091565b60008083118290614c1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bdf578082015181840152602081019050614bc4565b50505050905090810190601f168015614c0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614c2657fe5b049050809150509392505050565b600080600080614c4385615aed565b90506000614c5086615b1e565b90506000614c7982614c6b858a61432a90919063ffffffff16565b61432a90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080614ca7858961437490919063ffffffff16565b90506000614cbe868961437490919063ffffffff16565b90506000614cd5878961437490919063ffffffff16565b90506000614cfe82614cf0858761432a90919063ffffffff16565b61432a90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015614d3157600080fd5b50604051908082528060200260200182016040528015614d605781602001602082028036833780820191505090505b5090503081600081518110614d7157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015614e1157600080fd5b505afa158015614e25573d6000803e3d6000fd5b505050506040513d6020811015614e3b57600080fd5b810190808051906020019092919050505081600181518110614e5957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614ebe307f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e846139c0565b7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015614f80578082015181840152602081019050614f65565b505050509050019650505050505050600060405180830381600087803b158015614fa957600080fd5b505af1158015614fbd573d6000803e3d6000fd5b505050505050565b614ff0307f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e846139c0565b7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061503a612abe565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156150bf57600080fd5b505af11580156150d3573d6000803e3d6000fd5b50505050506040513d60608110156150ea57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b600060185414801561512a57506000601a54145b1561513457615157565b601854601981905550601a54601b8190555060006018819055506000601a819055505b565b60008060008060008061516b876142ce565b9550955095509550955095506151c987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061525e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506152f385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061533f81615b4f565b6153498483615cf4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806153cb876142ce565b95509550955095509550955061542986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506154be83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061555385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061559f81615b4f565b6155a98483615cf4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061562b876142ce565b95509550955095509550955061568986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061571e85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061576a81615b4f565b6157748483615cf4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806157f6876142ce565b95509550955095509550955061585487600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506158e986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061597e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615a1385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615a5f81615b4f565b615a698483615cf4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601954601881905550601b54601a81905550565b6000615b176064615b096018548561437490919063ffffffff16565b6141fc90919063ffffffff16565b9050919050565b6000615b486064615b3a601a548561437490919063ffffffff16565b6141fc90919063ffffffff16565b9050919050565b6000615b596141d1565b90506000615b70828461437490919063ffffffff16565b9050615bc481600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615cef57615cab83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461424690919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b615d0982600e5461432a90919063ffffffff16565b600e81905550615d2481600f5461424690919063ffffffff16565b600f81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122025bb590874dd3076a78f573a9d514e90245b260ac0833b8dc67197651a202e0964736f6c634300060c0033
Deployed Bytecode Sourcemap
16555:21412:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24968:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20097:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20811:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29709:526;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29101:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21938:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17953:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20374:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37286:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20980:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22862:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20283:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23578:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21301:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17765:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22033:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24723:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22418:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18011:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18090:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37602:358;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23123:447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28970:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25381:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17852:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19674:411;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7295:148;;;;;;;;;;;;;:::i;:::-;;18143:53;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21804:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7078:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25078:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20188:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21527:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17722:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8160:293;;;;;;;;;;;;;:::i;:::-;;20479:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7705:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25486:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17532:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25211:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7870:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20660:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37383:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24846:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7453:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29225:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24968:98;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25052:6:::1;25042:7;:16;;;;24968:98:::0;:::o;20097:83::-;20134:13;20167:5;20160:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20097:83;:::o;20811:161::-;20886:4;20903:39;20912:12;:10;:12::i;:::-;20926:7;20935:6;20903:8;:39::i;:::-;20960:4;20953:11;;20811:161;;;;:::o;29709:526::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29802:14:::1;29819:19;;29802:36;;29851:12;29866:15;29851:30;;29895:9;29941:2;29936;29931::::0;29918:9:::1;29908:7;:19;29907:26;;;;;;:31;;;;;;:36;;;;;;29895:48;;30017:14;30010:4;:21;29989:17;;29980:6;:26;:51;;29972:92;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30125:43;30143:4;30150:9;30161:6;30125:9;:43::i;:::-;30221:6;30201:17;;:26;30181:17;:46;;;;7278:1;;;29709:526:::0;;:::o;29101:116::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29203:6:::1;29185:7;:15;29193:6;29185:15;;;;;;;;;;;;;;;:24;;;;29101:116:::0;;:::o;21938:87::-;21980:7;22007:10;;22000:17;;21938:87;:::o;17953:51::-;;;:::o;20374:95::-;20427:7;20454;;20447:14;;20374:95;:::o;37286:89::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37360:7:::1;37352:5;:15;;;;37286:89:::0;:::o;20980:313::-;21078:4;21095:36;21105:6;21113:9;21124:6;21095:9;:36::i;:::-;21142:121;21151:6;21159:12;:10;:12::i;:::-;21173:89;21211:6;21173:89;;;;;;;;;;;;;;;;;:11;:19;21185:6;21173:19;;;;;;;;;;;;;;;:33;21193:12;:10;:12::i;:::-;21173:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21142:8;:121::i;:::-;21281:4;21274:11;;20980:313;;;;;:::o;22862:253::-;22928:7;22967;;22956;:18;;22948:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23032:19;23055:10;:8;:10::i;:::-;23032:33;;23083:24;23095:11;23083:7;:11;;:24;;;;:::i;:::-;23076:31;;;22862:253;;;:::o;20283:83::-;20324:5;20349:9;;;;;;;;;;;20342:16;;20283:83;:::o;23578:479::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23660:11:::1;:20;23672:7;23660:20;;;;;;;;;;;;;;;;;;;;;;;;;23652:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23728:9;23723:327;23747:9;:16;;;;23743:1;:20;23723:327;;;23805:7;23789:23;;:9;23799:1;23789:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;23785:254;;;23848:9;23877:1;23858:9;:16;;;;:20;23848:31;;;;;;;;;;;;;;;;;;;;;;;;;23833:9;23843:1;23833:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23917:1;23898:7;:16;23906:7;23898:16;;;;;;;;;;;;;;;:20;;;;23960:5;23937:11;:20;23949:7;23937:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23984:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24018:5;;23785:254;23765:3;;;;;;;23723:327;;;;23578:479:::0;:::o;21301:218::-;21389:4;21406:83;21415:12;:10;:12::i;:::-;21429:7;21438:50;21477:10;21438:11;:25;21450:12;:10;:12::i;:::-;21438:25;;;;;;;;;;;;;;;:34;21464:7;21438:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21406:8;:83::i;:::-;21507:4;21500:11;;21301:218;;;;:::o;17765:26::-;;;;:::o;22033:377::-;22085:14;22102:12;:10;:12::i;:::-;22085:29;;22134:11;:19;22146:6;22134:19;;;;;;;;;;;;;;;;;;;;;;;;;22133:20;22125:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22214:15;22238:19;22249:7;22238:10;:19::i;:::-;22213:44;;;;;;;22286:28;22306:7;22286;:15;22294:6;22286:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22268:7;:15;22276:6;22268:15;;;;;;;;;;;;;;;:46;;;;22335:20;22347:7;22335;;:11;;:20;;;;:::i;:::-;22325:7;:30;;;;22379:23;22394:7;22379:10;;:14;;:23;;;;:::i;:::-;22366:10;:36;;;;22033:377;;;:::o;24723:111::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24822:4:::1;24792:18;:27;24811:7;24792:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;24723:111:::0;:::o;22418:436::-;22508:7;22547;;22536;:18;;22528:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22606:17;22601:246;;22641:15;22665:19;22676:7;22665:10;:19::i;:::-;22640:44;;;;;;;22706:7;22699:14;;;;;22601:246;22748:23;22779:19;22790:7;22779:10;:19::i;:::-;22746:52;;;;;;;22820:15;22813:22;;;22418:436;;;;;:::o;18011:38::-;;;:::o;18090:40::-;;;;;;;;;;;;;:::o;37602:358::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37724:6:::1;37719:234;37736:7;:14;37734:1;:16;37719:234;;;37792:4;37772:5;:17;37778:7;37786:1;37778:10;;;;;;;;;;;;;;37772:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;37850:10;37837:6;37844:1;37837:9;;;;;;;;;;;;;;:24;37811:11;:23;37823:7;37831:1;37823:10;;;;;;;;;;;;;;37811:23;;;;;;;;;;;;;;;:50;;;;37905:7;37913:1;37905:10;;;;;;;;;;;;;;37881:60;;37898:4;37881:60;;;37917:11;:23;37929:7;37937:1;37929:10;;;;;;;;;;;;;;37917:23;;;;;;;;;;;;;;;;37881:60;;;;;;;;;;;;;;;;;;37752:3;;;;;;;37719:234;;;;37602:358:::0;;:::o;23123:447::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23320:11:::1;:20;23332:7;23320:20;;;;;;;;;;;;;;;;;;;;;;;;;23319:21;23311:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23405:1;23386:7;:16;23394:7;23386:16;;;;;;;;;;;;;;;;:20;23383:108;;;23442:37;23462:7;:16;23470:7;23462:16;;;;;;;;;;;;;;;;23442:19;:37::i;:::-;23423:7;:16;23431:7;23423:16;;;;;;;;;;;;;;;:56;;;;23383:108;23524:4;23501:11;:20;23513:7;23501:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23539:9;23554:7;23539:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23123:447:::0;:::o;28970:123::-;29034:4;29058:18;:27;29077:7;29058:27;;;;;;;;;;;;;;;;;;;;;;;;;29051:34;;28970:123;;;:::o;25381:97::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25464:6:::1;25449:12;:21;;;;25381:97:::0;:::o;17852:32::-;;;;:::o;19674:411::-;19740:7;19773:9;:18;19783:7;19773:18;;;;;;;;;;;;;;;;;;;;;;;;;19768:254;;19810:5;:14;19816:7;19810:14;;;;;;;;;;;;;;;;;;;;;;;;;19807:142;;;19851:11;:20;19863:7;19851:20;;;;;;;;;;;;;;;;19844:27;;;;19807:142;19929:5;;19922:12;;;;19768:254;19977:11;:20;19989:7;19977:20;;;;;;;;;;;;;;;;;;;;;;;;;19973:49;;;20006:7;:16;20014:7;20006:16;;;;;;;;;;;;;;;;19999:23;;;;19973:49;20040:37;20060:7;:16;20068:7;20060:16;;;;;;;;;;;;;;;;20040:19;:37::i;:::-;20033:44;;19674:411;;;;:::o;7295:148::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7402:1:::1;7365:40;;7386:6;::::0;::::1;;;;;;;;7365:40;;;;;;;;;;;;7433:1;7416:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7295:148::o:0;18143:53::-;;;;:::o;21804:120::-;21872:4;21896:11;:20;21908:7;21896:20;;;;;;;;;;;;;;;;;;;;;;;;;21889:27;;21804:120;;;:::o;7078:79::-;7116:7;7143:6;;;;;;;;;;;7136:13;;7078:79;:::o;25078:122::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25180:12:::1;25164:13;:28;;;;25078:122:::0;:::o;20188:87::-;20227:13;20260:7;20253:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20188:87;:::o;21527:269::-;21620:4;21637:129;21646:12;:10;:12::i;:::-;21660:7;21669:96;21708:15;21669:96;;;;;;;;;;;;;;;;;:11;:25;21681:12;:10;:12::i;:::-;21669:25;;;;;;;;;;;;;;;:34;21695:7;21669:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21637:8;:129::i;:::-;21784:4;21777:11;;21527:269;;;;:::o;17722:36::-;;;;:::o;8160:293::-;8230:10;8212:28;;:14;;;;;;;;;;;:28;;;8204:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8305:9;;8299:3;:15;8291:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8396:14;;;;;;;;;;;8367:44;;8388:6;;;;;;;;;;8367:44;;;;;;;;;;;;8431:14;;;;;;;;;;;8422:6;;:23;;;;;;;;;;;;;;;;;;8160:293::o;20479:167::-;20557:4;20574:42;20584:12;:10;:12::i;:::-;20598:9;20609:6;20574:9;:42::i;:::-;20634:4;20627:11;;20479:167;;;;:::o;7705:89::-;7750:7;7777:9;;7770:16;;7705:89;:::o;25486:171::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25587:8:::1;25563:21;;:32;;;;;;;;;;;;;;;;;;25611:38;25640:8;25611:38;;;;;;;;;;;;;;;;;;;;25486:171:::0;:::o;17532:34::-;;;;:::o;25211:162::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25305:60:::1;25349:5;25305:25;25317:12;25305:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;25290:12;:75;;;;25211:162:::0;:::o;7870:214::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7951:6:::1;::::0;::::1;;;;;;;;7934:14;;:23;;;;;;;;;;;;;;;;;;7985:1;7968:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;8016:4;8010:3;:10;7998:9;:22;;;;8073:1;8036:40;;8057:6;::::0;::::1;;;;;;;;8036:40;;;;;;;;;;;;7870:214:::0;:::o;20660:143::-;20741:7;20768:11;:18;20780:5;20768:18;;;;;;;;;;;;;;;:27;20787:7;20768:27;;;;;;;;;;;;;;;;20761:34;;20660:143;;;;:::o;37383:205::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37474:6:::1;37469:112;37486:7;:14;37484:1;:16;37469:112;;;37551:7;37559:1;37551:10;;;;;;;;;;;;;;37527:42;;37544:4;37527:42;;;37563:5;;37527:42;;;;;;;;;;;;;;;;;;37502:3;;;;;;;37469:112;;;;37383:205:::0;:::o;24846:110::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24943:5:::1;24913:18;:27;24932:7;24913:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24846:110:::0;:::o;7453:244::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7562:1:::1;7542:22;;:8;:22;;;;7534:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7652:8;7623:38;;7644:6;::::0;::::1;;;;;;;;7623:38;;;;;;;;;;;;7681:8;7672:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;7453:244:::0;:::o;29225:129::-;7218:12;:10;:12::i;:::-;7208:22;;:6;;;;;;;;;;:22;;;7200:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29340:6:::1;29314:15;:23;29330:6;29314:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;29225:129:::0;;:::o;3330:106::-;3383:15;3418:10;3411:17;;3330:106;:::o;29362:337::-;29472:1;29455:19;;:5;:19;;;;29447:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29553:1;29534:21;;:7;:21;;;;29526:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29637:6;29607:11;:18;29619:5;29607:18;;;;;;;;;;;;;;;:27;29626:7;29607:27;;;;;;;;;;;;;;;:36;;;;29675:7;29659:32;;29668:5;29659:32;;;29684:6;29659:32;;;;;;;;;;;;;;;;;;29362:337;;;:::o;30243:2184::-;30381:1;30365:18;;:4;:18;;;;30357:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30458:1;30444:16;;:2;:16;;;;30436:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30528:1;30519:6;:10;30511:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30599:7;:5;:7::i;:::-;30591:15;;:4;:15;;;;:32;;;;;30616:7;:5;:7::i;:::-;30610:13;;:2;:13;;;;30591:32;30588:150;;;30656:12;;30646:6;:22;;:47;;;;30672:15;:21;30688:4;30672:21;;;;;;;;;;;;;;;;;;;;;;;;;30646:47;30638:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30588:150;30754:9;:15;30764:4;30754:15;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;;30774:15;:21;30790:4;30774:21;;;;;;;;;;;;;;;;;;;;;;;;;30773:22;30754:41;30751:135;;;30828:7;:13;30836:4;30828:13;;;;;;;;;;;;;;;;30818:6;:23;;30810:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30751:135;31367:28;31398:24;31416:4;31398:9;:24::i;:::-;31367:55;;31470:12;;31446:20;:36;31443:112;;31531:12;;31508:35;;31443:112;31575:24;31626:29;;31602:20;:53;;31575:80;;31684:19;:53;;;;;31721:16;;;;;;;;;;;31720:17;31684:53;:91;;;;;31762:13;31754:21;;:4;:21;;;;31684:91;:129;;;;;31792:21;;;;;;;;;;;31684:129;31666:318;;;31863:29;;31840:52;;31936:36;31951:20;31936:14;:36::i;:::-;31666:318;32065:12;32080:4;32065:19;;32192:18;:24;32211:4;32192:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;32220:18;:22;32239:2;32220:22;;;;;;;;;;;;;;;;;;;;;;;;;32192:50;32189:96;;;32268:5;32258:15;;32189:96;32381:38;32396:4;32401:2;32404:6;32411:7;32381:14;:38::i;:::-;30243:2184;;;;;;:::o;2088:192::-;2174:7;2207:1;2202;:6;;2210:12;2194:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2234:9;2250:1;2246;:5;2234:17;;2271:1;2264:8;;;2088:192;;;;;:::o;27120:163::-;27161:7;27182:15;27199;27218:19;:17;:19::i;:::-;27181:56;;;;27255:20;27267:7;27255;:11;;:20;;;;:::i;:::-;27248:27;;;;27120:163;:::o;2554:132::-;2612:7;2639:39;2643:1;2646;2639:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2632:46;;2554:132;;;;:::o;1751:181::-;1809:7;1829:9;1845:1;1841;:5;1829:17;;1870:1;1865;:6;;1857:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1923:1;1916:8;;;1751:181;;;;:::o;25918:419::-;25977:7;25986;25995;26004;26013;26022;26043:23;26068:12;26082:18;26104:20;26116:7;26104:11;:20::i;:::-;26042:82;;;;;;26136:15;26153:23;26178:12;26194:50;26206:7;26215:4;26221:10;26233;:8;:10::i;:::-;26194:11;:50::i;:::-;26135:109;;;;;;26263:7;26272:15;26289:4;26295:15;26312:4;26318:10;26255:74;;;;;;;;;;;;;;;;;;25918:419;;;;;;;:::o;1942:136::-;2000:7;2027:43;2031:1;2034;2027:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2020:50;;1942:136;;;;:::o;2291:255::-;2349:7;2383:1;2378;:6;2374:47;;;2408:1;2401:8;;;;2374:47;2433:9;2449:1;2445;:5;2433:17;;2478:1;2473;2469;:5;;;;;;:10;2461:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2537:1;2530:8;;;2291:255;;;;;:::o;32435:985::-;18611:4;18592:16;;:23;;;;;;;;;;;;;;;;;;32571:12:::1;32586:27;32611:1;32586:20;:24;;:27;;;;:::i;:::-;32571:42;;32624:17;32644:30;32669:4;32644:20;:24;;:30;;;;:::i;:::-;32624:50;;32952:22;32977:21;32952:46;;33043:22;33060:4;33043:16;:22::i;:::-;33196:18;33217:41;33243:14;33217:21;:25;;:41;;;;:::i;:::-;33196:62;;33308:35;33321:9;33332:10;33308:12;:35::i;:::-;33369:43;33384:4;33390:10;33402:9;33369:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18626:1;;;;18657:5:::0;18638:16;;:24;;;;;;;;;;;;;;;;;;32435:985;:::o;34619:981::-;34730:7;34726:40;;34752:14;:12;:14::i;:::-;34726:40;34795:9;:20;34805:9;34795:20;;;;;;;;;;;;;;;;;;;;;;;;;34791:72;;34851:12;;34830:7;:18;34838:9;34830:18;;;;;;;;;;;;;;;:33;;;;34791:72;34899:4;34876:9;:20;34886:9;34876:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34938:11;:19;34950:6;34938:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;34962:11;:22;34974:9;34962:22;;;;;;;;;;;;;;;;;;;;;;;;;34961:23;34938:46;34934:597;;;35001:48;35023:6;35031:9;35042:6;35001:21;:48::i;:::-;34934:597;;;35072:11;:19;35084:6;35072:19;;;;;;;;;;;;;;;;;;;;;;;;;35071:20;:46;;;;;35095:11;:22;35107:9;35095:22;;;;;;;;;;;;;;;;;;;;;;;;;35071:46;35067:464;;;35134:46;35154:6;35162:9;35173:6;35134:19;:46::i;:::-;35067:464;;;35203:11;:19;35215:6;35203:19;;;;;;;;;;;;;;;;;;;;;;;;;35202:20;:47;;;;;35227:11;:22;35239:9;35227:22;;;;;;;;;;;;;;;;;;;;;;;;;35226:23;35202:47;35198:333;;;35266:44;35284:6;35292:9;35303:6;35266:17;:44::i;:::-;35198:333;;;35332:11;:19;35344:6;35332:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;35355:11;:22;35367:9;35355:22;;;;;;;;;;;;;;;;;;;;;;;;;35332:45;35328:203;;;35394:48;35416:6;35424:9;35435:6;35394:21;:48::i;:::-;35328:203;;;35475:44;35493:6;35501:9;35512:6;35475:17;:44::i;:::-;35328:203;35198:333;35067:464;34934:597;35555:7;35551:41;;35577:15;:13;:15::i;:::-;35551:41;34619:981;;;;:::o;27291:561::-;27341:7;27350;27370:15;27388:7;;27370:25;;27406:15;27424:7;;27406:25;;27453:9;27448:289;27472:9;:16;;;;27468:1;:20;27448:289;;;27538:7;27514;:21;27522:9;27532:1;27522:12;;;;;;;;;;;;;;;;;;;;;;;;;27514:21;;;;;;;;;;;;;;;;:31;:66;;;;27573:7;27549;:21;27557:9;27567:1;27557:12;;;;;;;;;;;;;;;;;;;;;;;;;27549:21;;;;;;;;;;;;;;;;:31;27514:66;27510:97;;;27590:7;;27599;;27582:25;;;;;;;;;27510:97;27632:34;27644:7;:21;27652:9;27662:1;27652:12;;;;;;;;;;;;;;;;;;;;;;;;;27644:21;;;;;;;;;;;;;;;;27632:7;:11;;:34;;;;:::i;:::-;27622:44;;27691:34;27703:7;:21;27711:9;27721:1;27711:12;;;;;;;;;;;;;;;;;;;;;;;;;27703:21;;;;;;;;;;;;;;;;27691:7;:11;;:34;;;;:::i;:::-;27681:44;;27490:3;;;;;;;27448:289;;;;27761:20;27773:7;;27761;;:11;;:20;;;;:::i;:::-;27751:7;:30;27747:61;;;27791:7;;27800;;27783:25;;;;;;;;27747:61;27827:7;27836;27819:25;;;;;;27291:561;;;:::o;2696:278::-;2782:7;2814:1;2810;:5;2817:12;2802:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2841:9;2857:1;2853;:5;;;;;;2841:17;;2965:1;2958:8;;;2696:278;;;;;:::o;26345:330::-;26405:7;26414;26423;26443:12;26458:24;26474:7;26458:15;:24::i;:::-;26443:39;;26493:18;26514:30;26536:7;26514:21;:30::i;:::-;26493:51;;26555:23;26581:33;26603:10;26581:17;26593:4;26581:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;26555:59;;26633:15;26650:4;26656:10;26625:42;;;;;;;;;26345:330;;;;;:::o;26683:429::-;26798:7;26807;26816;26836:15;26854:24;26866:11;26854:7;:11;;:24;;;;:::i;:::-;26836:42;;26889:12;26904:21;26913:11;26904:4;:8;;:21;;;;:::i;:::-;26889:36;;26936:18;26957:27;26972:11;26957:10;:14;;:27;;;;:::i;:::-;26936:48;;26995:23;27021:33;27043:10;27021:17;27033:4;27021:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;26995:59;;27073:7;27082:15;27099:4;27065:39;;;;;;;;;;26683:429;;;;;;;;:::o;33428:589::-;33554:21;33592:1;33578:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33554:40;;33623:4;33605;33610:1;33605:7;;;;;;;;;;;;;:23;;;;;;;;;;;33649:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33639:4;33644:1;33639:7;;;;;;;;;;;;;:32;;;;;;;;;;;33684:62;33701:4;33716:15;33734:11;33684:8;:62::i;:::-;33785:15;:66;;;33866:11;33892:1;33936:4;33963;33983:15;33785:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33428:589;;:::o;34025:513::-;34173:62;34190:4;34205:15;34223:11;34173:8;:62::i;:::-;34278:15;:31;;;34317:9;34350:4;34370:11;34396:1;34439;34482:7;:5;:7::i;:::-;34504:15;34278:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34025:513;;:::o;28571:250::-;28628:1;28617:7;;:12;:34;;;;;28650:1;28633:13;;:18;28617:34;28614:46;;;28653:7;;28614:46;28698:7;;28680:15;:25;;;;28740:13;;28716:21;:37;;;;28784:1;28774:7;:11;;;;28812:1;28796:13;:17;;;;28571:250;:::o;36712:566::-;36815:15;36832:23;36857:12;36871:23;36896:12;36910:18;36932:19;36943:7;36932:10;:19::i;:::-;36814:137;;;;;;;;;;;;36980:28;37000:7;36980;:15;36988:6;36980:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36962:7;:15;36970:6;36962:15;;;;;;;;;;;;;;;:46;;;;37037:28;37057:7;37037;:15;37045:6;37037:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37019:7;:15;37027:6;37019:15;;;;;;;;;;;;;;;:46;;;;37097:39;37120:15;37097:7;:18;37105:9;37097:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37076:7;:18;37084:9;37076:18;;;;;;;;;;;;;;;:60;;;;37150:26;37165:10;37150:14;:26::i;:::-;37187:23;37199:4;37205;37187:11;:23::i;:::-;37243:9;37226:44;;37235:6;37226:44;;;37254:15;37226:44;;;;;;;;;;;;;;;;;;36712:566;;;;;;;;;:::o;36118:586::-;36219:15;36236:23;36261:12;36275:23;36300:12;36314:18;36336:19;36347:7;36336:10;:19::i;:::-;36218:137;;;;;;;;;;;;36384:28;36404:7;36384;:15;36392:6;36384:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36366:7;:15;36374:6;36366:15;;;;;;;;;;;;;;;:46;;;;36444:39;36467:15;36444:7;:18;36452:9;36444:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36423:7;:18;36431:9;36423:18;;;;;;;;;;;;;;;:60;;;;36515:39;36538:15;36515:7;:18;36523:9;36515:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36494:7;:18;36502:9;36494:18;;;;;;;;;;;;;;;:60;;;;36576:26;36591:10;36576:14;:26::i;:::-;36613:23;36625:4;36631;36613:11;:23::i;:::-;36669:9;36652:44;;36661:6;36652:44;;;36680:15;36652:44;;;;;;;;;;;;;;;;;;36118:586;;;;;;;;;:::o;35608:502::-;35707:15;35724:23;35749:12;35763:23;35788:12;35802:18;35824:19;35835:7;35824:10;:19::i;:::-;35706:137;;;;;;;;;;;;35872:28;35892:7;35872;:15;35880:6;35872:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35854:7;:15;35862:6;35854:15;;;;;;;;;;;;;;;:46;;;;35932:39;35955:15;35932:7;:18;35940:9;35932:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35911:7;:18;35919:9;35911:18;;;;;;;;;;;;;;;:60;;;;35982:26;35997:10;35982:14;:26::i;:::-;36019:23;36031:4;36037;36019:11;:23::i;:::-;36075:9;36058:44;;36067:6;36058:44;;;36086:15;36058:44;;;;;;;;;;;;;;;;;;35608:502;;;;;;;;;:::o;24069:642::-;24172:15;24189:23;24214:12;24228:23;24253:12;24267:18;24289:19;24300:7;24289:10;:19::i;:::-;24171:137;;;;;;;;;;;;24337:28;24357:7;24337;:15;24345:6;24337:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;24319:7;:15;24327:6;24319:15;;;;;;;;;;;;;;;:46;;;;24394:28;24414:7;24394;:15;24402:6;24394:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;24376:7;:15;24384:6;24376:15;;;;;;;;;;;;;;;:46;;;;24454:39;24477:15;24454:7;:18;24462:9;24454:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24433:7;:18;24441:9;24433:18;;;;;;;;;;;;;;;:60;;;;24525:39;24548:15;24525:7;:18;24533:9;24525:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24504:7;:18;24512:9;24504:18;;;;;;;;;;;;;;;:60;;;;24583:26;24598:10;24583:14;:26::i;:::-;24620:23;24632:4;24638;24620:11;:23::i;:::-;24676:9;24659:44;;24668:6;24659:44;;;24687:15;24659:44;;;;;;;;;;;;;;;;;;24069:642;;;;;;;;;:::o;28833:125::-;28887:15;;28877:7;:25;;;;28929:21;;28913:13;:37;;;;28833:125::o;28231:154::-;28295:7;28322:55;28361:5;28322:20;28334:7;;28322;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;28315:62;;28231:154;;;:::o;28393:166::-;28463:7;28490:61;28535:5;28490:26;28502:13;;28490:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;28483:68;;28393:166;;;:::o;27864:355::-;27927:19;27950:10;:8;:10::i;:::-;27927:33;;27971:18;27992:27;28007:11;27992:10;:14;;:27;;;;:::i;:::-;27971:48;;28055:38;28082:10;28055:7;:22;28071:4;28055:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;28030:7;:22;28046:4;28030:22;;;;;;;;;;;;;;;:63;;;;28107:11;:26;28127:4;28107:26;;;;;;;;;;;;;;;;;;;;;;;;;28104:107;;;28173:38;28200:10;28173:7;:22;28189:4;28173:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;28148:7;:22;28164:4;28148:22;;;;;;;;;;;;;;;:63;;;;28104:107;27864:355;;;:::o;25763:147::-;25841:17;25853:4;25841:7;;:11;;:17;;;;:::i;:::-;25831:7;:27;;;;25882:20;25897:4;25882:10;;:14;;:20;;;;:::i;:::-;25869:10;:33;;;;25763:147;;:::o
Swarm Source
ipfs://25bb590874dd3076a78f573a9d514e90245b260ac0833b8dc67197651a202e09
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.