Overview
Max Total Supply
1,000,000,000,000,000 BurnX20
Holders
2,272 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
14,367,418,695.494500378 BurnX20Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BurnX20
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /** * BurnX 2.0 - #ShareFi on fire. Charity. Rewards. * * A community centric powerhouse of hot mechanics that funds good * causes, rewards holders, & supports a healthy price floor. * Blazing a path to financial freedom, truly. * * Website: https://BurnX.finance * Telegram: https://t.me/BurnXCommunity * Twitter: https://twitter.com/BurnX_Community */ pragma solidity ^0.6.12; // Contracts import "./SafeMath.sol"; import "./Ownable.sol"; import "./Address.sol"; import "./IERC20.sol"; import "./IUniswapV2Factory.sol"; import "./IUniswapV2Pair.sol"; import "./IUniswapV2Router02.sol"; contract BurnX20 is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; // Reflect and allowances mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; // Reflect exclusions - fees & rewards mapping(address => bool) private _isExcludedFromFee; // fee mapping(address => bool) private _isExcluded; // reward address[] private _excluded; // Bots mapping(address => bool) private _isBot; address[] private _bots; // Reflect & Total Supply (capped) uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1_000_000_000_000_000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; // Standard token details string private _name = "BurnX 2.0"; string private _symbol = "BurnX20"; uint8 private _decimals = 9; // Default % trade tax settings uint256 private _taxFee = 4; // reflection uint256 private _marketingFee = 2; // marketing uint256 private _liquidityFee = 4; // liquidity // Rollback % trade tax settings uint256 private _prevTaxFee = _taxFee; uint256 private _prevMarketingFee = _marketingFee; uint256 private _prevLiquidityFee = _liquidityFee; // Uniswap IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; // Reentrancy, swap & liquify bool internal locked = false; bool public swapLiquifyEnabled = true; // Reentrancy guard modifier noReentrant() { locked = true; _; locked = false; } // Max token amount per TX uint256 private _maxTx = _tTotal; // Max tokens to be swapped - set to optimum uint256 private _amountSellLiquidity = 1000000000 * 10**9; // Events event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); // Wallets address payable private _marketingAddress; address private _lpAddress; constructor(address marketingAddress) public { // Total Supply to owner _rOwned[_msgSender()] = _rTotal; // Marketing _marketingAddress = payable(marketingAddress); // Uniswap router & pair IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; // Exclude addresses from reflect fee _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_msgSender()] = true; _isExcludedFromFee[_marketingAddress] = true; // LP token _lpAddress = _msgSender(); emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "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, "Allowance below zero" ) ); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function setExcludeFromFee(address account, bool excluded) external onlyOwner { _isExcludedFromFee[account] = excluded; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal); 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); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) external onlyOwner { require(account != address(uniswapV2Router)); // UniswapV2 router require(!_isExcluded[account]); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account]); 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 addBots(address[] memory botAddresses) external onlyOwner { for (uint256 i = 0; i < botAddresses.length; i++) { require(botAddresses[i] != address(uniswapV2Router)); // UniswapV2 router _isBot[botAddresses[i]] = true; _bots.push(botAddresses[i]); } } function removeBot(address account) external onlyOwner { require(_isBot[account]); for (uint256 i = 0; i < _bots.length; i++) { if (_bots[i] == account) { _bots[i] = _bots[_bots.length - 1]; _isBot[account] = false; _bots.pop(); break; } } } function removeAllFee() private { if (_taxFee == 0 && _marketingFee == 0 && _liquidityFee == 0) return; _prevTaxFee = _taxFee; _prevMarketingFee = _marketingFee; _prevLiquidityFee = _liquidityFee; _taxFee = 0; _marketingFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _prevTaxFee; _marketingFee = _prevMarketingFee; _liquidityFee = _prevLiquidityFee; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address sender, address recipient, uint256 amount ) private { require(sender != address(0)); require(recipient != address(0)); require(amount > 0); require(!_isBot[sender]); require(!_isBot[recipient]); require(!_isBot[tx.origin]); if (sender != owner() && recipient != owner()) { require(amount <= _maxTx); // Max TX amount } uint256 contractTokenBalance = balanceOf(address(this)); // Is token balance over minimum target for selling? bool overMinTokenBalance = contractTokenBalance >= _amountSellLiquidity; // Token balance over Max TX if (contractTokenBalance >= _maxTx) { contractTokenBalance = _maxTx; } else { // Token balance over minimum but below Max TX contractTokenBalance = _amountSellLiquidity; } if ( !locked && swapLiquifyEnabled && overMinTokenBalance && sender != address(uniswapV2Pair) ) { // Add liquidity swapAndLiquify(contractTokenBalance); } bool takeFee = true; // Temporarily omit the fee if any account is excluded if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { takeFee = false; } // Transfer amount - deducts any necessary fees _tokenTransfer(sender, recipient, amount, takeFee); } function swapAndLiquify(uint256 takeAmount) private noReentrant { // Marketing vs Liquidity allocation. uint256 marketingPecentage = _marketingFee.mul(10000).mul(10**9).div(_marketingFee.add(_liquidityFee)); uint256 toMarketing = marketingPecentage.mul(takeAmount).div(10000).div(10**9); uint256 toLiquify = takeAmount.sub(toMarketing); // Split token balance into halves uint256 tokenHalfForETH = toLiquify.div(2); uint256 halfForTokenLP = toLiquify.sub(tokenHalfForETH); uint256 ethBalanceBeforeSwap = address(this).balance; // Swap tokens for ETH uint256 toSwapForEth = tokenHalfForETH.add(toMarketing); swapTokensForEth(toSwapForEth); // Get new ETH balance uint256 ethRecivedFromSwap = address(this).balance.sub(ethBalanceBeforeSwap); // Recent ETH balance * 50% of the allocated LP tokens / marketing tokens uint256 ethLpPart = ethRecivedFromSwap.mul(tokenHalfForETH).div(toSwapForEth); // Add liquidity to Uniswap addLiquidity(halfForTokenLP, ethLpPart); emit SwapAndLiquify(tokenHalfForETH, ethLpPart, halfForTokenLP); // Send the rest to marketing. sendETHToMarketing(ethRecivedFromSwap.sub(ethLpPart)); } 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); // Swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); // Add liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, _lpAddress, block.timestamp ); } function sendETHToMarketing(uint256 amount) private { _marketingAddress.transfer(amount); } // Manual swap & send if the token is highly valued function manualSwap() external onlyOwner { uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualSend() public onlyOwner { uint256 contractETHBalance = address(this).balance; sendETHToMarketing(contractETHBalance); } function setSwapLiquifyEnabled() external onlyOwner { swapLiquifyEnabled = !swapLiquifyEnabled; } function isSwapLiquifyEnabled() public view returns (bool) { return swapLiquifyEnabled; } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity ) = _getValues(tAmount); uint256 currentRate = _getRate(); uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount).sub(rMarketingLiquidity); _takeMarketingLiquidity(tMarketingLiquidity); _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 tMarketingLiquidity ) = _getValues(tAmount); uint256 currentRate = _getRate(); uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount).sub(rMarketingLiquidity); _takeMarketingLiquidity(tMarketingLiquidity); _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 tMarketingLiquidity ) = _getValues(tAmount); uint256 currentRate = _getRate(); uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount).sub(rMarketingLiquidity); _takeMarketingLiquidity(tMarketingLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity ) = _getValues(tAmount); uint256 currentRate = _getRate(); uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount).sub(rMarketingLiquidity); _takeMarketingLiquidity(tMarketingLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _takeMarketingLiquidity(uint256 tMarketingLiquidity) private { uint256 currentRate = _getRate(); uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingLiquidity); if (_isExcluded[address(this)]) { _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingLiquidity); } } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } // Recieve ETH when swapping receive() external payable {} function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { ( uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidityFee ) = _getTValues(tAmount, _taxFee, _marketingFee.add(_liquidityFee)); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, currentRate ); return ( rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketingLiquidityFee ); } function _getTValues( uint256 tAmount, uint256 taxFee, uint256 marketingLiquidityFee ) private pure returns ( uint256, uint256, uint256 ) { uint256 tFee = tAmount.mul(taxFee).div(100); uint256 tMarketingLiquidityFee = tAmount.mul(marketingLiquidityFee).div(100); uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketingLiquidityFee); return (tTransferAmount, tFee, tMarketingLiquidityFee); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); if (rFee != 0) { rFee = currentRate.div(2).add(rFee); } 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 setTxFees( uint256 tax, uint256 marketing, uint256 liquidity ) external onlyOwner { require(tax.add(marketing).add(liquidity) <= 10); _taxFee = tax; _marketingFee = marketing; _liquidityFee = liquidity; } function setWallets(address marketingAddress, address lpAddress) external onlyOwner { _marketingAddress = payable(marketingAddress); _lpAddress = lpAddress; } function setAmountSellLiquidity(uint256 amountSellLiquidity) external onlyOwner { require(amountSellLiquidity >= 10**9); _amountSellLiquidity = amountSellLiquidity; } function setMaxTx(uint256 maxTx) external onlyOwner { require(maxTx >= 10**9); _maxTx = maxTx; } function recoverTokens(uint256 amount) public onlyOwner { _approve(address(this), owner(), amount); _transfer(address(this), owner(), amount); } function withdrawToken( address token, uint256 amount, address recipient ) external onlyOwner { require(token != uniswapV2Pair); require(token != address(this)); IERC20(token).transfer(recipient, amount); } function migrateHolders( address[] memory recipients, uint256[] memory amounts ) external onlyOwner { require(recipients.length == amounts.length); for (uint256 i = 0; i < recipients.length; i++) { transfer(recipients[i], amounts[i]); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ 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); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ 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" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; import "./IUniswapV2Router01.sol"; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; import "./Context.sol"; contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function getUnlockTime() public view returns (uint256) { return _lockTime; } /** * @dev Locks the contract for the time specified. */ function lock(uint256 time) public onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } /** * @dev Unocks the contract to the previous owner. */ function unlock() public virtual { require(_previousOwner == msg.sender); require(block.timestamp >= _lockTime); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be 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; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"marketingAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"botAddresses","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","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":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"migrateHolders","outputs":[],"stateMutability":"nonpayable","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":"amount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountSellLiquidity","type":"uint256"}],"name":"setAmountSellLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSwapLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"setTxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingAddress","type":"address"},{"internalType":"address","name":"lpAddress","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405269d3c21bcecceda1000000600b55600b54600019816200002057fe5b0660001903600c556040518060400160405280600981526020017f4275726e5820322e300000000000000000000000000000000000000000000000815250600e90805190602001906200007592919062000734565b506040518060400160405280600781526020017f4275726e58323000000000000000000000000000000000000000000000000000815250600f9080519060200190620000c392919062000734565b506009601060006101000a81548160ff021916908360ff1602179055506004601155600260125560046013556011546014556012546015556013546016556000601760006101000a81548160ff0219169083151502179055506001601760016101000a81548160ff021916908315150217905550600b54601855670de0b6b3a76400006019553480156200015657600080fd5b506040516200627038038062006270833981810160405260208110156200017c57600080fd5b810190808051906020019092919050505060006200019f6200072c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c5460036000620002546200072c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033357600080fd5b505afa15801562000348573d6000803e3d6000fd5b505050506040513d60208110156200035f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003d357600080fd5b505afa158015620003e8573d6000803e3d6000fd5b505050506040513d6020811015620003ff57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200047a57600080fd5b505af11580156200048f573d6000803e3d6000fd5b505050506040513d6020811015620004a657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620005926200072c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200066d6200072c60201b60201c565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006bd6200072c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a35050620007da565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200077757805160ff1916838001178555620007a8565b82800160010185558215620007a8579182015b82811115620007a75782518255916020019190600101906200078a565b5b509050620007b79190620007bb565b5090565b5b80821115620007d6576000816000905550600101620007bc565b5090565b60805160601c60a05160601c615a3f620008316000398061181c5280611ab95280613a9152508061111e5280611dab5280612ce95280613e825280613f6e5280613f955280614b5c5280614b835250615a3f6000f3fe60806040526004361061024a5760003560e01c80635fecd92611610139578063a9059cbb116100b6578063dd4670641161007a578063dd46706414610eae578063dd62ed3e14610ee9578063e821432a14610f6e578063f2fde38b14610fbd578063f42938901461100e578063fabc40351461102557610251565b8063a9059cbb14610c6f578063af9549e014610ce0578063bc33718214610d3d578063d34628cc14610d78578063d3f6a15714610e3d57610251565b80638da5cb5b116100fd5780638da5cb5b14610adb5780638de9443614610b1c57806395d89b4114610b57578063a457c2d714610be7578063a69df4b514610c5857610251565b80635fecd9261461097c578063602bc62b146109cd57806370a08231146109f8578063715018a614610a5d57806388f8202014610a7457610251565b806339509351116101c757806349bd5a5e1161018b57806349bd5a5e146107135780635115baf21461075457806351bc3c85146108ad57806352390c02146108c45780635342acb41461091557610251565b806339509351146105885780633ccdbb28146105f957806341609b38146106745780634549b039146106a157806348971a0d146106fc57610251565b806323b872dd1161020e57806323b872dd146103ee5780632d8381191461047f57806330599fc5146104ce578063313ce567146105095780633685d4191461053757610251565b806306fdde0314610256578063095ea7b3146102e657806313114a9d146103575780631694505e1461038257806318160ddd146103c357610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b611052565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f257600080fd5b5061033f6004803603604081101561030957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110f4565b60405180821515815260200191505060405180910390f35b34801561036357600080fd5b5061036c611112565b6040518082815260200191505060405180910390f35b34801561038e57600080fd5b5061039761111c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103cf57600080fd5b506103d8611140565b6040518082815260200191505060405180910390f35b3480156103fa57600080fd5b506104676004803603606081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061114a565b60405180821515815260200191505060405180910390f35b34801561048b57600080fd5b506104b8600480360360208110156104a257600080fd5b8101908080359060200190929190505050611240565b6040518082815260200191505060405180910390f35b3480156104da57600080fd5b50610507600480360360208110156104f157600080fd5b8101908080359060200190929190505050611278565b005b34801561051557600080fd5b5061051e611367565b604051808260ff16815260200191505060405180910390f35b34801561054357600080fd5b506105866004803603602081101561055a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061137e565b005b34801561059457600080fd5b506105e1600480360360408110156105ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061169f565b60405180821515815260200191505060405180910390f35b34801561060557600080fd5b506106726004803603606081101561061c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611752565b005b34801561068057600080fd5b5061068961195e565b60405180821515815260200191505060405180910390f35b3480156106ad57600080fd5b506106e6600480360360408110156106c457600080fd5b8101908080359060200190929190803515159060200190929190505050611975565b6040518082815260200191505060405180910390f35b34801561070857600080fd5b506107116119c3565b005b34801561071f57600080fd5b50610728611ab7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076057600080fd5b506108ab6004803603604081101561077757600080fd5b810190808035906020019064010000000081111561079457600080fd5b8201836020820111156107a657600080fd5b803590602001918460208302840111640100000000831117156107c857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561082857600080fd5b82018360208201111561083a57600080fd5b8035906020019184602083028401116401000000008311171561085c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611adb565b005b3480156108b957600080fd5b506108c2611c00565b005b3480156108d057600080fd5b50610913600480360360208110156108e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ce1565b005b34801561092157600080fd5b506109646004803603602081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611feb565b60405180821515815260200191505060405180910390f35b34801561098857600080fd5b506109cb6004803603602081101561099f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612041565b005b3480156109d957600080fd5b506109e261231d565b6040518082815260200191505060405180910390f35b348015610a0457600080fd5b50610a4760048036036020811015610a1b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612327565b6040518082815260200191505060405180910390f35b348015610a6957600080fd5b50610a72612412565b005b348015610a8057600080fd5b50610ac360048036036020811015610a9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612598565b60405180821515815260200191505060405180910390f35b348015610ae757600080fd5b50610af06125ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2857600080fd5b50610b5560048036036020811015610b3f57600080fd5b8101908080359060200190929190505050612617565b005b348015610b6357600080fd5b50610b6c6126fa565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bac578082015181840152602081019050610b91565b50505050905090810190601f168015610bd95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bf357600080fd5b50610c4060048036036040811015610c0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061279c565b60405180821515815260200191505060405180910390f35b348015610c6457600080fd5b50610c6d612886565b005b348015610c7b57600080fd5b50610cc860048036036040811015610c9257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506129ef565b60405180821515815260200191505060405180910390f35b348015610cec57600080fd5b50610d3b60048036036040811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612a0d565b005b348015610d4957600080fd5b50610d7660048036036020811015610d6057600080fd5b8101908080359060200190929190505050612b30565b005b348015610d8457600080fd5b50610e3b60048036036020811015610d9b57600080fd5b8101908080359060200190640100000000811115610db857600080fd5b820183602082011115610dca57600080fd5b80359060200191846020830284011164010000000083111715610dec57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612c13565b005b348015610e4957600080fd5b50610eac60048036036040811015610e6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e45565b005b348015610eba57600080fd5b50610ee760048036036020811015610ed157600080fd5b8101908080359060200190929190505050612f93565b005b348015610ef557600080fd5b50610f5860048036036040811015610f0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613184565b6040518082815260200191505060405180910390f35b348015610f7a57600080fd5b50610fbb60048036036060811015610f9157600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061320b565b005b348015610fc957600080fd5b5061100c60048036036020811015610fe057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061331f565b005b34801561101a57600080fd5b5061102361352a565b005b34801561103157600080fd5b5061103a613603565b60405180821515815260200191505060405180910390f35b6060600e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110ea5780601f106110bf576101008083540402835291602001916110ea565b820191906000526020600020905b8154815290600101906020018083116110cd57829003601f168201915b5050505050905090565b6000611108611101613616565b848461361e565b6001905092915050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b6000611157848484613815565b61123584611163613616565b611230856040518060400160405280601881526020017f416d6f756e74206578636565647320616c6c6f77616e63650000000000000000815250600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111e6613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bb49092919063ffffffff16565b61361e565b600190509392505050565b6000600c5482111561125157600080fd5b600061125b613c74565b90506112708184613c9f90919063ffffffff16565b915050919050565b611280613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6113523061134c6125ee565b8361361e565b6113643061135e6125ee565b83613815565b50565b6000601060009054906101000a900460ff16905090565b611386613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661149c57600080fd5b60005b60088054905081101561169b578173ffffffffffffffffffffffffffffffffffffffff16600882815481106114d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561168e5760086001600880549050038154811061152c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061156457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061165457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561169b565b808060010191505061149f565b5050565b60006117486116ac613616565b8461174385600560006116bd613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b61361e565b6001905092915050565b61175a613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561187357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118ac57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561191d57600080fd5b505af1158015611931573d6000803e3d6000fd5b505050506040513d602081101561194757600080fd5b810190808051906020019092919050505050505050565b6000601760019054906101000a900460ff16905090565b6000600b5483111561198657600080fd5b816119a657600061199684613d71565b50505050509050809150506119bd565b60006119b184613d71565b50505050915050809150505b92915050565b6119cb613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601760019054906101000a900460ff1615601760016101000a81548160ff021916908315150217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b611ae3613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8051825114611bb157600080fd5b60005b8251811015611bfb57611bed838281518110611bcc57fe5b6020026020010151838381518110611be057fe5b60200260200101516129ef565b508080600101915050611bb4565b505050565b611c08613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611cd330612327565b9050611cde81613dec565b50565b611ce9613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e0257600080fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e5957600080fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f2d57611ee9600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611240565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612049613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661215f57600080fd5b60005b600a80549050811015612319578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061219357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561230c57600a6001600a8054905003815481106121ef57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061222757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806122d257fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612319565b8080600101915050612162565b5050565b6000600254905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156123c257600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061240d565b61240a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611240565b90505b919050565b61241a613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61261f613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008110156126f057600080fd5b8060198190555050565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127925780601f1061276757610100808354040283529160200191612792565b820191906000526020600020905b81548152906001019060200180831161277557829003601f168201915b5050505050905090565b600061287c6127a9613616565b84612877856040518060400160405280601481526020017f416c6c6f77616e63652062656c6f77207a65726f000000000000000000000000815250600560006127f0613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bb49092919063ffffffff16565b61361e565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128e057600080fd5b6002544210156128ef57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612a036129fc613616565b8484613815565b6001905092915050565b612a15613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612b38613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bf8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015612c0957600080fd5b8060188190555050565b612c1b613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8151811015612e41577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16828281518110612d2a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612d5357600080fd5b600160096000848481518110612d6557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a828281518110612dcc57fe5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050612cde565b5050565b612e4d613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612f9b613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461305b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b613213613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600a6132fa826132ec8587613ce990919063ffffffff16565b613ce990919063ffffffff16565b111561330557600080fd5b826011819055508160128190555080601381905550505050565b613327613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061597d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613532613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790506136008161409a565b50565b601760019054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806159e66024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561372a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806159a36022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561384f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561388957600080fd5b6000811161389657600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138ed57600080fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561394457600080fd5b600960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561399b57600080fd5b6139a36125ee565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613a1157506139e16125ee565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613a2657601854811115613a2557600080fd5b5b6000613a3130612327565b9050600060195482101590506018548210613a50576018549150613a56565b60195491505b601760009054906101000a900460ff16158015613a7f5750601760019054906101000a900460ff165b8015613a885750805b8015613ae057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613aef57613aee82614106565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613b965750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ba057600090505b613bac868686846142f9565b505050505050565b6000838311158290613c61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c26578082015181840152602081019050613c0b565b50505050905090810190601f168015613c535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613c8161460a565b91509150613c988183613c9f90919063ffffffff16565b9250505090565b6000613ce183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061489b565b905092915050565b600080828401905083811015613d67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613da28a601154613d9d601354601254613ce990919063ffffffff16565b614961565b9250925092506000613db2613c74565b90506000806000613dc48e87866149f7565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6060600267ffffffffffffffff81118015613e0657600080fd5b50604051908082528060200260200182016040528015613e355781602001602082028036833780820191505090505b5090503081600081518110613e4657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ee657600080fd5b505afa158015613efa573d6000803e3d6000fd5b505050506040513d6020811015613f1057600080fd5b810190808051906020019092919050505081600181518110613f2e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f93307f00000000000000000000000000000000000000000000000000000000000000008461361e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561405557808201518184015260208101905061403a565b505050509050019650505050505050600060405180830381600087803b15801561407e57600080fd5b505af1158015614092573d6000803e3d6000fd5b505050505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614102573d6000803e3d6000fd5b5050565b6001601760006101000a81548160ff021916908315150217905550600061417861413d601354601254613ce990919063ffffffff16565b61416a633b9aca0061415c612710601254614a8690919063ffffffff16565b614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006141b9633b9aca006141ab61271061419d8787614a8690919063ffffffff16565b613c9f90919063ffffffff16565b613c9f90919063ffffffff16565b905060006141d08285614b0c90919063ffffffff16565b905060006141e8600283613c9f90919063ffffffff16565b905060006141ff8284614b0c90919063ffffffff16565b90506000479050600061421b8685613ce990919063ffffffff16565b905061422681613dec565b600061423b8347614b0c90919063ffffffff16565b90506000614264836142568885614a8690919063ffffffff16565b613c9f90919063ffffffff16565b90506142708582614b56565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a16142d26142cd8284614b0c90919063ffffffff16565b61409a565b5050505050505050506000601760006101000a81548160ff02191690831515021790555050565b8061430757614306614cc2565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156143aa5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156143bf576143ba848484614d24565b6145f6565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156144625750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561447757614472848484614fbb565b6145f5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561451b5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156145305761452b848484615252565b6145f4565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156145d25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156145e7576145e2848484615454565b6145f3565b6145f2848484615252565b5b5b5b5b8061460457614603615780565b5b50505050565b6000806000600c5490506000600b54905060005b60088054905081101561485e5782600360006008848154811061463d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061472457508160046000600884815481106146bc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561473b57600c54600b5494509450505050614897565b6147c4600360006008848154811061474f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484614b0c90919063ffffffff16565b925061484f60046000600884815481106147da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483614b0c90919063ffffffff16565b9150808060010191505061461e565b50614876600b54600c54613c9f90919063ffffffff16565b82101561488e57600c54600b54935093505050614897565b81819350935050505b9091565b60008083118290614947576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561490c5780820151818401526020810190506148f1565b50505050905090810190601f1680156149395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161495357fe5b049050809150509392505050565b60008060008061498d606461497f888a614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006149b760646149a9888b614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006149e0826149d2858c614b0c90919063ffffffff16565b614b0c90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614a108588614a8690919063ffffffff16565b90506000614a278688614a8690919063ffffffff16565b90506000614a3e8284614b0c90919063ffffffff16565b905060008214614a7157614a6e82614a6060028a613c9f90919063ffffffff16565b613ce990919063ffffffff16565b91505b82818395509550955050505093509350939050565b600080831415614a995760009050614b06565b6000828402905082848281614aaa57fe5b0414614b01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159c56021913960400191505060405180910390fd5b809150505b92915050565b6000614b4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bb4565b905092915050565b614b81307f00000000000000000000000000000000000000000000000000000000000000008461361e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015614c6b57600080fd5b505af1158015614c7f573d6000803e3d6000fd5b50505050506040513d6060811015614c9657600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000601154148015614cd657506000601254145b8015614ce457506000601354145b15614cee57614d22565b6011546014819055506012546015819055506013546016819055506000601181905550600060128190555060006013819055505b565b600080600080600080614d3687613d71565b9550955095509550955095506000614d4c613c74565b90506000614d638284614a8690919063ffffffff16565b9050614db789600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e4c88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ef381614ee589600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f3f8361579d565b614f498685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b600080600080600080614fcd87613d71565b9550955095509550955095506000614fe3613c74565b90506000614ffa8284614a8690919063ffffffff16565b905061504e88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150e385600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061518a8161517c89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506151d68361579d565b6151e08685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b60008060008060008061526487613d71565b955095509550955095509550600061527a613c74565b905060006152918284614a8690919063ffffffff16565b90506152e588600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061538c8161537e89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506153d88361579d565b6153e28685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b60008060008060008061546687613d71565b955095509550955095509550600061547c613c74565b905060006154938284614a8690919063ffffffff16565b90506154e789600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061557c88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061561185600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506156b8816156aa89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506157048361579d565b61570e8685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b601454601181905550601554601281905550601654601381905550565b60006157a7613c74565b905060006157be8284614a8690919063ffffffff16565b905061581281600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561593d576158f983600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61595782600c54614b0c90919063ffffffff16565b600c8190555061597281600d54613ce990919063ffffffff16565b600d81905550505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122005427fdce118debf3ee1c97fed46b9e10b8270bbf549ccde02c0dafa87947f8b64736f6c634300060c003300000000000000000000000002a1a30acfe61cb76553b7102b39d6cb815caa83
Deployed Bytecode
0x60806040526004361061024a5760003560e01c80635fecd92611610139578063a9059cbb116100b6578063dd4670641161007a578063dd46706414610eae578063dd62ed3e14610ee9578063e821432a14610f6e578063f2fde38b14610fbd578063f42938901461100e578063fabc40351461102557610251565b8063a9059cbb14610c6f578063af9549e014610ce0578063bc33718214610d3d578063d34628cc14610d78578063d3f6a15714610e3d57610251565b80638da5cb5b116100fd5780638da5cb5b14610adb5780638de9443614610b1c57806395d89b4114610b57578063a457c2d714610be7578063a69df4b514610c5857610251565b80635fecd9261461097c578063602bc62b146109cd57806370a08231146109f8578063715018a614610a5d57806388f8202014610a7457610251565b806339509351116101c757806349bd5a5e1161018b57806349bd5a5e146107135780635115baf21461075457806351bc3c85146108ad57806352390c02146108c45780635342acb41461091557610251565b806339509351146105885780633ccdbb28146105f957806341609b38146106745780634549b039146106a157806348971a0d146106fc57610251565b806323b872dd1161020e57806323b872dd146103ee5780632d8381191461047f57806330599fc5146104ce578063313ce567146105095780633685d4191461053757610251565b806306fdde0314610256578063095ea7b3146102e657806313114a9d146103575780631694505e1461038257806318160ddd146103c357610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b611052565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f257600080fd5b5061033f6004803603604081101561030957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110f4565b60405180821515815260200191505060405180910390f35b34801561036357600080fd5b5061036c611112565b6040518082815260200191505060405180910390f35b34801561038e57600080fd5b5061039761111c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103cf57600080fd5b506103d8611140565b6040518082815260200191505060405180910390f35b3480156103fa57600080fd5b506104676004803603606081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061114a565b60405180821515815260200191505060405180910390f35b34801561048b57600080fd5b506104b8600480360360208110156104a257600080fd5b8101908080359060200190929190505050611240565b6040518082815260200191505060405180910390f35b3480156104da57600080fd5b50610507600480360360208110156104f157600080fd5b8101908080359060200190929190505050611278565b005b34801561051557600080fd5b5061051e611367565b604051808260ff16815260200191505060405180910390f35b34801561054357600080fd5b506105866004803603602081101561055a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061137e565b005b34801561059457600080fd5b506105e1600480360360408110156105ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061169f565b60405180821515815260200191505060405180910390f35b34801561060557600080fd5b506106726004803603606081101561061c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611752565b005b34801561068057600080fd5b5061068961195e565b60405180821515815260200191505060405180910390f35b3480156106ad57600080fd5b506106e6600480360360408110156106c457600080fd5b8101908080359060200190929190803515159060200190929190505050611975565b6040518082815260200191505060405180910390f35b34801561070857600080fd5b506107116119c3565b005b34801561071f57600080fd5b50610728611ab7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076057600080fd5b506108ab6004803603604081101561077757600080fd5b810190808035906020019064010000000081111561079457600080fd5b8201836020820111156107a657600080fd5b803590602001918460208302840111640100000000831117156107c857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561082857600080fd5b82018360208201111561083a57600080fd5b8035906020019184602083028401116401000000008311171561085c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611adb565b005b3480156108b957600080fd5b506108c2611c00565b005b3480156108d057600080fd5b50610913600480360360208110156108e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ce1565b005b34801561092157600080fd5b506109646004803603602081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611feb565b60405180821515815260200191505060405180910390f35b34801561098857600080fd5b506109cb6004803603602081101561099f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612041565b005b3480156109d957600080fd5b506109e261231d565b6040518082815260200191505060405180910390f35b348015610a0457600080fd5b50610a4760048036036020811015610a1b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612327565b6040518082815260200191505060405180910390f35b348015610a6957600080fd5b50610a72612412565b005b348015610a8057600080fd5b50610ac360048036036020811015610a9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612598565b60405180821515815260200191505060405180910390f35b348015610ae757600080fd5b50610af06125ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2857600080fd5b50610b5560048036036020811015610b3f57600080fd5b8101908080359060200190929190505050612617565b005b348015610b6357600080fd5b50610b6c6126fa565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bac578082015181840152602081019050610b91565b50505050905090810190601f168015610bd95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bf357600080fd5b50610c4060048036036040811015610c0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061279c565b60405180821515815260200191505060405180910390f35b348015610c6457600080fd5b50610c6d612886565b005b348015610c7b57600080fd5b50610cc860048036036040811015610c9257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506129ef565b60405180821515815260200191505060405180910390f35b348015610cec57600080fd5b50610d3b60048036036040811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612a0d565b005b348015610d4957600080fd5b50610d7660048036036020811015610d6057600080fd5b8101908080359060200190929190505050612b30565b005b348015610d8457600080fd5b50610e3b60048036036020811015610d9b57600080fd5b8101908080359060200190640100000000811115610db857600080fd5b820183602082011115610dca57600080fd5b80359060200191846020830284011164010000000083111715610dec57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612c13565b005b348015610e4957600080fd5b50610eac60048036036040811015610e6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e45565b005b348015610eba57600080fd5b50610ee760048036036020811015610ed157600080fd5b8101908080359060200190929190505050612f93565b005b348015610ef557600080fd5b50610f5860048036036040811015610f0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613184565b6040518082815260200191505060405180910390f35b348015610f7a57600080fd5b50610fbb60048036036060811015610f9157600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061320b565b005b348015610fc957600080fd5b5061100c60048036036020811015610fe057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061331f565b005b34801561101a57600080fd5b5061102361352a565b005b34801561103157600080fd5b5061103a613603565b60405180821515815260200191505060405180910390f35b6060600e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110ea5780601f106110bf576101008083540402835291602001916110ea565b820191906000526020600020905b8154815290600101906020018083116110cd57829003601f168201915b5050505050905090565b6000611108611101613616565b848461361e565b6001905092915050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b6000611157848484613815565b61123584611163613616565b611230856040518060400160405280601881526020017f416d6f756e74206578636565647320616c6c6f77616e63650000000000000000815250600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111e6613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bb49092919063ffffffff16565b61361e565b600190509392505050565b6000600c5482111561125157600080fd5b600061125b613c74565b90506112708184613c9f90919063ffffffff16565b915050919050565b611280613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6113523061134c6125ee565b8361361e565b6113643061135e6125ee565b83613815565b50565b6000601060009054906101000a900460ff16905090565b611386613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661149c57600080fd5b60005b60088054905081101561169b578173ffffffffffffffffffffffffffffffffffffffff16600882815481106114d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561168e5760086001600880549050038154811061152c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061156457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061165457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561169b565b808060010191505061149f565b5050565b60006117486116ac613616565b8461174385600560006116bd613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b61361e565b6001905092915050565b61175a613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7f000000000000000000000000af7c6dead245b93de19bb1bb828b0acce94aefb373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561187357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118ac57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561191d57600080fd5b505af1158015611931573d6000803e3d6000fd5b505050506040513d602081101561194757600080fd5b810190808051906020019092919050505050505050565b6000601760019054906101000a900460ff16905090565b6000600b5483111561198657600080fd5b816119a657600061199684613d71565b50505050509050809150506119bd565b60006119b184613d71565b50505050915050809150505b92915050565b6119cb613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601760019054906101000a900460ff1615601760016101000a81548160ff021916908315150217905550565b7f000000000000000000000000af7c6dead245b93de19bb1bb828b0acce94aefb381565b611ae3613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8051825114611bb157600080fd5b60005b8251811015611bfb57611bed838281518110611bcc57fe5b6020026020010151838381518110611be057fe5b60200260200101516129ef565b508080600101915050611bb4565b505050565b611c08613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611cd330612327565b9050611cde81613dec565b50565b611ce9613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e0257600080fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e5957600080fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f2d57611ee9600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611240565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612049613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661215f57600080fd5b60005b600a80549050811015612319578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061219357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561230c57600a6001600a8054905003815481106121ef57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061222757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806122d257fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612319565b8080600101915050612162565b5050565b6000600254905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156123c257600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061240d565b61240a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611240565b90505b919050565b61241a613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61261f613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008110156126f057600080fd5b8060198190555050565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127925780601f1061276757610100808354040283529160200191612792565b820191906000526020600020905b81548152906001019060200180831161277557829003601f168201915b5050505050905090565b600061287c6127a9613616565b84612877856040518060400160405280601481526020017f416c6c6f77616e63652062656c6f77207a65726f000000000000000000000000815250600560006127f0613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bb49092919063ffffffff16565b61361e565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128e057600080fd5b6002544210156128ef57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612a036129fc613616565b8484613815565b6001905092915050565b612a15613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612b38613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bf8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015612c0957600080fd5b8060188190555050565b612c1b613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8151811015612e41577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16828281518110612d2a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612d5357600080fd5b600160096000848481518110612d6557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a828281518110612dcc57fe5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050612cde565b5050565b612e4d613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612f9b613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461305b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b613213613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600a6132fa826132ec8587613ce990919063ffffffff16565b613ce990919063ffffffff16565b111561330557600080fd5b826011819055508160128190555080601381905550505050565b613327613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061597d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613532613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790506136008161409a565b50565b601760019054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806159e66024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561372a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806159a36022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561384f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561388957600080fd5b6000811161389657600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138ed57600080fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561394457600080fd5b600960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561399b57600080fd5b6139a36125ee565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613a1157506139e16125ee565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613a2657601854811115613a2557600080fd5b5b6000613a3130612327565b9050600060195482101590506018548210613a50576018549150613a56565b60195491505b601760009054906101000a900460ff16158015613a7f5750601760019054906101000a900460ff165b8015613a885750805b8015613ae057507f000000000000000000000000af7c6dead245b93de19bb1bb828b0acce94aefb373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613aef57613aee82614106565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613b965750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ba057600090505b613bac868686846142f9565b505050505050565b6000838311158290613c61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c26578082015181840152602081019050613c0b565b50505050905090810190601f168015613c535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613c8161460a565b91509150613c988183613c9f90919063ffffffff16565b9250505090565b6000613ce183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061489b565b905092915050565b600080828401905083811015613d67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613da28a601154613d9d601354601254613ce990919063ffffffff16565b614961565b9250925092506000613db2613c74565b90506000806000613dc48e87866149f7565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6060600267ffffffffffffffff81118015613e0657600080fd5b50604051908082528060200260200182016040528015613e355781602001602082028036833780820191505090505b5090503081600081518110613e4657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ee657600080fd5b505afa158015613efa573d6000803e3d6000fd5b505050506040513d6020811015613f1057600080fd5b810190808051906020019092919050505081600181518110613f2e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f93307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461361e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561405557808201518184015260208101905061403a565b505050509050019650505050505050600060405180830381600087803b15801561407e57600080fd5b505af1158015614092573d6000803e3d6000fd5b505050505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614102573d6000803e3d6000fd5b5050565b6001601760006101000a81548160ff021916908315150217905550600061417861413d601354601254613ce990919063ffffffff16565b61416a633b9aca0061415c612710601254614a8690919063ffffffff16565b614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006141b9633b9aca006141ab61271061419d8787614a8690919063ffffffff16565b613c9f90919063ffffffff16565b613c9f90919063ffffffff16565b905060006141d08285614b0c90919063ffffffff16565b905060006141e8600283613c9f90919063ffffffff16565b905060006141ff8284614b0c90919063ffffffff16565b90506000479050600061421b8685613ce990919063ffffffff16565b905061422681613dec565b600061423b8347614b0c90919063ffffffff16565b90506000614264836142568885614a8690919063ffffffff16565b613c9f90919063ffffffff16565b90506142708582614b56565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a16142d26142cd8284614b0c90919063ffffffff16565b61409a565b5050505050505050506000601760006101000a81548160ff02191690831515021790555050565b8061430757614306614cc2565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156143aa5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156143bf576143ba848484614d24565b6145f6565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156144625750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561447757614472848484614fbb565b6145f5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561451b5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156145305761452b848484615252565b6145f4565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156145d25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156145e7576145e2848484615454565b6145f3565b6145f2848484615252565b5b5b5b5b8061460457614603615780565b5b50505050565b6000806000600c5490506000600b54905060005b60088054905081101561485e5782600360006008848154811061463d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061472457508160046000600884815481106146bc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561473b57600c54600b5494509450505050614897565b6147c4600360006008848154811061474f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484614b0c90919063ffffffff16565b925061484f60046000600884815481106147da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483614b0c90919063ffffffff16565b9150808060010191505061461e565b50614876600b54600c54613c9f90919063ffffffff16565b82101561488e57600c54600b54935093505050614897565b81819350935050505b9091565b60008083118290614947576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561490c5780820151818401526020810190506148f1565b50505050905090810190601f1680156149395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161495357fe5b049050809150509392505050565b60008060008061498d606461497f888a614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006149b760646149a9888b614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006149e0826149d2858c614b0c90919063ffffffff16565b614b0c90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614a108588614a8690919063ffffffff16565b90506000614a278688614a8690919063ffffffff16565b90506000614a3e8284614b0c90919063ffffffff16565b905060008214614a7157614a6e82614a6060028a613c9f90919063ffffffff16565b613ce990919063ffffffff16565b91505b82818395509550955050505093509350939050565b600080831415614a995760009050614b06565b6000828402905082848281614aaa57fe5b0414614b01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159c56021913960400191505060405180910390fd5b809150505b92915050565b6000614b4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bb4565b905092915050565b614b81307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461361e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015614c6b57600080fd5b505af1158015614c7f573d6000803e3d6000fd5b50505050506040513d6060811015614c9657600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000601154148015614cd657506000601254145b8015614ce457506000601354145b15614cee57614d22565b6011546014819055506012546015819055506013546016819055506000601181905550600060128190555060006013819055505b565b600080600080600080614d3687613d71565b9550955095509550955095506000614d4c613c74565b90506000614d638284614a8690919063ffffffff16565b9050614db789600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e4c88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ef381614ee589600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f3f8361579d565b614f498685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b600080600080600080614fcd87613d71565b9550955095509550955095506000614fe3613c74565b90506000614ffa8284614a8690919063ffffffff16565b905061504e88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150e385600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061518a8161517c89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506151d68361579d565b6151e08685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b60008060008060008061526487613d71565b955095509550955095509550600061527a613c74565b905060006152918284614a8690919063ffffffff16565b90506152e588600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061538c8161537e89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506153d88361579d565b6153e28685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b60008060008060008061546687613d71565b955095509550955095509550600061547c613c74565b905060006154938284614a8690919063ffffffff16565b90506154e789600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061557c88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061561185600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506156b8816156aa89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506157048361579d565b61570e8685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b601454601181905550601554601281905550601654601381905550565b60006157a7613c74565b905060006157be8284614a8690919063ffffffff16565b905061581281600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561593d576158f983600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61595782600c54614b0c90919063ffffffff16565b600c8190555061597281600d54613ce990919063ffffffff16565b600d81905550505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122005427fdce118debf3ee1c97fed46b9e10b8270bbf549ccde02c0dafa87947f8b64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000002a1a30acfe61cb76553b7102b39d6cb815caa83
-----Decoded View---------------
Arg [0] : marketingAddress (address): 0x02A1A30AcfE61cB76553b7102b39D6CB815caA83
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000002a1a30acfe61cb76553b7102b39d6cb815caa83
Deployed Bytecode Sourcemap
636:22218:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3602:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4550:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6074:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2015:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3867:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4743:370;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6605:233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22114:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3780:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7222:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5119:290;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22284:263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13677:101;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6165:434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13562:109;;;;;;;;;;;;;:::i;:::-;;2072:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22553:299;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13245:151;;;;;;;;;;;;;:::i;:::-;;6844:372;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8830:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7986:358;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1853:88:8;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3966:196:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1279:145:8;;;;;;;;;;;;;:::i;:::-;;5791:118:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;656:77:8;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21778:207:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3689:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5415:370;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2308:226:8;;;;;;;;;;;;;:::i;:::-;;4168:193:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5915:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21991:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7664:316;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21573:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2018:213:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4367:177:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21289:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1573:274:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13402:154:1;;;;;;;;;;;;;:::i;:::-;;2185:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3602:81;3639:13;3671:5;3664:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3602:81;:::o;4550:187::-;4649:4;4669:39;4678:12;:10;:12::i;:::-;4692:7;4701:6;4669:8;:39::i;:::-;4726:4;4719:11;;4550:187;;;;:::o;6074:85::-;6116:7;6142:10;;6135:17;;6074:85;:::o;2015:51::-;;;:::o;3867:93::-;3920:7;3946;;3939:14;;3867:93;:::o;4743:370::-;4871:4;4887:36;4897:6;4905:9;4916:6;4887:9;:36::i;:::-;4933:151;4955:6;4975:12;:10;:12::i;:::-;5001:73;5039:6;5001:73;;;;;;;;;;;;;;;;;:11;:19;5013:6;5001:19;;;;;;;;;;;;;;;:33;5021:12;:10;:12::i;:::-;5001:33;;;;;;;;;;;;;;;;:37;;:73;;;;;:::i;:::-;4933:8;:151::i;:::-;5102:4;5095:11;;4743:370;;;;;:::o;6605:233::-;6696:7;6738;;6727;:18;;6719:27;;;;;;6757:19;6779:10;:8;:10::i;:::-;6757:32;;6807:24;6819:11;6807:7;:11;;:24;;;;:::i;:::-;6800:31;;;6605:233;;;:::o;22114:164::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22180:40:1::1;22197:4;22204:7;:5;:7::i;:::-;22213:6;22180:8;:40::i;:::-;22230:41;22248:4;22255:7;:5;:7::i;:::-;22264:6;22230:9;:41::i;:::-;22114:164:::0;:::o;3780:81::-;3821:5;3845:9;;;;;;;;;;;3838:16;;3780:81;:::o;7222:436::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7301:11:1::1;:20;7313:7;7301:20;;;;;;;;;;;;;;;;;;;;;;;;;7293:29;;;::::0;::::1;;7338:9;7333:319;7357:9;:16;;;;7353:1;:20;7333:319;;;7414:7;7398:23;;:9;7408:1;7398:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;7394:248;;;7456:9;7485:1;7466:9;:16;;;;:20;7456:31;;;;;;;;;;;;;;;;;;;;;;;;;7441:9;7451:1;7441:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;7524:1;7505:7;:16;7513:7;7505:16;;;;;;;;;;;;;;;:20;;;;7566:5;7543:11;:20;7555:7;7543:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;7589:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7622:5;;7394:248;7375:3;;;;;;;7333:319;;;;7222:436:::0;:::o;5119:290::-;5231:4;5251:129;5273:12;:10;:12::i;:::-;5299:7;5320:50;5359:10;5320:11;:25;5332:12;:10;:12::i;:::-;5320:25;;;;;;;;;;;;;;;:34;5346:7;5320:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5251:8;:129::i;:::-;5398:4;5391:11;;5119:290;;;;:::o;22284:263::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22433:13:1::1;22424:22;;:5;:22;;;;22416:31;;;::::0;::::1;;22482:4;22465:22;;:5;:22;;;;22457:31;;;::::0;::::1;;22506:5;22499:22;;;22522:9;22533:6;22499:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;22284:263:::0;;;:::o;13677:101::-;13730:4;13753:18;;;;;;;;;;;13746:25;;13677:101;:::o;6165:434::-;6280:7;6322;;6311;:18;;6303:27;;;;;;6346:17;6341:252;;6380:15;6409:19;6420:7;6409:10;:19::i;:::-;6379:49;;;;;;;6450:7;6443:14;;;;;6341:252;6491:23;6526:19;6537:7;6526:10;:19::i;:::-;6488:57;;;;;;;6567:15;6560:22;;;6165:434;;;;;:::o;13562:109::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13646:18:1::1;;;;;;;;;;;13645:19;13624:18;;:40;;;;;;;;;;;;;;;;;;13562:109::o:0;2072:38::-;;;:::o;22553:299::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22712:7:1::1;:14;22691:10;:17;:35;22683:44;;;::::0;::::1;;22743:9;22738:108;22762:10;:17;22758:1;:21;22738:108;;;22800:35;22809:10;22820:1;22809:13;;;;;;;;;;;;;;22824:7;22832:1;22824:10;;;;;;;;;;;;;;22800:8;:35::i;:::-;;22781:3;;;;;;;22738:108;;;;22553:299:::0;;:::o;13245:151::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13296:23:1::1;13322:24;13340:4;13322:9;:24::i;:::-;13296:50;;13356:33;13373:15;13356:16;:33::i;:::-;929:1:8;13245:151:1:o:0;6844:372::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6944:15:1::1;6925:35;;:7;:35;;;;6917:44;;;::::0;::::1;;7000:11;:20;7012:7;7000:20;;;;;;;;;;;;;;;;;;;;;;;;;6999:21;6991:30;;;::::0;::::1;;7055:1;7036:7;:16;7044:7;7036:16;;;;;;;;;;;;;;;;:20;7032:107;;;7091:37;7111:7;:16;7119:7;7111:16;;;;;;;;;;;;;;;;7091:19;:37::i;:::-;7072:7;:16;7080:7;7072:16;;;;;;;;;;;;;;;:56;;;;7032:107;7172:4;7149:11;:20;7161:7;7149:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;7186:9;7201:7;7186:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6844:372:::0;:::o;8830:122::-;8895:4;8918:18;:27;8937:7;8918:27;;;;;;;;;;;;;;;;;;;;;;;;;8911:34;;8830:122;;;:::o;7986:358::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8059:6:1::1;:15;8066:7;8059:15;;;;;;;;;;;;;;;;;;;;;;;;;8051:24;;;::::0;::::1;;8091:9;8086:252;8110:5;:12;;;;8106:1;:16;8086:252;;;8159:7;8147:19;;:5;8153:1;8147:8;;;;;;;;;;;;;;;;;;;;;;;;;:19;;;8143:185;;;8197:5;8218:1;8203:5;:12;;;;:16;8197:23;;;;;;;;;;;;;;;;;;;;;;;;;8186:5;8192:1;8186:8;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;8256:5;8238:6;:15;8245:7;8238:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;8279:5;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8308:5;;8143:185;8124:3;;;;;;;8086:252;;;;7986:358:::0;:::o;1853:88:8:-;1899:7;1925:9;;1918:16;;1853:88;:::o;3966:196:1:-;4032:7;4055:11;:20;4067:7;4055:20;;;;;;;;;;;;;;;;;;;;;;;;;4051:49;;;4084:7;:16;4092:7;4084:16;;;;;;;;;;;;;;;;4077:23;;;;4051:49;4118:37;4138:7;:16;4146:7;4138:16;;;;;;;;;;;;;;;;4118:19;:37::i;:::-;4111:44;;3966:196;;;;:::o;1279:145:8:-;870:12;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1385:1:::1;1348:40;;1369:6;::::0;::::1;;;;;;;;1348:40;;;;;;;;;;;;1415:1;1398:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1279:145::o:0;5791:118:1:-;5859:4;5882:11;:20;5894:7;5882:20;;;;;;;;;;;;;;;;;;;;;;;;;5875:27;;5791:118;;;:::o;656:77:8:-;694:7;720:6;;;;;;;;;;;713:13;;656:77;:::o;21778:207:1:-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21919:5:1::1;21896:19;:28;;21888:37;;;::::0;::::1;;21959:19;21936:20;:42;;;;21778:207:::0;:::o;3689:85::-;3728:13;3760:7;3753:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3689:85;:::o;5415:370::-;5532:4;5552:204;5574:12;:10;:12::i;:::-;5600:7;5621:125;5677:15;5621:125;;;;;;;;;;;;;;;;;:11;:25;5633:12;:10;:12::i;:::-;5621:25;;;;;;;;;;;;;;;:34;5647:7;5621:34;;;;;;;;;;;;;;;;:38;;:125;;;;;:::i;:::-;5552:8;:204::i;:::-;5774:4;5767:11;;5415:370;;;;:::o;2308:226:8:-;2377:10;2359:28;;:14;;;;;;;;;;;:28;;;2351:37;;;;;;2425:9;;2406:15;:28;;2398:37;;;;;;2479:14;;;;;;;;;;;2450:44;;2471:6;;;;;;;;;;2450:44;;;;;;;;;;;;2513:14;;;;;;;;;;;2504:6;;:23;;;;;;;;;;;;;;;;;;2308:226::o;4168:193:1:-;4270:4;4290:42;4300:12;:10;:12::i;:::-;4314:9;4325:6;4290:9;:42::i;:::-;4350:4;4343:11;;4168:193;;;;:::o;5915:153::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6053:8:1::1;6023:18;:27;6042:7;6023:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;5915:153:::0;;:::o;21991:117::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22070:5:1::1;22061;:14;;22053:23;;;::::0;::::1;;22096:5;22087:6;:14;;;;21991:117:::0;:::o;7664:316::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7746:9:1::1;7741:233;7765:12;:19;7761:1;:23;7741:233;;;7840:15;7813:43;;:12;7826:1;7813:15;;;;;;;;;;;;;;:43;;;;7805:52;;;::::0;::::1;;7918:4;7892:6;:23;7899:12;7912:1;7899:15;;;;;;;;;;;;;;7892:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;7936:5;7947:12;7960:1;7947:15;;;;;;;;;;;;;;7936:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7786:3;;;;;;;7741:233;;;;7664:316:::0;:::o;21573:199::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21715:16:1::1;21687:17;;:45;;;;;;;;;;;;;;;;;;21756:9;21743:10;;:22;;;;;;;;;;;;;;;;;;21573:199:::0;;:::o;2018:213:8:-;870:12;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2090:6:::1;::::0;::::1;;;;;;;;2073:14;;:23;;;;;;;;;;;;;;;;;;2123:1;2106:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2165:4;2147:15;:22;2135:9;:34;;;;2221:1;2184:40;;2205:6;::::0;::::1;;;;;;;;2184:40;;;;;;;;;;;;2018:213:::0;:::o;4367:177:1:-;4480:7;4510:11;:18;4522:5;4510:18;;;;;;;;;;;;;;;:27;4529:7;4510:27;;;;;;;;;;;;;;;;4503:34;;4367:177;;;;:::o;21289:278::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21463:2:1::1;21426:33;21449:9;21426:18;21434:9;21426:3;:7;;:18;;;;:::i;:::-;:22;;:33;;;;:::i;:::-;:39;;21418:48;;;::::0;::::1;;21487:3;21477:7;:13;;;;21516:9;21500:13;:25;;;;21551:9;21535:13;:25;;;;21289:278:::0;;;:::o;1573:274:8:-;870:12;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1694:1:::1;1674:22;;:8;:22;;;;1653:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1804:8;1775:38;;1796:6;::::0;::::1;;;;;;;;1775:38;;;;;;;;;;;;1832:8;1823:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1573:274:::0;:::o;13402:154:1:-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13451:26:1::1;13480:21;13451:50;;13511:38;13530:18;13511;:38::i;:::-;929:1:8;13402:154:1:o:0;2185:37::-;;;;;;;;;;;;;:::o;587:96:2:-;640:7;666:10;659:17;;587:96;:::o;8958:362:1:-;9097:1;9080:19;;:5;:19;;;;9072:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9177:1;9158:21;;:7;:21;;;;9150:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9259:6;9229:11;:18;9241:5;9229:18;;;;;;;;;;;;;;;:27;9248:7;9229:27;;;;;;;;;;;;;;;:36;;;;9297:7;9281:32;;9290:5;9281:32;;;9306:6;9281:32;;;;;;;;;;;;;;;;;;8958:362;;;:::o;9326:1529::-;9470:1;9452:20;;:6;:20;;;;9444:29;;;;;;9512:1;9491:23;;:9;:23;;;;9483:32;;;;;;9542:1;9533:6;:10;9525:19;;;;;;9563:6;:14;9570:6;9563:14;;;;;;;;;;;;;;;;;;;;;;;;;9562:15;9554:24;;;;;;9597:6;:17;9604:9;9597:17;;;;;;;;;;;;;;;;;;;;;;;;;9596:18;9588:27;;;;;;9634:6;:17;9641:9;9634:17;;;;;;;;;;;;;;;;;;;;;;;;;9633:18;9625:27;;;;;;9677:7;:5;:7::i;:::-;9667:17;;:6;:17;;;;:41;;;;;9701:7;:5;:7::i;:::-;9688:20;;:9;:20;;;;9667:41;9663:114;;;9742:6;;9732;:16;;9724:25;;;;;;9663:114;9787:28;9818:24;9836:4;9818:9;:24::i;:::-;9787:55;;9922:24;9973:20;;9949;:44;;9922:71;;10077:6;;10053:20;:30;10049:223;;10122:6;;10099:29;;10049:223;;;10241:20;;10218:43;;10049:223;10300:6;;;;;;;;;;;10299:7;:41;;;;;10322:18;;;;;;;;;;;10299:41;:76;;;;;10356:19;10299:76;:124;;;;;10409:13;10391:32;;:6;:32;;;;10299:124;10282:242;;;10477:36;10492:20;10477:14;:36::i;:::-;10282:242;10534:12;10549:4;10534:19;;10631:18;:26;10650:6;10631:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;10661:18;:29;10680:9;10661:29;;;;;;;;;;;;;;;;;;;;;;;;;10631:59;10627:105;;;10716:5;10706:15;;10627:105;10798:50;10813:6;10821:9;10832:6;10840:7;10798:14;:50::i;:::-;9326:1529;;;;;;:::o;1183:217:9:-;1299:7;1331:1;1326;:6;;1334:12;1318:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1357:9;1373:1;1369;:5;1357:17;;1392:1;1385:8;;;1183:217;;;;;:::o;20520:162:1:-;20562:7;20582:15;20599;20618:19;:17;:19::i;:::-;20581:56;;;;20655:20;20667:7;20655;:11;;:20;;;;:::i;:::-;20648:27;;;;20520:162;:::o;2568:130:9:-;2626:7;2652:39;2656:1;2659;2652:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2645:46;;2568:130;;;;:::o;311:176::-;369:7;388:9;404:1;400;:5;388:17;;428:1;423;:6;;415:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;479:1;472:8;;;311:176;;;;:::o;18655:798:1:-;18751:7;18772;18793;18814;18835;18856;18902:23;18939:12;18965:30;19008:63;19020:7;19029;;19038:32;19056:13;;19038;;:17;;:32;;;;:::i;:::-;19008:11;:63::i;:::-;18888:183;;;;;;19081:19;19103:10;:8;:10::i;:::-;19081:32;;19124:15;19141:23;19166:12;19182:85;19207:7;19228:4;19246:11;19182;:85::i;:::-;19123:144;;;;;;19299:7;19320:15;19349:4;19367:15;19396:4;19414:22;19278:168;;;;;;;;;;;;;;;;;;;18655:798;;;;;;;:::o;12153:536::-;12277:21;12315:1;12301:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12277:40;;12345:4;12327;12332:1;12327:7;;;;;;;;;;;;;:23;;;;;;;;;;;12370:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12360:4;12365:1;12360:7;;;;;;;;;;;;;:32;;;;;;;;;;;12403:62;12420:4;12435:15;12453:11;12403:8;:62::i;:::-;12492:15;:66;;;12572:11;12597:1;12612:4;12638;12657:15;12492:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12153:536;;:::o;13080:103::-;13142:17;;;;;;;;;;;:26;;:34;13169:6;13142:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13080:103;:::o;10861:1286::-;2295:4;2286:6;;:13;;;;;;;;;;;;;;;;;;10981:26:::1;11010:73;11050:32;11068:13;;11050;;:17;;:32;;;;:::i;:::-;11010:35;11039:5;11010:24;11028:5;11010:13;;:17;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;:39;;:73;;;;:::i;:::-;10981:102;;11093:19;11115:56;11165:5;11115:45;11154:5;11115:34;11138:10;11115:18;:22;;:34;;;;:::i;:::-;:38;;:45;;;;:::i;:::-;:49;;:56;;;;:::i;:::-;11093:78;;11181:17;11201:27;11216:11;11201:10;:14;;:27;;;;:::i;:::-;11181:47;;11282:23;11308:16;11322:1;11308:9;:13;;:16;;;;:::i;:::-;11282:42;;11334:22;11359:30;11373:15;11359:9;:13;;:30;;;;:::i;:::-;11334:55;;11400:28;11431:21;11400:52;;11494:20;11517:32;11537:11;11517:15;:19;;:32;;;;:::i;:::-;11494:55;;11559:30;11576:12;11559:16;:30::i;:::-;11631:26;11660:47;11686:20;11660:21;:25;;:47;;;;:::i;:::-;11631:76;;11800:17;11820:57;11864:12;11820:39;11843:15;11820:18;:22;;:39;;;;:::i;:::-;:43;;:57;;;;:::i;:::-;11800:77;;11924:39;11937:14;11953:9;11924:12;:39::i;:::-;11979:58;11994:15;12011:9;12022:14;11979:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12087:53;12106:33;12129:9;12106:18;:22;;:33;;;;:::i;:::-;12087:18;:53::i;:::-;2309:1;;;;;;;;;2329:5:::0;2320:6;;:14;;;;;;;;;;;;;;;;;;10861:1286;:::o;13784:817::-;13934:7;13929:28;;13943:14;:12;:14::i;:::-;13929:28;13972:11;:19;13984:6;13972:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;13996:11;:22;14008:9;13996:22;;;;;;;;;;;;;;;;;;;;;;;;;13995:23;13972:46;13968:587;;;14034:48;14056:6;14064:9;14075:6;14034:21;:48::i;:::-;13968:587;;;14104:11;:19;14116:6;14104:19;;;;;;;;;;;;;;;;;;;;;;;;;14103:20;:46;;;;;14127:11;:22;14139:9;14127:22;;;;;;;;;;;;;;;;;;;;;;;;;14103:46;14099:456;;;14165:46;14185:6;14193:9;14204:6;14165:19;:46::i;:::-;14099:456;;;14233:11;:19;14245:6;14233:19;;;;;;;;;;;;;;;;;;;;;;;;;14232:20;:47;;;;;14257:11;:22;14269:9;14257:22;;;;;;;;;;;;;;;;;;;;;;;;;14256:23;14232:47;14228:327;;;14295:44;14313:6;14321:9;14332:6;14295:17;:44::i;:::-;14228:327;;;14360:11;:19;14372:6;14360:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;14383:11;:22;14395:9;14383:22;;;;;;;;;;;;;;;;;;;;;;;;;14360:45;14356:199;;;14421:48;14443:6;14451:9;14462:6;14421:21;:48::i;:::-;14356:199;;;14500:44;14518:6;14526:9;14537:6;14500:17;:44::i;:::-;14356:199;14228:327;14099:456;13968:587;14570:7;14565:29;;14579:15;:13;:15::i;:::-;14565:29;13784:817;;;;:::o;20688:595::-;20739:7;20748;20767:15;20785:7;;20767:25;;20802:15;20820:7;;20802:25;;20843:9;20838:331;20862:9;:16;;;;20858:1;:20;20838:331;;;20944:7;20920;:21;20928:9;20938:1;20928:12;;;;;;;;;;;;;;;;;;;;;;;;;20920:21;;;;;;;;;;;;;;;;:31;:82;;;;20995:7;20971;:21;20979:9;20989:1;20979:12;;;;;;;;;;;;;;;;;;;;;;;;;20971:21;;;;;;;;;;;;;;;;:31;20920:82;20899:143;;;21025:7;;21034;;21017:25;;;;;;;;;20899:143;21066:34;21078:7;:21;21086:9;21096:1;21086:12;;;;;;;;;;;;;;;;;;;;;;;;;21078:21;;;;;;;;;;;;;;;;21066:7;:11;;:34;;;;:::i;:::-;21056:44;;21124:34;21136:7;:21;21144:9;21154:1;21144:12;;;;;;;;;;;;;;;;;;;;;;;;;21136:21;;;;;;;;;;;;;;;;21124:7;:11;;:34;;;;:::i;:::-;21114:44;;20880:3;;;;;;;20838:331;;;;21193:20;21205:7;;21193;;:11;;:20;;;;:::i;:::-;21183:7;:30;21179:61;;;21223:7;;21232;;21215:25;;;;;;;;21179:61;21259:7;21268;21251:25;;;;;;20688:595;;;:::o;3180:302:9:-;3296:7;3327:1;3323;:5;3330:12;3315:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3353:9;3369:1;3365;:5;;;;;;3353:17;;3474:1;3467:8;;;3180:302;;;;;:::o;19459:530:1:-;19633:7;19654;19675;19707:12;19722:28;19746:3;19722:19;19734:6;19722:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;19707:43;;19760:30;19793:43;19832:3;19793:34;19805:21;19793:7;:11;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;19760:76;;19846:23;19872:45;19894:22;19872:17;19884:4;19872:7;:11;;:17;;;;:::i;:::-;:21;;:45;;;;:::i;:::-;19846:71;;19936:15;19953:4;19959:22;19928:54;;;;;;;;;19459:530;;;;;;;:::o;19995:519::-;20157:7;20178;20199;20231:15;20249:24;20261:11;20249:7;:11;;:24;;;;:::i;:::-;20231:42;;20283:12;20298:21;20307:11;20298:4;:8;;:21;;;;:::i;:::-;20283:36;;20329:23;20355:17;20367:4;20355:7;:11;;:17;;;;:::i;:::-;20329:43;;20395:1;20387:4;:9;20383:75;;20419:28;20442:4;20419:18;20435:1;20419:11;:15;;:18;;;;:::i;:::-;:22;;:28;;;;:::i;:::-;20412:35;;20383:75;20476:7;20485:15;20502:4;20468:39;;;;;;;;;19995:519;;;;;;;:::o;1647:459:9:-;1705:7;1951:1;1946;:6;1942:45;;;1975:1;1968:8;;;;1942:45;1997:9;2013:1;2009;:5;1997:17;;2041:1;2036;2032;:5;;;;;;:10;2024:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2098:1;2091:8;;;1647:459;;;;;:::o;758:134::-;816:7;842:43;846:1;849;842:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;835:50;;758:134;;;;:::o;12695:379:1:-;12775:62;12792:4;12807:15;12825:11;12775:8;:62::i;:::-;12873:15;:31;;;12912:9;12944:4;12963:11;12988:1;13003;13018:10;;;;;;;;;;;13042:15;12873:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12695:379;;:::o;8350:311::-;8407:1;8396:7;;:12;:34;;;;;8429:1;8412:13;;:18;8396:34;:56;;;;;8451:1;8434:13;;:18;8396:56;8392:69;;;8454:7;;8392:69;8485:7;;8471:11;:21;;;;8522:13;;8502:17;:33;;;;8565:13;;8545:17;:33;;;;8599:1;8589:7;:11;;;;8626:1;8610:13;:17;;;;8653:1;8637:13;:17;;;;8350:311;:::o;16251:840::-;16396:15;16425:23;16462:12;16488:23;16525:12;16551:27;16591:19;16602:7;16591:10;:19::i;:::-;16382:228;;;;;;;;;;;;16620:19;16642:10;:8;:10::i;:::-;16620:32;;16662:27;16692:36;16716:11;16692:19;:23;;:36;;;;:::i;:::-;16662:66;;16757:28;16777:7;16757;:15;16765:6;16757:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;16739:7;:15;16747:6;16739:15;;;;;;;;;;;;;;;:46;;;;16813:28;16833:7;16813;:15;16821:6;16813:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;16795:7;:15;16803:6;16795:15;;;;;;;;;;;;;;;:46;;;;16872:64;16916:19;16872:39;16895:15;16872:7;:18;16880:9;16872:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;16851:7;:18;16859:9;16851:18;;;;;;;;;;;;;;;:85;;;;16947:44;16971:19;16947:23;:44::i;:::-;17001:23;17013:4;17019;17001:11;:23::i;:::-;17057:9;17040:44;;17049:6;17040:44;;;17068:15;17040:44;;;;;;;;;;;;;;;;;;16251:840;;;;;;;;;;;:::o;15393:852::-;15536:15;15565:23;15602:12;15628:23;15665:12;15691:27;15731:19;15742:7;15731:10;:19::i;:::-;15522:228;;;;;;;;;;;;15760:19;15782:10;:8;:10::i;:::-;15760:32;;15802:27;15832:36;15856:11;15832:19;:23;;:36;;;;:::i;:::-;15802:66;;15897:28;15917:7;15897;:15;15905:6;15897:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;15879:7;:15;15887:6;15879:15;;;;;;;;;;;;;;;:46;;;;15956:39;15979:15;15956:7;:18;15964:9;15956:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;15935:7;:18;15943:9;15935:18;;;;;;;;;;;;;;;:60;;;;16026:64;16070:19;16026:39;16049:15;16026:7;:18;16034:9;16026:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;16005:7;:18;16013:9;16005:18;;;;;;;;;;;;;;;:85;;;;16101:44;16125:19;16101:23;:44::i;:::-;16155:23;16167:4;16173;16155:11;:23::i;:::-;16211:9;16194:44;;16203:6;16194:44;;;16222:15;16194:44;;;;;;;;;;;;;;;;;;15393:852;;;;;;;;;;;:::o;14607:780::-;14748:15;14777:23;14814:12;14840:23;14877:12;14903:27;14943:19;14954:7;14943:10;:19::i;:::-;14734:228;;;;;;;;;;;;14972:19;14994:10;:8;:10::i;:::-;14972:32;;15014:27;15044:36;15068:11;15044:19;:23;;:36;;;;:::i;:::-;15014:66;;15109:28;15129:7;15109;:15;15117:6;15109:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;15091:7;:15;15099:6;15091:15;;;;;;;;;;;;;;;:46;;;;15168:64;15212:19;15168:39;15191:15;15168:7;:18;15176:9;15168:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;15147:7;:18;15155:9;15147:18;;;;;;;;;;;;;;;:85;;;;15243:44;15267:19;15243:23;:44::i;:::-;15297:23;15309:4;15315;15297:11;:23::i;:::-;15353:9;15336:44;;15345:6;15336:44;;;15364:15;15336:44;;;;;;;;;;;;;;;;;;14607:780;;;;;;;;;;;:::o;17097:910::-;17242:15;17271:23;17308:12;17334:23;17371:12;17397:27;17437:19;17448:7;17437:10;:19::i;:::-;17228:228;;;;;;;;;;;;17466:19;17488:10;:8;:10::i;:::-;17466:32;;17508:27;17538:36;17562:11;17538:19;:23;;:36;;;;:::i;:::-;17508:66;;17603:28;17623:7;17603;:15;17611:6;17603:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;17585:7;:15;17593:6;17585:15;;;;;;;;;;;;;;;:46;;;;17659:28;17679:7;17659;:15;17667:6;17659:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;17641:7;:15;17649:6;17641:15;;;;;;;;;;;;;;;:46;;;;17718:39;17741:15;17718:7;:18;17726:9;17718:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;17697:7;:18;17705:9;17697:18;;;;;;;;;;;;;;;:60;;;;17788:64;17832:19;17788:39;17811:15;17788:7;:18;17796:9;17788:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;17767:7;:18;17775:9;17767:18;;;;;;;;;;;;;;;:85;;;;17863:44;17887:19;17863:23;:44::i;:::-;17917:23;17929:4;17935;17917:11;:23::i;:::-;17973:9;17956:44;;17965:6;17956:44;;;17984:15;17956:44;;;;;;;;;;;;;;;;;;17097:910;;;;;;;;;;;:::o;8667:157::-;8720:11;;8710:7;:21;;;;8757:17;;8741:13;:33;;;;8800:17;;8784:13;:33;;;;8667:157::o;18013:417::-;18093:19;18115:10;:8;:10::i;:::-;18093:32;;18135:27;18165:36;18189:11;18165:19;:23;;:36;;;;:::i;:::-;18135:66;;18237:47;18264:19;18237:7;:22;18253:4;18237:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;18212:7;:22;18228:4;18212:22;;;;;;;;;;;;;;;:72;;;;18299:11;:26;18319:4;18299:26;;;;;;;;;;;;;;;;;;;;;;;;;18295:129;;;18366:47;18393:19;18366:7;:22;18382:4;18366:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;18341:7;:22;18357:4;18341:22;;;;;;;;;;;;;;;:72;;;;18295:129;18013:417;;;:::o;18436:145::-;18513:17;18525:4;18513:7;;:11;;:17;;;;:::i;:::-;18503:7;:27;;;;18554:20;18569:4;18554:10;;:14;;:20;;;;:::i;:::-;18541:10;:33;;;;18436:145;;:::o
Swarm Source
ipfs://05427fdce118debf3ee1c97fed46b9e10b8270bbf549ccde02c0dafa87947f8b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.