ERC-20
Overview
Max Total Supply
1,000,000 FARM
Holders
24
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
5,197.655582249196980204 FARMValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
FARMER
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-03-05 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; // OpenZeppelin Contracts v5.0.1 /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Contract module that helps prevent reentrant calls to a function. */ abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "R1"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } /** * @dev Contract module which provides a basic access control mechanism */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor(address initialOwner) { if (initialOwner == address(0)) { revert("O1"); } _transferOwnership(initialOwner); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == msg.sender, "O2"); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "O1"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Implementation of the {IERC20} interface. */ contract ERC20 is IERC20 { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 18; } function totalSupply() public view virtual returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _approve(owner, spender, amount); return true; } function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) { address spender = msg.sender; _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0) && to != address(0), "E1"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "E2"); unchecked { _balances[from] = fromBalance - amount; _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "E3"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0) && spender != address(0), "E4"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= amount, "E5"); unchecked { _approve(owner, spender, currentAllowance - amount); } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual { } function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual { } } interface IMetropolisRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForWETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactWETHForETH( uint wethAmount, uint amountOutMin, address to, uint deadline ) external returns (uint[] memory amounts); } interface IMetropolisFactory { function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IMetropolisPair { function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; } // SwapProxy interface interface ISwapProxy { function sendETHToFarmer() external; } // FARMER Token Contract contract FARMER is ERC20, ReentrancyGuard, Ownable { // Constants uint256 private constant TOTAL_SUPPLY = 1_000_000 * 10**18; uint256 private constant TAX_RATE = 5; // 5% uint256 private constant LIQUIDITY_TAX = 25; // 2.5% uint256 private constant AIRDROP_TAX = 25; // 2.5% uint256 private constant MIN_HOLDER_AMOUNT = 100 * 10**18; // 100 tokens minimum for holder status uint256 private constant MIN_TOKENS_FOR_PROCESS = 50 * 10**18; uint256 private constant SWAP_PERCENTAGE = 75; // 75% will be swapped uint256 private constant LIQUIDITY_PERCENTAGE = 25; // 25% will be used for liquidity uint256 private constant MAX_SLIPPAGE = 100; uint256 private constant MIN_PROCESSING_INTERVAL = 30 minutes; // Minimum interval between auto processing // Metropolis DEX addresses IMetropolisRouter public metropolisRouter; IMetropolisFactory public metropolisFactory; address public sonicToken; address public liquidityPair; address public treasuryWallet; // Holder tracking mapping(address => bool) public isHolder; address[] public holders; // Events event LiquidityAdded(uint256 tokenAmount, uint256 sonicAmount); event AirdropDistributed(uint256 amount, uint256 holdersCount); event SwapFailed(string reason); event ProcessStarted(uint256 tokensForLiquidity, uint256 tokensForAirdrop); event SwapSuccessful(uint256 tokensSwapped, uint256 wethReceived); event TreasuryWalletUpdated(address oldTreasury, address newTreasury); event LiquidityAddFailed(string reason); event AirdropFailed(string reason); event ApprovalRefreshed(address token, address spender, uint256 amount); event WaitingForTreasuryTransfer(uint256 amount); event SwapProxySet(address indexed proxyAddress); event ManualSwapCompleted(uint256 tokenAmount, uint256 ethReceived); event ETHReceived(address indexed sender, uint256 amount); event ProcessorRewarded(address indexed processor, uint256 amount); event ReadyForProcessing(uint256 pendingAmount, uint256 minGasLimit); event LPTokenReceived(address indexed receiver, uint256 amount); event RewardAvailableForProcessing(uint256 pendingAmount, uint256 estimatedRewardPercentage); uint256 private _pendingLiquidityTokens; uint256 private _pendingAirdropTokens; bool private _initialized; bool private _inSwap; address public swapProxy; bool public swapProxySet; uint256 private _lastProcessingTime; uint256 private _lastProcessedHolderIndex; constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) { address _metropolisRouter = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3; address _metropolisFactory = 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0; address _sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38; address _treasuryWallet = 0x95503A306cD81e08c0c43C49FAae71165937d175; require(_metropolisRouter != address(0) && _metropolisFactory != address(0) && _sonicToken != address(0) && _treasuryWallet != address(0), "F1"); metropolisRouter = IMetropolisRouter(_metropolisRouter); metropolisFactory = IMetropolisFactory(_metropolisFactory); sonicToken = _sonicToken; treasuryWallet = _treasuryWallet; _mint(address(this), TOTAL_SUPPLY); } function initialize() external onlyOwner { require(!_initialized, "F2"); _initialized = true; // Try to get existing pair first liquidityPair = metropolisFactory.getPair(address(this), sonicToken); // If pair doesn't exist, create it if (liquidityPair == address(0)) { liquidityPair = metropolisFactory.createPair(address(this), sonicToken); } require(liquidityPair != address(0), "F3"); _approve(address(this), address(metropolisRouter), type(uint256).max); require(IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max), "F4"); IERC20(sonicToken).approve(liquidityPair, type(uint256).max); IERC20(address(this)).approve(liquidityPair, type(uint256).max); } function _transfer( address from, address to, uint256 amount ) internal virtual override { if ( !_inSwap && from != owner() && to != owner() && from != address(this) && to == liquidityPair ) { uint256 taxAmount = amount * TAX_RATE / 100; if (taxAmount > 0) { uint256 liquidityTokens = taxAmount * LIQUIDITY_TAX / 100; uint256 airdropTokens = taxAmount * AIRDROP_TAX / 100; uint256 transferAmount = amount - taxAmount; super._transfer(from, address(this), taxAmount); super._transfer(from, to, transferAmount); _pendingLiquidityTokens += liquidityTokens; _pendingAirdropTokens += airdropTokens; if (_pendingLiquidityTokens + _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) { emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens); emit ReadyForProcessing(_pendingLiquidityTokens + _pendingAirdropTokens, 400000); emit RewardAvailableForProcessing(_pendingLiquidityTokens + _pendingAirdropTokens, 5); } _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT); _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT); return; } } super._transfer(from, to, amount); _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT); _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT); } function _updateHolder(address account, bool isHolderStatus) private { if (account != liquidityPair && account != address(this)) { if (isHolderStatus && !isHolder[account]) { isHolder[account] = true; holders.push(account); } else if (!isHolderStatus && isHolder[account]) { isHolder[account] = false; // Remove from holders array for (uint256 i = 0; i < holders.length; i++) { if (holders[i] == account) { holders[i] = holders[holders.length - 1]; holders.pop(); break; } } } } } function processLiquidityAndAirdrop() external nonReentrant { require(!_inSwap, "AP"); _inSwap = true; uint256 tokensForLiquidity = _pendingLiquidityTokens; uint256 tokensForAirdrop = _pendingAirdropTokens; if (tokensForLiquidity == 0 && tokensForAirdrop == 0) { _inSwap = false; return; } uint256 contractTokenBalance = balanceOf(address(this)); uint256 totalTokensToProcess = tokensForLiquidity + tokensForAirdrop; if (contractTokenBalance < totalTokensToProcess) { emit SwapFailed("Insufficient token balance"); _inSwap = false; return; } address caller = msg.sender; uint256 maxProcessAmount = 100 * 10**18; uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; if (totalTokensToSwap > maxProcessAmount) { uint256 ratio = maxProcessAmount * 1e18 / totalTokensToSwap; tokensForLiquidity = tokensForLiquidity * ratio / 1e18; tokensForAirdrop = tokensForAirdrop * ratio / 1e18; totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; _pendingLiquidityTokens -= tokensForLiquidity; _pendingAirdropTokens -= tokensForAirdrop; } else { _pendingLiquidityTokens = 0; _pendingAirdropTokens = 0; } _lastProcessingTime = block.timestamp; emit ProcessStarted(tokensForLiquidity, tokensForAirdrop); // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); uint256 initialEthBalance = address(this).balance; uint256 ethReceived = _processSwap(totalTokensToSwap); if (ethReceived == 0) { _inSwap = false; return; } uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { emit SwapFailed("No ETH received from swap"); _inSwap = false; return; } uint256 actualEthReceived = contractEthBalance - initialEthBalance; uint256 callerReward = 0; if (caller != owner() && caller != address(this)) { callerReward = actualEthReceived * 5 / 100; if (callerReward > 0) { (bool success, ) = caller.call{value: callerReward}(""); if (!success) { callerReward = 0; } else { emit ProcessorRewarded(caller, callerReward); } } } actualEthReceived = actualEthReceived - callerReward; // Calculate amounts uint256 ethForLiquidity = actualEthReceived * tokensForLiquidity / totalTokensToSwap; uint256 ethForAirdrop = actualEthReceived - ethForLiquidity; if (ethForLiquidity > 0) { _addLiquidity(ethForLiquidity, tokensForLiquidity); } // Process airdrop with ETH if (ethForAirdrop > 0) { _processAirdropWithETH(ethForAirdrop); } _inSwap = false; } function _addLiquidity(uint256 ethAmount, uint256 tokenAmount) private { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance < tokenAmount) { emit LiquidityAddFailed("Insufficient token balance for liquidity"); return; } uint256 minTokenAmount = tokenAmount * (100 - MAX_SLIPPAGE) / 100; uint256 minEthAmount = ethAmount * (100 - MAX_SLIPPAGE) / 100; _approve(address(this), address(metropolisRouter), tokenAmount); try metropolisRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, minTokenAmount, minEthAmount, owner(), block.timestamp + 3600 ) { emit LiquidityAdded(tokenAmount, ethAmount); emit LPTokenReceived(owner(), 0); } catch Error(string memory reason) { emit LiquidityAddFailed(reason); } catch { emit LiquidityAddFailed("Unknown liquidity add error"); } } function _processSwap(uint256 tokenAmount) private returns (uint256) { if (tokenAmount == 0) return 0; require(swapProxySet, "Swap proxy not set"); address[] memory path = new address[](2); path[0] = address(this); path[1] = metropolisRouter.WETH(); uint256 minAmountOut = 0; _approve(address(this), address(metropolisRouter), tokenAmount); uint256 deadline = block.timestamp + 3600; uint256 initialEthBalance = address(this).balance; try metropolisRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, minAmountOut, path, swapProxy, deadline ) { try ISwapProxy(swapProxy).sendETHToFarmer() { uint256 contractEthBalance = address(this).balance; uint256 ethReceived = contractEthBalance - initialEthBalance; if (ethReceived > 0) { emit SwapSuccessful(tokenAmount, ethReceived); return ethReceived; } else { emit SwapFailed("No ETH received after proxy transfer"); return 0; } } catch Error(string memory reason) { emit SwapFailed(string(abi.encodePacked("Proxy ETH transfer failed: ", reason))); return 0; } catch { emit SwapFailed("Proxy ETH transfer failed: unknown error"); return 0; } } catch Error(string memory reason) { emit SwapFailed(reason); return 0; } catch { emit SwapFailed("Unknown swap error"); return 0; } } function _processAirdropWithETH(uint256 amount) private { uint256 holdersCount = holders.length; if (holdersCount == 0 || amount == 0) return; uint256 treasuryAmount = amount * 25 / 100; uint256 holderAmount = amount - treasuryAmount; if (treasuryAmount > 0 && treasuryWallet != address(0)) { (bool treasurySuccess, ) = treasuryWallet.call{value: treasuryAmount}(""); if (!treasurySuccess) { emit AirdropFailed("Treasury ETH transfer failed"); holderAmount = amount; } } else { holderAmount = amount; } if (holdersCount > 0 && holderAmount > 0) { uint256 currentHolderCount = holders.length; if (currentHolderCount != holdersCount) { if (_lastProcessedHolderIndex >= currentHolderCount) { _lastProcessedHolderIndex = currentHolderCount > 0 ? currentHolderCount - 1 : 0; } holdersCount = currentHolderCount; } if (holdersCount == 0) { emit AirdropFailed("No holders left to distribute"); return; } uint256 amountPerHolder = holderAmount / holdersCount; if (amountPerHolder > 0) { uint256 maxHoldersToProcess = 50; uint256 startIndex = _lastProcessedHolderIndex % holdersCount; uint256 processedCount = 0; uint256[] memory validIndices = new uint256[](maxHoldersToProcess); uint256 validCount = 0; for (uint256 i = startIndex; i < holdersCount && validCount < maxHoldersToProcess; i++) { address holder = holders[i]; if (holder != address(0) && holder != address(this) && holder != liquidityPair) { validIndices[validCount] = i; validCount++; } } if (validCount < maxHoldersToProcess && startIndex > 0) { for (uint256 i = 0; i < startIndex && validCount < maxHoldersToProcess; i++) { address holder = holders[i]; if (holder != address(0) && holder != address(this) && holder != liquidityPair) { validIndices[validCount] = i; validCount++; } } } for (uint256 j = 0; j < validCount; j++) { uint256 idx = validIndices[j]; address holder = holders[idx]; if (holder != address(0) && holder != address(this) && holder != liquidityPair && isHolder[holder]) { (bool success, ) = holder.call{value: amountPerHolder}(""); if (!success) { emit AirdropFailed("ETH transfer failed"); } processedCount++; } } if (validCount > 0) { _lastProcessedHolderIndex = (validIndices[validCount - 1] + 1) % holdersCount; } else { _lastProcessedHolderIndex = 0; } if (_pendingLiquidityTokens + _pendingAirdropTokens > 0 && (_lastProcessedHolderIndex == 0 || _lastProcessedHolderIndex == startIndex)) { emit AirdropDistributed(amount, processedCount); } else { emit AirdropDistributed(amount, processedCount); } } } } // View functions function getHolderCount() external view returns (uint256) { return holders.length; } function getHolders() external view returns (address[] memory) { return holders; } function checkProcessingStatus() external view returns ( bool readyForProcessing, uint256 pendingAmount, uint256 timeUntilNextProcessing, uint256 recommendedGasLimit ) { pendingAmount = _pendingLiquidityTokens + _pendingAirdropTokens; readyForProcessing = pendingAmount >= MIN_TOKENS_FOR_PROCESS; timeUntilNextProcessing = 0; recommendedGasLimit = 800000; // 800,000 gas units } // Initial liquidity function with WSonic function addInitialLiquidityWithWSonic(uint256 tokenAmount, uint256 sonicAmount) external onlyOwner { require(tokenAmount > 0, "NT"); require(sonicAmount > 0, "NS"); require( IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "IB" ); require( IERC20(sonicToken).balanceOf(msg.sender) >= sonicAmount, "IS" ); require( IERC20(sonicToken).transferFrom(msg.sender, address(this), sonicAmount), "TF" ); _approve(address(this), address(metropolisRouter), tokenAmount); IERC20(sonicToken).approve(address(metropolisRouter), sonicAmount); try metropolisRouter.addLiquidity( address(this), sonicToken, tokenAmount, sonicAmount, 0, 0, msg.sender, block.timestamp + 600 ) { emit LiquidityAdded(tokenAmount, sonicAmount); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert(reason); } catch { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert("FL"); } uint256 remainingWSonic = IERC20(sonicToken).balanceOf(address(this)); if (remainingWSonic > 0) { IERC20(sonicToken).transfer(msg.sender, remainingWSonic); } } function addInitialLiquidityWithAllTokensAndETH() external payable onlyOwner { uint256 tokenAmount = IERC20(address(this)).balanceOf(address(this)); require(tokenAmount > 0, "NT"); require(msg.value > 0, "NE"); _approve(address(this), address(metropolisRouter), tokenAmount); try metropolisRouter.addLiquidityETH{value: msg.value}( address(this), tokenAmount, 0, 0, msg.sender, block.timestamp + 600 ) { emit LiquidityAdded(tokenAmount, msg.value); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); payable(msg.sender).transfer(address(this).balance); revert(reason); } catch { _approve(address(this), address(metropolisRouter), 0); payable(msg.sender).transfer(address(this).balance); revert("FL"); } } function setRouter(address _router) external onlyOwner { require(_router != address(0), "IR"); metropolisRouter = IMetropolisRouter(_router); } function rescueTokens(address _token, uint256 _amount) external onlyOwner { require(_token != address(this), "CF"); IERC20(_token).transfer(owner(), _amount); } // View functions for pending amounts function getPendingLiquidityTokens() external view returns (uint256) { return _pendingLiquidityTokens; } function getPendingAirdropTokens() external view returns (uint256) { return _pendingAirdropTokens; } function processLiquidityAndAirdropAndGetReward() external { require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "NP: No Token Left"); require(holders.length > 0, "NH: No Holder Left"); require(!_inSwap, "AP"); _inSwap = true; uint256 tokensForLiquidity = _pendingLiquidityTokens; uint256 tokensForAirdrop = _pendingAirdropTokens; if (tokensForLiquidity == 0 && tokensForAirdrop == 0) { _inSwap = false; return; } uint256 contractTokenBalance = balanceOf(address(this)); uint256 totalTokensToProcess = tokensForLiquidity + tokensForAirdrop; if (contractTokenBalance < totalTokensToProcess) { emit SwapFailed("Insufficient token balance"); _inSwap = false; return; } address caller = msg.sender; uint256 maxProcessAmount = 200 * 10**18; uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; if (totalTokensToSwap > maxProcessAmount) { uint256 ratio = maxProcessAmount * 1e18 / totalTokensToSwap; tokensForLiquidity = tokensForLiquidity * ratio / 1e18; tokensForAirdrop = tokensForAirdrop * ratio / 1e18; totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; _pendingLiquidityTokens -= tokensForLiquidity; _pendingAirdropTokens -= tokensForAirdrop; } else { // Tüm bekleyen tokenleri işle _pendingLiquidityTokens = 0; _pendingAirdropTokens = 0; } _lastProcessingTime = block.timestamp; emit ProcessStarted(tokensForLiquidity, tokensForAirdrop); // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); uint256 initialEthBalance = address(this).balance; uint256 ethReceived = _processSwap(totalTokensToSwap); if (ethReceived == 0) { _inSwap = false; return; } uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { emit SwapFailed("No ETH received from swap"); _inSwap = false; return; } uint256 actualEthReceived = contractEthBalance - initialEthBalance; uint256 callerReward = 0; if (caller != owner() && caller != address(this)) { callerReward = actualEthReceived * 5 / 100; if (callerReward > 0) { (bool success, ) = caller.call{value: callerReward}(""); if (!success) { callerReward = 0; } else { emit ProcessorRewarded(caller, callerReward); } } } actualEthReceived = actualEthReceived - callerReward; // Calculate amounts uint256 ethForLiquidity = actualEthReceived * tokensForLiquidity / totalTokensToSwap; uint256 ethForAirdrop = actualEthReceived - ethForLiquidity; if (ethForLiquidity > 0) { _addLiquidity(ethForLiquidity, tokensForLiquidity); } // Process airdrop with ETH if (ethForAirdrop > 0) { _processAirdropWithETH(ethForAirdrop); } _inSwap = false; } function refreshAllApprovals() external onlyOwner { _approve(address(this), address(metropolisRouter), type(uint256).max); try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) { emit ApprovalRefreshed(sonicToken, address(metropolisRouter), type(uint256).max); } catch {} if (liquidityPair != address(0)) { try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) { emit ApprovalRefreshed(sonicToken, liquidityPair, type(uint256).max); } catch {} try IERC20(address(this)).approve(liquidityPair, type(uint256).max) { emit ApprovalRefreshed(address(this), liquidityPair, type(uint256).max); } catch {} } } function manualSwap(uint256 tokenAmount) external onlyOwner nonReentrant { require(tokenAmount > 0, "Amount must be greater than 0"); require(tokenAmount <= balanceOf(address(this)), "Insufficient balance"); require(swapProxySet, "Swap proxy not set"); uint256 ethReceived = _processSwap(tokenAmount); require(ethReceived > 0, "Swap failed, no ETH received"); emit ManualSwapCompleted(tokenAmount, ethReceived); } function setTreasuryWallet(address newTreasuryWallet) external onlyOwner { require(newTreasuryWallet != address(0), "ZA"); address oldTreasury = treasuryWallet; treasuryWallet = newTreasuryWallet; emit TreasuryWalletUpdated(oldTreasury, newTreasuryWallet); } function manualLiquidityAndAirdrop(uint256 tokenAmount) external onlyOwner { require(tokenAmount > 0, "NT"); require(IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "IB"); // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); uint256 initialEthBalance = address(this).balance; uint256 ethReceived = _processSwap(tokenAmount); if (ethReceived == 0) { return; } uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { emit SwapFailed("No ETH received from swap"); return; } uint256 actualEthReceived = contractEthBalance - initialEthBalance; // Calculate amounts uint256 ethForLiquidity = actualEthReceived * LIQUIDITY_TAX / 100; uint256 ethForAirdrop = actualEthReceived * AIRDROP_TAX / 100; if (ethForLiquidity > 0) { _addLiquidity(ethForLiquidity, tokenAmount * LIQUIDITY_TAX / 100); } // Process airdrop with ETH if (ethForAirdrop > 0) { _processAirdropWithETH(ethForAirdrop); } } receive() external payable { if (msg.value > 0) { emit ETHReceived(msg.sender, msg.value); } } function setSwapProxy(address _swapProxy) external onlyOwner { require(!swapProxySet, "Proxy already set"); require(_swapProxy != address(0), "Invalid proxy address"); swapProxy = _swapProxy; swapProxySet = true; emit SwapProxySet(_swapProxy); } function getProcessingInfo() external view returns ( uint256 pendingLiquidityTokens, uint256 pendingAirdropTokens, uint256 totalHolders, uint256 lastProcessedHolderIndex, uint256 nextHolderBatch, bool isProcessingComplete, bool isFullCycleComplete ) { pendingLiquidityTokens = _pendingLiquidityTokens; pendingAirdropTokens = _pendingAirdropTokens; totalHolders = holders.length; lastProcessedHolderIndex = _lastProcessedHolderIndex; uint256 maxHoldersToProcess = 50; uint256 remainingHolders = 0; if (totalHolders > 0) { if (lastProcessedHolderIndex >= totalHolders) { remainingHolders = totalHolders; } else { remainingHolders = totalHolders - lastProcessedHolderIndex; } } nextHolderBatch = remainingHolders < maxHoldersToProcess ? remainingHolders : maxHoldersToProcess; isProcessingComplete = (pendingLiquidityTokens + pendingAirdropTokens == 0); isFullCycleComplete = (lastProcessedHolderIndex == 0 && pendingLiquidityTokens + pendingAirdropTokens > 0); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"AirdropFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ApprovalRefreshed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ETHReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LPTokenReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"LiquidityAddFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"ManualSwapCompleted","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":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"processor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProcessorRewarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pendingAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minGasLimit","type":"uint256"}],"name":"ReadyForProcessing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pendingAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"estimatedRewardPercentage","type":"uint256"}],"name":"RewardAvailableForProcessing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"}],"name":"SwapProxySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReceived","type":"uint256"}],"name":"SwapSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldTreasury","type":"address"},{"indexed":false,"internalType":"address","name":"newTreasury","type":"address"}],"name":"TreasuryWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WaitingForTreasuryTransfer","type":"event"},{"inputs":[],"name":"addInitialLiquidityWithAllTokensAndETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"addInitialLiquidityWithWSonic","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":"checkProcessingStatus","outputs":[{"internalType":"bool","name":"readyForProcessing","type":"bool"},{"internalType":"uint256","name":"pendingAmount","type":"uint256"},{"internalType":"uint256","name":"timeUntilNextProcessing","type":"uint256"},{"internalType":"uint256","name":"recommendedGasLimit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingLiquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProcessingInfo","outputs":[{"internalType":"uint256","name":"pendingLiquidityTokens","type":"uint256"},{"internalType":"uint256","name":"pendingAirdropTokens","type":"uint256"},{"internalType":"uint256","name":"totalHolders","type":"uint256"},{"internalType":"uint256","name":"lastProcessedHolderIndex","type":"uint256"},{"internalType":"uint256","name":"nextHolderBatch","type":"uint256"},{"internalType":"bool","name":"isProcessingComplete","type":"bool"},{"internalType":"bool","name":"isFullCycleComplete","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"metropolisFactory","outputs":[{"internalType":"contract IMetropolisFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisRouter","outputs":[{"internalType":"contract IMetropolisRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdropAndGetReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapProxy","type":"address"}],"name":"setSwapProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapProxySet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5033604051806040016040528060068152602001652320a926a2a960d11b815250604051806040016040528060048152602001634641524d60e01b815250816003908162000060919062000314565b5060046200006f828262000314565b50506001600555506001600160a01b038116620000b85760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064015b60405180910390fd5b620000c38162000171565b50600780547395a7e403d7cf20f675ff9273d66e94d35ba49fa36001600160a01b0319918216811790925560088054731570300e9cfec66c9fb0c8bc14366c86eb170ad090831681179091556009805473039e2fb66102314ce7b64ce5ce3e5183bc94ad389084168117909155600b80547395503a306cd81e08c0c43c49faae71165937d1759416841790559091620001673069d3c21bcecceda1000000620001c3565b5050505062000408565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002005760405162461bcd60e51b8152602060048201526002602482015261453360f01b6044820152606401620000af565b8060026000828254620002149190620003e0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029b57607f821691505b602082108103620002bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026b57600081815260208120601f850160051c81016020861015620002eb5750805b601f850160051c820191505b818110156200030c57828155600101620002f7565b505050505050565b81516001600160401b0381111562000330576200033062000270565b620003488162000341845462000286565b84620002c2565b602080601f831160018114620003805760008415620003675750858301515b600019600386901b1c1916600185901b1785556200030c565b600085815260208120601f198616915b82811015620003b15788860151825594840194600190910190840162000390565b5085821015620003d05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200040257634e487b7160e01b600052601160045260246000fd5b92915050565b61441580620004186000396000f3fe6080604052600436106102295760003560e01c80638129fc1c11610123578063c84a705c116100ab578063e84348151161006f578063e8434815146106d0578063e8955f57146106e5578063ed9cacfe1461071c578063f2fde38b14610731578063fd7c9fab1461075157600080fd5b8063c84a705c14610612578063d4d7b19a14610632578063d720a2a814610662578063dd62ed3e14610682578063e3a8fa55146106c857600080fd5b8063a8602fea116100f2578063a8602fea14610571578063a9059cbb14610591578063b70143c9146105b1578063b9276e4b146105d1578063c0d78655146105f257600080fd5b80638129fc1c146105095780638da5cb5b1461051e57806395d89b411461053c578063975b87e81461055157600080fd5b80634626402b116101b15780636ec4be90116101755780636ec4be901461047957806370a082311461049f5780637136982b146104bf5780637ac84fc1146104d4578063808a5457146104e957600080fd5b80634626402b146103e257806357376198146104025780635d76b04c146104225780635fe8e7cc1461043757806362b6327a1461045957600080fd5b80631e710c19116101f85780631e710c191461030057806323b872dd1461034e5780632a11ced01461036e578063313ce567146103a6578063461a3a95146103c257600080fd5b806306fdde031461027157806308dee2b41461029c578063095ea7b3146102bb57806318160ddd146102eb57600080fd5b3661026c57341561026a5760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b34801561027d57600080fd5b50610286610771565b6040516102939190613e42565b60405180910390f35b3480156102a857600080fd5b50600e545b604051908152602001610293565b3480156102c757600080fd5b506102db6102d6366004613e8a565b610803565b6040519015158152602001610293565b3480156102f757600080fd5b506002546102ad565b34801561030c57600080fd5b5061031561081d565b6040805197885260208801969096529486019390935260608501919091526080840152151560a0830152151560c082015260e001610293565b34801561035a57600080fd5b506102db610369366004613eb6565b610893565b34801561037a57600080fd5b5061038e610389366004613ef7565b6108b7565b6040516001600160a01b039091168152602001610293565b3480156103b257600080fd5b5060405160128152602001610293565b3480156103ce57600080fd5b5060095461038e906001600160a01b031681565b3480156103ee57600080fd5b50600b5461038e906001600160a01b031681565b34801561040e57600080fd5b5061026a61041d366004613e8a565b6108e1565b34801561042e57600080fd5b50600f546102ad565b34801561044357600080fd5b5061044c6109b2565b6040516102939190613f54565b34801561046557600080fd5b5060075461038e906001600160a01b031681565b34801561048557600080fd5b5060105461038e906201000090046001600160a01b031681565b3480156104ab57600080fd5b506102ad6104ba366004613f6e565b610a13565b3480156104cb57600080fd5b50600d546102ad565b3480156104e057600080fd5b5061026a610a2e565b3480156104f557600080fd5b50600a5461038e906001600160a01b031681565b34801561051557600080fd5b5061026a610e94565b34801561052a57600080fd5b506006546001600160a01b031661038e565b34801561054857600080fd5b5061028661120a565b34801561055d57600080fd5b5061026a61056c366004613f8b565b611219565b34801561057d57600080fd5b5061026a61058c366004613f6e565b61195c565b34801561059d57600080fd5b506102db6105ac366004613e8a565b611a00565b3480156105bd57600080fd5b5061026a6105cc366004613ef7565b611a0e565b3480156105dd57600080fd5b506010546102db90600160b01b900460ff1681565b3480156105fe57600080fd5b5061026a61060d366004613f6e565b611bdb565b34801561061e57600080fd5b5061026a61062d366004613f6e565b611c40565b34801561063e57600080fd5b506102db61064d366004613f6e565b600c6020526000908152604090205460ff1681565b34801561066e57600080fd5b5061026a61067d366004613ef7565b611d49565b34801561068e57600080fd5b506102ad61069d366004613fad565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61026a611eed565b3480156106dc57600080fd5b5061026a61213b565b3480156106f157600080fd5b506106fa6125e7565b6040805194151585526020850193909352918301526060820152608001610293565b34801561072857600080fd5b5061026a61261c565b34801561073d57600080fd5b5061026a61074c366004613f6e565b6128a0565b34801561075d57600080fd5b5060085461038e906001600160a01b031681565b60606003805461078090613fe6565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90613fe6565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050905090565b6000336108118185856128ec565b60019150505b92915050565b600e54600f54600d5460125460008080603281861561085157868610610844575085610851565b61084e8688614036565b90505b81811061085e5781610860565b805b945061086c888a614049565b1593508515801561088657506000610884898b614049565b115b9250505090919293949596565b6000336108a185828561299e565b6108ac858585612a06565b506001949350505050565b600d81815481106108c757600080fd5b6000918252602090912001546001600160a01b0316905081565b6108e9612c8c565b306001600160a01b0383160361092b5760405162461bcd60e51b815260206004820152600260248201526121a360f11b60448201526064015b60405180910390fd5b816001600160a01b031663a9059cbb61094c6006546001600160a01b031690565b836040518363ffffffff1660e01b815260040161096a92919061405c565b6020604051808303816000875af1158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190614075565b505050565b6060600d8054806020026020016040519081016040528092919081815260200182805480156107f957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109ec575050505050905090565b6001600160a01b031660009081526020819052604090205490565b600260055403610a655760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610922565b6002600555601054610100900460ff1615610aa75760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610922565b6010805461ff001916610100179055600e54600f5481158015610ac8575080155b15610adf5750506010805461ff0019169055610e8d565b6000610aea30610a13565b90506000610af88385614049565b905080821015610b6c576000805160206143c0833981519152604051610b4f906020808252601a908201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604082015260600190565b60405180910390a150506010805461ff001916905550610e8d9050565b3368056bc75e2d631000006000610b838688614049565b905081811115610c2f57600081610ba284670de0b6b3a7640000614097565b610bac91906140c4565b9050670de0b6b3a7640000610bc1828a614097565b610bcb91906140c4565b9750670de0b6b3a7640000610be08289614097565b610bea91906140c4565b9650610bf68789614049565b915087600e6000828254610c0a9190614036565b9250508190555086600f6000828254610c239190614036565b90915550610c3a915050565b6000600e819055600f555b4260115560408051888152602081018890527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a1600754610c919030906001600160a01b03166000196128ec565b476000610c9d83612cda565b905080600003610cc15750506010805461ff001916905550610e8d95505050505050565b47828111610d07576000805160206143c0833981519152604051610ce4906140d8565b60405180910390a150506010805461ff001916905550610e8d9650505050505050565b6000610d138483614036565b90506000610d296006546001600160a01b031690565b6001600160a01b0316886001600160a01b031614158015610d5357506001600160a01b0388163014155b15610e21576064610d65836005614097565b610d6f91906140c4565b90508015610e21576000886001600160a01b03168260405160006040518083038185875af1925050503d8060008114610dc4576040519150601f19603f3d011682016040523d82523d6000602084013e610dc9565b606091505b5050905080610ddb5760009150610e1f565b886001600160a01b03167f9771326b75b19abc364419d27c012617e9fc89f850583037b570e4b74906e30183604051610e1691815260200190565b60405180910390a25b505b610e2b8183614036565b9150600086610e3a8e85614097565b610e4491906140c4565b90506000610e528285614036565b90508115610e6457610e64828f61314e565b8015610e7357610e738161343a565b50506010805461ff00191690555050505050505050505050505b6001600555565b610e9c612c8c565b60105460ff1615610ed45760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610922565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f57919061410f565b600a80546001600160a01b0319166001600160a01b03929092169182179055611013576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061410f565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166110505760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610922565b60075461106a9030906001600160a01b03166000196128ec565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926110a2929116906000199060040161405c565b6020604051808303816000875af11580156110c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e59190614075565b6111165760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610922565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261114e929116906000199060040161405c565b6020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190614075565b50600a5460405163095ea7b360e01b8152309163095ea7b3916111c4916001600160a01b0316906000199060040161405c565b6020604051808303816000875af11580156111e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112079190614075565b50565b60606004805461078090613fe6565b611221612c8c565b600082116112415760405162461bcd60e51b81526004016109229061412c565b600081116112765760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610922565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa1580156112b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d79190614148565b101561130a5760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610922565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113769190614148565b10156113a95760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610922565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906113dd90339030908690600401614161565b6020604051808303816000875af11580156113fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114209190614075565b6114515760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610922565b6007546114699030906001600160a01b0316846128ec565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261149f92911690859060040161405c565b6020604051808303816000875af11580156114be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e29190614075565b506007546009546001600160a01b039182169163e8e337009130911685856000803361151042610258614049565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af19250505080156115a8575060408051601f3d908101601f191682019092526115a591810190614185565b60015b611830576115b46141b3565b806308c379a0036116f757506115c8614220565b806115d357506116f9565b6007546115ec9030906001600160a01b031660006128ec565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116239291169060009060040161405c565b6020604051808303816000875af1158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190614075565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611699903390869060040161405c565b6020604051808303816000875af11580156116b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116dc9190614075565b508060405162461bcd60e51b81526004016109229190613e42565b505b6007546117129030906001600160a01b031660006128ec565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926117499291169060009060040161405c565b6020604051808303816000875af1158015611768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178c9190614075565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906117bf903390859060040161405c565b6020604051808303816000875af11580156117de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118029190614075565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610922565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156118b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d99190614148565b905080156109ad5760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611913903390859060040161405c565b6020604051808303816000875af1158015611932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119569190614075565b50505050565b611964612c8c565b6001600160a01b03811661199f5760405162461bcd60e51b81526020600482015260026024820152615a4160f01b6044820152606401610922565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b600033610811818585612a06565b611a16612c8c565b600260055403611a4d5760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610922565b600260055580611a9f5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610922565b611aa830610a13565b811115611aee5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610922565b601054600160b01b900460ff16611b3c5760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610922565b6000611b4782612cda565b905060008111611b995760405162461bcd60e51b815260206004820152601c60248201527f53776170206661696c65642c206e6f20455448207265636569766564000000006044820152606401610922565b60408051838152602081018390527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a150506001600555565b611be3612c8c565b6001600160a01b038116611c1e5760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610922565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611c48612c8c565b601054600160b01b900460ff1615611c965760405162461bcd60e51b8152602060048201526011602482015270141c9bde1e48185b1c9958591e481cd95d607a1b6044820152606401610922565b6001600160a01b038116611ce45760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642070726f7879206164647265737360581b6044820152606401610922565b6010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b611d51612c8c565b60008111611d715760405162461bcd60e51b81526004016109229061412c565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015611dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd29190614148565b1015611e055760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610922565b600754611e1f9030906001600160a01b03166000196128ec565b476000611e2b83612cda565b905080600003611e3a57505050565b47828111611e6b576000805160206143c0833981519152604051611e5d906140d8565b60405180910390a150505050565b6000611e778483614036565b905060006064611e88601984614097565b611e9291906140c4565b905060006064611ea3601985614097565b611ead91906140c4565b90508115611ed557611ed5826064611ec660198b614097565b611ed091906140c4565b61314e565b8015611ee457611ee48161343a565b50505050505050565b611ef5612c8c565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015611f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f579190614148565b905060008111611f795760405162461bcd60e51b81526004016109229061412c565b60003411611fae5760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610922565b600754611fc69030906001600160a01b0316836128ec565b6007546001600160a01b031663f305d71934308460008033611fea42610258614049565b6040518863ffffffff1660e01b815260040161200b969594939291906142aa565b60606040518083038185885af193505050508015612046575060408051601f3d908101601f1916820190925261204391810190614185565b60015b6120fd576120526141b3565b806308c379a0036120b65750612066614220565b8061207157506120b8565b60075461208a9030906001600160a01b031660006128ec565b60405133904780156108fc02916000818181858888f193505050501580156116dc573d6000803e3d6000fd5b505b6007546120d19030906001600160a01b031660006128ec565b60405133904780156108fc02916000818181858888f19350505050158015611802573d6000803e3d6000fd5b5050604080518381523460208201527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a150565b6000600e54118061214e57506000600f54115b61218e5760405162461bcd60e51b815260206004820152601160248201527013940e88139bc8151bdad95b881319599d607a1b6044820152606401610922565b600d546121d25760405162461bcd60e51b815260206004820152601260248201527113920e88139bc8121bdb19195c881319599d60721b6044820152606401610922565b601054610100900460ff161561220f5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610922565b6010805461ff001916610100179055600e54600f5481158015612230575080155b156122445750506010805461ff0019169055565b600061224f30610a13565b9050600061225d8385614049565b9050808210156122cd576000805160206143c08339815191526040516122b4906020808252601a908201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604082015260600190565b60405180910390a150506010805461ff00191690555050565b33680ad78ebc5ac620000060006122e48688614049565b9050818111156123905760008161230384670de0b6b3a7640000614097565b61230d91906140c4565b9050670de0b6b3a7640000612322828a614097565b61232c91906140c4565b9750670de0b6b3a76400006123418289614097565b61234b91906140c4565b96506123578789614049565b915087600e600082825461236b9190614036565b9250508190555086600f60008282546123849190614036565b9091555061239b915050565b6000600e819055600f555b4260115560408051888152602081018890527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16007546123f29030906001600160a01b03166000196128ec565b4760006123fe83612cda565b90508060000361241e5750506010805461ff001916905550505050505050565b47828111612460576000805160206143c0833981519152604051612441906140d8565b60405180910390a150506010805461ff00191690555050505050505050565b600061246c8483614036565b905060006124826006546001600160a01b031690565b6001600160a01b0316886001600160a01b0316141580156124ac57506001600160a01b0388163014155b1561257a5760646124be836005614097565b6124c891906140c4565b9050801561257a576000886001600160a01b03168260405160006040518083038185875af1925050503d806000811461251d576040519150601f19603f3d011682016040523d82523d6000602084013e612522565b606091505b50509050806125345760009150612578565b886001600160a01b03167f9771326b75b19abc364419d27c012617e9fc89f850583037b570e4b74906e3018360405161256f91815260200190565b60405180910390a25b505b6125848183614036565b91506000866125938e85614097565b61259d91906140c4565b905060006125ab8285614036565b905081156125bd576125bd828f61314e565b80156125cc576125cc8161343a565b50506010805461ff0019169055505050505050505050505050565b600080600080600f54600e546125fd9190614049565b6802b5e3af16b18800008110159590945060009350620c350092509050565b612624612c8c565b60075461263e9030906001600160a01b03166000196128ec565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612676929116906000199060040161405c565b6020604051808303816000875af19250505080156126b1575060408051601f3d908101601f191682019092526126ae91810190614075565b60015b1561270757506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926126fe926001600160a01b039182169291169060001990614161565b60405180910390a15b600a546001600160a01b03161561289e57600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612750929116906000199060040161405c565b6020604051808303816000875af192505050801561278b575060408051601f3d908101601f1916820190925261278891810190614075565b60015b156127e15750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926127d8926001600160a01b039182169291169060001990614161565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b391612813916001600160a01b0316906000199060040161405c565b6020604051808303816000875af192505050801561284e575060408051601f3d908101601f1916820190925261284b91810190614075565b60015b1561289e5750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca916128959130916001600160a01b03169060001990614161565b60405180910390a15b565b6128a8612c8c565b6001600160a01b0381166128e35760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610922565b61120781613ab4565b6001600160a01b0383161580159061290c57506001600160a01b03821615155b61293d5760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610922565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054818110156129f95760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610922565b61195684848484036128ec565b601054610100900460ff16158015612a2c57506006546001600160a01b03848116911614155b8015612a4657506006546001600160a01b03838116911614155b8015612a5b57506001600160a01b0383163014155b8015612a745750600a546001600160a01b038381169116145b15612c535760006064612a88600584614097565b612a9291906140c4565b90508015612c515760006064612aa9601984614097565b612ab391906140c4565b905060006064612ac4601985614097565b612ace91906140c4565b90506000612adc8486614036565b9050612ae9873086613b06565b612af4878783613b06565b82600e6000828254612b069190614049565b9250508190555081600f6000828254612b1f9190614049565b9091555050600f54600e546802b5e3af16b188000091612b3e91614049565b10612c1c577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051612b81929190918252602082015260400190565b60405180910390a17f166cfdb014c67ae8b32e0df45eca1171fe28cc0198094c266ca20c641e8c82d0600f54600e54612bba9190614049565b6040805191825262061a8060208301520160405180910390a17f114686b9e702daeb8b2d1103d8bcf05eaad0c13a55be6bb01b97335dacee4221600f54600e54612c049190614049565b60408051918252600560208301520160405180910390a15b612c3a8768056bc75e2d63100000612c338a610a13565b1015613c0b565b611ee48668056bc75e2d63100000612c3389610a13565b505b612c5e838383613b06565b612c758368056bc75e2d63100000612c3386610a13565b6109ad8268056bc75e2d63100000612c3385610a13565b33612c9f6006546001600160a01b031690565b6001600160a01b03161461289e5760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610922565b600081600003612cec57506000919050565b601054600160b01b900460ff16612d3a5760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610922565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6f57612d6f6142e5565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dec919061410f565b81600181518110612dff57612dff6142e5565b6001600160a01b039283166020918202929092010152600754600091612e2891309116866128ec565b6000612e3642610e10614049565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac94792612e7f928b9289928b92620100009091049091169089906004016142fb565b600060405180830381600087803b158015612e9957600080fd5b505af1925050508015612eaa575060015b612f5f57612eb66141b3565b806308c379a003612f075750612eca614220565b80612ed55750612f09565b6000805160206143c083398151915281604051612ef29190613e42565b60405180910390a15060009695505050505050565b505b6000805160206143c0833981519152604051612f4b906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b60405180910390a150600095945050505050565b601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612faf57600080fd5b505af1925050508015612fc0575060015b61308557612fcc6141b3565b806308c379a0036130255750612fe0614220565b80612feb5750613027565b6000805160206143c08339815191528160405160200161300b9190614337565b60408051601f1981840301815290829052612ef291613e42565b505b6000805160206143c0833981519152604051612f4b9060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b4760006130928383614036565b905080156130de5760408051898152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1979650505050505050565b6000805160206143c08339815191526040516131389060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a1506000979650505050505050565b600061315930610a13565b9050818110156131e0577fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516131d39060208082526028908201527f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206c604082015267697175696469747960c01b606082015260800190565b60405180910390a1505050565b600060646131ee8180614036565b6131f89085614097565b61320291906140c4565b9050600060646132128180614036565b61321c9087614097565b61322691906140c4565b6007549091506132419030906001600160a01b0316866128ec565b6007546001600160a01b031663f305d71986308786866132696006546001600160a01b031690565b61327542610e10614049565b6040518863ffffffff1660e01b8152600401613296969594939291906142aa565b60606040518083038185885af1935050505080156132d1575060408051601f3d908101601f191682019092526132ce91810190614185565b60015b6133a7576132dd6141b3565b806308c379a00361333957506132f1614220565b806132fc575061333b565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad8160405161332b9190613e42565b60405180910390a150613433565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad60405161339a906020808252601b908201527f556e6b6e6f776e206c697175696469747920616464206572726f720000000000604082015260600190565b60405180910390a1613433565b505060408051868152602081018890527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16006546001600160a01b03166001600160a01b03167fb4a8f0077e5aebb5cf42d9b6adf858fcb4dfd47ce2ecd5ae56708582389d449d600060405161342a91815260200190565b60405180910390a25b5050505050565b600d54801580613448575081155b15613451575050565b60006064613460846019614097565b61346a91906140c4565b905060006134788285614036565b90506000821180156134945750600b546001600160a01b031615155b1561356557600b546040516000916001600160a01b03169084908381818185875af1925050503d80600081146134e6576040519150601f19603f3d011682016040523d82523d6000602084013e6134eb565b606091505b505090508061355f577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051613553906020808252601c908201527f547265617375727920455448207472616e73666572206661696c656400000000604082015260600190565b60405180910390a18491505b50613568565b50825b6000831180156135785750600081115b1561195657600d548381146135b25780601254106135ae576000811161359f5760006135aa565b6135aa600182614036565b6012555b8093505b83600003613628577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051613619906020808252601d908201527f4e6f20686f6c64657273206c65667420746f2064697374726962757465000000604082015260600190565b60405180910390a15050505050565b600061363485846140c4565b90508015613aac5760125460329060009061365090889061437c565b90506000808367ffffffffffffffff81111561366e5761366e6141cf565b604051908082528060200260200182016040528015613697578160200160208202803683370190505b5090506000835b8a811080156136ac57508582105b15613753576000600d82815481106136c6576136c66142e5565b6000918252602090912001546001600160a01b0316905080158015906136f557506001600160a01b0381163014155b801561370f5750600a546001600160a01b03828116911614155b156137405781848481518110613727576137276142e5565b60209081029190910101528261373c81614390565b9350505b508061374b81614390565b91505061369e565b5084811080156137635750600084115b156138225760005b848110801561377957508582105b15613820576000600d8281548110613793576137936142e5565b6000918252602090912001546001600160a01b0316905080158015906137c257506001600160a01b0381163014155b80156137dc5750600a546001600160a01b03828116911614155b1561380d57818484815181106137f4576137f46142e5565b60209081029190910101528261380981614390565b9350505b508061381881614390565b91505061376b565b505b60005b818110156139af576000838281518110613841576138416142e5565b602002602001015190506000600d8281548110613860576138606142e5565b6000918252602090912001546001600160a01b03169050801580159061388f57506001600160a01b0381163014155b80156138a95750600a546001600160a01b03828116911614155b80156138cd57506001600160a01b0381166000908152600c602052604090205460ff165b1561399a576000816001600160a01b03168a60405160006040518083038185875af1925050503d806000811461391f576040519150601f19603f3d011682016040523d82523d6000602084013e613924565b606091505b505090508061398b577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161398290602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b8661399581614390565b975050505b505080806139a790614390565b915050613825565b5080156139f95789826139c3600184614036565b815181106139d3576139d36142e5565b602002602001015160016139e79190614049565b6139f1919061437c565b6012556139ff565b60006012555b6000600f54600e54613a119190614049565b118015613a2957506012541580613a29575083601254145b15613a6c57604080518c8152602081018590527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c217910160405180910390a1613aa6565b604080518c8152602081018590527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c217910160405180910390a15b50505050505b505050505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831615801590613b2657506001600160a01b03821615155b613b575760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610922565b6001600160a01b03831660009081526020819052604090205481811015613ba55760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610922565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611956565b600a546001600160a01b03838116911614801590613c3257506001600160a01b0382163014155b15613e1a57808015613c5d57506001600160a01b0382166000908152600c602052604090205460ff16155b15613cc957506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b80158015613cef57506001600160a01b0382166000908152600c602052604090205460ff165b15613e1a576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d548110156109ad57826001600160a01b0316600d8281548110613d3c57613d3c6142e5565b6000918252602090912001546001600160a01b031603613e0857600d8054613d6690600190614036565b81548110613d7657613d766142e5565b600091825260209091200154600d80546001600160a01b039092169183908110613da257613da26142e5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d805480613de157613de16143a9565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b80613e1281614390565b915050613d15565b5050565b60005b83811015613e39578181015183820152602001613e21565b50506000910152565b6020815260008251806020840152613e61816040850160208701613e1e565b601f01601f19169190910160400192915050565b6001600160a01b038116811461120757600080fd5b60008060408385031215613e9d57600080fd5b8235613ea881613e75565b946020939093013593505050565b600080600060608486031215613ecb57600080fd5b8335613ed681613e75565b92506020840135613ee681613e75565b929592945050506040919091013590565b600060208284031215613f0957600080fd5b5035919050565b600081518084526020808501945080840160005b83811015613f495781516001600160a01b031687529582019590820190600101613f24565b509495945050505050565b602081526000613f676020830184613f10565b9392505050565b600060208284031215613f8057600080fd5b8135613f6781613e75565b60008060408385031215613f9e57600080fd5b50508035926020909101359150565b60008060408385031215613fc057600080fd5b8235613fcb81613e75565b91506020830135613fdb81613e75565b809150509250929050565b600181811c90821680613ffa57607f821691505b60208210810361401a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561081757610817614020565b8082018082111561081757610817614020565b6001600160a01b03929092168252602082015260400190565b60006020828403121561408757600080fd5b81518015158114613f6757600080fd5b808202811582820484141761081757610817614020565b634e487b7160e01b600052601260045260246000fd5b6000826140d3576140d36140ae565b500490565b60208082526019908201527f4e6f204554482072656365697665642066726f6d207377617000000000000000604082015260600190565b60006020828403121561412157600080fd5b8151613f6781613e75565b602080825260029082015261139560f21b604082015260600190565b60006020828403121561415a57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008060006060848603121561419a57600080fd5b8351925060208401519150604084015190509250925092565b600060033d11156141cc5760046000803e5060005160e01c5b90565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561421957634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d101561422e5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561425e57505050505090565b82850191508151818111156142765750505050505090565b843d87010160208285010111156142905750505050505090565b61429f602082860101876141e5565b509095945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a06040820152600061431a60a0830186613f10565b6001600160a01b0394909416606083015250608001529392505050565b7f50726f787920455448207472616e73666572206661696c65643a20000000000081526000825161436f81601b850160208701613e1e565b91909101601b0192915050565b60008261438b5761438b6140ae565b500690565b6000600182016143a2576143a2614020565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723a264697066735822122085c5551de71882a08320c4545626677ed0ea93198a5af773b749a31133182df164736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102295760003560e01c80638129fc1c11610123578063c84a705c116100ab578063e84348151161006f578063e8434815146106d0578063e8955f57146106e5578063ed9cacfe1461071c578063f2fde38b14610731578063fd7c9fab1461075157600080fd5b8063c84a705c14610612578063d4d7b19a14610632578063d720a2a814610662578063dd62ed3e14610682578063e3a8fa55146106c857600080fd5b8063a8602fea116100f2578063a8602fea14610571578063a9059cbb14610591578063b70143c9146105b1578063b9276e4b146105d1578063c0d78655146105f257600080fd5b80638129fc1c146105095780638da5cb5b1461051e57806395d89b411461053c578063975b87e81461055157600080fd5b80634626402b116101b15780636ec4be90116101755780636ec4be901461047957806370a082311461049f5780637136982b146104bf5780637ac84fc1146104d4578063808a5457146104e957600080fd5b80634626402b146103e257806357376198146104025780635d76b04c146104225780635fe8e7cc1461043757806362b6327a1461045957600080fd5b80631e710c19116101f85780631e710c191461030057806323b872dd1461034e5780632a11ced01461036e578063313ce567146103a6578063461a3a95146103c257600080fd5b806306fdde031461027157806308dee2b41461029c578063095ea7b3146102bb57806318160ddd146102eb57600080fd5b3661026c57341561026a5760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b34801561027d57600080fd5b50610286610771565b6040516102939190613e42565b60405180910390f35b3480156102a857600080fd5b50600e545b604051908152602001610293565b3480156102c757600080fd5b506102db6102d6366004613e8a565b610803565b6040519015158152602001610293565b3480156102f757600080fd5b506002546102ad565b34801561030c57600080fd5b5061031561081d565b6040805197885260208801969096529486019390935260608501919091526080840152151560a0830152151560c082015260e001610293565b34801561035a57600080fd5b506102db610369366004613eb6565b610893565b34801561037a57600080fd5b5061038e610389366004613ef7565b6108b7565b6040516001600160a01b039091168152602001610293565b3480156103b257600080fd5b5060405160128152602001610293565b3480156103ce57600080fd5b5060095461038e906001600160a01b031681565b3480156103ee57600080fd5b50600b5461038e906001600160a01b031681565b34801561040e57600080fd5b5061026a61041d366004613e8a565b6108e1565b34801561042e57600080fd5b50600f546102ad565b34801561044357600080fd5b5061044c6109b2565b6040516102939190613f54565b34801561046557600080fd5b5060075461038e906001600160a01b031681565b34801561048557600080fd5b5060105461038e906201000090046001600160a01b031681565b3480156104ab57600080fd5b506102ad6104ba366004613f6e565b610a13565b3480156104cb57600080fd5b50600d546102ad565b3480156104e057600080fd5b5061026a610a2e565b3480156104f557600080fd5b50600a5461038e906001600160a01b031681565b34801561051557600080fd5b5061026a610e94565b34801561052a57600080fd5b506006546001600160a01b031661038e565b34801561054857600080fd5b5061028661120a565b34801561055d57600080fd5b5061026a61056c366004613f8b565b611219565b34801561057d57600080fd5b5061026a61058c366004613f6e565b61195c565b34801561059d57600080fd5b506102db6105ac366004613e8a565b611a00565b3480156105bd57600080fd5b5061026a6105cc366004613ef7565b611a0e565b3480156105dd57600080fd5b506010546102db90600160b01b900460ff1681565b3480156105fe57600080fd5b5061026a61060d366004613f6e565b611bdb565b34801561061e57600080fd5b5061026a61062d366004613f6e565b611c40565b34801561063e57600080fd5b506102db61064d366004613f6e565b600c6020526000908152604090205460ff1681565b34801561066e57600080fd5b5061026a61067d366004613ef7565b611d49565b34801561068e57600080fd5b506102ad61069d366004613fad565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61026a611eed565b3480156106dc57600080fd5b5061026a61213b565b3480156106f157600080fd5b506106fa6125e7565b6040805194151585526020850193909352918301526060820152608001610293565b34801561072857600080fd5b5061026a61261c565b34801561073d57600080fd5b5061026a61074c366004613f6e565b6128a0565b34801561075d57600080fd5b5060085461038e906001600160a01b031681565b60606003805461078090613fe6565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90613fe6565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050905090565b6000336108118185856128ec565b60019150505b92915050565b600e54600f54600d5460125460008080603281861561085157868610610844575085610851565b61084e8688614036565b90505b81811061085e5781610860565b805b945061086c888a614049565b1593508515801561088657506000610884898b614049565b115b9250505090919293949596565b6000336108a185828561299e565b6108ac858585612a06565b506001949350505050565b600d81815481106108c757600080fd5b6000918252602090912001546001600160a01b0316905081565b6108e9612c8c565b306001600160a01b0383160361092b5760405162461bcd60e51b815260206004820152600260248201526121a360f11b60448201526064015b60405180910390fd5b816001600160a01b031663a9059cbb61094c6006546001600160a01b031690565b836040518363ffffffff1660e01b815260040161096a92919061405c565b6020604051808303816000875af1158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190614075565b505050565b6060600d8054806020026020016040519081016040528092919081815260200182805480156107f957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109ec575050505050905090565b6001600160a01b031660009081526020819052604090205490565b600260055403610a655760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610922565b6002600555601054610100900460ff1615610aa75760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610922565b6010805461ff001916610100179055600e54600f5481158015610ac8575080155b15610adf5750506010805461ff0019169055610e8d565b6000610aea30610a13565b90506000610af88385614049565b905080821015610b6c576000805160206143c0833981519152604051610b4f906020808252601a908201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604082015260600190565b60405180910390a150506010805461ff001916905550610e8d9050565b3368056bc75e2d631000006000610b838688614049565b905081811115610c2f57600081610ba284670de0b6b3a7640000614097565b610bac91906140c4565b9050670de0b6b3a7640000610bc1828a614097565b610bcb91906140c4565b9750670de0b6b3a7640000610be08289614097565b610bea91906140c4565b9650610bf68789614049565b915087600e6000828254610c0a9190614036565b9250508190555086600f6000828254610c239190614036565b90915550610c3a915050565b6000600e819055600f555b4260115560408051888152602081018890527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a1600754610c919030906001600160a01b03166000196128ec565b476000610c9d83612cda565b905080600003610cc15750506010805461ff001916905550610e8d95505050505050565b47828111610d07576000805160206143c0833981519152604051610ce4906140d8565b60405180910390a150506010805461ff001916905550610e8d9650505050505050565b6000610d138483614036565b90506000610d296006546001600160a01b031690565b6001600160a01b0316886001600160a01b031614158015610d5357506001600160a01b0388163014155b15610e21576064610d65836005614097565b610d6f91906140c4565b90508015610e21576000886001600160a01b03168260405160006040518083038185875af1925050503d8060008114610dc4576040519150601f19603f3d011682016040523d82523d6000602084013e610dc9565b606091505b5050905080610ddb5760009150610e1f565b886001600160a01b03167f9771326b75b19abc364419d27c012617e9fc89f850583037b570e4b74906e30183604051610e1691815260200190565b60405180910390a25b505b610e2b8183614036565b9150600086610e3a8e85614097565b610e4491906140c4565b90506000610e528285614036565b90508115610e6457610e64828f61314e565b8015610e7357610e738161343a565b50506010805461ff00191690555050505050505050505050505b6001600555565b610e9c612c8c565b60105460ff1615610ed45760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610922565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f57919061410f565b600a80546001600160a01b0319166001600160a01b03929092169182179055611013576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff2919061410f565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166110505760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610922565b60075461106a9030906001600160a01b03166000196128ec565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926110a2929116906000199060040161405c565b6020604051808303816000875af11580156110c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e59190614075565b6111165760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610922565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261114e929116906000199060040161405c565b6020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190614075565b50600a5460405163095ea7b360e01b8152309163095ea7b3916111c4916001600160a01b0316906000199060040161405c565b6020604051808303816000875af11580156111e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112079190614075565b50565b60606004805461078090613fe6565b611221612c8c565b600082116112415760405162461bcd60e51b81526004016109229061412c565b600081116112765760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610922565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa1580156112b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d79190614148565b101561130a5760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610922565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113769190614148565b10156113a95760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610922565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906113dd90339030908690600401614161565b6020604051808303816000875af11580156113fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114209190614075565b6114515760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610922565b6007546114699030906001600160a01b0316846128ec565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261149f92911690859060040161405c565b6020604051808303816000875af11580156114be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e29190614075565b506007546009546001600160a01b039182169163e8e337009130911685856000803361151042610258614049565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af19250505080156115a8575060408051601f3d908101601f191682019092526115a591810190614185565b60015b611830576115b46141b3565b806308c379a0036116f757506115c8614220565b806115d357506116f9565b6007546115ec9030906001600160a01b031660006128ec565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116239291169060009060040161405c565b6020604051808303816000875af1158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190614075565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611699903390869060040161405c565b6020604051808303816000875af11580156116b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116dc9190614075565b508060405162461bcd60e51b81526004016109229190613e42565b505b6007546117129030906001600160a01b031660006128ec565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926117499291169060009060040161405c565b6020604051808303816000875af1158015611768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178c9190614075565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906117bf903390859060040161405c565b6020604051808303816000875af11580156117de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118029190614075565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610922565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156118b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d99190614148565b905080156109ad5760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611913903390859060040161405c565b6020604051808303816000875af1158015611932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119569190614075565b50505050565b611964612c8c565b6001600160a01b03811661199f5760405162461bcd60e51b81526020600482015260026024820152615a4160f01b6044820152606401610922565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b600033610811818585612a06565b611a16612c8c565b600260055403611a4d5760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610922565b600260055580611a9f5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610922565b611aa830610a13565b811115611aee5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610922565b601054600160b01b900460ff16611b3c5760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610922565b6000611b4782612cda565b905060008111611b995760405162461bcd60e51b815260206004820152601c60248201527f53776170206661696c65642c206e6f20455448207265636569766564000000006044820152606401610922565b60408051838152602081018390527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a150506001600555565b611be3612c8c565b6001600160a01b038116611c1e5760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610922565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611c48612c8c565b601054600160b01b900460ff1615611c965760405162461bcd60e51b8152602060048201526011602482015270141c9bde1e48185b1c9958591e481cd95d607a1b6044820152606401610922565b6001600160a01b038116611ce45760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642070726f7879206164647265737360581b6044820152606401610922565b6010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b611d51612c8c565b60008111611d715760405162461bcd60e51b81526004016109229061412c565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015611dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd29190614148565b1015611e055760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610922565b600754611e1f9030906001600160a01b03166000196128ec565b476000611e2b83612cda565b905080600003611e3a57505050565b47828111611e6b576000805160206143c0833981519152604051611e5d906140d8565b60405180910390a150505050565b6000611e778483614036565b905060006064611e88601984614097565b611e9291906140c4565b905060006064611ea3601985614097565b611ead91906140c4565b90508115611ed557611ed5826064611ec660198b614097565b611ed091906140c4565b61314e565b8015611ee457611ee48161343a565b50505050505050565b611ef5612c8c565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015611f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f579190614148565b905060008111611f795760405162461bcd60e51b81526004016109229061412c565b60003411611fae5760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610922565b600754611fc69030906001600160a01b0316836128ec565b6007546001600160a01b031663f305d71934308460008033611fea42610258614049565b6040518863ffffffff1660e01b815260040161200b969594939291906142aa565b60606040518083038185885af193505050508015612046575060408051601f3d908101601f1916820190925261204391810190614185565b60015b6120fd576120526141b3565b806308c379a0036120b65750612066614220565b8061207157506120b8565b60075461208a9030906001600160a01b031660006128ec565b60405133904780156108fc02916000818181858888f193505050501580156116dc573d6000803e3d6000fd5b505b6007546120d19030906001600160a01b031660006128ec565b60405133904780156108fc02916000818181858888f19350505050158015611802573d6000803e3d6000fd5b5050604080518381523460208201527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a150565b6000600e54118061214e57506000600f54115b61218e5760405162461bcd60e51b815260206004820152601160248201527013940e88139bc8151bdad95b881319599d607a1b6044820152606401610922565b600d546121d25760405162461bcd60e51b815260206004820152601260248201527113920e88139bc8121bdb19195c881319599d60721b6044820152606401610922565b601054610100900460ff161561220f5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610922565b6010805461ff001916610100179055600e54600f5481158015612230575080155b156122445750506010805461ff0019169055565b600061224f30610a13565b9050600061225d8385614049565b9050808210156122cd576000805160206143c08339815191526040516122b4906020808252601a908201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604082015260600190565b60405180910390a150506010805461ff00191690555050565b33680ad78ebc5ac620000060006122e48688614049565b9050818111156123905760008161230384670de0b6b3a7640000614097565b61230d91906140c4565b9050670de0b6b3a7640000612322828a614097565b61232c91906140c4565b9750670de0b6b3a76400006123418289614097565b61234b91906140c4565b96506123578789614049565b915087600e600082825461236b9190614036565b9250508190555086600f60008282546123849190614036565b9091555061239b915050565b6000600e819055600f555b4260115560408051888152602081018890527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16007546123f29030906001600160a01b03166000196128ec565b4760006123fe83612cda565b90508060000361241e5750506010805461ff001916905550505050505050565b47828111612460576000805160206143c0833981519152604051612441906140d8565b60405180910390a150506010805461ff00191690555050505050505050565b600061246c8483614036565b905060006124826006546001600160a01b031690565b6001600160a01b0316886001600160a01b0316141580156124ac57506001600160a01b0388163014155b1561257a5760646124be836005614097565b6124c891906140c4565b9050801561257a576000886001600160a01b03168260405160006040518083038185875af1925050503d806000811461251d576040519150601f19603f3d011682016040523d82523d6000602084013e612522565b606091505b50509050806125345760009150612578565b886001600160a01b03167f9771326b75b19abc364419d27c012617e9fc89f850583037b570e4b74906e3018360405161256f91815260200190565b60405180910390a25b505b6125848183614036565b91506000866125938e85614097565b61259d91906140c4565b905060006125ab8285614036565b905081156125bd576125bd828f61314e565b80156125cc576125cc8161343a565b50506010805461ff0019169055505050505050505050505050565b600080600080600f54600e546125fd9190614049565b6802b5e3af16b18800008110159590945060009350620c350092509050565b612624612c8c565b60075461263e9030906001600160a01b03166000196128ec565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612676929116906000199060040161405c565b6020604051808303816000875af19250505080156126b1575060408051601f3d908101601f191682019092526126ae91810190614075565b60015b1561270757506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926126fe926001600160a01b039182169291169060001990614161565b60405180910390a15b600a546001600160a01b03161561289e57600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612750929116906000199060040161405c565b6020604051808303816000875af192505050801561278b575060408051601f3d908101601f1916820190925261278891810190614075565b60015b156127e15750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926127d8926001600160a01b039182169291169060001990614161565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b391612813916001600160a01b0316906000199060040161405c565b6020604051808303816000875af192505050801561284e575060408051601f3d908101601f1916820190925261284b91810190614075565b60015b1561289e5750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca916128959130916001600160a01b03169060001990614161565b60405180910390a15b565b6128a8612c8c565b6001600160a01b0381166128e35760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610922565b61120781613ab4565b6001600160a01b0383161580159061290c57506001600160a01b03821615155b61293d5760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610922565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054818110156129f95760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610922565b61195684848484036128ec565b601054610100900460ff16158015612a2c57506006546001600160a01b03848116911614155b8015612a4657506006546001600160a01b03838116911614155b8015612a5b57506001600160a01b0383163014155b8015612a745750600a546001600160a01b038381169116145b15612c535760006064612a88600584614097565b612a9291906140c4565b90508015612c515760006064612aa9601984614097565b612ab391906140c4565b905060006064612ac4601985614097565b612ace91906140c4565b90506000612adc8486614036565b9050612ae9873086613b06565b612af4878783613b06565b82600e6000828254612b069190614049565b9250508190555081600f6000828254612b1f9190614049565b9091555050600f54600e546802b5e3af16b188000091612b3e91614049565b10612c1c577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051612b81929190918252602082015260400190565b60405180910390a17f166cfdb014c67ae8b32e0df45eca1171fe28cc0198094c266ca20c641e8c82d0600f54600e54612bba9190614049565b6040805191825262061a8060208301520160405180910390a17f114686b9e702daeb8b2d1103d8bcf05eaad0c13a55be6bb01b97335dacee4221600f54600e54612c049190614049565b60408051918252600560208301520160405180910390a15b612c3a8768056bc75e2d63100000612c338a610a13565b1015613c0b565b611ee48668056bc75e2d63100000612c3389610a13565b505b612c5e838383613b06565b612c758368056bc75e2d63100000612c3386610a13565b6109ad8268056bc75e2d63100000612c3385610a13565b33612c9f6006546001600160a01b031690565b6001600160a01b03161461289e5760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610922565b600081600003612cec57506000919050565b601054600160b01b900460ff16612d3a5760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610922565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6f57612d6f6142e5565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dec919061410f565b81600181518110612dff57612dff6142e5565b6001600160a01b039283166020918202929092010152600754600091612e2891309116866128ec565b6000612e3642610e10614049565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac94792612e7f928b9289928b92620100009091049091169089906004016142fb565b600060405180830381600087803b158015612e9957600080fd5b505af1925050508015612eaa575060015b612f5f57612eb66141b3565b806308c379a003612f075750612eca614220565b80612ed55750612f09565b6000805160206143c083398151915281604051612ef29190613e42565b60405180910390a15060009695505050505050565b505b6000805160206143c0833981519152604051612f4b906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b60405180910390a150600095945050505050565b601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612faf57600080fd5b505af1925050508015612fc0575060015b61308557612fcc6141b3565b806308c379a0036130255750612fe0614220565b80612feb5750613027565b6000805160206143c08339815191528160405160200161300b9190614337565b60408051601f1981840301815290829052612ef291613e42565b505b6000805160206143c0833981519152604051612f4b9060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b4760006130928383614036565b905080156130de5760408051898152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1979650505050505050565b6000805160206143c08339815191526040516131389060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a1506000979650505050505050565b600061315930610a13565b9050818110156131e0577fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516131d39060208082526028908201527f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206c604082015267697175696469747960c01b606082015260800190565b60405180910390a1505050565b600060646131ee8180614036565b6131f89085614097565b61320291906140c4565b9050600060646132128180614036565b61321c9087614097565b61322691906140c4565b6007549091506132419030906001600160a01b0316866128ec565b6007546001600160a01b031663f305d71986308786866132696006546001600160a01b031690565b61327542610e10614049565b6040518863ffffffff1660e01b8152600401613296969594939291906142aa565b60606040518083038185885af1935050505080156132d1575060408051601f3d908101601f191682019092526132ce91810190614185565b60015b6133a7576132dd6141b3565b806308c379a00361333957506132f1614220565b806132fc575061333b565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad8160405161332b9190613e42565b60405180910390a150613433565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad60405161339a906020808252601b908201527f556e6b6e6f776e206c697175696469747920616464206572726f720000000000604082015260600190565b60405180910390a1613433565b505060408051868152602081018890527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16006546001600160a01b03166001600160a01b03167fb4a8f0077e5aebb5cf42d9b6adf858fcb4dfd47ce2ecd5ae56708582389d449d600060405161342a91815260200190565b60405180910390a25b5050505050565b600d54801580613448575081155b15613451575050565b60006064613460846019614097565b61346a91906140c4565b905060006134788285614036565b90506000821180156134945750600b546001600160a01b031615155b1561356557600b546040516000916001600160a01b03169084908381818185875af1925050503d80600081146134e6576040519150601f19603f3d011682016040523d82523d6000602084013e6134eb565b606091505b505090508061355f577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051613553906020808252601c908201527f547265617375727920455448207472616e73666572206661696c656400000000604082015260600190565b60405180910390a18491505b50613568565b50825b6000831180156135785750600081115b1561195657600d548381146135b25780601254106135ae576000811161359f5760006135aa565b6135aa600182614036565b6012555b8093505b83600003613628577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051613619906020808252601d908201527f4e6f20686f6c64657273206c65667420746f2064697374726962757465000000604082015260600190565b60405180910390a15050505050565b600061363485846140c4565b90508015613aac5760125460329060009061365090889061437c565b90506000808367ffffffffffffffff81111561366e5761366e6141cf565b604051908082528060200260200182016040528015613697578160200160208202803683370190505b5090506000835b8a811080156136ac57508582105b15613753576000600d82815481106136c6576136c66142e5565b6000918252602090912001546001600160a01b0316905080158015906136f557506001600160a01b0381163014155b801561370f5750600a546001600160a01b03828116911614155b156137405781848481518110613727576137276142e5565b60209081029190910101528261373c81614390565b9350505b508061374b81614390565b91505061369e565b5084811080156137635750600084115b156138225760005b848110801561377957508582105b15613820576000600d8281548110613793576137936142e5565b6000918252602090912001546001600160a01b0316905080158015906137c257506001600160a01b0381163014155b80156137dc5750600a546001600160a01b03828116911614155b1561380d57818484815181106137f4576137f46142e5565b60209081029190910101528261380981614390565b9350505b508061381881614390565b91505061376b565b505b60005b818110156139af576000838281518110613841576138416142e5565b602002602001015190506000600d8281548110613860576138606142e5565b6000918252602090912001546001600160a01b03169050801580159061388f57506001600160a01b0381163014155b80156138a95750600a546001600160a01b03828116911614155b80156138cd57506001600160a01b0381166000908152600c602052604090205460ff165b1561399a576000816001600160a01b03168a60405160006040518083038185875af1925050503d806000811461391f576040519150601f19603f3d011682016040523d82523d6000602084013e613924565b606091505b505090508061398b577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161398290602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b8661399581614390565b975050505b505080806139a790614390565b915050613825565b5080156139f95789826139c3600184614036565b815181106139d3576139d36142e5565b602002602001015160016139e79190614049565b6139f1919061437c565b6012556139ff565b60006012555b6000600f54600e54613a119190614049565b118015613a2957506012541580613a29575083601254145b15613a6c57604080518c8152602081018590527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c217910160405180910390a1613aa6565b604080518c8152602081018590527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c217910160405180910390a15b50505050505b505050505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831615801590613b2657506001600160a01b03821615155b613b575760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610922565b6001600160a01b03831660009081526020819052604090205481811015613ba55760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610922565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611956565b600a546001600160a01b03838116911614801590613c3257506001600160a01b0382163014155b15613e1a57808015613c5d57506001600160a01b0382166000908152600c602052604090205460ff16155b15613cc957506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b80158015613cef57506001600160a01b0382166000908152600c602052604090205460ff165b15613e1a576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d548110156109ad57826001600160a01b0316600d8281548110613d3c57613d3c6142e5565b6000918252602090912001546001600160a01b031603613e0857600d8054613d6690600190614036565b81548110613d7657613d766142e5565b600091825260209091200154600d80546001600160a01b039092169183908110613da257613da26142e5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d805480613de157613de16143a9565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b80613e1281614390565b915050613d15565b5050565b60005b83811015613e39578181015183820152602001613e21565b50506000910152565b6020815260008251806020840152613e61816040850160208701613e1e565b601f01601f19169190910160400192915050565b6001600160a01b038116811461120757600080fd5b60008060408385031215613e9d57600080fd5b8235613ea881613e75565b946020939093013593505050565b600080600060608486031215613ecb57600080fd5b8335613ed681613e75565b92506020840135613ee681613e75565b929592945050506040919091013590565b600060208284031215613f0957600080fd5b5035919050565b600081518084526020808501945080840160005b83811015613f495781516001600160a01b031687529582019590820190600101613f24565b509495945050505050565b602081526000613f676020830184613f10565b9392505050565b600060208284031215613f8057600080fd5b8135613f6781613e75565b60008060408385031215613f9e57600080fd5b50508035926020909101359150565b60008060408385031215613fc057600080fd5b8235613fcb81613e75565b91506020830135613fdb81613e75565b809150509250929050565b600181811c90821680613ffa57607f821691505b60208210810361401a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561081757610817614020565b8082018082111561081757610817614020565b6001600160a01b03929092168252602082015260400190565b60006020828403121561408757600080fd5b81518015158114613f6757600080fd5b808202811582820484141761081757610817614020565b634e487b7160e01b600052601260045260246000fd5b6000826140d3576140d36140ae565b500490565b60208082526019908201527f4e6f204554482072656365697665642066726f6d207377617000000000000000604082015260600190565b60006020828403121561412157600080fd5b8151613f6781613e75565b602080825260029082015261139560f21b604082015260600190565b60006020828403121561415a57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008060006060848603121561419a57600080fd5b8351925060208401519150604084015190509250925092565b600060033d11156141cc5760046000803e5060005160e01c5b90565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561421957634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d101561422e5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561425e57505050505090565b82850191508151818111156142765750505050505090565b843d87010160208285010111156142905750505050505090565b61429f602082860101876141e5565b509095945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a06040820152600061431a60a0830186613f10565b6001600160a01b0394909416606083015250608001529392505050565b7f50726f787920455448207472616e73666572206661696c65643a20000000000081526000825161436f81601b850160208701613e1e565b91909101601b0192915050565b60008261438b5761438b6140ae565b500690565b6000600182016143a2576143a2614020565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723a264697066735822122085c5551de71882a08320c4545626677ed0ea93198a5af773b749a31133182df164736f6c63430008110033
Deployed Bytecode Sourcemap
8971:30066:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37380:9;:13;37376:85;;37415:34;;37439:9;160:25:1;;37427:10:0;;37415:34;;148:2:1;133:18;37415:34:0;;;;;;;37376:85;8971:30066;;;;;2801:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30492:118;;;;;;;;;;-1:-1:-1;30579:23:0;;30492:118;;;160:25:1;;;148:2;133:18;30492:118:0;14:177:1;3668:190:0;;;;;;;;;;-1:-1:-1;3668:190:0;;;;;:::i;:::-;;:::i;:::-;;;1473:14:1;;1466:22;1448:41;;1436:2;1421:18;3668:190:0;1308:187:1;3095:99:0;;;;;;;;;;-1:-1:-1;3174:12:0;;3095:99;;37779:1255;;;;;;;;;;;;;:::i;:::-;;;;1803:25:1;;;1859:2;1844:18;;1837:34;;;;1887:18;;;1880:34;;;;1945:2;1930:18;;1923:34;;;;1988:3;1973:19;;1966:35;2045:14;2038:22;2032:3;2017:19;;2010:51;2105:14;2098:22;2092:3;2077:19;;2070:51;1790:3;1775:19;37779:1255:0;1500:627:1;3866:250:0;;;;;;;;;;-1:-1:-1;3866:250:0;;;;;:::i;:::-;;:::i;10085:24::-;;;;;;;;;;-1:-1:-1;10085:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2942:32:1;;;2924:51;;2912:2;2897:18;10085:24:0;2778:203:1;3003:84:0;;;;;;;;;;-1:-1:-1;3003:84:0;;3077:2;3128:36:1;;3116:2;3101:18;3003:84:0;2986:184:1;9909:25:0;;;;;;;;;;-1:-1:-1;9909:25:0;;;;-1:-1:-1;;;;;9909:25:0;;;9976:29;;;;;;;;;;-1:-1:-1;9976:29:0;;;;-1:-1:-1;;;;;9976:29:0;;;30258:183;;;;;;;;;;-1:-1:-1;30258:183:0;;;;;:::i;:::-;;:::i;30618:114::-;;;;;;;;;;-1:-1:-1;30703:21:0;;30618:114;;26448:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9811:41::-;;;;;;;;;;-1:-1:-1;9811:41:0;;;;-1:-1:-1;;;;;9811:41:0;;;11421:24;;;;;;;;;;-1:-1:-1;11421:24:0;;;;;;;-1:-1:-1;;;;;11421:24:0;;;3202:118;;;;;;;;;;-1:-1:-1;3202:118:0;;;;;:::i;:::-;;:::i;26338:98::-;;;;;;;;;;-1:-1:-1;26414:7:0;:14;26338:98;;15903:3415;;;;;;;;;;;;;:::i;9941:28::-;;;;;;;;;;-1:-1:-1;9941:28:0;;;;-1:-1:-1;;;;;9941:28:0;;;12393:836;;;;;;;;;;;;;:::i;1789:87::-;;;;;;;;;;-1:-1:-1;1862:6:0;;-1:-1:-1;;;;;1862:6:0;1789:87;;2900:95;;;;;;;;;;;;;:::i;27101:1890::-;;;;;;;;;;-1:-1:-1;27101:1890:0;;;;;:::i;:::-;;:::i;35715:319::-;;;;;;;;;;-1:-1:-1;35715:319:0;;;;;:::i;:::-;;:::i;3328:182::-;;;;;;;;;;-1:-1:-1;3328:182:0;;;;;:::i;:::-;;:::i;35205:502::-;;;;;;;;;;-1:-1:-1;35205:502:0;;;;;:::i;:::-;;:::i;11452:24::-;;;;;;;;;;-1:-1:-1;11452:24:0;;;;-1:-1:-1;;;11452:24:0;;;;;;30084:166;;;;;;;;;;-1:-1:-1;30084:166:0;;;;;:::i;:::-;;:::i;37476:295::-;;;;;;;;;;-1:-1:-1;37476:295:0;;;;;:::i;:::-;;:::i;10038:40::-;;;;;;;;;;-1:-1:-1;10038:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36042:1288;;;;;;;;;;-1:-1:-1;36042:1288:0;;;;;:::i;:::-;;:::i;3518:142::-;;;;;;;;;;-1:-1:-1;3518:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;3625:18:0;;;3598:7;3625:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3518:142;28999:1077;;;:::i;30744:3627::-;;;;;;;;;;;;;:::i;26556:490::-;;;;;;;;;;;;;:::i;:::-;;;;5288:14:1;;5281:22;5263:41;;5335:2;5320:18;;5313:34;;;;5363:18;;;5356:34;5421:2;5406:18;;5399:34;5250:3;5235:19;26556:490:0;5038:401:1;34379:818:0;;;;;;;;;;;;;:::i;1992:165::-;;;;;;;;;;-1:-1:-1;1992:165:0;;;;;:::i;:::-;;:::i;9859:43::-;;;;;;;;;;-1:-1:-1;9859:43:0;;;;-1:-1:-1;;;;;9859:43:0;;;2801:91;2846:13;2879:5;2872:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2801:91;:::o;3668:190::-;3742:4;3775:10;3796:32;3775:10;3812:7;3821:6;3796:8;:32::i;:::-;3846:4;3839:11;;;3668:190;;;;;:::o;37779:1255::-;38133:23;;38190:21;;38237:7;:14;38289:25;;37841:30;;;38365:2;37841:30;38431:16;;38427:259;;38496:12;38468:24;:40;38464:211;;-1:-1:-1;38548:12:0;38464:211;;;38620:39;38635:24;38620:12;:39;:::i;:::-;38601:58;;38464:211;38743:19;38724:16;:38;:79;;38784:19;38724:79;;;38765:16;38724:79;38706:97;-1:-1:-1;38848:45:0;38873:20;38848:22;:45;:::i;:::-;:50;;-1:-1:-1;38943:29:0;;:82;;;;-1:-1:-1;39024:1:0;38976:45;39001:20;38976:22;:45;:::i;:::-;:49;38943:82;38920:106;;38097:937;;37779:1255;;;;;;;:::o;3866:250::-;3954:4;3989:10;4010:38;4026:4;3989:10;4041:6;4010:15;:38::i;:::-;4059:27;4069:4;4075:2;4079:6;4059:9;:27::i;:::-;-1:-1:-1;4104:4:0;;3866:250;-1:-1:-1;;;;3866:250:0:o;10085:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10085:24:0;;-1:-1:-1;10085:24:0;:::o;30258:183::-;1748:13;:11;:13::i;:::-;30369:4:::1;-1:-1:-1::0;;;;;30351:23:0;::::1;::::0;30343:38:::1;;;::::0;-1:-1:-1;;;30343:38:0;;6660:2:1;30343:38:0::1;::::0;::::1;6642:21:1::0;6699:1;6679:18;;;6672:29;-1:-1:-1;;;6717:18:1;;;6710:32;6759:18;;30343:38:0::1;;;;;;;;;30399:6;-1:-1:-1::0;;;;;30392:23:0::1;;30416:7;1862:6:::0;;-1:-1:-1;;;;;1862:6:0;;1789:87;30416:7:::1;30425;30392:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30258:183:::0;;:::o;26448:96::-;26493:16;26529:7;26522:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26522:14:0;;;;;;;;;;;;;;;;;;;;;;26448:96;:::o;3202:118::-;-1:-1:-1;;;;;3294:18:0;3267:7;3294:18;;;;;;;;;;;;3202:118::o;15903:3415::-;1042:1;1188:7;;:19;1180:34;;;;-1:-1:-1;;;1180:34:0;;7551:2:1;1180:34:0;;;7533:21:1;7590:1;7570:18;;;7563:29;-1:-1:-1;;;7608:18:1;;;7601:32;7650:18;;1180:34:0;7349:325:1;1180:34:0;1042:1;1225:7;:18;15983:7:::1;::::0;::::1;::::0;::::1;;;15982:8;15974:23;;;::::0;-1:-1:-1;;;15974:23:0;;7881:2:1;15974:23:0::1;::::0;::::1;7863:21:1::0;7920:1;7900:18;;;7893:29;-1:-1:-1;;;7938:18:1;;;7931:32;7980:18;;15974:23:0::1;7679:325:1::0;15974:23:0::1;16008:7;:14:::0;;-1:-1:-1;;16008:14:0::1;;;::::0;;16072:23:::1;::::0;16133:21:::1;::::0;16179:23;;:48;::::1;;;-1:-1:-1::0;16206:21:0;;16179:48:::1;16175:117;;;-1:-1:-1::0;;16244:7:0::1;:15:::0;;-1:-1:-1;;16244:15:0::1;::::0;;16274:7:::1;;16175:117;16312:28;16343:24;16361:4;16343:9;:24::i;:::-;16312:55:::0;-1:-1:-1;16378:28:0::1;16409:37;16430:16:::0;16409:18;:37:::1;:::i;:::-;16378:68;;16494:20;16471;:43;16467:172;;;-1:-1:-1::0;;;;;;;;;;;16536:40:0::1;;;;8211:2:1::0;8193:21;;;8250:2;8230:18;;;8223:30;8289:28;8284:2;8269:18;;8262:56;8350:2;8335:18;;8009:350;16536:40:0::1;;;;;;;;-1:-1:-1::0;;16591:7:0::1;:15:::0;;-1:-1:-1;;16591:15:0::1;::::0;;-1:-1:-1;16621:7:0::1;::::0;-1:-1:-1;16621:7:0::1;16467:172;16676:10;16734:12;16659:14;16785:37;16806:16:::0;16785:18;:37:::1;:::i;:::-;16757:65;;16867:16;16847:17;:36;16843:564;;;16900:13;16942:17:::0;16916:23:::1;:16:::0;16935:4:::1;16916:23;:::i;:::-;:43;;;;:::i;:::-;16900:59:::0;-1:-1:-1;17024:4:0::1;16995:26;16900:59:::0;16995:18;:26:::1;:::i;:::-;:33;;;;:::i;:::-;16974:54:::0;-1:-1:-1;17089:4:0::1;17062:24;17081:5:::0;17062:16;:24:::1;:::i;:::-;:31;;;;:::i;:::-;17043:50:::0;-1:-1:-1;17128:37:0::1;17043:50:::0;17128:18;:37:::1;:::i;:::-;17108:57;;17221:18;17194:23;;:45;;;;;;;:::i;:::-;;;;;;;;17279:16;17254:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;16843:564:0::1;::::0;-1:-1:-1;;16843:564:0::1;;17354:1;17328:23;:27:::0;;;17370:21:::1;:25:::0;16843:564:::1;17449:15;17427:19;:37:::0;17490:52:::1;::::0;;8968:25:1;;;9024:2;9009:18;;9002:34;;;17490:52:0::1;::::0;8941:18:1;17490:52:0::1;;;;;;;17625:16;::::0;17593:69:::1;::::0;17610:4:::1;::::0;-1:-1:-1;;;;;17625:16:0::1;-1:-1:-1::0;;17593:8:0::1;:69::i;:::-;17711:21;17683:25;17775:31;17788:17:::0;17775:12:::1;:31::i;:::-;17753:53;;17831:11;17846:1;17831:16:::0;17827:85:::1;;-1:-1:-1::0;;17864:7:0::1;:15:::0;;-1:-1:-1;;17864:15:0::1;::::0;;-1:-1:-1;17894:7:0::1;::::0;-1:-1:-1;;;;;;17894:7:0::1;17827:85;17961:21;17997:39:::0;;::::1;17993:167;;-1:-1:-1::0;;;;;;;;;;;18058:39:0::1;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;18112:7:0::1;:15:::0;;-1:-1:-1;;18112:15:0::1;::::0;;-1:-1:-1;18142:7:0::1;::::0;-1:-1:-1;;;;;;;18142:7:0::1;17993:167;18180:25;18208:38;18229:17:::0;18208:18;:38:::1;:::i;:::-;18180:66;;18267:20;18316:7;1862:6:::0;;-1:-1:-1;;;;;1862:6:0;;1789:87;18316:7:::1;-1:-1:-1::0;;;;;18306:17:0::1;:6;-1:-1:-1::0;;;;;18306:17:0::1;;;:44;;;;-1:-1:-1::0;;;;;;18327:23:0;::::1;18345:4;18327:23;;18306:44;18302:429;;;18406:3;18382:21;:17:::0;18402:1:::1;18382:21;:::i;:::-;:27;;;;:::i;:::-;18367:42:::0;-1:-1:-1;18428:16:0;;18424:296:::1;;18466:12;18484:6;-1:-1:-1::0;;;;;18484:11:0::1;18503:12;18484:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18465:55;;;18544:7;18539:166;;18591:1;18576:16;;18539:166;;;18664:6;-1:-1:-1::0;;;;;18646:39:0::1;;18672:12;18646:39;;;;160:25:1::0;;148:2;133:18;;14:177;18646:39:0::1;;;;;;;;18539:166;18446:274;18424:296;18771:32;18791:12:::0;18771:17;:32:::1;:::i;:::-;18751:52:::0;-1:-1:-1;18854:23:0::1;18921:17:::0;18880:38:::1;18900:18:::0;18751:52;18880:38:::1;:::i;:::-;:58;;;;:::i;:::-;18854:84:::0;-1:-1:-1;18949:21:0::1;18973:35;18854:84:::0;18973:17;:35:::1;:::i;:::-;18949:59:::0;-1:-1:-1;19033:19:0;;19029:102:::1;;19069:50;19083:15;19100:18;19069:13;:50::i;:::-;19192:17:::0;;19188:87:::1;;19226:37;19249:13;19226:22;:37::i;:::-;-1:-1:-1::0;;19295:7:0::1;:15:::0;;-1:-1:-1;;19295:15:0::1;::::0;;-1:-1:-1;;;;;;;;;;;;1254:1:0::1;998::::0;1266:7;:22;15903:3415::o;12393:836::-;1748:13;:11;:13::i;:::-;12454:12:::1;::::0;::::1;;12453:13;12445:28;;;::::0;-1:-1:-1;;;12445:28:0;;9813:2:1;12445:28:0::1;::::0;::::1;9795:21:1::0;9852:1;9832:18;;;9825:29;-1:-1:-1;;;9870:18:1;;;9863:32;9912:18;;12445:28:0::1;9611:325:1::0;12445:28:0::1;12484:12;:19:::0;;-1:-1:-1;;12484:19:0::1;12499:4;12484:19;::::0;;12575:17:::1;::::0;12616:10:::1;::::0;12575:52:::1;::::0;-1:-1:-1;;;12575:52:0;;12609:4:::1;12575:52;::::0;::::1;10153:34:1::0;-1:-1:-1;;;;;12616:10:0;;::::1;10203:18:1::0;;;10196:43;12575:17:0;::::1;::::0;:25:::1;::::0;10088:18:1;;12575:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12559:13;:68:::0;;-1:-1:-1;;;;;;12559:68:0::1;-1:-1:-1::0;;;;;12559:68:0;;;::::1;::::0;;::::1;::::0;;12693:131:::1;;12757:17;::::0;12801:10:::1;::::0;12757:55:::1;::::0;-1:-1:-1;;;12757:55:0;;12794:4:::1;12757:55;::::0;::::1;10153:34:1::0;-1:-1:-1;;;;;12801:10:0;;::::1;10203:18:1::0;;;10196:43;12757:17:0;::::1;::::0;:28:::1;::::0;10088:18:1;;12757:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12741:13;:71:::0;;-1:-1:-1;;;;;;12741:71:0::1;-1:-1:-1::0;;;;;12741:71:0;;;::::1;::::0;;;::::1;::::0;;12693:131:::1;12852:13;::::0;-1:-1:-1;;;;;12852:13:0::1;12844:42;;;::::0;-1:-1:-1;;;12844:42:0;;10708:2:1;12844:42:0::1;::::0;::::1;10690:21:1::0;10747:1;10727:18;;;10720:29;-1:-1:-1;;;10765:18:1;;;10758:32;10807:18;;12844:42:0::1;10506:325:1::0;12844:42:0::1;12931:16;::::0;12899:69:::1;::::0;12916:4:::1;::::0;-1:-1:-1;;;;;12931:16:0::1;-1:-1:-1::0;;12899:8:0::1;:69::i;:::-;13004:10;::::0;13032:16:::1;::::0;12997:72:::1;::::0;-1:-1:-1;;;12997:72:0;;-1:-1:-1;;;;;13004:10:0;;::::1;::::0;12997:26:::1;::::0;:72:::1;::::0;13032:16;::::1;::::0;-1:-1:-1;;13051:17:0;12997:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12989:87;;;::::0;-1:-1:-1;;;12989:87:0;;11038:2:1;12989:87:0::1;::::0;::::1;11020:21:1::0;11077:1;11057:18;;;11050:29;-1:-1:-1;;;11095:18:1;;;11088:32;11137:18;;12989:87:0::1;10836:325:1::0;12989:87:0::1;13094:10;::::0;13114:13:::1;::::0;13087:60:::1;::::0;-1:-1:-1;;;13087:60:0;;-1:-1:-1;;;;;13094:10:0;;::::1;::::0;13087:26:::1;::::0;:60:::1;::::0;13114:13;::::1;::::0;-1:-1:-1;;13129:17:0;13087:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;13188:13:0::1;::::0;13158:63:::1;::::0;-1:-1:-1;;;13158:63:0;;13173:4:::1;::::0;13158:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;13188:13:0::1;::::0;-1:-1:-1;;13203:17:0;13158:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12393:836::o:0;2900:95::-;2947:13;2980:7;2973:14;;;;;:::i;27101:1890::-;1748:13;:11;:13::i;:::-;27234:1:::1;27220:11;:15;27212:30;;;;-1:-1:-1::0;;;27212:30:0::1;;;;;;;:::i;:::-;27275:1;27261:11;:15;27253:30;;;::::0;-1:-1:-1;;;27253:30:0;;11698:2:1;27253:30:0::1;::::0;::::1;11680:21:1::0;11737:1;11717:18;;;11710:29;-1:-1:-1;;;11755:18:1;;;11748:32;11797:18;;27253:30:0::1;11496:325:1::0;27253:30:0::1;27326:46;::::0;-1:-1:-1;;;27326:46:0;;27341:4:::1;27326:46;::::0;::::1;2924:51:1::0;;;27376:11:0;;27326:31:::1;::::0;2897:18:1;;27326:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;27304:113;;;::::0;-1:-1:-1;;;27304:113:0;;12217:2:1;27304:113:0::1;::::0;::::1;12199:21:1::0;12256:1;12236:18;;;12229:29;-1:-1:-1;;;12274:18:1;;;12267:32;12316:18;;27304:113:0::1;12015:325:1::0;27304:113:0::1;27467:10;::::0;27460:40:::1;::::0;-1:-1:-1;;;27460:40:0;;27489:10:::1;27460:40;::::0;::::1;2924:51:1::0;27504:11:0;;-1:-1:-1;;;;;27467:10:0::1;::::0;27460:28:::1;::::0;2897:18:1;;27460:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;27438:107;;;::::0;-1:-1:-1;;;27438:107:0;;12547:2:1;27438:107:0::1;::::0;::::1;12529:21:1::0;12586:1;12566:18;;;12559:29;-1:-1:-1;;;12604:18:1;;;12597:32;12646:18;;27438:107:0::1;12345:325:1::0;27438:107:0::1;27595:10;::::0;27588:71:::1;::::0;-1:-1:-1;;;27588:71:0;;-1:-1:-1;;;;;27595:10:0;;::::1;::::0;27588:31:::1;::::0;:71:::1;::::0;27620:10:::1;::::0;27640:4:::1;::::0;27647:11;;27588:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27566:123;;;::::0;-1:-1:-1;;;27566:123:0;;13257:2:1;27566:123:0::1;::::0;::::1;13239:21:1::0;13296:1;13276:18;;;13269:29;-1:-1:-1;;;13314:18:1;;;13307:32;13356:18;;27566:123:0::1;13055:325:1::0;27566:123:0::1;27742:16;::::0;27710:63:::1;::::0;27727:4:::1;::::0;-1:-1:-1;;;;;27742:16:0::1;27761:11:::0;27710:8:::1;:63::i;:::-;27791:10;::::0;27819:16:::1;::::0;27784:66:::1;::::0;-1:-1:-1;;;27784:66:0;;-1:-1:-1;;;;;27791:10:0;;::::1;::::0;27784:26:::1;::::0;:66:::1;::::0;27819:16;::::1;::::0;27838:11;;27784:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27875:16:0::1;::::0;27947:10:::1;::::0;-1:-1:-1;;;;;27875:16:0;;::::1;::::0;:29:::1;::::0;27927:4:::1;::::0;27947:10:::1;27972:11:::0;27998;27875:16:::1;::::0;28056:10:::1;28081:21;:15;28099:3;28081:21;:::i;:::-;27875:238;::::0;::::1;::::0;;;-1:-1:-1;;;;;;27875:238:0;;;-1:-1:-1;;;;;13800:15:1;;;27875:238:0::1;::::0;::::1;13782:34:1::0;13852:15;;;13832:18;;;13825:43;13884:18;;;13877:34;;;;13927:18;;;13920:34;;;;13970:19;;;13963:35;;;;14014:19;;;14007:35;14079:15;;;14058:19;;;14051:44;14111:19;;;14104:35;;;;13716:19;;27875:238:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27875:238:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;27875:238:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;27871:905;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;28268:16;::::0;28236:53:::1;::::0;28253:4:::1;::::0;-1:-1:-1;;;;;28268:16:0::1;;28236:8;:53::i;:::-;28311:10;::::0;28339:16:::1;::::0;28304:56:::1;::::0;-1:-1:-1;;;28304:56:0;;-1:-1:-1;;;;;28311:10:0;;::::1;::::0;28304:26:::1;::::0;:56:::1;::::0;28339:16;::::1;::::0;28311:10:::1;::::0;28304:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28396:10:0::1;::::0;28389:52:::1;::::0;-1:-1:-1;;;28389:52:0;;-1:-1:-1;;;;;28396:10:0;;::::1;::::0;28389:27:::1;::::0;:52:::1;::::0;28417:10:::1;::::0;28429:11;;28389:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28477:6;28470:14;;-1:-1:-1::0;;;28470:14:0::1;;;;;;;;:::i;27871:905::-;;;28550:16;::::0;28518:53:::1;::::0;28535:4:::1;::::0;-1:-1:-1;;;;;28550:16:0::1;;28518:8;:53::i;:::-;28593:10;::::0;28621:16:::1;::::0;28586:56:::1;::::0;-1:-1:-1;;;28586:56:0;;-1:-1:-1;;;;;28593:10:0;;::::1;::::0;28586:26:::1;::::0;:56:::1;::::0;28621:16;::::1;::::0;28593:10:::1;::::0;28586:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28678:10:0::1;::::0;28671:52:::1;::::0;-1:-1:-1;;;28671:52:0;;-1:-1:-1;;;;;28678:10:0;;::::1;::::0;28671:27:::1;::::0;:52:::1;::::0;28699:10:::1;::::0;28711:11;;28671:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28752:12:0::1;::::0;-1:-1:-1;;;28752:12:0;;16293:2:1;28752:12:0::1;::::0;::::1;16275:21:1::0;16332:1;16312:18;;;16305:29;-1:-1:-1;;;16350:18:1;;;16343:32;16392:18;;28752:12:0::1;16091:325:1::0;27871:905:0::1;-1:-1:-1::0;;28134:40:0::1;::::0;;8968:25:1;;;9024:2;9009:18;;9002:34;;;28134:40:0::1;::::0;-1:-1:-1;8941:18:1;28134:40:0::1;;;;;;;28829:10;::::0;28822:43:::1;::::0;-1:-1:-1;;;28822:43:0;;28859:4:::1;28822:43;::::0;::::1;2924:51:1::0;28796:23:0::1;::::0;-1:-1:-1;;;;;28829:10:0::1;::::0;28822:28:::1;::::0;2897:18:1;;28822:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28796:69:::0;-1:-1:-1;28880:19:0;;28876:108:::1;;28923:10;::::0;28916:56:::1;::::0;-1:-1:-1;;;28916:56:0;;-1:-1:-1;;;;;28923:10:0;;::::1;::::0;28916:27:::1;::::0;:56:::1;::::0;28944:10:::1;::::0;28956:15;;28916:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27201:1790;27101:1890:::0;;:::o;35715:319::-;1748:13;:11;:13::i;:::-;-1:-1:-1;;;;;35807:31:0;::::1;35799:46;;;::::0;-1:-1:-1;;;35799:46:0;;16623:2:1;35799:46:0::1;::::0;::::1;16605:21:1::0;16662:1;16642:18;;;16635:29;-1:-1:-1;;;16680:18:1;;;16673:32;16722:18;;35799:46:0::1;16421:325:1::0;35799:46:0::1;35888:14;::::0;;-1:-1:-1;;;;;35913:34:0;;::::1;-1:-1:-1::0;;;;;;35913:34:0;::::1;::::0;::::1;::::0;;;35973:53:::1;::::0;;35888:14;;;::::1;10153:34:1::0;;;10218:2;10203:18;;10196:43;;;;35973:53:0::1;::::0;10088:18:1;35973:53:0::1;;;;;;;35788:246;35715:319:::0;:::o;3328:182::-;3398:4;3431:10;3452:28;3431:10;3469:2;3473:6;3452:9;:28::i;35205:502::-;1748:13;:11;:13::i;:::-;1042:1:::1;1188:7;;:19:::0;1180:34:::1;;;::::0;-1:-1:-1;;;1180:34:0;;7551:2:1;1180:34:0::1;::::0;::::1;7533:21:1::0;7590:1;7570:18;;;7563:29;-1:-1:-1;;;7608:18:1;;;7601:32;7650:18;;1180:34:0::1;7349:325:1::0;1180:34:0::1;1042:1;1225:7;:18:::0;35297:15;35289:57:::2;;;::::0;-1:-1:-1;;;35289:57:0;;16953:2:1;35289:57:0::2;::::0;::::2;16935:21:1::0;16992:2;16972:18;;;16965:30;17031:31;17011:18;;;17004:59;17080:18;;35289:57:0::2;16751:353:1::0;35289:57:0::2;35380:24;35398:4;35380:9;:24::i;:::-;35365:11;:39;;35357:72;;;::::0;-1:-1:-1;;;35357:72:0;;17311:2:1;35357:72:0::2;::::0;::::2;17293:21:1::0;17350:2;17330:18;;;17323:30;-1:-1:-1;;;17369:18:1;;;17362:50;17429:18;;35357:72:0::2;17109:344:1::0;35357:72:0::2;35448:12;::::0;-1:-1:-1;;;35448:12:0;::::2;;;35440:43;;;::::0;-1:-1:-1;;;35440:43:0;;17660:2:1;35440:43:0::2;::::0;::::2;17642:21:1::0;17699:2;17679:18;;;17672:30;-1:-1:-1;;;17718:18:1;;;17711:48;17776:18;;35440:43:0::2;17458:342:1::0;35440:43:0::2;35504:19;35526:25;35539:11;35526:12;:25::i;:::-;35504:47;;35594:1;35580:11;:15;35572:56;;;::::0;-1:-1:-1;;;35572:56:0;;18007:2:1;35572:56:0::2;::::0;::::2;17989:21:1::0;18046:2;18026:18;;;18019:30;18085;18065:18;;;18058:58;18133:18;;35572:56:0::2;17805:352:1::0;35572:56:0::2;35654:45;::::0;;8968:25:1;;;9024:2;9009:18;;9002:34;;;35654:45:0::2;::::0;8941:18:1;35654:45:0::2;;;;;;;-1:-1:-1::0;;998:1:0::1;1266:7;:22:::0;35205:502::o;30084:166::-;1748:13;:11;:13::i;:::-;-1:-1:-1;;;;;30158:21:0;::::1;30150:36;;;::::0;-1:-1:-1;;;30150:36:0;;18364:2:1;30150:36:0::1;::::0;::::1;18346:21:1::0;18403:1;18383:18;;;18376:29;-1:-1:-1;;;18421:18:1;;;18414:32;18463:18;;30150:36:0::1;18162:325:1::0;30150:36:0::1;30197:16;:45:::0;;-1:-1:-1;;;;;;30197:45:0::1;-1:-1:-1::0;;;;;30197:45:0;;;::::1;::::0;;;::::1;::::0;;30084:166::o;37476:295::-;1748:13;:11;:13::i;:::-;37557:12:::1;::::0;-1:-1:-1;;;37557:12:0;::::1;;;37556:13;37548:43;;;::::0;-1:-1:-1;;;37548:43:0;;18694:2:1;37548:43:0::1;::::0;::::1;18676:21:1::0;18733:2;18713:18;;;18706:30;-1:-1:-1;;;18752:18:1;;;18745:47;18809:18;;37548:43:0::1;18492:341:1::0;37548:43:0::1;-1:-1:-1::0;;;;;37610:24:0;::::1;37602:58;;;::::0;-1:-1:-1;;;37602:58:0;;19040:2:1;37602:58:0::1;::::0;::::1;19022:21:1::0;19079:2;19059:18;;;19052:30;-1:-1:-1;;;19098:18:1;;;19091:51;19159:18;;37602:58:0::1;18838:345:1::0;37602:58:0::1;37671:9;:22:::0;;-1:-1:-1;;;;;;;;;37671:22:0;::::1;::::0;;::::1;37704:19:::0;;;;-1:-1:-1;;;;;;37704:19:0;;;;;;;-1:-1:-1;;;37704:19:0::1;::::0;;;37739:24:::1;::::0;::::1;::::0;-1:-1:-1;;37739:24:0::1;37476:295:::0;:::o;36042:1288::-;1748:13;:11;:13::i;:::-;36150:1:::1;36136:11;:15;36128:30;;;;-1:-1:-1::0;;;36128:30:0::1;;;;;;;:::i;:::-;36177:46;::::0;-1:-1:-1;;;36177:46:0;;36192:4:::1;36177:46;::::0;::::1;2924:51:1::0;;;36227:11:0;;36177:31:::1;::::0;2897:18:1;;36177:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;36169:76;;;::::0;-1:-1:-1;;;36169:76:0;;12217:2:1;36169:76:0::1;::::0;::::1;12199:21:1::0;12256:1;12236:18;;;12229:29;-1:-1:-1;;;12274:18:1;;;12267:32;12316:18;;36169:76:0::1;12015:325:1::0;36169:76:0::1;36328:16;::::0;36296:69:::1;::::0;36313:4:::1;::::0;-1:-1:-1;;;;;36328:16:0::1;-1:-1:-1::0;;36296:8:0::1;:69::i;:::-;36404:21;36376:25;36458;36471:11:::0;36458:12:::1;:25::i;:::-;36436:47;;36508:11;36523:1;36508:16:::0;36504:55:::1;;36541:7;;13158:63;12393:836::o:0;36504:55::-:1;36608:21;36644:39:::0;;::::1;36640:137;;-1:-1:-1::0;;;;;;;;;;;36705:39:0::1;;;;;:::i;:::-;;;;;;;;36759:7;;;13158:63;12393:836::o:0;36640:137::-:1;36797:25;36825:38;36846:17:::0;36825:18;:38:::1;:::i;:::-;36797:66:::0;-1:-1:-1;36914:23:0::1;36976:3;36940:33;9203:2;36797:66:::0;36940:33:::1;:::i;:::-;:39;;;;:::i;:::-;36914:65:::0;-1:-1:-1;36990:21:0::1;37048:3;37014:31;9259:2;37014:17:::0;:31:::1;:::i;:::-;:37;;;;:::i;:::-;36990:61:::0;-1:-1:-1;37076:19:0;;37072:117:::1;;37112:65;37126:15:::0;37173:3:::1;37143:27;9203:2;37143:11:::0;:27:::1;:::i;:::-;:33;;;;:::i;:::-;37112:13;:65::i;:::-;37240:17:::0;;37236:87:::1;;37274:37;37297:13;37274:22;:37::i;:::-;36117:1213;;;;;;36042:1288:::0;:::o;28999:1077::-;1748:13;:11;:13::i;:::-;29109:46:::1;::::0;-1:-1:-1;;;29109:46:0;;29124:4:::1;29109:46;::::0;::::1;2924:51:1::0;;;29087:19:0::1;::::0;29109:31:::1;::::0;2897:18:1;;29109:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29087:68;;29188:1;29174:11;:15;29166:30;;;;-1:-1:-1::0;;;29166:30:0::1;;;;;;;:::i;:::-;29227:1;29215:9;:13;29207:28;;;::::0;-1:-1:-1;;;29207:28:0;;19390:2:1;29207:28:0::1;::::0;::::1;19372:21:1::0;19429:1;19409:18;;;19402:29;-1:-1:-1;;;19447:18:1;;;19440:32;19489:18;;29207:28:0::1;19188:325:1::0;29207:28:0::1;29288:16;::::0;29256:63:::1;::::0;29273:4:::1;::::0;-1:-1:-1;;;;;29288:16:0::1;29307:11:::0;29256:8:::1;:63::i;:::-;29344:16;::::0;-1:-1:-1;;;;;29344:16:0::1;:32;29384:9;29417:4;29437:11:::0;29344:16:::1;::::0;29495:10:::1;29520:21;:15;29538:3;29520:21;:::i;:::-;29344:208;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29344:208:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;29344:208:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;29340:729;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;29705:16;::::0;29673:53:::1;::::0;29690:4:::1;::::0;-1:-1:-1;;;;;29705:16:0::1;;29673:8;:53::i;:::-;29755:51;::::0;29763:10:::1;::::0;29784:21:::1;29755:51:::0;::::1;;;::::0;::::1;::::0;;;29784:21;29763:10;29755:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;29340:729;;;29915:16;::::0;29883:53:::1;::::0;29900:4:::1;::::0;-1:-1:-1;;;;;29915:16:0::1;;29883:8;:53::i;:::-;29965:51;::::0;29973:10:::1;::::0;29994:21:::1;29965:51:::0;::::1;;;::::0;::::1;::::0;;;29994:21;29973:10;29965:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;29340:729;-1:-1:-1::0;;29573:38:0::1;::::0;;8968:25:1;;;29601:9:0::1;9024:2:1::0;9009:18;;9002:34;29573:38:0::1;::::0;-1:-1:-1;8941:18:1;29573:38:0::1;;;;;;;29076:1000;28999:1077::o:0;30744:3627::-;30848:1;30822:23;;:27;:56;;;;30877:1;30853:21;;:25;30822:56;30814:86;;;;-1:-1:-1;;;30814:86:0;;20332:2:1;30814:86:0;;;20314:21:1;20371:2;20351:18;;;20344:30;-1:-1:-1;;;20390:18:1;;;20383:47;20447:18;;30814:86:0;20130:341:1;30814:86:0;30919:7;:14;30911:49;;;;-1:-1:-1;;;30911:49:0;;20678:2:1;30911:49:0;;;20660:21:1;20717:2;20697:18;;;20690:30;-1:-1:-1;;;20736:18:1;;;20729:48;20794:18;;30911:49:0;20476:342:1;30911:49:0;30990:7;;;;;;;30989:8;30981:23;;;;-1:-1:-1;;;30981:23:0;;7881:2:1;30981:23:0;;;7863:21:1;7920:1;7900:18;;;7893:29;-1:-1:-1;;;7938:18:1;;;7931:32;7980:18;;30981:23:0;7679:325:1;30981:23:0;31015:7;:14;;-1:-1:-1;;31015:14:0;;;;;31079:23;;31140:21;;31186:23;;:48;;;;-1:-1:-1;31213:21:0;;31186:48;31182:117;;;-1:-1:-1;;31251:7:0;:15;;-1:-1:-1;;31251:15:0;;;30744:3627::o;31182:117::-;31319:28;31350:24;31368:4;31350:9;:24::i;:::-;31319:55;-1:-1:-1;31385:28:0;31416:37;31437:16;31416:18;:37;:::i;:::-;31385:68;;31501:20;31478;:43;31474:172;;;-1:-1:-1;;;;;;;;;;;31543:40:0;;;;8211:2:1;8193:21;;;8250:2;8230:18;;;8223:30;8289:28;8284:2;8269:18;;8262:56;8350:2;8335:18;;8009:350;31543:40:0;;;;;;;;-1:-1:-1;;31598:7:0;:15;;-1:-1:-1;;31598:15:0;;;-1:-1:-1;;30744:3627:0:o;31474:172::-;31683:10;31741:12;31666:14;31792:37;31813:16;31792:18;:37;:::i;:::-;31764:65;;31874:16;31854:17;:36;31850:610;;;31907:13;31949:17;31923:23;:16;31942:4;31923:23;:::i;:::-;:43;;;;:::i;:::-;31907:59;-1:-1:-1;32031:4:0;32002:26;31907:59;32002:18;:26;:::i;:::-;:33;;;;:::i;:::-;31981:54;-1:-1:-1;32096:4:0;32069:24;32088:5;32069:16;:24;:::i;:::-;:31;;;;:::i;:::-;32050:50;-1:-1:-1;32135:37:0;32050:50;32135:18;:37;:::i;:::-;32115:57;;32228:18;32201:23;;:45;;;;;;;:::i;:::-;;;;;;;;32286:16;32261:21;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;31850:610:0;;-1:-1:-1;;31850:610:0;;32407:1;32381:23;:27;;;32423:21;:25;31850:610;32502:15;32480:19;:37;32543:52;;;8968:25:1;;;9024:2;9009:18;;9002:34;;;32543:52:0;;8941:18:1;32543:52:0;;;;;;;32678:16;;32646:69;;32663:4;;-1:-1:-1;;;;;32678:16:0;-1:-1:-1;;32646:8:0;:69::i;:::-;32764:21;32736:25;32828:31;32841:17;32828:12;:31::i;:::-;32806:53;;32884:11;32899:1;32884:16;32880:85;;-1:-1:-1;;32917:7:0;:15;;-1:-1:-1;;32917:15:0;;;-1:-1:-1;;;;;;;30744:3627:0:o;32880:85::-;33014:21;33050:39;;;33046:167;;-1:-1:-1;;;;;;;;;;;33111:39:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;33165:7:0;:15;;-1:-1:-1;;33165:15:0;;;-1:-1:-1;;;;;;;;30744:3627:0:o;33046:167::-;33233:25;33261:38;33282:17;33261:18;:38;:::i;:::-;33233:66;;33320:20;33369:7;1862:6;;-1:-1:-1;;;;;1862:6:0;;1789:87;33369:7;-1:-1:-1;;;;;33359:17:0;:6;-1:-1:-1;;;;;33359:17:0;;;:44;;;;-1:-1:-1;;;;;;33380:23:0;;33398:4;33380:23;;33359:44;33355:429;;;33459:3;33435:21;:17;33455:1;33435:21;:::i;:::-;:27;;;;:::i;:::-;33420:42;-1:-1:-1;33481:16:0;;33477:296;;33519:12;33537:6;-1:-1:-1;;;;;33537:11:0;33556:12;33537:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33518:55;;;33597:7;33592:166;;33644:1;33629:16;;33592:166;;;33717:6;-1:-1:-1;;;;;33699:39:0;;33725:12;33699:39;;;;160:25:1;;148:2;133:18;;14:177;33699:39:0;;;;;;;;33592:166;33499:274;33477:296;33824:32;33844:12;33824:17;:32;:::i;:::-;33804:52;-1:-1:-1;33907:23:0;33974:17;33933:38;33953:18;33804:52;33933:38;:::i;:::-;:58;;;;:::i;:::-;33907:84;-1:-1:-1;34002:21:0;34026:35;33907:84;34026:17;:35;:::i;:::-;34002:59;-1:-1:-1;34086:19:0;;34082:102;;34122:50;34136:15;34153:18;34122:13;:50::i;:::-;34245:17;;34241:87;;34279:37;34302:13;34279:22;:37::i;:::-;-1:-1:-1;;34348:7:0;:15;;-1:-1:-1;;34348:15:0;;;-1:-1:-1;;;;;;;;;;;;30744:3627:0:o;26556:490::-;26622:23;26656:21;26688:31;26730:27;26818:21;;26792:23;;:47;;;;:::i;:::-;9430:11;26881:39;;;;26776:63;;-1:-1:-1;26967:1:0;;-1:-1:-1;27011:6:0;;-1:-1:-1;26556:490:0;-1:-1:-1;26556:490:0:o;34379:818::-;1748:13;:11;:13::i;:::-;34472:16:::1;::::0;34440:69:::1;::::0;34457:4:::1;::::0;-1:-1:-1;;;;;34472:16:0::1;-1:-1:-1::0;;34440:8:0::1;:69::i;:::-;34541:10;::::0;34569:16:::1;::::0;34534:72:::1;::::0;-1:-1:-1;;;34534:72:0;;-1:-1:-1;;;;;34541:10:0;;::::1;::::0;34534:26:::1;::::0;:72:::1;::::0;34569:16;::::1;::::0;-1:-1:-1;;34588:17:0;34534:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;34534:72:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;34534:72:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;34530:193:::0;::::1;;-1:-1:-1::0;34645:10:0::1;::::0;34665:16:::1;::::0;34627:75:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;34645:10:0;;::::1;::::0;34665:16;::::1;::::0;-1:-1:-1;;34684:17:0;34627:75:::1;:::i;:::-;;;;;;;;34530:193;34747:13;::::0;-1:-1:-1;;;;;34747:13:0::1;:27:::0;34743:447:::1;;34802:10;::::0;34822:13:::1;::::0;34795:60:::1;::::0;-1:-1:-1;;;34795:60:0;;-1:-1:-1;;;;;34802:10:0;;::::1;::::0;34795:26:::1;::::0;:60:::1;::::0;34822:13;::::1;::::0;-1:-1:-1;;34837:17:0;34795:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;34795:60:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;34795:60:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;34791:177:::0;::::1;;-1:-1:-1::0;34898:10:0::1;::::0;34910:13:::1;::::0;34880:63:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;34898:10:0;;::::1;::::0;34910:13;::::1;::::0;-1:-1:-1;;34925:17:0;34880:63:::1;:::i;:::-;;;;;;;;34791:177;35030:13;::::0;35000:63:::1;::::0;-1:-1:-1;;;35000:63:0;;35015:4:::1;::::0;35000:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;35030:13:0::1;::::0;-1:-1:-1;;35045:17:0;35000:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;35000:63:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;35000:63:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;34996:183:::0;::::1;;-1:-1:-1::0;35121:13:0::1;::::0;35088:66:::1;::::0;::::1;::::0;::::1;::::0;35114:4:::1;::::0;-1:-1:-1;;;;;35121:13:0::1;::::0;-1:-1:-1;;35136:17:0;35088:66:::1;:::i;:::-;;;;;;;;34996:183;34379:818::o:0;1992:165::-;1748:13;:11;:13::i;:::-;-1:-1:-1;;;;;2081:22:0;::::1;2073:37;;;::::0;-1:-1:-1;;;2073:37:0;;21025:2:1;2073:37:0::1;::::0;::::1;21007:21:1::0;21064:1;21044:18;;;21037:29;-1:-1:-1;;;21082:18:1;;;21075:32;21124:18;;2073:37:0::1;20823:325:1::0;2073:37:0::1;2121:28;2140:8;2121:18;:28::i;5047:256::-:0;-1:-1:-1;;;;;5149:19:0;;;;;;:44;;-1:-1:-1;;;;;;5172:21:0;;;;5149:44;5141:59;;;;-1:-1:-1;;;5141:59:0;;21355:2:1;5141:59:0;;;21337:21:1;21394:1;21374:18;;;21367:29;-1:-1:-1;;;21412:18:1;;;21405:32;21454:18;;5141:59:0;21153:325:1;5141:59:0;-1:-1:-1;;;;;5211:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5263:32;;160:25:1;;;5263:32:0;;133:18:1;5263:32:0;;;;;;;5047:256;;;:::o;5311:311::-;-1:-1:-1;;;;;3625:18:0;;;5412:24;3625:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;5483:26;;;;5475:41;;;;-1:-1:-1;;;5475:41:0;;21685:2:1;5475:41:0;;;21667:21:1;21724:1;21704:18;;;21697:29;-1:-1:-1;;;21742:18:1;;;21735:32;21784:18;;5475:41:0;21483:325:1;5475:41:0;5552:51;5561:5;5568:7;5596:6;5577:16;:25;5552:8;:51::i;13237:1871::-;13388:7;;;;;;;13387:8;:41;;;;-1:-1:-1;1862:6:0;;-1:-1:-1;;;;;13413:15:0;;;1862:6;;13413:15;;13387:41;:72;;;;-1:-1:-1;1862:6:0;;-1:-1:-1;;;;;13446:13:0;;;1862:6;;13446:13;;13387:72;:111;;;;-1:-1:-1;;;;;;13477:21:0;;13493:4;13477:21;;13387:111;:148;;;;-1:-1:-1;13522:13:0;;-1:-1:-1;;;;;13516:19:0;;;13522:13;;13516:19;13387:148;13369:1544;;;13562:17;13602:3;13582:17;9148:1;13582:6;:17;:::i;:::-;:23;;;;:::i;:::-;13562:43;-1:-1:-1;13638:13:0;;13634:1268;;13672:23;13726:3;13698:25;9203:2;13698:9;:25;:::i;:::-;:31;;;;:::i;:::-;13672:57;-1:-1:-1;13748:21:0;13798:3;13772:23;9259:2;13772:9;:23;:::i;:::-;:29;;;;:::i;:::-;13748:53;-1:-1:-1;13838:22:0;13863:18;13872:9;13863:6;:18;:::i;:::-;13838:43;;13918:47;13934:4;13948;13955:9;13918:15;:47::i;:::-;14002:41;14018:4;14024:2;14028:14;14002:15;:41::i;:::-;14107:15;14080:23;;:42;;;;;;;:::i;:::-;;;;;;;;14166:13;14141:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;14264:21:0;;14238:23;;9430:11;;14238:47;;;:::i;:::-;:73;14234:444;;14341:62;14356:23;;14381:21;;14341:62;;;;;;8968:25:1;;;9024:2;9009:18;;9002:34;8956:2;8941:18;;8794:248;14341:62:0;;;;;;;;14453:75;14498:21;;14472:23;;:47;;;;:::i;:::-;14453:75;;;8968:25:1;;;14521:6:0;9024:2:1;9009:18;;9002:34;8941:18;14453:75:0;;;;;;;14578:80;14633:21;;14607:23;;:47;;;;:::i;:::-;14578:80;;;8968:25:1;;;14656:1:0;9024:2:1;9009:18;;9002:34;8941:18;14578:80:0;;;;;;;14234:444;14714:57;14728:4;9321:12;14734:15;14744:4;14734:9;:15::i;:::-;:36;;14714:13;:57::i;:::-;14790:53;14804:2;9321:12;14808:13;14818:2;14808:9;:13::i;13634:1268::-;13547:1366;13369:1544;14933:33;14949:4;14955:2;14959:6;14933:15;:33::i;:::-;14979:57;14993:4;9321:12;14999:15;15009:4;14999:9;:15::i;14979:57::-;15047:53;15061:2;9321:12;15065:13;15075:2;15065:9;:13::i;1884:100::-;1959:10;1948:7;1862:6;;-1:-1:-1;;;;;1862:6:0;;1789:87;1948:7;-1:-1:-1;;;;;1948:21:0;;1940:36;;;;-1:-1:-1;;;1940:36:0;;22542:2:1;1940:36:0;;;22524:21:1;22581:1;22561:18;;;22554:29;-1:-1:-1;;;22599:18:1;;;22592:32;22641:18;;1940:36:0;22340:325:1;20447:1856:0;20507:7;20531:11;20546:1;20531:16;20527:30;;-1:-1:-1;20556:1:0;;20447:1856;-1:-1:-1;20447:1856:0:o;20527:30::-;20576:12;;-1:-1:-1;;;20576:12:0;;;;20568:43;;;;-1:-1:-1;;;20568:43:0;;17660:2:1;20568:43:0;;;17642:21:1;17699:2;17679:18;;;17672:30;-1:-1:-1;;;17718:18:1;;;17711:48;17776:18;;20568:43:0;17458:342:1;20568:43:0;20656:16;;;20670:1;20656:16;;;;;;;;20632:21;;20656:16;;;;;;;;;;-1:-1:-1;20656:16:0;20632:40;;20701:4;20683;20688:1;20683:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20683:23:0;;;:7;;;;;;;;;;:23;;;;20727:16;;:23;;;-1:-1:-1;;;20727:23:0;;;;:16;;;;;:21;;:23;;;;;20683:7;;20727:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20717:4;20722:1;20717:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20717:33:0;;;:7;;;;;;;;;:33;20848:16;;20771:20;;20816:63;;20833:4;;20848:16;20867:11;20816:8;:63::i;:::-;20900:16;20919:22;:15;20937:4;20919:22;:::i;:::-;21036:16;;21190:9;;21036:197;;-1:-1:-1;;;21036:197:0;;20900:41;;-1:-1:-1;20990:21:0;;-1:-1:-1;;;;;21036:16:0;;;;:67;;:197;;21118:11;;21144:12;;21171:4;;21190:9;;;;;;;;20900:41;;21036:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21032:1264;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;22160:6:0;22149:18;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;22189:1:0;;20447:1856;-1:-1:-1;;;;;;20447:1856:0:o;21032:1264::-;;;-1:-1:-1;;;;;;;;;;;22229:32:0;;;;23583:2:1;23565:21;;;23622:2;23602:18;;;23595:30;-1:-1:-1;;;23656:2:1;23641:18;;23634:48;23714:2;23699:18;;23381:342;22229:32:0;;;;;;;;-1:-1:-1;22283:1:0;;20447:1856;-1:-1:-1;;;;;20447:1856:0:o;21032:1264::-;21264:9;;;;;;;;;-1:-1:-1;;;;;21264:9:0;-1:-1:-1;;;;;21253:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21249:834;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;21903:6:0;21855:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;21855:55:0;;;;;;;;;;21837:75;;;:::i;21249:834::-;;;-1:-1:-1;;;;;;;;;;;21986:54:0;;;;24394:2:1;24376:21;;;24433:2;24413:18;;;24406:30;24472:34;24467:2;24452:18;;24445:62;-1:-1:-1;;;24538:2:1;24523:18;;24516:38;24586:3;24571:19;;24192:404;21249:834:0;21341:21;21312:26;21403:38;21424:17;21341:21;21403:38;:::i;:::-;21381:60;-1:-1:-1;21482:15:0;;21478:285;;21527:40;;;8968:25:1;;;9024:2;9009:18;;9002:34;;;21527:40:0;;8941:18:1;21527:40:0;;;;;;;21597:11;20447:1856;-1:-1:-1;;;;;;;20447:1856:0:o;21478:285::-;-1:-1:-1;;;;;;;;;;;21662:50:0;;;;24803:2:1;24785:21;;;24842:2;24822:18;;;24815:30;24881:34;24876:2;24861:18;;24854:62;-1:-1:-1;;;24947:2:1;24932:18;;24925:34;24991:3;24976:19;;24601:400;21662:50:0;;;;;;;;-1:-1:-1;21742:1:0;;20447:1856;-1:-1:-1;;;;;;;20447:1856:0:o;19328:1111::-;19410:28;19441:24;19459:4;19441:9;:24::i;:::-;19410:55;;19503:11;19480:20;:34;19476:155;;;19536:62;;;;;25208:2:1;25190:21;;;25247:2;25227:18;;;25220:30;25286:34;25281:2;25266:18;;25259:62;-1:-1:-1;;;25352:2:1;25337:18;;25330:38;25400:3;25385:19;;25006:404;19536:62:0;;;;;;;;19613:7;19328:1111;;:::o;19476:155::-;19643:22;19705:3;19683:18;19705:3;;19683:18;:::i;:::-;19668:34;;:11;:34;:::i;:::-;:40;;;;:::i;:::-;19643:65;-1:-1:-1;19719:20:0;19777:3;19755:18;19777:3;;19755:18;:::i;:::-;19742:32;;:9;:32;:::i;:::-;:38;;;;:::i;:::-;19833:16;;19719:61;;-1:-1:-1;19801:63:0;;19818:4;;-1:-1:-1;;;;;19833:16:0;19852:11;19801:8;:63::i;:::-;19889:16;;-1:-1:-1;;;;;19889:16:0;:32;19929:9;19962:4;19982:11;20008:14;20037:12;20064:7;1862:6;;-1:-1:-1;;;;;1862:6:0;;1789:87;20064:7;20086:22;:15;20104:4;20086:22;:::i;:::-;19889:230;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19889:230:0;;;;;;;;-1:-1:-1;;19889:230:0;;;;;;;;;;;;:::i;:::-;;;19885:547;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;20306:26;20325:6;20306:26;;;;;;:::i;:::-;;;;;;;;20252:92;19885:547;;;;;20371:49;;;;;26213:2:1;26195:21;;;26252:2;26232:18;;;26225:30;26291:29;26286:2;26271:18;;26264:57;26353:2;26338:18;;26011:351;20371:49:0;;;;;;;;19885:547;;;-1:-1:-1;;20140:38:0;;;8968:25:1;;;9024:2;9009:18;;9002:34;;;20140:38:0;;-1:-1:-1;8941:18:1;20140:38:0;;;;;;;1862:6;;-1:-1:-1;;;;;1862:6:0;-1:-1:-1;;;;;20212:27:0;;20237:1;20212:27;;;;160:25:1;;148:2;133:18;;14:177;20212:27:0;;;;;;;;19885:547;19399:1040;;;19328:1111;;:::o;22311:3996::-;22401:7;:14;22430:17;;;:32;;-1:-1:-1;22451:11:0;;22430:32;22426:45;;;22464:7;22311:3996;:::o;22426:45::-;22491:22;22530:3;22516:11;:6;22525:2;22516:11;:::i;:::-;:17;;;;:::i;:::-;22491:42;-1:-1:-1;22544:20:0;22567:23;22491:42;22567:6;:23;:::i;:::-;22544:46;;22632:1;22615:14;:18;:50;;;;-1:-1:-1;22637:14:0;;-1:-1:-1;;;;;22637:14:0;:28;;22615:50;22611:371;;;22709:14;;:46;;22683:20;;-1:-1:-1;;;;;22709:14:0;;22736;;22683:20;22709:46;22683:20;22709:46;22736:14;22709;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22682:73;;;22775:15;22770:147;;22816:45;;;;;26759:2:1;26741:21;;;26798:2;26778:18;;;26771:30;26837;26832:2;26817:18;;26810:58;26900:2;26885:18;;26557:352;22816:45:0;;;;;;;;22895:6;22880:21;;22770:147;22667:261;22611:371;;;-1:-1:-1;22964:6:0;22611:371;23021:1;23006:12;:16;:36;;;;;23041:1;23026:12;:16;23006:36;23002:3298;;;23088:7;:14;23123:34;;;23119:305;;23213:18;23184:25;;:47;23180:177;;23307:1;23286:18;:22;:51;;23336:1;23286:51;;;23311:22;23332:1;23311:18;:22;:::i;:::-;23258:25;:79;23180:177;23390:18;23375:33;;23119:305;23456:12;23472:1;23456:17;23452:134;;23499:46;;;;;27116:2:1;27098:21;;;27155:2;27135:18;;;27128:30;27194:31;27189:2;27174:18;;27167:59;27258:2;27243:18;;26914:353;23499:46:0;;;;;;;;23564:7;;;;22311:3996;:::o;23452:134::-;23614:23;23640:27;23655:12;23640;:27;:::i;:::-;23614:53;-1:-1:-1;23686:19:0;;23682:2607;;23816:25;;23756:2;;23726:27;;23816:40;;23844:12;;23816:40;:::i;:::-;23795:61;;23893:22;23956:29;24002:19;23988:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23988:34:0;-1:-1:-1;23956:66:0;-1:-1:-1;24041:18:0;24117:10;24100:378;24133:12;24129:1;:16;:52;;;;;24162:19;24149:10;:32;24129:52;24100:378;;;24211:14;24228:7;24236:1;24228:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24228:10:0;;-1:-1:-1;24265:20:0;;;;;:47;;-1:-1:-1;;;;;;24289:23:0;;24307:4;24289:23;;24265:47;:74;;;;-1:-1:-1;24326:13:0;;-1:-1:-1;;;;;24316:23:0;;;24326:13;;24316:23;;24265:74;24261:198;;;24395:1;24368:12;24381:10;24368:24;;;;;;;;:::i;:::-;;;;;;;;;;:28;24423:12;;;;:::i;:::-;;;;24261:198;-1:-1:-1;24183:3:0;;;;:::i;:::-;;;;24100:378;;;;24531:19;24518:10;:32;:50;;;;;24567:1;24554:10;:14;24518:50;24514:489;;;24598:9;24593:391;24617:10;24613:1;:14;:50;;;;;24644:19;24631:10;:32;24613:50;24593:391;;;24697:14;24714:7;24722:1;24714:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24714:10:0;;-1:-1:-1;24755:20:0;;;;;:47;;-1:-1:-1;;;;;;24779:23:0;;24797:4;24779:23;;24755:47;:74;;;;-1:-1:-1;24816:13:0;;-1:-1:-1;;;;;24806:23:0;;;24816:13;;24806:23;;24755:74;24751:210;;;24889:1;24862:12;24875:10;24862:24;;;;;;;;:::i;:::-;;;;;;;;;;:28;24921:12;;;;:::i;:::-;;;;24751:210;-1:-1:-1;24665:3:0;;;;:::i;:::-;;;;24593:391;;;;24514:489;25044:9;25039:601;25063:10;25059:1;:14;25039:601;;;25103:11;25117:12;25130:1;25117:15;;;;;;;;:::i;:::-;;;;;;;25103:29;;25155:14;25172:7;25180:3;25172:12;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;25172:12:0;;-1:-1:-1;25233:20:0;;;;;:47;;-1:-1:-1;;;;;;25257:23:0;;25275:4;25257:23;;25233:47;:74;;;;-1:-1:-1;25294:13:0;;-1:-1:-1;;;;;25284:23:0;;;25294:13;;25284:23;;25233:74;:94;;;;-1:-1:-1;;;;;;25311:16:0;;;;;;:8;:16;;;;;;;;25233:94;25229:392;;;25357:12;25375:6;-1:-1:-1;;;;;25375:11:0;25394:15;25375:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25356:58;;;25446:7;25441:114;;25491:36;;;;;27731:2:1;27713:21;;;27770:2;27750:18;;;27743:30;-1:-1:-1;;;27804:2:1;27789:18;;27782:49;27863:2;27848:18;;27529:343;25491:36:0;;;;;;;;25441:114;25581:16;;;;:::i;:::-;;;;25329:292;25229:392;25080:560;;25075:3;;;;;:::i;:::-;;;;25039:601;;;-1:-1:-1;25680:14:0;;25676:218;;25784:12;25748;25761:14;25774:1;25761:10;:14;:::i;:::-;25748:28;;;;;;;;:::i;:::-;;;;;;;25779:1;25748:32;;;;:::i;:::-;25747:49;;;;:::i;:::-;25719:25;:77;25676:218;;;25873:1;25845:25;:29;25676:218;25984:1;25960:21;;25934:23;;:47;;;;:::i;:::-;:51;:152;;;;-1:-1:-1;26012:25:0;;:30;;:73;;;26075:10;26046:25;;:39;26012:73;25930:344;;;26116:42;;;8968:25:1;;;9024:2;9009:18;;9002:34;;;26116:42:0;;8941:18:1;26116:42:0;;;;;;;25930:344;;;26212:42;;;8968:25:1;;;9024:2;9009:18;;9002:34;;;26212:42:0;;8941:18:1;26212:42:0;;;;;;;25930:344;23707:2582;;;;;23682:2607;23044:3256;;22367:3940;;;22311:3996;:::o;2165:191::-;2258:6;;;-1:-1:-1;;;;;2275:17:0;;;-1:-1:-1;;;;;;2275:17:0;;;;;;;2308:40;;2258:6;;;2275:17;2258:6;;2308:40;;2239:16;;2308:40;2228:128;2165:191;:::o;4124:507::-;-1:-1:-1;;;;;4221:18:0;;;;;;:38;;-1:-1:-1;;;;;;4243:16:0;;;;4221:38;4213:53;;;;-1:-1:-1;;;4213:53:0;;28079:2:1;4213:53:0;;;28061:21:1;28118:1;28098:18;;;28091:29;-1:-1:-1;;;28136:18:1;;;28129:32;28178:18;;4213:53:0;27877:325:1;4213:53:0;-1:-1:-1;;;;;4348:15:0;;4326:19;4348:15;;;;;;;;;;;4382:21;;;;4374:36;;;;-1:-1:-1;;;4374:36:0;;28409:2:1;4374:36:0;;;28391:21:1;28448:1;28428:18;;;28421:29;-1:-1:-1;;;28466:18:1;;;28459:32;28508:18;;4374:36:0;28207:325:1;4374:36:0;-1:-1:-1;;;;;4446:15:0;;;:9;:15;;;;;;;;;;;4464:20;;;4446:38;;4499:13;;;;;;;;;;:23;;;;;;4549:26;;160:25:1;;;4499:13:0;;4549:26;;133:18:1;4549:26:0;;;;;;;4586:37;30258:183;15116:779;15211:13;;-1:-1:-1;;;;;15200:24:0;;;15211:13;;15200:24;;;;:52;;-1:-1:-1;;;;;;15228:24:0;;15247:4;15228:24;;15200:52;15196:692;;;15273:14;:36;;;;-1:-1:-1;;;;;;15292:17:0;;;;;;:8;:17;;;;;;;;15291:18;15273:36;15269:608;;;-1:-1:-1;;;;;;15330:17:0;;;;;:8;:17;;;;;:24;;-1:-1:-1;;15330:24:0;15350:4;15330:24;;;;;;15373:7;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;15373:21:0;;;;;;15116:779::o;15269:608::-;15421:14;15420:15;:36;;;;-1:-1:-1;;;;;;15439:17:0;;;;;;:8;:17;;;;;;;;15420:36;15416:461;;;-1:-1:-1;;;;;15477:17:0;;15497:5;15477:17;;;:8;:17;;;;;:25;;-1:-1:-1;;15477:25:0;;;15585:277;15609:7;:14;15605:18;;15585:277;;;15671:7;-1:-1:-1;;;;;15657:21:0;:7;15665:1;15657:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;15657:10:0;:21;15653:190;;15720:7;15728:14;;:18;;15745:1;;15728:18;:::i;:::-;15720:27;;;;;;;;:::i;:::-;;;;;;;;;;;15707:7;:10;;-1:-1:-1;;;;;15720:27:0;;;;15715:1;;15707:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;15707:40:0;;;;;-1:-1:-1;;;;;15707:40:0;;;;;;15774:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;15774:13:0;;;;;-1:-1:-1;;;;;;15774:13:0;;;;;;30392:41:::1;30258:183:::0;;:::o;15653:190::-;15625:3;;;;:::i;:::-;;;;15585:277;;15416:461;15116:779;;:::o;196:250:1:-;281:1;291:113;305:6;302:1;299:13;291:113;;;381:11;;;375:18;362:11;;;355:39;327:2;320:10;291:113;;;-1:-1:-1;;438:1:1;420:16;;413:27;196:250::o;451:396::-;600:2;589:9;582:21;563:4;632:6;626:13;675:6;670:2;659:9;655:18;648:34;691:79;763:6;758:2;747:9;743:18;738:2;730:6;726:15;691:79;:::i;:::-;831:2;810:15;-1:-1:-1;;806:29:1;791:45;;;;838:2;787:54;;451:396;-1:-1:-1;;451:396:1:o;852:131::-;-1:-1:-1;;;;;927:31:1;;917:42;;907:70;;973:1;970;963:12;988:315;1056:6;1064;1117:2;1105:9;1096:7;1092:23;1088:32;1085:52;;;1133:1;1130;1123:12;1085:52;1172:9;1159:23;1191:31;1216:5;1191:31;:::i;:::-;1241:5;1293:2;1278:18;;;;1265:32;;-1:-1:-1;;;988:315:1:o;2132:456::-;2209:6;2217;2225;2278:2;2266:9;2257:7;2253:23;2249:32;2246:52;;;2294:1;2291;2284:12;2246:52;2333:9;2320:23;2352:31;2377:5;2352:31;:::i;:::-;2402:5;-1:-1:-1;2459:2:1;2444:18;;2431:32;2472:33;2431:32;2472:33;:::i;:::-;2132:456;;2524:7;;-1:-1:-1;;;2578:2:1;2563:18;;;;2550:32;;2132:456::o;2593:180::-;2652:6;2705:2;2693:9;2684:7;2680:23;2676:32;2673:52;;;2721:1;2718;2711:12;2673:52;-1:-1:-1;2744:23:1;;2593:180;-1:-1:-1;2593:180:1:o;3175:461::-;3228:3;3266:5;3260:12;3293:6;3288:3;3281:19;3319:4;3348:2;3343:3;3339:12;3332:19;;3385:2;3378:5;3374:14;3406:1;3416:195;3430:6;3427:1;3424:13;3416:195;;;3495:13;;-1:-1:-1;;;;;3491:39:1;3479:52;;3551:12;;;;3586:15;;;;3527:1;3445:9;3416:195;;;-1:-1:-1;3627:3:1;;3175:461;-1:-1:-1;;;;;3175:461:1:o;3641:261::-;3820:2;3809:9;3802:21;3783:4;3840:56;3892:2;3881:9;3877:18;3869:6;3840:56;:::i;:::-;3832:64;3641:261;-1:-1:-1;;;3641:261:1:o;4140:247::-;4199:6;4252:2;4240:9;4231:7;4227:23;4223:32;4220:52;;;4268:1;4265;4258:12;4220:52;4307:9;4294:23;4326:31;4351:5;4326:31;:::i;4392:248::-;4460:6;4468;4521:2;4509:9;4500:7;4496:23;4492:32;4489:52;;;4537:1;4534;4527:12;4489:52;-1:-1:-1;;4560:23:1;;;4630:2;4615:18;;;4602:32;;-1:-1:-1;4392:248:1:o;4645:388::-;4713:6;4721;4774:2;4762:9;4753:7;4749:23;4745:32;4742:52;;;4790:1;4787;4780:12;4742:52;4829:9;4816:23;4848:31;4873:5;4848:31;:::i;:::-;4898:5;-1:-1:-1;4955:2:1;4940:18;;4927:32;4968:33;4927:32;4968:33;:::i;:::-;5020:7;5010:17;;;4645:388;;;;;:::o;5678:380::-;5757:1;5753:12;;;;5800;;;5821:61;;5875:4;5867:6;5863:17;5853:27;;5821:61;5928:2;5920:6;5917:14;5897:18;5894:38;5891:161;;5974:10;5969:3;5965:20;5962:1;5955:31;6009:4;6006:1;5999:15;6037:4;6034:1;6027:15;5891:161;;5678:380;;;:::o;6063:127::-;6124:10;6119:3;6115:20;6112:1;6105:31;6155:4;6152:1;6145:15;6179:4;6176:1;6169:15;6195:128;6262:9;;;6283:11;;;6280:37;;;6297:18;;:::i;6328:125::-;6393:9;;;6414:10;;;6411:36;;;6427:18;;:::i;6788:274::-;-1:-1:-1;;;;;6980:32:1;;;;6962:51;;7044:2;7029:18;;7022:34;6950:2;6935:18;;6788:274::o;7067:277::-;7134:6;7187:2;7175:9;7166:7;7162:23;7158:32;7155:52;;;7203:1;7200;7193:12;7155:52;7235:9;7229:16;7288:5;7281:13;7274:21;7267:5;7264:32;7254:60;;7310:1;7307;7300:12;8364:168;8437:9;;;8468;;8485:15;;;8479:22;;8465:37;8455:71;;8506:18;;:::i;8537:127::-;8598:10;8593:3;8589:20;8586:1;8579:31;8629:4;8626:1;8619:15;8653:4;8650:1;8643:15;8669:120;8709:1;8735;8725:35;;8740:18;;:::i;:::-;-1:-1:-1;8774:9:1;;8669:120::o;9047:349::-;9249:2;9231:21;;;9288:2;9268:18;;;9261:30;9327:27;9322:2;9307:18;;9300:55;9387:2;9372:18;;9047:349::o;10250:251::-;10320:6;10373:2;10361:9;10352:7;10348:23;10344:32;10341:52;;;10389:1;10386;10379:12;10341:52;10421:9;10415:16;10440:31;10465:5;10440:31;:::i;11166:325::-;11368:2;11350:21;;;11407:1;11387:18;;;11380:29;-1:-1:-1;;;11440:2:1;11425:18;;11418:32;11482:2;11467:18;;11166:325::o;11826:184::-;11896:6;11949:2;11937:9;11928:7;11924:23;11920:32;11917:52;;;11965:1;11962;11955:12;11917:52;-1:-1:-1;11988:16:1;;11826:184;-1:-1:-1;11826:184:1:o;12675:375::-;-1:-1:-1;;;;;12933:15:1;;;12915:34;;12985:15;;;;12980:2;12965:18;;12958:43;13032:2;13017:18;;13010:34;;;;12865:2;12850:18;;12675:375::o;14150:306::-;14238:6;14246;14254;14307:2;14295:9;14286:7;14282:23;14278:32;14275:52;;;14323:1;14320;14313:12;14275:52;14352:9;14346:16;14336:26;;14402:2;14391:9;14387:18;14381:25;14371:35;;14446:2;14435:9;14431:18;14425:25;14415:35;;14150:306;;;;;:::o;14461:179::-;14496:3;14538:1;14520:16;14517:23;14514:120;;;14584:1;14581;14578;14563:23;-1:-1:-1;14621:1:1;14615:8;14610:3;14606:18;14514:120;14461:179;:::o;14645:127::-;14706:10;14701:3;14697:20;14694:1;14687:31;14737:4;14734:1;14727:15;14761:4;14758:1;14751:15;14777:346;14887:2;14868:13;;-1:-1:-1;;14864:27:1;14852:40;;14922:18;14907:34;;14943:22;;;14904:62;14901:185;;;15008:10;15003:3;14999:20;14996:1;14989:31;15043:4;15040:1;15033:15;15071:4;15068:1;15061:15;14901:185;15102:2;15095:22;-1:-1:-1;;14777:346:1:o;15128:671::-;15167:3;15209:4;15191:16;15188:26;15185:39;;;15128:671;:::o;15185:39::-;15251:2;15245:9;-1:-1:-1;;15316:16:1;15312:25;;15309:1;15245:9;15288:50;15367:4;15361:11;15391:16;15426:18;15497:2;15490:4;15482:6;15478:17;15475:25;15470:2;15462:6;15459:14;15456:45;15453:58;;;15504:5;;;;;15128:671;:::o;15453:58::-;15541:6;15535:4;15531:17;15520:28;;15577:3;15571:10;15604:2;15596:6;15593:14;15590:27;;;15610:5;;;;;;15128:671;:::o;15590:27::-;15694:2;15675:16;15669:4;15665:27;15661:36;15654:4;15645:6;15640:3;15636:16;15632:27;15629:69;15626:82;;;15701:5;;;;;;15128:671;:::o;15626:82::-;15717:57;15768:4;15759:6;15751;15747:19;15743:30;15737:4;15717:57;:::i;:::-;-1:-1:-1;15790:3:1;;15128:671;-1:-1:-1;;;;;15128:671:1:o;19518:607::-;-1:-1:-1;;;;;19877:15:1;;;19859:34;;19924:2;19909:18;;19902:34;;;;19967:2;19952:18;;19945:34;;;;20010:2;19995:18;;19988:34;;;;20059:15;;;20053:3;20038:19;;20031:44;19839:3;20091:19;;20084:35;;;;19808:3;19793:19;;19518:607::o;22670:127::-;22731:10;22726:3;22722:20;22719:1;22712:31;22762:4;22759:1;22752:15;22786:4;22783:1;22776:15;22802:574;23093:6;23082:9;23075:25;23136:6;23131:2;23120:9;23116:18;23109:34;23179:3;23174:2;23163:9;23159:18;23152:31;23056:4;23200:57;23252:3;23241:9;23237:19;23229:6;23200:57;:::i;:::-;-1:-1:-1;;;;;23293:32:1;;;;23288:2;23273:18;;23266:60;-1:-1:-1;23357:3:1;23342:19;23335:35;23192:65;22802:574;-1:-1:-1;;;22802:574:1:o;23728:459::-;23990:29;23985:3;23978:42;23960:3;24049:6;24043:13;24065:75;24133:6;24128:2;24123:3;24119:12;24112:4;24104:6;24100:17;24065:75;:::i;:::-;24160:16;;;;24178:2;24156:25;;23728:459;-1:-1:-1;;23728:459:1:o;27272:112::-;27304:1;27330;27320:35;;27335:18;;:::i;:::-;-1:-1:-1;27369:9:1;;27272:112::o;27389:135::-;27428:3;27449:17;;;27446:43;;27469:18;;:::i;:::-;-1:-1:-1;27516:1:1;27505:13;;27389:135::o;28537:127::-;28598:10;28593:3;28589:20;28586:1;28579:31;28629:4;28626:1;28619:15;28653:4;28650:1;28643:15
Swarm Source
ipfs://85c5551de71882a08320c4545626677ed0ea93198a5af773b749a31133182df1
[ 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.