More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Process Liquidit... | 11660043 | 46 hrs ago | IN | 0 S | 0.01934559 | ||||
Approve | 11659859 | 46 hrs ago | IN | 0 S | 0.00321479 | ||||
Approve | 11659523 | 46 hrs ago | IN | 0 S | 0.00267948 | ||||
Refresh All Appr... | 11659384 | 46 hrs ago | IN | 0 S | 0.00432344 | ||||
Add Initial Liqu... | 11659359 | 46 hrs ago | IN | 50 S | 0.0151872 | ||||
Set Swap Proxy | 11659189 | 46 hrs ago | IN | 0 S | 0.00167387 | ||||
Initialize | 11659134 | 46 hrs ago | IN | 0 S | 0.12940042 |
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-04 */ // 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 { // Boş implementasyon } function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual { // Boş implementasyon } } interface IMetropolisRouter { function factory() external pure returns (address); function WETH() external pure returns (address); // Mevcut fonksiyonlar 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); // Yeni eklenen fonksiyonlar 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); // WETH ile ilgili fonksiyonlar 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); } // Pair interface'ini de ekleyelim 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 = 10 * 10**18; // 10 tokens minimum for holder status uint256 private constant MIN_TOKENS_FOR_PROCESS = 50 * 10**18; // 50 tokens minimum for processing (azaltıldı) 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; // 100% slippage tolerance (maksimuma çıkarıldı) // 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); uint256 private _pendingLiquidityTokens; uint256 private _pendingAirdropTokens; bool private _initialized; bool private _inSwap; // Proxy kontrat adresi address public swapProxy; bool public swapProxySet; 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 { // Vergi işleme mantığı if ( !_inSwap && from != owner() && to != owner() && from != address(this) && to == liquidityPair ) { // Vergi hesapla uint256 taxAmount = amount * TAX_RATE / 100; if (taxAmount > 0) { // Vergiyi likidite ve airdrop için ayır uint256 liquidityTokens = taxAmount * LIQUIDITY_TAX / 100; uint256 airdropTokens = taxAmount * AIRDROP_TAX / 100; // Vergi miktarını ana miktardan düş uint256 transferAmount = amount - taxAmount; // Vergiyi kontrata aktar super._transfer(from, address(this), taxAmount); // Kalan miktarı alıcıya aktar super._transfer(from, to, transferAmount); // Bekleyen miktarları güncelle _pendingLiquidityTokens += liquidityTokens; _pendingAirdropTokens += airdropTokens; // Eğer bekleyen tokenlar belirli bir miktarı aşarsa, işlemi başlat // Büyük satışlarda E5 hatasını önlemek için maksimum işlem miktarını sınırlıyoruz uint256 maxProcessAmount = 100 * 10**18; // Maksimum 100 token işlenecek (daha düşük değer) if (_pendingLiquidityTokens + _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) { // Eğer bekleyen token miktarı çok fazlaysa, sadece bir kısmını işle if (_pendingLiquidityTokens + _pendingAirdropTokens > maxProcessAmount) { // Büyük miktarlar için işlemi başlatma, bir sonraki satışta daha küçük miktarla işlenecek // Bu, E5 hatasını önlemeye yardımcı olur emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens); } else { // Normal işlemi başlat - try/catch bloğunu genişlet try this.processLiquidityAndAirdrop() { // İşlem başarılı } catch Error(string memory reason) { // Hata durumunda event yayınla emit SwapFailed(reason); } catch { // Bilinmeyen hata durumunda event yayınla emit SwapFailed("Unknown error in processLiquidityAndAirdrop"); } } } // Holder durumunu güncelle _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT); _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT); return; } } // Normal transfer super._transfer(from, to, amount); // Holder durumunu güncelle _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; } // Kontratın token bakiyesini kontrol et uint256 contractTokenBalance = balanceOf(address(this)); uint256 totalTokensToProcess = tokensForLiquidity + tokensForAirdrop; if (contractTokenBalance < totalTokensToProcess) { emit SwapFailed("Insufficient token balance"); _inSwap = false; return; } // Maksimum işlem miktarını sınırla uint256 maxProcessAmount = 100 * 10**18; // Maksimum 100 token işlenecek (daha düşük değer) uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; // Eğer toplam miktar maksimum miktardan fazlaysa, sadece bir kısmını işle if (totalTokensToSwap > maxProcessAmount) { // Oranları koru uint256 ratio = maxProcessAmount * 1e18 / totalTokensToSwap; tokensForLiquidity = tokensForLiquidity * ratio / 1e18; tokensForAirdrop = tokensForAirdrop * ratio / 1e18; totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; // Bekleyen miktarları güncelle _pendingLiquidityTokens -= tokensForLiquidity; _pendingAirdropTokens -= tokensForAirdrop; } else { // Tüm bekleyen miktarları sıfırla _pendingLiquidityTokens = 0; _pendingAirdropTokens = 0; } emit ProcessStarted(tokensForLiquidity, tokensForAirdrop); // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // Process swap - ETH doğrudan kontrata gelecek uint256 ethReceived = _processSwap(totalTokensToSwap); if (ethReceived == 0) { _inSwap = false; return; } // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { emit SwapFailed("No ETH received from swap"); _inSwap = false; return; } // Gerçek ETH miktarını hesapla uint256 actualEthReceived = contractEthBalance - initialEthBalance; // Calculate amounts uint256 ethForLiquidity = actualEthReceived * tokensForLiquidity / totalTokensToSwap; uint256 ethForAirdrop = actualEthReceived - ethForLiquidity; // ETH ile likidite ekle if (ethForLiquidity > 0) { _addLiquidity(ethForLiquidity, tokensForLiquidity); } // Process airdrop with ETH if (ethForAirdrop > 0) { _processAirdropWithETH(ethForAirdrop); } _inSwap = false; } // Likidite işlemini ayrı bir fonksiyona taşıdık function _processLiquidity(uint256 wethAmount, uint256 tokenAmount) private { // Bu fonksiyon artık kullanılmıyor, kaldırılabilir // Doğrudan _addLiquidity fonksiyonu kullanılıyor } // Likidite ekleme işlemi function _addLiquidity(uint256 ethAmount, uint256 tokenAmount) private { // Kontratın token bakiyesini kontrol et uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance < tokenAmount) { emit LiquidityAddFailed("Insufficient token balance for liquidity"); return; } // Daha yüksek slippage toleransı için minimum miktarları düşür uint256 minTokenAmount = tokenAmount * (100 - MAX_SLIPPAGE) / 100; uint256 minEthAmount = ethAmount * (100 - MAX_SLIPPAGE) / 100; // Swap işleminde kullanılacak token'lar için onay ver _approve(address(this), address(metropolisRouter), tokenAmount); try metropolisRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, minTokenAmount, minEthAmount, address(this), block.timestamp + 3600 // Deadline'ı 1 saate çıkardık ) { emit LiquidityAdded(tokenAmount, ethAmount); } 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(); // Swap işlemi için minimum çıktı miktarını hesapla // Daha yüksek slippage toleransı için minimum çıktı miktarını 0 olarak ayarlıyoruz uint256 minAmountOut = 0; // Minimum çıktı miktarı 0 olarak ayarlandı // Swap işleminden önce onayları yenile _approve(address(this), address(metropolisRouter), tokenAmount); // Gas limitini artır ve deadline'ı uzat uint256 deadline = block.timestamp + 3600; // 1 saat // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // FARMER -> ETH swap işlemi - FeeOnTransfer fonksiyonu kullanıyoruz try metropolisRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, minAmountOut, path, swapProxy, // ETH'yi proxy kontrata gönder deadline ) { // Swap başarılı oldu, proxy kontratın ETH'yi kontrata göndermesini iste try ISwapProxy(swapProxy).sendETHToFarmer() { // Kontratın ETH bakiyesini kontrol et 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; } } // WETH ile airdrop işlemi function _processAirdropWithETH(uint256 amount) private { uint256 holdersCount = holders.length; if (holdersCount == 0 || amount == 0) return; // Treasury wallet için %25 pay ayır uint256 treasuryAmount = amount * 25 / 100; uint256 holderAmount = amount - treasuryAmount; // Treasury wallet'a ETH gönder if (treasuryAmount > 0 && treasuryWallet != address(0)) { (bool treasurySuccess, ) = treasuryWallet.call{value: treasuryAmount}(""); if (!treasurySuccess) { emit AirdropFailed("Treasury ETH transfer failed"); // Treasury transfer başarısız olursa tutar holder'lara eklensin holderAmount = amount; } } else { // Treasury wallet ayarlanmamışsa tüm miktarı holder'lara dağıt holderAmount = amount; } // Holder'lara ETH dağıt if (holdersCount > 0 && holderAmount > 0) { uint256 amountPerHolder = holderAmount / holdersCount; if (amountPerHolder > 0) { for (uint256 i = 0; i < holdersCount; i++) { address holder = holders[i]; if (holder != address(0) && holder != address(this) && holder != liquidityPair) { // ETH'yi doğrudan holder'a gönder (bool success, ) = holder.call{value: amountPerHolder}(""); if (!success) { emit AirdropFailed("ETH transfer failed"); } } } } } emit AirdropDistributed(amount, holdersCount); } // View functions function getHolderCount() external view returns (uint256) { return holders.length; } function getHolders() external view returns (address[] memory) { return holders; } // 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" ); // WSonic token'ları kontrata transfer et require( IERC20(sonicToken).transferFrom(msg.sender, address(this), sonicAmount), "TF" ); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); IERC20(sonicToken).approve(address(metropolisRouter), sonicAmount); try metropolisRouter.addLiquidity( address(this), sonicToken, tokenAmount, sonicAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum sonic miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, sonicAmount); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert("FL"); } // Kalan WSonic token'ları geri gönder uint256 remainingWSonic = IERC20(sonicToken).balanceOf(address(this)); if (remainingWSonic > 0) { IERC20(sonicToken).transfer(msg.sender, remainingWSonic); } } // Tüm FARMER tokenlarını ETH ile likiditeye eklemek için fonksiyon function addInitialLiquidityWithAllTokensAndETH() external payable onlyOwner { uint256 tokenAmount = IERC20(address(this)).balanceOf(address(this)); require(tokenAmount > 0, "NT"); require(msg.value > 0, "NE"); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); try metropolisRouter.addLiquidityETH{value: msg.value}( address(this), tokenAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum ETH miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, msg.value); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder payable(msg.sender).transfer(address(this).balance); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder 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; } // Manual trigger for processing (only owner) function triggerProcessing() external onlyOwner { require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "NP"); require(holders.length > 0, "NH"); try this.processLiquidityAndAirdrop() { // Process successful } catch { emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens); } } // Router için onayları yenile function refreshAllApprovals() external onlyOwner { // Router için onayları yenile _approve(address(this), address(metropolisRouter), type(uint256).max); // Sonic token için onayları yenile try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) { emit ApprovalRefreshed(sonicToken, address(metropolisRouter), type(uint256).max); } catch {} // Likidite çifti için onayları yenile 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 {} } } // Manuel swap işlemi 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"); // Swap işlemi uint256 ethReceived = _processSwap(tokenAmount); // Swap sonucunu kontrol et require(ethReceived > 0, "Swap failed, no ETH received"); emit ManualSwapCompleted(tokenAmount, ethReceived); } // Treasury wallet'ı güncelleme fonksiyonu function setTreasuryWallet(address newTreasuryWallet) external onlyOwner { require(newTreasuryWallet != address(0), "ZA"); address oldTreasury = treasuryWallet; treasuryWallet = newTreasuryWallet; emit TreasuryWalletUpdated(oldTreasury, newTreasuryWallet); } // Manuel likidite ve airdrop işlemi 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); // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // Swap işlemini gerçekleştir uint256 ethReceived = _processSwap(tokenAmount); if (ethReceived == 0) { return; } // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { emit SwapFailed("No ETH received from swap"); return; } // Gerçek ETH miktarını hesapla uint256 actualEthReceived = contractEthBalance - initialEthBalance; // Calculate amounts uint256 ethForLiquidity = actualEthReceived * LIQUIDITY_TAX / 100; uint256 ethForAirdrop = actualEthReceived * AIRDROP_TAX / 100; // ETH ile likidite ekle if (ethForLiquidity > 0) { _addLiquidity(ethForLiquidity, tokenAmount * LIQUIDITY_TAX / 100); } // Process airdrop with ETH if (ethForAirdrop > 0) { _processAirdropWithETH(ethForAirdrop); } } // Kontratın ETH alabilmesi için receive fonksiyonu receive() external payable { // ETH alındığında event yayınla if (msg.value > 0) { emit ETHReceived(msg.sender, msg.value); } } // Swap proxy adresini ayarla 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); } }
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":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":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":"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":[{"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":"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"},{"inputs":[],"name":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5033604051806040016040528060068152602001652320a926a2a960d11b815250604051806040016040528060048152602001634641524d60e01b815250816003908162000060919062000314565b5060046200006f828262000314565b50506001600555506001600160a01b038116620000b85760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064015b60405180910390fd5b620000c38162000171565b50600780547395a7e403d7cf20f675ff9273d66e94d35ba49fa36001600160a01b0319918216811790925560088054731570300e9cfec66c9fb0c8bc14366c86eb170ad090831681179091556009805473039e2fb66102314ce7b64ce5ce3e5183bc94ad389084168117909155600b80547395503a306cd81e08c0c43c49faae71165937d1759416841790559091620001673069d3c21bcecceda1000000620001c3565b5050505062000408565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002005760405162461bcd60e51b8152602060048201526002602482015261453360f01b6044820152606401620000af565b8060026000828254620002149190620003e0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029b57607f821691505b602082108103620002bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026b57600081815260208120601f850160051c81016020861015620002eb5750805b601f850160051c820191505b818110156200030c57828155600101620002f7565b505050505050565b81516001600160401b0381111562000330576200033062000270565b620003488162000341845462000286565b84620002c2565b602080601f831160018114620003805760008415620003675750858301515b600019600386901b1c1916600185901b1785556200030c565b600085815260208120601f198616915b82811015620003b15788860151825594840194600190910190840162000390565b5085821015620003d05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200040257634e487b7160e01b600052601160045260246000fd5b92915050565b613a9680620004186000396000f3fe6080604052600436106102135760003560e01c8063808a545711610118578063c0d78655116100a0578063dd62ed3e1161006f578063dd62ed3e14610633578063e3a8fa5514610679578063ed9cacfe14610681578063f2fde38b14610696578063fd7c9fab146106b657600080fd5b8063c0d78655146105a3578063c84a705c146105c3578063d4d7b19a146105e3578063d720a2a81461061357600080fd5b8063975b87e8116100e7578063975b87e814610502578063a8602fea14610522578063a9059cbb14610542578063b70143c914610562578063b9276e4b1461058257600080fd5b8063808a54571461049a5780638129fc1c146104ba5780638da5cb5b146104cf57806395d89b41146104ed57600080fd5b80634626402b1161019b57806362b6327a1161016a57806362b6327a1461040a5780636ec4be901461042a57806370a08231146104505780637136982b146104705780637ac84fc11461048557600080fd5b80634626402b1461039357806357376198146103b35780635d76b04c146103d35780635fe8e7cc146103e857600080fd5b806323b872dd116101e257806323b872dd146102ea5780632a11ced01461030a578063313ce56714610342578063397883d21461035e578063461a3a951461037357600080fd5b806306fdde031461025b57806308dee2b414610286578063095ea7b3146102a557806318160ddd146102d557600080fd5b366102565734156102545760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b34801561026757600080fd5b506102706106d6565b60405161027d919061352c565b60405180910390f35b34801561029257600080fd5b50600e545b60405190815260200161027d565b3480156102b157600080fd5b506102c56102c0366004613574565b610768565b604051901515815260200161027d565b3480156102e157600080fd5b50600254610297565b3480156102f657600080fd5b506102c56103053660046135a0565b610782565b34801561031657600080fd5b5061032a6103253660046135e1565b6107a6565b6040516001600160a01b03909116815260200161027d565b34801561034e57600080fd5b506040516012815260200161027d565b34801561036a57600080fd5b506102546107d0565b34801561037f57600080fd5b5060095461032a906001600160a01b031681565b34801561039f57600080fd5b50600b5461032a906001600160a01b031681565b3480156103bf57600080fd5b506102546103ce366004613574565b6108ee565b3480156103df57600080fd5b50600f54610297565b3480156103f457600080fd5b506103fd6109ba565b60405161027d919061363e565b34801561041657600080fd5b5060075461032a906001600160a01b031681565b34801561043657600080fd5b5060105461032a906201000090046001600160a01b031681565b34801561045c57600080fd5b5061029761046b366004613658565b610a1b565b34801561047c57600080fd5b50600d54610297565b34801561049157600080fd5b50610254610a36565b3480156104a657600080fd5b50600a5461032a906001600160a01b031681565b3480156104c657600080fd5b50610254610da9565b3480156104db57600080fd5b506006546001600160a01b031661032a565b3480156104f957600080fd5b5061027061111f565b34801561050e57600080fd5b5061025461051d366004613675565b61112e565b34801561052e57600080fd5b5061025461053d366004613658565b611871565b34801561054e57600080fd5b506102c561055d366004613574565b611915565b34801561056e57600080fd5b5061025461057d3660046135e1565b611923565b34801561058e57600080fd5b506010546102c590600160b01b900460ff1681565b3480156105af57600080fd5b506102546105be366004613658565b611af0565b3480156105cf57600080fd5b506102546105de366004613658565b611b55565b3480156105ef57600080fd5b506102c56105fe366004613658565b600c6020526000908152604090205460ff1681565b34801561061f57600080fd5b5061025461062e3660046135e1565b611c5e565b34801561063f57600080fd5b5061029761064e366004613697565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610254611e30565b34801561068d57600080fd5b5061025461207e565b3480156106a257600080fd5b506102546106b1366004613658565b6122f7565b3480156106c257600080fd5b5060085461032a906001600160a01b031681565b6060600380546106e5906136d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610711906136d0565b801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b5050505050905090565b600033610776818585612343565b60019150505b92915050565b6000336107908582856123f5565b61079b85858561245d565b506001949350505050565b600d81815481106107b657600080fd5b6000918252602090912001546001600160a01b0316905081565b6107d8612783565b6000600e5411806107eb57506000600f54115b6108215760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d546108555760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610818565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561089057600080fd5b505af19250505080156108a1575060015b6108ec577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f546040516108e3929190918252602082015260400190565b60405180910390a15b565b6108f6612783565b306001600160a01b038316036109335760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610818565b816001600160a01b031663a9059cbb6109546006546001600160a01b031690565b836040518363ffffffff1660e01b815260040161097292919061370a565b6020604051808303816000875af1158015610991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b59190613723565b505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561075e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109f4575050505050905090565b6001600160a01b031660009081526020819052604090205490565b600260055403610a6d5760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610818565b6002600555601054610100900460ff1615610aaf5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610818565b6010805461ff001916610100179055600e54600f5481158015610ad0575080155b15610ae75750506010805461ff0019169055610da2565b6000610af230610a1b565b90506000610b00838561375b565b905080821015610b7457600080516020613a41833981519152604051610b57906020808252601a908201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604082015260600190565b60405180910390a150506010805461ff001916905550610da29050565b68056bc75e2d631000006000610b8a858761375b565b905081811115610c3657600081610ba984670de0b6b3a764000061376e565b610bb39190613785565b9050670de0b6b3a7640000610bc8828961376e565b610bd29190613785565b9650670de0b6b3a7640000610be7828861376e565b610bf19190613785565b9550610bfd868861375b565b915086600e6000828254610c1191906137a7565b9250508190555085600f6000828254610c2a91906137a7565b90915550610c41915050565b6000600e819055600f555b60408051878152602081018790527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a1600754610c949030906001600160a01b0316600019612343565b476000610ca0836127d1565b905080600003610cc35750506010805461ff001916905550610da2945050505050565b47828111610d3657600080516020613a41833981519152604051610d149060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150506010805461ff001916905550610da295505050505050565b6000610d4284836137a7565b9050600085610d518c8461376e565b610d5b9190613785565b90506000610d6982846137a7565b90508115610d7b57610d7b828d612c45565b8015610d8a57610d8a81612ed1565b50506010805461ff0019169055505050505050505050505b6001600555565b610db1612783565b60105460ff1615610de95760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610818565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015610e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6c91906137ba565b600a80546001600160a01b0319166001600160a01b03929092169182179055610f28576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015610ee3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0791906137ba565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b0316610f655760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610818565b600754610f7f9030906001600160a01b0316600019612343565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610fb7929116906000199060040161370a565b6020604051808303816000875af1158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190613723565b61102b5760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610818565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611063929116906000199060040161370a565b6020604051808303816000875af1158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a69190613723565b50600a5460405163095ea7b360e01b8152309163095ea7b3916110d9916001600160a01b0316906000199060040161370a565b6020604051808303816000875af11580156110f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111c9190613723565b50565b6060600480546106e5906136d0565b611136612783565b600082116111565760405162461bcd60e51b8152600401610818906137d7565b6000811161118b5760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610818565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa1580156111c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ec91906137f3565b101561121f5760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610818565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128b91906137f3565b10156112be5760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610818565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906112f29033903090869060040161380c565b6020604051808303816000875af1158015611311573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113359190613723565b6113665760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610818565b60075461137e9030906001600160a01b031684612343565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926113b492911690859060040161370a565b6020604051808303816000875af11580156113d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f79190613723565b506007546009546001600160a01b039182169163e8e33700913091168585600080336114254261025861375b565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af19250505080156114bd575060408051601f3d908101601f191682019092526114ba91810190613830565b60015b611745576114c961385e565b806308c379a00361160c57506114dd6138b5565b806114e8575061160e565b6007546115019030906001600160a01b03166000612343565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926115389291169060009060040161370a565b6020604051808303816000875af1158015611557573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157b9190613723565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906115ae903390869060040161370a565b6020604051808303816000875af11580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190613723565b508060405162461bcd60e51b8152600401610818919061352c565b505b6007546116279030906001600160a01b03166000612343565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261165e9291169060009060040161370a565b6020604051808303816000875af115801561167d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a19190613723565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906116d4903390859060040161370a565b6020604051808303816000875af11580156116f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117179190613723565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610818565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156117ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ee91906137f3565b905080156109b55760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611828903390859060040161370a565b6020604051808303816000875af1158015611847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186b9190613723565b50505050565b611879612783565b6001600160a01b0381166118b45760405162461bcd60e51b81526020600482015260026024820152615a4160f01b6044820152606401610818565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b60003361077681858561245d565b61192b612783565b6002600554036119625760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610818565b6002600555806119b45760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610818565b6119bd30610a1b565b811115611a035760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610818565b601054600160b01b900460ff16611a515760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610818565b6000611a5c826127d1565b905060008111611aae5760405162461bcd60e51b815260206004820152601c60248201527f53776170206661696c65642c206e6f20455448207265636569766564000000006044820152606401610818565b60408051838152602081018390527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a150506001600555565b611af8612783565b6001600160a01b038116611b335760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610818565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611b5d612783565b601054600160b01b900460ff1615611bab5760405162461bcd60e51b8152602060048201526011602482015270141c9bde1e48185b1c9958591e481cd95d607a1b6044820152606401610818565b6001600160a01b038116611bf95760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642070726f7879206164647265737360581b6044820152606401610818565b6010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b611c66612783565b60008111611c865760405162461bcd60e51b8152600401610818906137d7565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015611cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce791906137f3565b1015611d1a5760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610818565b600754611d349030906001600160a01b0316600019612343565b476000611d40836127d1565b905080600003611d4f57505050565b47828111611dae57600080516020613a41833981519152604051611da09060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150505050565b6000611dba84836137a7565b905060006064611dcb60198461376e565b611dd59190613785565b905060006064611de660198561376e565b611df09190613785565b90508115611e1857611e18826064611e0960198b61376e565b611e139190613785565b612c45565b8015611e2757611e2781612ed1565b50505050505050565b611e38612783565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015611e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9a91906137f3565b905060008111611ebc5760405162461bcd60e51b8152600401610818906137d7565b60003411611ef15760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610818565b600754611f099030906001600160a01b031683612343565b6007546001600160a01b031663f305d71934308460008033611f2d4261025861375b565b6040518863ffffffff1660e01b8152600401611f4e9695949392919061393f565b60606040518083038185885af193505050508015611f89575060408051601f3d908101601f19168201909252611f8691810190613830565b60015b61204057611f9561385e565b806308c379a003611ff95750611fa96138b5565b80611fb45750611ffb565b600754611fcd9030906001600160a01b03166000612343565b60405133904780156108fc02916000818181858888f193505050501580156115f1573d6000803e3d6000fd5b505b6007546120149030906001600160a01b03166000612343565b60405133904780156108fc02916000818181858888f19350505050158015611717573d6000803e3d6000fd5b5050604080518381523460208201527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a150565b612086612783565b6007546120a09030906001600160a01b0316600019612343565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926120d8929116906000199060040161370a565b6020604051808303816000875af1925050508015612113575060408051601f3d908101601f1916820190925261211091810190613723565b60015b1561216957506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612160926001600160a01b03918216929116906000199061380c565b60405180910390a15b600a546001600160a01b0316156108ec57600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926121b2929116906000199060040161370a565b6020604051808303816000875af19250505080156121ed575060408051601f3d908101601f191682019092526121ea91810190613723565b60015b156122435750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca9261223a926001600160a01b03918216929116906000199061380c565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b391612275916001600160a01b0316906000199060040161370a565b6020604051808303816000875af19250505080156122b0575060408051601f3d908101601f191682019092526122ad91810190613723565b60015b156108ec5750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca916108e39130916001600160a01b0316906000199061380c565b6122ff612783565b6001600160a01b03811661233a5760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610818565b61111c8161319e565b6001600160a01b0383161580159061236357506001600160a01b03821615155b6123945760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610818565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054818110156124505760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610818565b61186b8484848403612343565b601054610100900460ff1615801561248357506006546001600160a01b03848116911614155b801561249d57506006546001600160a01b03838116911614155b80156124b257506001600160a01b0383163014155b80156124cb5750600a546001600160a01b038381169116145b1561274c57600060646124df60058461376e565b6124e99190613785565b9050801561274a576000606461250060198461376e565b61250a9190613785565b90506000606461251b60198561376e565b6125259190613785565b9050600061253384866137a7565b90506125408730866131f0565b61254b8787836131f0565b82600e600082825461255d919061375b565b9250508190555081600f6000828254612576919061375b565b9091555050600f54600e5468056bc75e2d63100000916802b5e3af16b1880000916125a1919061375b565b1061270d5780600f54600e546125b7919061375b565b1115612608577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f546040516125fb929190918252602082015260400190565b60405180910390a161270d565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561264357600080fd5b505af1925050508015612654575060015b61270d5761266061385e565b806308c379a0036126aa57506126746138b5565b8061267f57506126ac565b600080516020613a418339815191528160405161269c919061352c565b60405180910390a15061270d565b505b600080516020613a418339815191526040516125fb906020808252602b908201527f556e6b6e6f776e206572726f7220696e2070726f636573734c6971756964697460408201526a079416e6441697264726f760ac1b606082015260800190565b61272a88678ac7230489e800006127238b610a1b565b10156132f5565b61274087678ac7230489e800006127238a610a1b565b5050505050505050565b505b6127578383836131f0565b61276d83678ac7230489e8000061272386610a1b565b6109b582678ac7230489e8000061272385610a1b565b336127966006546001600160a01b031690565b6001600160a01b0316146108ec5760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610818565b6000816000036127e357506000919050565b601054600160b01b900460ff166128315760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610818565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128665761286661397a565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e391906137ba565b816001815181106128f6576128f661397a565b6001600160a01b03928316602091820292909201015260075460009161291f9130911686612343565b600061292d42610e1061375b565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac94792612976928b9289928b9262010000909104909116908990600401613990565b600060405180830381600087803b15801561299057600080fd5b505af19250505080156129a1575060015b612a56576129ad61385e565b806308c379a0036129fe57506129c16138b5565b806129cc5750612a00565b600080516020613a41833981519152816040516129e9919061352c565b60405180910390a15060009695505050505050565b505b600080516020613a41833981519152604051612a42906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b60405180910390a150600095945050505050565b601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612aa657600080fd5b505af1925050508015612ab7575060015b612b7c57612ac361385e565b806308c379a003612b1c5750612ad76138b5565b80612ae25750612b1e565b600080516020613a4183398151915281604051602001612b0291906139cc565b60408051601f19818403018152908290526129e99161352c565b505b600080516020613a41833981519152604051612a429060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b476000612b8983836137a7565b90508015612bd55760408051898152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1979650505050505050565b600080516020613a41833981519152604051612c2f9060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a1506000979650505050505050565b6000612c5030610a1b565b905081811015612cd7577fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad604051612cca9060208082526028908201527f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206c604082015267697175696469747960c01b606082015260800190565b60405180910390a1505050565b60006064612ce581806137a7565b612cef908561376e565b612cf99190613785565b905060006064612d0981806137a7565b612d13908761376e565b612d1d9190613785565b600754909150612d389030906001600160a01b031686612343565b6007546001600160a01b031663f305d719863087868683612d5b42610e1061375b565b6040518863ffffffff1660e01b8152600401612d7c9695949392919061393f565b60606040518083038185885af193505050508015612db7575060408051601f3d908101601f19168201909252612db491810190613830565b60015b612e8d57612dc361385e565b806308c379a003612e1f5750612dd76138b5565b80612de25750612e21565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad81604051612e11919061352c565b60405180910390a150612eca565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad604051612e80906020808252601b908201527f556e6b6e6f776e206c697175696469747920616464206572726f720000000000604082015260600190565b60405180910390a1612eca565b505060408051868152602081018890527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15b5050505050565b600d54801580612edf575081155b15612ee8575050565b60006064612ef784601961376e565b612f019190613785565b90506000612f0f82856137a7565b9050600082118015612f2b5750600b546001600160a01b031615155b15612ffc57600b546040516000916001600160a01b03169084908381818185875af1925050503d8060008114612f7d576040519150601f19603f3d011682016040523d82523d6000602084013e612f82565b606091505b5050905080612ff6577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051612fea906020808252601c908201527f547265617375727920455448207472616e73666572206661696c656400000000604082015260600190565b60405180910390a18491505b50612fff565b50825b60008311801561300f5750600081115b156131685760006130208483613785565b905080156131665760005b84811015613164576000600d82815481106130485761304861397a565b6000918252602090912001546001600160a01b03169050801580159061307757506001600160a01b0381163014155b80156130915750600a546001600160a01b03828116911614155b15613151576000816001600160a01b03168460405160006040518083038185875af1925050503d80600081146130e3576040519150601f19603f3d011682016040523d82523d6000602084013e6130e8565b606091505b505090508061314f577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161314690602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b505b508061315c81613a11565b91505061302b565b505b505b60408051858152602081018590527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c2179101611da0565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383161580159061321057506001600160a01b03821615155b6132415760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610818565b6001600160a01b0383166000908152602081905260409020548181101561328f5760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610818565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361186b565b600a546001600160a01b0383811691161480159061331c57506001600160a01b0382163014155b156135045780801561334757506001600160a01b0382166000908152600c602052604090205460ff16155b156133b357506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b801580156133d957506001600160a01b0382166000908152600c602052604090205460ff165b15613504576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d548110156109b557826001600160a01b0316600d82815481106134265761342661397a565b6000918252602090912001546001600160a01b0316036134f257600d8054613450906001906137a7565b815481106134605761346061397a565b600091825260209091200154600d80546001600160a01b03909216918390811061348c5761348c61397a565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d8054806134cb576134cb613a2a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806134fc81613a11565b9150506133ff565b5050565b60005b8381101561352357818101518382015260200161350b565b50506000910152565b602081526000825180602084015261354b816040850160208701613508565b601f01601f19169190910160400192915050565b6001600160a01b038116811461111c57600080fd5b6000806040838503121561358757600080fd5b82356135928161355f565b946020939093013593505050565b6000806000606084860312156135b557600080fd5b83356135c08161355f565b925060208401356135d08161355f565b929592945050506040919091013590565b6000602082840312156135f357600080fd5b5035919050565b600081518084526020808501945080840160005b838110156136335781516001600160a01b03168752958201959082019060010161360e565b509495945050505050565b60208152600061365160208301846135fa565b9392505050565b60006020828403121561366a57600080fd5b81356136518161355f565b6000806040838503121561368857600080fd5b50508035926020909101359150565b600080604083850312156136aa57600080fd5b82356136b58161355f565b915060208301356136c58161355f565b809150509250929050565b600181811c908216806136e457607f821691505b60208210810361370457634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561373557600080fd5b8151801515811461365157600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561077c5761077c613745565b808202811582820484141761077c5761077c613745565b6000826137a257634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561077c5761077c613745565b6000602082840312156137cc57600080fd5b81516136518161355f565b602080825260029082015261139560f21b604082015260600190565b60006020828403121561380557600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008060006060848603121561384557600080fd5b8351925060208401519150604084015190509250925092565b600060033d11156138775760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff811182821017156138ae57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156138c35790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156138f357505050505090565b828501915081518181111561390b5750505050505090565b843d87010160208285010111156139255750505050505090565b6139346020828601018761387a565b509095945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a0604082015260006139af60a08301866135fa565b6001600160a01b0394909416606083015250608001529392505050565b7f50726f787920455448207472616e73666572206661696c65643a200000000000815260008251613a0481601b850160208701613508565b91909101601b0192915050565b600060018201613a2357613a23613745565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723a2646970667358221220576b7eb94c4c881804a73f6f8e6b06b9e9f8c6a75ccc1d3cb95676af804f5a8c64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102135760003560e01c8063808a545711610118578063c0d78655116100a0578063dd62ed3e1161006f578063dd62ed3e14610633578063e3a8fa5514610679578063ed9cacfe14610681578063f2fde38b14610696578063fd7c9fab146106b657600080fd5b8063c0d78655146105a3578063c84a705c146105c3578063d4d7b19a146105e3578063d720a2a81461061357600080fd5b8063975b87e8116100e7578063975b87e814610502578063a8602fea14610522578063a9059cbb14610542578063b70143c914610562578063b9276e4b1461058257600080fd5b8063808a54571461049a5780638129fc1c146104ba5780638da5cb5b146104cf57806395d89b41146104ed57600080fd5b80634626402b1161019b57806362b6327a1161016a57806362b6327a1461040a5780636ec4be901461042a57806370a08231146104505780637136982b146104705780637ac84fc11461048557600080fd5b80634626402b1461039357806357376198146103b35780635d76b04c146103d35780635fe8e7cc146103e857600080fd5b806323b872dd116101e257806323b872dd146102ea5780632a11ced01461030a578063313ce56714610342578063397883d21461035e578063461a3a951461037357600080fd5b806306fdde031461025b57806308dee2b414610286578063095ea7b3146102a557806318160ddd146102d557600080fd5b366102565734156102545760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b34801561026757600080fd5b506102706106d6565b60405161027d919061352c565b60405180910390f35b34801561029257600080fd5b50600e545b60405190815260200161027d565b3480156102b157600080fd5b506102c56102c0366004613574565b610768565b604051901515815260200161027d565b3480156102e157600080fd5b50600254610297565b3480156102f657600080fd5b506102c56103053660046135a0565b610782565b34801561031657600080fd5b5061032a6103253660046135e1565b6107a6565b6040516001600160a01b03909116815260200161027d565b34801561034e57600080fd5b506040516012815260200161027d565b34801561036a57600080fd5b506102546107d0565b34801561037f57600080fd5b5060095461032a906001600160a01b031681565b34801561039f57600080fd5b50600b5461032a906001600160a01b031681565b3480156103bf57600080fd5b506102546103ce366004613574565b6108ee565b3480156103df57600080fd5b50600f54610297565b3480156103f457600080fd5b506103fd6109ba565b60405161027d919061363e565b34801561041657600080fd5b5060075461032a906001600160a01b031681565b34801561043657600080fd5b5060105461032a906201000090046001600160a01b031681565b34801561045c57600080fd5b5061029761046b366004613658565b610a1b565b34801561047c57600080fd5b50600d54610297565b34801561049157600080fd5b50610254610a36565b3480156104a657600080fd5b50600a5461032a906001600160a01b031681565b3480156104c657600080fd5b50610254610da9565b3480156104db57600080fd5b506006546001600160a01b031661032a565b3480156104f957600080fd5b5061027061111f565b34801561050e57600080fd5b5061025461051d366004613675565b61112e565b34801561052e57600080fd5b5061025461053d366004613658565b611871565b34801561054e57600080fd5b506102c561055d366004613574565b611915565b34801561056e57600080fd5b5061025461057d3660046135e1565b611923565b34801561058e57600080fd5b506010546102c590600160b01b900460ff1681565b3480156105af57600080fd5b506102546105be366004613658565b611af0565b3480156105cf57600080fd5b506102546105de366004613658565b611b55565b3480156105ef57600080fd5b506102c56105fe366004613658565b600c6020526000908152604090205460ff1681565b34801561061f57600080fd5b5061025461062e3660046135e1565b611c5e565b34801561063f57600080fd5b5061029761064e366004613697565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610254611e30565b34801561068d57600080fd5b5061025461207e565b3480156106a257600080fd5b506102546106b1366004613658565b6122f7565b3480156106c257600080fd5b5060085461032a906001600160a01b031681565b6060600380546106e5906136d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610711906136d0565b801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b5050505050905090565b600033610776818585612343565b60019150505b92915050565b6000336107908582856123f5565b61079b85858561245d565b506001949350505050565b600d81815481106107b657600080fd5b6000918252602090912001546001600160a01b0316905081565b6107d8612783565b6000600e5411806107eb57506000600f54115b6108215760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d546108555760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610818565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561089057600080fd5b505af19250505080156108a1575060015b6108ec577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f546040516108e3929190918252602082015260400190565b60405180910390a15b565b6108f6612783565b306001600160a01b038316036109335760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610818565b816001600160a01b031663a9059cbb6109546006546001600160a01b031690565b836040518363ffffffff1660e01b815260040161097292919061370a565b6020604051808303816000875af1158015610991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b59190613723565b505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561075e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109f4575050505050905090565b6001600160a01b031660009081526020819052604090205490565b600260055403610a6d5760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610818565b6002600555601054610100900460ff1615610aaf5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610818565b6010805461ff001916610100179055600e54600f5481158015610ad0575080155b15610ae75750506010805461ff0019169055610da2565b6000610af230610a1b565b90506000610b00838561375b565b905080821015610b7457600080516020613a41833981519152604051610b57906020808252601a908201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604082015260600190565b60405180910390a150506010805461ff001916905550610da29050565b68056bc75e2d631000006000610b8a858761375b565b905081811115610c3657600081610ba984670de0b6b3a764000061376e565b610bb39190613785565b9050670de0b6b3a7640000610bc8828961376e565b610bd29190613785565b9650670de0b6b3a7640000610be7828861376e565b610bf19190613785565b9550610bfd868861375b565b915086600e6000828254610c1191906137a7565b9250508190555085600f6000828254610c2a91906137a7565b90915550610c41915050565b6000600e819055600f555b60408051878152602081018790527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a1600754610c949030906001600160a01b0316600019612343565b476000610ca0836127d1565b905080600003610cc35750506010805461ff001916905550610da2945050505050565b47828111610d3657600080516020613a41833981519152604051610d149060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150506010805461ff001916905550610da295505050505050565b6000610d4284836137a7565b9050600085610d518c8461376e565b610d5b9190613785565b90506000610d6982846137a7565b90508115610d7b57610d7b828d612c45565b8015610d8a57610d8a81612ed1565b50506010805461ff0019169055505050505050505050505b6001600555565b610db1612783565b60105460ff1615610de95760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610818565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015610e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6c91906137ba565b600a80546001600160a01b0319166001600160a01b03929092169182179055610f28576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015610ee3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0791906137ba565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b0316610f655760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610818565b600754610f7f9030906001600160a01b0316600019612343565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610fb7929116906000199060040161370a565b6020604051808303816000875af1158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa9190613723565b61102b5760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610818565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611063929116906000199060040161370a565b6020604051808303816000875af1158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a69190613723565b50600a5460405163095ea7b360e01b8152309163095ea7b3916110d9916001600160a01b0316906000199060040161370a565b6020604051808303816000875af11580156110f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111c9190613723565b50565b6060600480546106e5906136d0565b611136612783565b600082116111565760405162461bcd60e51b8152600401610818906137d7565b6000811161118b5760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610818565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa1580156111c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ec91906137f3565b101561121f5760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610818565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128b91906137f3565b10156112be5760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610818565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906112f29033903090869060040161380c565b6020604051808303816000875af1158015611311573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113359190613723565b6113665760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610818565b60075461137e9030906001600160a01b031684612343565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926113b492911690859060040161370a565b6020604051808303816000875af11580156113d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f79190613723565b506007546009546001600160a01b039182169163e8e33700913091168585600080336114254261025861375b565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af19250505080156114bd575060408051601f3d908101601f191682019092526114ba91810190613830565b60015b611745576114c961385e565b806308c379a00361160c57506114dd6138b5565b806114e8575061160e565b6007546115019030906001600160a01b03166000612343565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926115389291169060009060040161370a565b6020604051808303816000875af1158015611557573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157b9190613723565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906115ae903390869060040161370a565b6020604051808303816000875af11580156115cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f19190613723565b508060405162461bcd60e51b8152600401610818919061352c565b505b6007546116279030906001600160a01b03166000612343565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261165e9291169060009060040161370a565b6020604051808303816000875af115801561167d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a19190613723565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906116d4903390859060040161370a565b6020604051808303816000875af11580156116f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117179190613723565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610818565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156117ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ee91906137f3565b905080156109b55760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611828903390859060040161370a565b6020604051808303816000875af1158015611847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186b9190613723565b50505050565b611879612783565b6001600160a01b0381166118b45760405162461bcd60e51b81526020600482015260026024820152615a4160f01b6044820152606401610818565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b60003361077681858561245d565b61192b612783565b6002600554036119625760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610818565b6002600555806119b45760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610818565b6119bd30610a1b565b811115611a035760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610818565b601054600160b01b900460ff16611a515760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610818565b6000611a5c826127d1565b905060008111611aae5760405162461bcd60e51b815260206004820152601c60248201527f53776170206661696c65642c206e6f20455448207265636569766564000000006044820152606401610818565b60408051838152602081018390527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a150506001600555565b611af8612783565b6001600160a01b038116611b335760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610818565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611b5d612783565b601054600160b01b900460ff1615611bab5760405162461bcd60e51b8152602060048201526011602482015270141c9bde1e48185b1c9958591e481cd95d607a1b6044820152606401610818565b6001600160a01b038116611bf95760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642070726f7879206164647265737360581b6044820152606401610818565b6010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b611c66612783565b60008111611c865760405162461bcd60e51b8152600401610818906137d7565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015611cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce791906137f3565b1015611d1a5760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610818565b600754611d349030906001600160a01b0316600019612343565b476000611d40836127d1565b905080600003611d4f57505050565b47828111611dae57600080516020613a41833981519152604051611da09060208082526019908201527804e6f204554482072656365697665642066726f6d207377617603c1b604082015260600190565b60405180910390a150505050565b6000611dba84836137a7565b905060006064611dcb60198461376e565b611dd59190613785565b905060006064611de660198561376e565b611df09190613785565b90508115611e1857611e18826064611e0960198b61376e565b611e139190613785565b612c45565b8015611e2757611e2781612ed1565b50505050505050565b611e38612783565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015611e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9a91906137f3565b905060008111611ebc5760405162461bcd60e51b8152600401610818906137d7565b60003411611ef15760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610818565b600754611f099030906001600160a01b031683612343565b6007546001600160a01b031663f305d71934308460008033611f2d4261025861375b565b6040518863ffffffff1660e01b8152600401611f4e9695949392919061393f565b60606040518083038185885af193505050508015611f89575060408051601f3d908101601f19168201909252611f8691810190613830565b60015b61204057611f9561385e565b806308c379a003611ff95750611fa96138b5565b80611fb45750611ffb565b600754611fcd9030906001600160a01b03166000612343565b60405133904780156108fc02916000818181858888f193505050501580156115f1573d6000803e3d6000fd5b505b6007546120149030906001600160a01b03166000612343565b60405133904780156108fc02916000818181858888f19350505050158015611717573d6000803e3d6000fd5b5050604080518381523460208201527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a150565b612086612783565b6007546120a09030906001600160a01b0316600019612343565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926120d8929116906000199060040161370a565b6020604051808303816000875af1925050508015612113575060408051601f3d908101601f1916820190925261211091810190613723565b60015b1561216957506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612160926001600160a01b03918216929116906000199061380c565b60405180910390a15b600a546001600160a01b0316156108ec57600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926121b2929116906000199060040161370a565b6020604051808303816000875af19250505080156121ed575060408051601f3d908101601f191682019092526121ea91810190613723565b60015b156122435750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca9261223a926001600160a01b03918216929116906000199061380c565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b391612275916001600160a01b0316906000199060040161370a565b6020604051808303816000875af19250505080156122b0575060408051601f3d908101601f191682019092526122ad91810190613723565b60015b156108ec5750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca916108e39130916001600160a01b0316906000199061380c565b6122ff612783565b6001600160a01b03811661233a5760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610818565b61111c8161319e565b6001600160a01b0383161580159061236357506001600160a01b03821615155b6123945760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610818565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054818110156124505760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610818565b61186b8484848403612343565b601054610100900460ff1615801561248357506006546001600160a01b03848116911614155b801561249d57506006546001600160a01b03838116911614155b80156124b257506001600160a01b0383163014155b80156124cb5750600a546001600160a01b038381169116145b1561274c57600060646124df60058461376e565b6124e99190613785565b9050801561274a576000606461250060198461376e565b61250a9190613785565b90506000606461251b60198561376e565b6125259190613785565b9050600061253384866137a7565b90506125408730866131f0565b61254b8787836131f0565b82600e600082825461255d919061375b565b9250508190555081600f6000828254612576919061375b565b9091555050600f54600e5468056bc75e2d63100000916802b5e3af16b1880000916125a1919061375b565b1061270d5780600f54600e546125b7919061375b565b1115612608577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f546040516125fb929190918252602082015260400190565b60405180910390a161270d565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561264357600080fd5b505af1925050508015612654575060015b61270d5761266061385e565b806308c379a0036126aa57506126746138b5565b8061267f57506126ac565b600080516020613a418339815191528160405161269c919061352c565b60405180910390a15061270d565b505b600080516020613a418339815191526040516125fb906020808252602b908201527f556e6b6e6f776e206572726f7220696e2070726f636573734c6971756964697460408201526a079416e6441697264726f760ac1b606082015260800190565b61272a88678ac7230489e800006127238b610a1b565b10156132f5565b61274087678ac7230489e800006127238a610a1b565b5050505050505050565b505b6127578383836131f0565b61276d83678ac7230489e8000061272386610a1b565b6109b582678ac7230489e8000061272385610a1b565b336127966006546001600160a01b031690565b6001600160a01b0316146108ec5760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610818565b6000816000036127e357506000919050565b601054600160b01b900460ff166128315760405162461bcd60e51b815260206004820152601260248201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b6044820152606401610818565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128665761286661397a565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e391906137ba565b816001815181106128f6576128f661397a565b6001600160a01b03928316602091820292909201015260075460009161291f9130911686612343565b600061292d42610e1061375b565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac94792612976928b9289928b9262010000909104909116908990600401613990565b600060405180830381600087803b15801561299057600080fd5b505af19250505080156129a1575060015b612a56576129ad61385e565b806308c379a0036129fe57506129c16138b5565b806129cc5750612a00565b600080516020613a41833981519152816040516129e9919061352c565b60405180910390a15060009695505050505050565b505b600080516020613a41833981519152604051612a42906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b60405180910390a150600095945050505050565b601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612aa657600080fd5b505af1925050508015612ab7575060015b612b7c57612ac361385e565b806308c379a003612b1c5750612ad76138b5565b80612ae25750612b1e565b600080516020613a4183398151915281604051602001612b0291906139cc565b60408051601f19818403018152908290526129e99161352c565b505b600080516020613a41833981519152604051612a429060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b476000612b8983836137a7565b90508015612bd55760408051898152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1979650505050505050565b600080516020613a41833981519152604051612c2f9060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a1506000979650505050505050565b6000612c5030610a1b565b905081811015612cd7577fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad604051612cca9060208082526028908201527f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206c604082015267697175696469747960c01b606082015260800190565b60405180910390a1505050565b60006064612ce581806137a7565b612cef908561376e565b612cf99190613785565b905060006064612d0981806137a7565b612d13908761376e565b612d1d9190613785565b600754909150612d389030906001600160a01b031686612343565b6007546001600160a01b031663f305d719863087868683612d5b42610e1061375b565b6040518863ffffffff1660e01b8152600401612d7c9695949392919061393f565b60606040518083038185885af193505050508015612db7575060408051601f3d908101601f19168201909252612db491810190613830565b60015b612e8d57612dc361385e565b806308c379a003612e1f5750612dd76138b5565b80612de25750612e21565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad81604051612e11919061352c565b60405180910390a150612eca565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad604051612e80906020808252601b908201527f556e6b6e6f776e206c697175696469747920616464206572726f720000000000604082015260600190565b60405180910390a1612eca565b505060408051868152602081018890527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15b5050505050565b600d54801580612edf575081155b15612ee8575050565b60006064612ef784601961376e565b612f019190613785565b90506000612f0f82856137a7565b9050600082118015612f2b5750600b546001600160a01b031615155b15612ffc57600b546040516000916001600160a01b03169084908381818185875af1925050503d8060008114612f7d576040519150601f19603f3d011682016040523d82523d6000602084013e612f82565b606091505b5050905080612ff6577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051612fea906020808252601c908201527f547265617375727920455448207472616e73666572206661696c656400000000604082015260600190565b60405180910390a18491505b50612fff565b50825b60008311801561300f5750600081115b156131685760006130208483613785565b905080156131665760005b84811015613164576000600d82815481106130485761304861397a565b6000918252602090912001546001600160a01b03169050801580159061307757506001600160a01b0381163014155b80156130915750600a546001600160a01b03828116911614155b15613151576000816001600160a01b03168460405160006040518083038185875af1925050503d80600081146130e3576040519150601f19603f3d011682016040523d82523d6000602084013e6130e8565b606091505b505090508061314f577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161314690602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b505b508061315c81613a11565b91505061302b565b505b505b60408051858152602081018590527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c2179101611da0565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383161580159061321057506001600160a01b03821615155b6132415760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610818565b6001600160a01b0383166000908152602081905260409020548181101561328f5760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610818565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361186b565b600a546001600160a01b0383811691161480159061331c57506001600160a01b0382163014155b156135045780801561334757506001600160a01b0382166000908152600c602052604090205460ff16155b156133b357506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b801580156133d957506001600160a01b0382166000908152600c602052604090205460ff165b15613504576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d548110156109b557826001600160a01b0316600d82815481106134265761342661397a565b6000918252602090912001546001600160a01b0316036134f257600d8054613450906001906137a7565b815481106134605761346061397a565b600091825260209091200154600d80546001600160a01b03909216918390811061348c5761348c61397a565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d8054806134cb576134cb613a2a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806134fc81613a11565b9150506133ff565b5050565b60005b8381101561352357818101518382015260200161350b565b50506000910152565b602081526000825180602084015261354b816040850160208701613508565b601f01601f19169190910160400192915050565b6001600160a01b038116811461111c57600080fd5b6000806040838503121561358757600080fd5b82356135928161355f565b946020939093013593505050565b6000806000606084860312156135b557600080fd5b83356135c08161355f565b925060208401356135d08161355f565b929592945050506040919091013590565b6000602082840312156135f357600080fd5b5035919050565b600081518084526020808501945080840160005b838110156136335781516001600160a01b03168752958201959082019060010161360e565b509495945050505050565b60208152600061365160208301846135fa565b9392505050565b60006020828403121561366a57600080fd5b81356136518161355f565b6000806040838503121561368857600080fd5b50508035926020909101359150565b600080604083850312156136aa57600080fd5b82356136b58161355f565b915060208301356136c58161355f565b809150509250929050565b600181811c908216806136e457607f821691505b60208210810361370457634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561373557600080fd5b8151801515811461365157600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561077c5761077c613745565b808202811582820484141761077c5761077c613745565b6000826137a257634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561077c5761077c613745565b6000602082840312156137cc57600080fd5b81516136518161355f565b602080825260029082015261139560f21b604082015260600190565b60006020828403121561380557600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008060006060848603121561384557600080fd5b8351925060208401519150604084015190509250925092565b600060033d11156138775760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff811182821017156138ae57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156138c35790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156138f357505050505090565b828501915081518181111561390b5750505050505090565b843d87010160208285010111156139255750505050505090565b6139346020828601018761387a565b509095945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a0604082015260006139af60a08301866135fa565b6001600160a01b0394909416606083015250608001529392505050565b7f50726f787920455448207472616e73666572206661696c65643a200000000000815260008251613a0481601b850160208701613508565b91909101601b0192915050565b600060018201613a2357613a23613745565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723a2646970667358221220576b7eb94c4c881804a73f6f8e6b06b9e9f8c6a75ccc1d3cb95676af804f5a8c64736f6c63430008110033
Deployed Bytecode Sourcemap
9170:26603:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35344:9;:13;35340:85;;35379:34;;35403:9;160:25:1;;35391:10:0;;35379:34;;148:2:1;133:18;35379:34:0;;;;;;;35340:85;9170:26603;;;;;2801:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30945:118;;;;;;;;;;-1:-1:-1;31032:23:0;;30945:118;;;160:25:1;;;148:2;133:18;30945: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;;3866:250;;;;;;;;;;-1:-1:-1;3866:250:0;;;;;:::i;:::-;;:::i;10273:24::-;;;;;;;;;;-1:-1:-1;10273:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2310:32:1;;;2292:51;;2280:2;2265:18;10273:24:0;2146:203:1;3003:84:0;;;;;;;;;;-1:-1:-1;3003:84:0;;3077:2;2496:36:1;;2484:2;2469:18;3003:84:0;2354:184:1;31244:378:0;;;;;;;;;;;;;:::i;10097:25::-;;;;;;;;;;-1:-1:-1;10097:25:0;;;;-1:-1:-1;;;;;10097:25:0;;;10164:29;;;;;;;;;;-1:-1:-1;10164:29:0;;;;-1:-1:-1;;;;;10164:29:0;;;30711:183;;;;;;;;;;-1:-1:-1;30711:183:0;;;;;:::i;:::-;;:::i;31071:114::-;;;;;;;;;;-1:-1:-1;31156:21:0;;31071:114;;26714:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9999:41::-;;;;;;;;;;-1:-1:-1;9999:41:0;;;;-1:-1:-1;;;;;9999:41:0;;;11321:24;;;;;;;;;;-1:-1:-1;11321:24:0;;;;;;;-1:-1:-1;;;;;11321:24:0;;;3202:118;;;;;;;;;;-1:-1:-1;3202:118:0;;;;;:::i;:::-;;:::i;26604:98::-;;;;;;;;;;-1:-1:-1;26680:7:0;:14;26604:98;;17272:3360;;;;;;;;;;;;;:::i;10129:28::-;;;;;;;;;;-1:-1:-1;10129:28:0;;;;-1:-1:-1;;;;;10129:28:0;;;12195:836;;;;;;;;;;;;;:::i;1789:87::-;;;;;;;;;;-1:-1:-1;1862:6:0;;-1:-1:-1;;;;;1862:6:0;1789:87;;2900:95;;;;;;;;;;;;;:::i;26865:2260::-;;;;;;;;;;-1:-1:-1;26865:2260:0;;;;;:::i;:::-;;:::i;33284:319::-;;;;;;;;;;-1:-1:-1;33284:319:0;;;;;:::i;:::-;;:::i;3328:182::-;;;;;;;;;;-1:-1:-1;3328:182:0;;;;;:::i;:::-;;:::i;32662:564::-;;;;;;;;;;-1:-1:-1;32662:564:0;;;;;:::i;:::-;;:::i;11352:24::-;;;;;;;;;;-1:-1:-1;11352:24:0;;;;-1:-1:-1;;;11352:24:0;;;;;;30537:166;;;;;;;;;;-1:-1:-1;30537:166:0;;;;;:::i;:::-;;:::i;35475:295::-;;;;;;;;;;-1:-1:-1;35475:295:0;;;;;:::i;:::-;;:::i;10226:40::-;;;;;;;;;;-1:-1:-1;10226:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33654:1534;;;;;;;;;;-1:-1:-1;33654:1534: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;29210:1319;;;:::i;31668:958::-;;;;;;;;;;;;;:::i;1992:165::-;;;;;;;;;;-1:-1:-1;1992:165:0;;;;;:::i;:::-;;:::i;10047:43::-;;;;;;;;;;-1:-1:-1;10047:43:0;;;;-1:-1:-1;;;;;10047: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;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;10273:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10273:24:0;;-1:-1:-1;10273:24:0;:::o;31244:378::-;1748:13;:11;:13::i;:::-;31337:1:::1;31311:23;;:27;:56;;;;31366:1;31342:21;;:25;31311:56;31303:71;;;::::0;-1:-1:-1;;;31303:71:0;;5227:2:1;31303:71:0::1;::::0;::::1;5209:21:1::0;5266:1;5246:18;;;5239:29;-1:-1:-1;;;5284:18:1;;;5277:32;5326:18;;31303:71:0::1;;;;;;;;;31393:7;:14:::0;31385:33:::1;;;::::0;-1:-1:-1;;;31385:33:0;;5557:2:1;31385:33:0::1;::::0;::::1;5539:21:1::0;5596:1;5576:18;;;5569:29;-1:-1:-1;;;5614:18:1;;;5607:32;5656:18;;31385:33:0::1;5355:325:1::0;31385:33:0::1;31433:4;-1:-1:-1::0;;;;;31433:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;31429:186;;31541:62;31556:23;;31581:21;;31541:62;;;;;;5859:25:1::0;;;5915:2;5900:18;;5893:34;5847:2;5832:18;;5685:248;31541:62:0::1;;;;;;;;31429:186;31244:378::o:0;30711:183::-;1748:13;:11;:13::i;:::-;30822:4:::1;-1:-1:-1::0;;;;;30804:23:0;::::1;::::0;30796:38:::1;;;::::0;-1:-1:-1;;;30796:38:0;;6140:2:1;30796:38:0::1;::::0;::::1;6122:21:1::0;6179:1;6159:18;;;6152:29;-1:-1:-1;;;6197:18:1;;;6190:32;6239:18;;30796:38:0::1;5938:325:1::0;30796:38:0::1;30852:6;-1:-1:-1::0;;;;;30845:23:0::1;;30869:7;1862:6:::0;;-1:-1:-1;;;;;1862:6:0;;1789:87;30869:7:::1;30878;30845:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30711:183:::0;;:::o;26714:96::-;26759:16;26795:7;26788:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26788:14:0;;;;;;;;;;;;;;;;;;;;;;26714:96;:::o;3202:118::-;-1:-1:-1;;;;;3294:18:0;3267:7;3294:18;;;;;;;;;;;;3202:118::o;17272:3360::-;1042:1;1188:7;;:19;1180:34;;;;-1:-1:-1;;;1180:34:0;;7031:2:1;1180:34:0;;;7013:21:1;7070:1;7050:18;;;7043:29;-1:-1:-1;;;7088:18:1;;;7081:32;7130:18;;1180:34:0;6829:325:1;1180:34:0;1042:1;1225:7;:18;17352:7:::1;::::0;::::1;::::0;::::1;;;17351:8;17343:23;;;::::0;-1:-1:-1;;;17343:23:0;;7361:2:1;17343:23:0::1;::::0;::::1;7343:21:1::0;7400:1;7380:18;;;7373:29;-1:-1:-1;;;7418:18:1;;;7411:32;7460:18;;17343:23:0::1;7159:325:1::0;17343:23:0::1;17377:7;:14:::0;;-1:-1:-1;;17377:14:0::1;;;::::0;;17441:23:::1;::::0;17502:21:::1;::::0;17548:23;;:48;::::1;;;-1:-1:-1::0;17575:21:0;;17548:48:::1;17544:117;;;-1:-1:-1::0;;17613:7:0::1;:15:::0;;-1:-1:-1;;17613:15:0::1;::::0;;17643:7:::1;;17544:117;17732:28;17763:24;17781:4;17763:9;:24::i;:::-;17732:55:::0;-1:-1:-1;17798:28:0::1;17829:37;17850:16:::0;17829:18;:37:::1;:::i;:::-;17798:68;;17914:20;17891;:43;17887:172;;;-1:-1:-1::0;;;;;;;;;;;17956:40:0::1;;;;7953:2:1::0;7935:21;;;7992:2;7972:18;;;7965:30;8031:28;8026:2;8011:18;;8004:56;8092:2;8077:18;;7751:350;17956:40:0::1;;;;;;;;-1:-1:-1::0;;18011:7:0::1;:15:::0;;-1:-1:-1;;18011:15:0::1;::::0;;-1:-1:-1;18041:7:0::1;::::0;-1:-1:-1;18041:7:0::1;17887:172;18156:12;18129:24;18263:37;18284:16:::0;18263:18;:37:::1;:::i;:::-;18235:65;;18434:16;18414:17;:36;18410:694;;;18498:13;18540:17:::0;18514:23:::1;:16:::0;18533:4:::1;18514:23;:::i;:::-;:43;;;;:::i;:::-;18498:59:::0;-1:-1:-1;18622:4:0::1;18593:26;18498:59:::0;18593:18;:26:::1;:::i;:::-;:33;;;;:::i;:::-;18572:54:::0;-1:-1:-1;18687:4:0::1;18660:24;18679:5:::0;18660:16;:24:::1;:::i;:::-;:31;;;;:::i;:::-;18641:50:::0;-1:-1:-1;18726:37:0::1;18641:50:::0;18726:18;:37:::1;:::i;:::-;18706:57;;18866:18;18839:23;;:45;;;;;;;:::i;:::-;;;;;;;;18924:16;18899:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;18410:694:0::1;::::0;-1:-1:-1;;18410:694:0::1;;19051:1;19025:23;:27:::0;;;19067:21:::1;:25:::0;18410:694:::1;19129:52;::::0;;5859:25:1;;;5915:2;5900:18;;5893:34;;;19129:52:0::1;::::0;5832:18:1;19129:52:0::1;;;;;;;19264:16;::::0;19232:69:::1;::::0;19249:4:::1;::::0;-1:-1:-1;;;;;19264:16:0::1;-1:-1:-1::0;;19232:8:0::1;:69::i;:::-;19397:21;19369:25;19519:31;19532:17:::0;19519:12:::1;:31::i;:::-;19497:53;;19575:11;19590:1;19575:16:::0;19571:85:::1;;-1:-1:-1::0;;19608:7:0::1;:15:::0;;-1:-1:-1;;19608:15:0::1;::::0;;-1:-1:-1;19638:7:0::1;::::0;-1:-1:-1;;;;;19638:7:0::1;19571:85;19754:21;19790:39:::0;;::::1;19786:167;;-1:-1:-1::0;;;;;;;;;;;19851:39:0::1;;;;8836:2:1::0;8818:21;;;8875:2;8855:18;;;8848:30;-1:-1:-1;;;8909:2:1;8894:18;;8887:55;8974:2;8959:18;;8634:349;19851:39:0::1;;;;;;;;-1:-1:-1::0;;19905:7:0::1;:15:::0;;-1:-1:-1;;19905:15:0::1;::::0;;-1:-1:-1;19935:7:0::1;::::0;-1:-1:-1;;;;;;19935:7:0::1;19786:167;20017:25;20045:38;20066:17:::0;20045:18;:38:::1;:::i;:::-;20017:66:::0;-1:-1:-1;20134:23:0::1;20201:17:::0;20160:38:::1;20180:18:::0;20017:66;20160:38:::1;:::i;:::-;:58;;;;:::i;:::-;20134:84:::0;-1:-1:-1;20229:21:0::1;20253:35;20134:84:::0;20253:17;:35:::1;:::i;:::-;20229:59:::0;-1:-1:-1;20347:19:0;;20343:102:::1;;20383:50;20397:15;20414:18;20383:13;:50::i;:::-;20506:17:::0;;20502:87:::1;;20540:37;20563:13;20540:22;:37::i;:::-;-1:-1:-1::0;;20609:7:0::1;:15:::0;;-1:-1:-1;;20609:15:0::1;::::0;;-1:-1:-1;;;;;;;;;;1254:1:0::1;998::::0;1266:7;:22;17272:3360::o;12195:836::-;1748:13;:11;:13::i;:::-;12256:12:::1;::::0;::::1;;12255:13;12247:28;;;::::0;-1:-1:-1;;;12247:28:0;;9190:2:1;12247:28:0::1;::::0;::::1;9172:21:1::0;9229:1;9209:18;;;9202:29;-1:-1:-1;;;9247:18:1;;;9240:32;9289:18;;12247:28:0::1;8988:325:1::0;12247:28:0::1;12286:12;:19:::0;;-1:-1:-1;;12286:19:0::1;12301:4;12286:19;::::0;;12377:17:::1;::::0;12418:10:::1;::::0;12377:52:::1;::::0;-1:-1:-1;;;12377:52:0;;12411:4:::1;12377:52;::::0;::::1;9530:34:1::0;-1:-1:-1;;;;;12418:10:0;;::::1;9580:18:1::0;;;9573:43;12377:17:0;::::1;::::0;:25:::1;::::0;9465:18:1;;12377:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12361:13;:68:::0;;-1:-1:-1;;;;;;12361:68:0::1;-1:-1:-1::0;;;;;12361:68:0;;;::::1;::::0;;::::1;::::0;;12495:131:::1;;12559:17;::::0;12603:10:::1;::::0;12559:55:::1;::::0;-1:-1:-1;;;12559:55:0;;12596:4:::1;12559:55;::::0;::::1;9530:34:1::0;-1:-1:-1;;;;;12603:10:0;;::::1;9580:18:1::0;;;9573:43;12559:17:0;::::1;::::0;:28:::1;::::0;9465:18:1;;12559:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12543:13;:71:::0;;-1:-1:-1;;;;;;12543:71:0::1;-1:-1:-1::0;;;;;12543:71:0;;;::::1;::::0;;;::::1;::::0;;12495:131:::1;12654:13;::::0;-1:-1:-1;;;;;12654:13:0::1;12646:42;;;::::0;-1:-1:-1;;;12646:42:0;;10085:2:1;12646:42:0::1;::::0;::::1;10067:21:1::0;10124:1;10104:18;;;10097:29;-1:-1:-1;;;10142:18:1;;;10135:32;10184:18;;12646:42:0::1;9883:325:1::0;12646:42:0::1;12733:16;::::0;12701:69:::1;::::0;12718:4:::1;::::0;-1:-1:-1;;;;;12733:16:0::1;-1:-1:-1::0;;12701:8:0::1;:69::i;:::-;12806:10;::::0;12834:16:::1;::::0;12799:72:::1;::::0;-1:-1:-1;;;12799:72:0;;-1:-1:-1;;;;;12806:10:0;;::::1;::::0;12799:26:::1;::::0;:72:::1;::::0;12834:16;::::1;::::0;-1:-1:-1;;12853:17:0;12799:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12791:87;;;::::0;-1:-1:-1;;;12791:87:0;;10415:2:1;12791:87:0::1;::::0;::::1;10397:21:1::0;10454:1;10434:18;;;10427:29;-1:-1:-1;;;10472:18:1;;;10465:32;10514:18;;12791:87:0::1;10213:325:1::0;12791:87:0::1;12896:10;::::0;12916:13:::1;::::0;12889:60:::1;::::0;-1:-1:-1;;;12889:60:0;;-1:-1:-1;;;;;12896:10:0;;::::1;::::0;12889:26:::1;::::0;:60:::1;::::0;12916:13;::::1;::::0;-1:-1:-1;;12931:17:0;12889:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;12990:13:0::1;::::0;12960:63:::1;::::0;-1:-1:-1;;;12960:63:0;;12975:4:::1;::::0;12960:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;12990:13:0::1;::::0;-1:-1:-1;;13005:17:0;12960:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12195:836::o:0;2900:95::-;2947:13;2980:7;2973:14;;;;;:::i;26865:2260::-;1748:13;:11;:13::i;:::-;26998:1:::1;26984:11;:15;26976:30;;;;-1:-1:-1::0;;;26976:30:0::1;;;;;;;:::i;:::-;27039:1;27025:11;:15;27017:30;;;::::0;-1:-1:-1;;;27017:30:0;;11075:2:1;27017:30:0::1;::::0;::::1;11057:21:1::0;11114:1;11094:18;;;11087:29;-1:-1:-1;;;11132:18:1;;;11125:32;11174:18;;27017:30:0::1;10873:325:1::0;27017:30:0::1;27090:46;::::0;-1:-1:-1;;;27090:46:0;;27105:4:::1;27090:46;::::0;::::1;2292:51:1::0;;;27140:11:0;;27090:31:::1;::::0;2265:18:1;;27090:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;27068:113;;;::::0;-1:-1:-1;;;27068:113:0;;11594:2:1;27068:113:0::1;::::0;::::1;11576:21:1::0;11633:1;11613:18;;;11606:29;-1:-1:-1;;;11651:18:1;;;11644:32;11693:18;;27068:113:0::1;11392:325:1::0;27068:113:0::1;27231:10;::::0;27224:40:::1;::::0;-1:-1:-1;;;27224:40:0;;27253:10:::1;27224:40;::::0;::::1;2292:51:1::0;27268:11:0;;-1:-1:-1;;;;;27231:10:0::1;::::0;27224:28:::1;::::0;2265:18:1;;27224:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;27202:107;;;::::0;-1:-1:-1;;;27202:107:0;;11924:2:1;27202:107:0::1;::::0;::::1;11906:21:1::0;11963:1;11943:18;;;11936:29;-1:-1:-1;;;11981:18:1;;;11974:32;12023:18;;27202:107:0::1;11722:325:1::0;27202:107:0::1;27411:10;::::0;27404:71:::1;::::0;-1:-1:-1;;;27404:71:0;;-1:-1:-1;;;;;27411:10:0;;::::1;::::0;27404:31:::1;::::0;:71:::1;::::0;27436:10:::1;::::0;27456:4:::1;::::0;27463:11;;27404:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27382:123;;;::::0;-1:-1:-1;;;27382:123:0;;12634:2:1;27382:123:0::1;::::0;::::1;12616:21:1::0;12673:1;12653:18;;;12646:29;-1:-1:-1;;;12691:18:1;;;12684:32;12733:18;;27382:123:0::1;12432:325:1::0;27382:123:0::1;27584:16;::::0;27552:63:::1;::::0;27569:4:::1;::::0;-1:-1:-1;;;;;27584:16:0::1;27603:11:::0;27552:8:::1;:63::i;:::-;27633:10;::::0;27661:16:::1;::::0;27626:66:::1;::::0;-1:-1:-1;;;27626:66:0;;-1:-1:-1;;;;;27633:10:0;;::::1;::::0;27626:26:::1;::::0;:66:::1;::::0;27661:16;::::1;::::0;27680:11;;27626:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27717:16:0::1;::::0;27789:10:::1;::::0;-1:-1:-1;;;;;27717:16:0;;::::1;::::0;:29:::1;::::0;27769:4:::1;::::0;27789:10:::1;27814:11:::0;27840;27717:16:::1;::::0;27990:10:::1;28015:21;:15;28033:3;28015:21;:::i;:::-;27717:356;::::0;::::1;::::0;;;-1:-1:-1;;;;;;27717:356:0;;;-1:-1:-1;;;;;13177:15:1;;;27717:356:0::1;::::0;::::1;13159:34:1::0;13229:15;;;13209:18;;;13202:43;13261:18;;;13254:34;;;;13304:18;;;13297:34;;;;13347:19;;;13340:35;;;;13391:19;;;13384:35;13456:15;;;13435:19;;;13428:44;13488:19;;;13481:35;;;;13093:19;;27717:356:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27717:356:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;27717:356:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;27713:1147;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;28228:16;::::0;28196:53:::1;::::0;28213:4:::1;::::0;-1:-1:-1;;;;;28228:16:0::1;;28196:8;:53::i;:::-;28271:10;::::0;28299:16:::1;::::0;28264:56:::1;::::0;-1:-1:-1;;;28264:56:0;;-1:-1:-1;;;;;28271:10:0;;::::1;::::0;28264:26:::1;::::0;:56:::1;::::0;28299:16;::::1;::::0;28271:10:::1;::::0;28264:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28404:10:0::1;::::0;28397:52:::1;::::0;-1:-1:-1;;;28397:52:0;;-1:-1:-1;;;;;28404:10:0;;::::1;::::0;28397:27:::1;::::0;:52:::1;::::0;28425:10:::1;::::0;28437:11;;28397:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28485:6;28478:14;;-1:-1:-1::0;;;28478:14:0::1;;;;;;;;:::i;27713:1147::-;;;28586:16;::::0;28554:53:::1;::::0;28571:4:::1;::::0;-1:-1:-1;;;;;28586:16:0::1;;28554:8;:53::i;:::-;28629:10;::::0;28657:16:::1;::::0;28622:56:::1;::::0;-1:-1:-1;;;28622:56:0;;-1:-1:-1;;;;;28629:10:0;;::::1;::::0;28622:26:::1;::::0;:56:::1;::::0;28657:16;::::1;::::0;28629:10:::1;::::0;28622:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28762:10:0::1;::::0;28755:52:::1;::::0;-1:-1:-1;;;28755:52:0;;-1:-1:-1;;;;;28762:10:0;;::::1;::::0;28755:27:::1;::::0;:52:::1;::::0;28783:10:::1;::::0;28795:11;;28755:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28836:12:0::1;::::0;-1:-1:-1;;;28836:12:0;;15670:2:1;28836:12:0::1;::::0;::::1;15652:21:1::0;15709:1;15689:18;;;15682:29;-1:-1:-1;;;15727:18:1;;;15720:32;15769:18;;28836:12:0::1;15468:325:1::0;27713:1147:0::1;-1:-1:-1::0;;28094:40:0::1;::::0;;5859:25:1;;;5915:2;5900:18;;5893:34;;;28094:40:0::1;::::0;-1:-1:-1;5832:18:1;28094:40:0::1;;;;;;;28963:10;::::0;28956:43:::1;::::0;-1:-1:-1;;;28956:43:0;;28993:4:::1;28956:43;::::0;::::1;2292:51:1::0;28930:23:0::1;::::0;-1:-1:-1;;;;;28963:10:0::1;::::0;28956:28:::1;::::0;2265:18:1;;28956:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28930:69:::0;-1:-1:-1;29014:19:0;;29010:108:::1;;29057:10;::::0;29050:56:::1;::::0;-1:-1:-1;;;29050:56:0;;-1:-1:-1;;;;;29057:10:0;;::::1;::::0;29050:27:::1;::::0;:56:::1;::::0;29078:10:::1;::::0;29090:15;;29050:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26965:2160;26865:2260:::0;;:::o;33284:319::-;1748:13;:11;:13::i;:::-;-1:-1:-1;;;;;33376:31:0;::::1;33368:46;;;::::0;-1:-1:-1;;;33368:46:0;;16000:2:1;33368:46:0::1;::::0;::::1;15982:21:1::0;16039:1;16019:18;;;16012:29;-1:-1:-1;;;16057:18:1;;;16050:32;16099:18;;33368:46:0::1;15798:325:1::0;33368:46:0::1;33457:14;::::0;;-1:-1:-1;;;;;33482:34:0;;::::1;-1:-1:-1::0;;;;;;33482:34:0;::::1;::::0;::::1;::::0;;;33542:53:::1;::::0;;33457:14;;;::::1;9530:34:1::0;;;9595:2;9580:18;;9573:43;;;;33542:53:0::1;::::0;9465:18:1;33542:53:0::1;;;;;;;33357:246;33284:319:::0;:::o;3328:182::-;3398:4;3431:10;3452:28;3431:10;3469:2;3473:6;3452:9;:28::i;32662:564::-;1748:13;:11;:13::i;:::-;1042:1:::1;1188:7;;:19:::0;1180:34:::1;;;::::0;-1:-1:-1;;;1180:34:0;;7031:2:1;1180:34:0::1;::::0;::::1;7013:21:1::0;7070:1;7050:18;;;7043:29;-1:-1:-1;;;7088:18:1;;;7081:32;7130:18;;1180:34:0::1;6829:325:1::0;1180:34:0::1;1042:1;1225:7;:18:::0;32754:15;32746:57:::2;;;::::0;-1:-1:-1;;;32746:57:0;;16330:2:1;32746:57:0::2;::::0;::::2;16312:21:1::0;16369:2;16349:18;;;16342:30;16408:31;16388:18;;;16381:59;16457:18;;32746:57:0::2;16128:353:1::0;32746:57:0::2;32837:24;32855:4;32837:9;:24::i;:::-;32822:11;:39;;32814:72;;;::::0;-1:-1:-1;;;32814:72:0;;16688:2:1;32814:72:0::2;::::0;::::2;16670:21:1::0;16727:2;16707:18;;;16700:30;-1:-1:-1;;;16746:18:1;;;16739:50;16806:18;;32814:72:0::2;16486:344:1::0;32814:72:0::2;32905:12;::::0;-1:-1:-1;;;32905:12:0;::::2;;;32897:43;;;::::0;-1:-1:-1;;;32897:43:0;;17037:2:1;32897:43:0::2;::::0;::::2;17019:21:1::0;17076:2;17056:18;;;17049:30;-1:-1:-1;;;17095:18:1;;;17088:48;17153:18;;32897:43:0::2;16835:342:1::0;32897:43:0::2;32986:19;33008:25;33021:11;33008:12;:25::i;:::-;32986:47;;33113:1;33099:11;:15;33091:56;;;::::0;-1:-1:-1;;;33091:56:0;;17384:2:1;33091:56:0::2;::::0;::::2;17366:21:1::0;17423:2;17403:18;;;17396:30;17462;17442:18;;;17435:58;17510:18;;33091:56:0::2;17182:352:1::0;33091:56:0::2;33173:45;::::0;;5859:25:1;;;5915:2;5900:18;;5893:34;;;33173:45:0::2;::::0;5832:18:1;33173:45:0::2;;;;;;;-1:-1:-1::0;;998:1:0::1;1266:7;:22:::0;32662:564::o;30537:166::-;1748:13;:11;:13::i;:::-;-1:-1:-1;;;;;30611:21:0;::::1;30603:36;;;::::0;-1:-1:-1;;;30603:36:0;;17741:2:1;30603:36:0::1;::::0;::::1;17723:21:1::0;17780:1;17760:18;;;17753:29;-1:-1:-1;;;17798:18:1;;;17791:32;17840:18;;30603:36:0::1;17539:325:1::0;30603:36:0::1;30650:16;:45:::0;;-1:-1:-1;;;;;;30650:45:0::1;-1:-1:-1::0;;;;;30650:45:0;;;::::1;::::0;;;::::1;::::0;;30537:166::o;35475:295::-;1748:13;:11;:13::i;:::-;35556:12:::1;::::0;-1:-1:-1;;;35556:12:0;::::1;;;35555:13;35547:43;;;::::0;-1:-1:-1;;;35547:43:0;;18071:2:1;35547:43:0::1;::::0;::::1;18053:21:1::0;18110:2;18090:18;;;18083:30;-1:-1:-1;;;18129:18:1;;;18122:47;18186:18;;35547:43:0::1;17869:341:1::0;35547:43:0::1;-1:-1:-1::0;;;;;35609:24:0;::::1;35601:58;;;::::0;-1:-1:-1;;;35601:58:0;;18417:2:1;35601:58:0::1;::::0;::::1;18399:21:1::0;18456:2;18436:18;;;18429:30;-1:-1:-1;;;18475:18:1;;;18468:51;18536:18;;35601:58:0::1;18215:345:1::0;35601:58:0::1;35670:9;:22:::0;;-1:-1:-1;;;;;;;;;35670:22:0;::::1;::::0;;::::1;35703:19:::0;;;;-1:-1:-1;;;;;;35703:19:0;;;;;;;-1:-1:-1;;;35703:19:0::1;::::0;;;35738:24:::1;::::0;::::1;::::0;-1:-1:-1;;35738:24:0::1;35475:295:::0;:::o;33654:1534::-;1748:13;:11;:13::i;:::-;33762:1:::1;33748:11;:15;33740:30;;;;-1:-1:-1::0;;;33740:30:0::1;;;;;;;:::i;:::-;33789:46;::::0;-1:-1:-1;;;33789:46:0;;33804:4:::1;33789:46;::::0;::::1;2292:51:1::0;;;33839:11:0;;33789:31:::1;::::0;2265:18:1;;33789:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;33781:76;;;::::0;-1:-1:-1;;;33781:76:0;;11594:2:1;33781:76:0::1;::::0;::::1;11576:21:1::0;11633:1;11613:18;;;11606:29;-1:-1:-1;;;11651:18:1;;;11644:32;11693:18;;33781:76:0::1;11392:325:1::0;33781:76:0::1;33940:16;::::0;33908:69:::1;::::0;33925:4:::1;::::0;-1:-1:-1;;;;;33940:16:0::1;-1:-1:-1::0;;33908:8:0::1;:69::i;:::-;34073:21;34045:25;34179;34192:11:::0;34179:12:::1;:25::i;:::-;34157:47;;34229:11;34244:1;34229:16:::0;34225:55:::1;;34262:7;;12960:63;12195:836::o:0;34225:55::-:1;34378:21;34414:39:::0;;::::1;34410:137;;-1:-1:-1::0;;;;;;;;;;;34475:39:0::1;;;;8836:2:1::0;8818:21;;;8875:2;8855:18;;;8848:30;-1:-1:-1;;;8909:2:1;8894:18;;8887:55;8974:2;8959:18;;8634:349;34475:39:0::1;;;;;;;;34529:7;;;12960:63;12195:836::o:0;34410:137::-:1;34611:25;34639:38;34660:17:::0;34639:18;:38:::1;:::i;:::-;34611:66:::0;-1:-1:-1;34728:23:0::1;34790:3;34754:33;9402:2;34611:66:::0;34754:33:::1;:::i;:::-;:39;;;;:::i;:::-;34728:65:::0;-1:-1:-1;34804:21:0::1;34862:3;34828:31;9458:2;34828:17:::0;:31:::1;:::i;:::-;:37;;;;:::i;:::-;34804:61:::0;-1:-1:-1;34924:19:0;;34920:117:::1;;34960:65;34974:15:::0;35021:3:::1;34991:27;9402:2;34991:11:::0;:27:::1;:::i;:::-;:33;;;;:::i;:::-;34960:13;:65::i;:::-;35098:17:::0;;35094:87:::1;;35132:37;35155:13;35132:22;:37::i;:::-;33729:1459;;;;;;33654:1534:::0;:::o;29210:1319::-;1748:13;:11;:13::i;:::-;29320:46:::1;::::0;-1:-1:-1;;;29320:46:0;;29335:4:::1;29320:46;::::0;::::1;2292:51:1::0;;;29298:19:0::1;::::0;29320:31:::1;::::0;2265:18:1;;29320:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29298:68;;29399:1;29385:11;:15;29377:30;;;;-1:-1:-1::0;;;29377:30:0::1;;;;;;;:::i;:::-;29438:1;29426:9;:13;29418:28;;;::::0;-1:-1:-1;;;29418:28:0;;18767:2:1;29418:28:0::1;::::0;::::1;18749:21:1::0;18806:1;18786:18;;;18779:29;-1:-1:-1;;;18824:18:1;;;18817:32;18866:18;;29418:28:0::1;18565:325:1::0;29418:28:0::1;29525:16;::::0;29493:63:::1;::::0;29510:4:::1;::::0;-1:-1:-1;;;;;29525:16:0::1;29544:11:::0;29493:8:::1;:63::i;:::-;29581:16;::::0;-1:-1:-1;;;;;29581:16:0::1;:32;29621:9;29654:4;29674:11:::0;29581:16:::1;::::0;29822:10:::1;29847:21;:15;29865:3;29847:21;:::i;:::-;29581:324;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29581:324:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;29581:324:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;29577:945;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;30058:16;::::0;30026:53:::1;::::0;30043:4:::1;::::0;-1:-1:-1;;;;;30058:16:0::1;;30026:8;:53::i;:::-;30144:51;::::0;30152:10:::1;::::0;30173:21:::1;30144:51:::0;::::1;;;::::0;::::1;::::0;;;30173:21;30152:10;30144:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;29577:945;;;30332:16;::::0;30300:53:::1;::::0;30317:4:::1;::::0;-1:-1:-1;;;;;30332:16:0::1;;30300:8;:53::i;:::-;30418:51;::::0;30426:10:::1;::::0;30447:21:::1;30418:51:::0;::::1;;;::::0;::::1;::::0;;;30447:21;30426:10;30418:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;29577:945;-1:-1:-1::0;;29926:38:0::1;::::0;;5859:25:1;;;29954:9:0::1;5915:2:1::0;5900:18;;5893:34;29926:38:0::1;::::0;-1:-1:-1;5832:18:1;29926:38:0::1;;;;;;;29287:1242;29210:1319::o:0;31668:958::-;1748:13;:11;:13::i;:::-;31803:16:::1;::::0;31771:69:::1;::::0;31788:4:::1;::::0;-1:-1:-1;;;;;31803:16:0::1;-1:-1:-1::0;;31771:8:0::1;:69::i;:::-;31919:10;::::0;31947:16:::1;::::0;31912:72:::1;::::0;-1:-1:-1;;;31912:72:0;;-1:-1:-1;;;;;31919:10:0;;::::1;::::0;31912:26:::1;::::0;:72:::1;::::0;31947:16;::::1;::::0;-1:-1:-1;;31966:17:0;31912:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;31912:72:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;31912:72:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;31908:193:::0;::::1;;-1:-1:-1::0;32023:10:0::1;::::0;32043:16:::1;::::0;32005:75:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;32023:10:0;;::::1;::::0;32043:16;::::1;::::0;-1:-1:-1;;32062:17:0;32005:75:::1;:::i;:::-;;;;;;;;31908:193;32176:13;::::0;-1:-1:-1;;;;;32176:13:0::1;:27:::0;32172:447:::1;;32231:10;::::0;32251:13:::1;::::0;32224:60:::1;::::0;-1:-1:-1;;;32224:60:0;;-1:-1:-1;;;;;32231:10:0;;::::1;::::0;32224:26:::1;::::0;:60:::1;::::0;32251:13;::::1;::::0;-1:-1:-1;;32266:17:0;32224:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;32224:60:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;32224:60:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;32220:177:::0;::::1;;-1:-1:-1::0;32327:10:0::1;::::0;32339:13:::1;::::0;32309:63:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;32327:10:0;;::::1;::::0;32339:13;::::1;::::0;-1:-1:-1;;32354:17:0;32309:63:::1;:::i;:::-;;;;;;;;32220:177;32459:13;::::0;32429:63:::1;::::0;-1:-1:-1;;;32429:63:0;;32444:4:::1;::::0;32429:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;32459:13:0::1;::::0;-1:-1:-1;;32474:17:0;32429:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;32429:63:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;32429:63:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;32425:183:::0;::::1;;-1:-1:-1::0;32550:13:0::1;::::0;32517:66:::1;::::0;::::1;::::0;::::1;::::0;32543:4:::1;::::0;-1:-1:-1;;;;;32550:13:0::1;::::0;-1:-1:-1;;32565:17:0;32517:66:::1;:::i;1992:165::-:0;1748:13;:11;:13::i;:::-;-1:-1:-1;;;;;2081:22:0;::::1;2073:37;;;::::0;-1:-1:-1;;;2073:37:0;;19709:2:1;2073:37:0::1;::::0;::::1;19691:21:1::0;19748:1;19728:18;;;19721:29;-1:-1:-1;;;19766:18:1;;;19759:32;19808:18;;2073:37:0::1;19507: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;;20039:2:1;5141:59:0;;;20021:21:1;20078:1;20058:18;;;20051:29;-1:-1:-1;;;20096:18:1;;;20089:32;20138:18;;5141:59:0;19837: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;;20369:2:1;5475:41:0;;;20351:21:1;20408:1;20388:18;;;20381:29;-1:-1:-1;;;20426:18:1;;;20419:32;20468:18;;5475:41:0;20167:325:1;5475:41:0;5552:51;5561:5;5568:7;5596:6;5577:16;:25;5552:8;:51::i;13039:3438::-;13227:7;;;;;;;13226:8;:41;;;;-1:-1:-1;1862:6:0;;-1:-1:-1;;;;;13252:15:0;;;1862:6;;13252:15;;13226:41;:72;;;;-1:-1:-1;1862:6:0;;-1:-1:-1;;;;;13285:13:0;;;1862:6;;13285:13;;13226:72;:111;;;;-1:-1:-1;;;;;;13316:21:0;;13332:4;13316:21;;13226:111;:148;;;;-1:-1:-1;13361:13:0;;-1:-1:-1;;;;;13355:19:0;;;13361:13;;13355:19;13226:148;13208:3000;;;13431:17;13471:3;13451:17;9347:1;13451:6;:17;:::i;:::-;:23;;;;:::i;:::-;13431:43;-1:-1:-1;13507:13:0;;13503:2694;;13601:23;13655:3;13627:25;9402:2;13627:9;:25;:::i;:::-;:31;;;;:::i;:::-;13601:57;-1:-1:-1;13677:21:0;13727:3;13701:23;9458:2;13701:9;:23;:::i;:::-;:29;;;;:::i;:::-;13677:53;-1:-1:-1;13825:22:0;13850:18;13859:9;13850:6;:18;:::i;:::-;13825:43;;13948:47;13964:4;13978;13985:9;13948:15;:47::i;:::-;14083:41;14099:4;14105:2;14109:14;14083:15;:41::i;:::-;14239:15;14212:23;;:42;;;;;;;:::i;:::-;;;;;;;;14298:13;14273:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;14714:21:0;;14688:23;;14579:12;;9627:11;;14688:47;;14714:21;14688:47;:::i;:::-;:73;14684:1243;;14937:16;14913:21;;14887:23;;:47;;;;:::i;:::-;:66;14883:1025;;;15186:62;15201:23;;15226:21;;15186:62;;;;;;5859:25:1;;;5915:2;5900:18;;5893:34;5847:2;5832:18;;5685:248;15186:62:0;;;;;;;;14883:1025;;;15391:4;-1:-1:-1;;;;;15391:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15387:498;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;15649:6:0;15638:18;;;;;;:::i;:::-;;;;;;;;15506:178;15387:498;;;;;-1:-1:-1;;;;;;;;;;;15800:57:0;;;;20699:2:1;20681:21;;;20738:2;20718:18;;;20711:30;20777:34;20772:2;20757:18;;20750:62;-1:-1:-1;;;20843:2:1;20828:18;;20821:41;20894:3;20879:19;;20497:407;15387:498:0;16009:57;16023:4;9520:11;16029:15;16039:4;16029:9;:15::i;:::-;:36;;16009:13;:57::i;:::-;16085:53;16099:2;9520:11;16103:13;16113:2;16103:9;:13::i;16085:53::-;16175:7;;;;;13039:3438;;;:::o;13503:2694::-;13386:2822;13208:3000;16256:33;16272:4;16278:2;16282:6;16256:15;:33::i;:::-;16348:57;16362:4;9520:11;16368:15;16378:4;16368:9;:15::i;16348:57::-;16416:53;16430:2;9520:11;16434:13;16444:2;16434: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;;21111:2:1;1940:36:0;;;21093:21:1;21150:1;21130:18;;;21123:29;-1:-1:-1;;;21168:18:1;;;21161:32;21210:18;;1940:36:0;20909:325:1;22256:2497:0;22316:7;22340:11;22355:1;22340:16;22336:30;;-1:-1:-1;22365:1:0;;22256:2497;-1:-1:-1;22256:2497:0:o;22336:30::-;22385:12;;-1:-1:-1;;;22385:12:0;;;;22377:43;;;;-1:-1:-1;;;22377:43:0;;17037:2:1;22377:43:0;;;17019:21:1;17076:2;17056:18;;;17049:30;-1:-1:-1;;;17095:18:1;;;17088:48;17153:18;;22377:43:0;16835:342:1;22377:43:0;22465:16;;;22479:1;22465:16;;;;;;;;22441:21;;22465:16;;;;;;;;;;-1:-1:-1;22465:16:0;22441:40;;22510:4;22492;22497:1;22492:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22492:23:0;;;:7;;;;;;;;;;:23;;;;22536:16;;:23;;;-1:-1:-1;;;22536:23:0;;;;:16;;;;;:21;;:23;;;;;22492:7;;22536:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22526:4;22531:1;22526:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22526:33:0;;;:7;;;;;;;;;:33;22928:16;;22750:20;;22896:63;;22913:4;;22928:16;22947:11;22896:8;:63::i;:::-;23032:16;23051:22;:15;23069:4;23051:22;:::i;:::-;23305:16;;23459:9;;23305:230;;-1:-1:-1;;;23305:230:0;;23032:41;;-1:-1:-1;23179:21:0;;-1:-1:-1;;;;;23305:16:0;;;;:67;;:230;;23387:11;;23413:12;;23440:4;;23459:9;;;;;;;;23032:41;;23305:230;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23301:1445;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;24610:6:0;24599:18;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;24639:1:0;;22256:2497;-1:-1:-1;;;;;;22256:2497:0:o;23301:1445::-;;;-1:-1:-1;;;;;;;;;;;24679:32:0;;;;22152:2:1;22134:21;;;22191:2;22171:18;;;22164:30;-1:-1:-1;;;22225:2:1;22210:18;;22203:48;22283:2;22268:18;;21950:342;24679:32:0;;;;;;;;-1:-1:-1;24733:1:0;;22256:2497;-1:-1:-1;;;;;22256:2497:0:o;23301:1445::-;23657:9;;;;;;;;;-1:-1:-1;;;;;23657:9:0;-1:-1:-1;;;;;23646:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23642:891;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;24353:6:0;24305:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24305:55:0;;;;;;;;;;24287:75;;;:::i;23642:891::-;;;-1:-1:-1;;;;;;;;;;;24436:54:0;;;;22963:2:1;22945:21;;;23002:2;22982:18;;;22975:30;23041:34;23036:2;23021:18;;23014:62;-1:-1:-1;;;23107:2:1;23092:18;;23085:38;23155:3;23140:19;;22761:404;23642:891:0;23791:21;23762:26;23853:38;23874:17;23791:21;23853:38;:::i;:::-;23831:60;-1:-1:-1;23932:15:0;;23928:285;;23977:40;;;5859:25:1;;;5915:2;5900:18;;5893:34;;;23977:40:0;;5832:18:1;23977:40:0;;;;;;;24047:11;22256:2497;-1:-1:-1;;;;;;;22256:2497:0:o;23928:285::-;-1:-1:-1;;;;;;;;;;;24112:50:0;;;;23372:2:1;23354:21;;;23411:2;23391:18;;;23384:30;23450:34;23445:2;23430:18;;23423:62;-1:-1:-1;;;23516:2:1;23501:18;;23494:34;23560:3;23545:19;;23170:400;24112:50:0;;;;;;;;-1:-1:-1;24192:1:0;;22256:2497;-1:-1:-1;;;;;;;22256:2497:0:o;20951:1297::-;21084:28;21115:24;21133:4;21115:9;:24::i;:::-;21084:55;;21177:11;21154:20;:34;21150:155;;;21210:62;;;;;23777:2:1;23759:21;;;23816:2;23796:18;;;23789:30;23855:34;23850:2;23835:18;;23828:62;-1:-1:-1;;;23921:2:1;23906:18;;23899:38;23969:3;23954:19;;23575:404;21210:62:0;;;;;;;;21287:7;20951:1297;;:::o;21150:155::-;21405:22;21467:3;21445:18;21467:3;;21445:18;:::i;:::-;21430:34;;:11;:34;:::i;:::-;:40;;;;:::i;:::-;21405:65;-1:-1:-1;21481:20:0;21539:3;21517:18;21539:3;;21517:18;:::i;:::-;21504:32;;:9;:32;:::i;:::-;:38;;;;:::i;:::-;21662:16;;21481:61;;-1:-1:-1;21630:63:0;;21647:4;;-1:-1:-1;;;;;21662:16:0;21681:11;21630:8;:63::i;:::-;21718:16;;-1:-1:-1;;;;;21718:16:0;:32;21758:9;21791:4;21811:11;21837:14;21866:12;21791:4;21921:22;:15;21939:4;21921:22;:::i;:::-;21718:271;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21718:271:0;;;;;;;;-1:-1:-1;;21718:271:0;;;;;;;;;;;;:::i;:::-;;;21714:527;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;22115:26;22134:6;22115:26;;;;;;:::i;:::-;;;;;;;;22061:92;21714:527;;;;;22180:49;;;;;24782:2:1;24764:21;;;24821:2;24801:18;;;24794:30;24860:29;24855:2;24840:18;;24833:57;24922:2;24907:18;;24580:351;22180:49:0;;;;;;;;21714:527;;;-1:-1:-1;;22010:38:0;;;5859:25:1;;;5915:2;5900:18;;5893:34;;;22010:38:0;;-1:-1:-1;5832:18:1;22010:38:0;;;;;;;21714:527;21022:1226;;;20951:1297;;:::o;24794:1779::-;24884:7;:14;24913:17;;;:32;;-1:-1:-1;24934:11:0;;24913:32;24909:45;;;24947:7;24794:1779;:::o;24909:45::-;25022:22;25061:3;25047:11;:6;25056:2;25047:11;:::i;:::-;:17;;;;:::i;:::-;25022:42;-1:-1:-1;25075:20:0;25098:23;25022:42;25098:6;:23;:::i;:::-;25075:46;;25205:1;25188:14;:18;:50;;;;-1:-1:-1;25210:14:0;;-1:-1:-1;;;;;25210:14:0;:28;;25188:50;25184:539;;;25282:14;;:46;;25256:20;;-1:-1:-1;;;;;25282:14:0;;25309;;25256:20;25282:46;25256:20;25282:46;25309:14;25282;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25255:73;;;25348:15;25343:232;;25389:45;;;;;25348:2:1;25330:21;;;25387:2;25367:18;;;25360:30;25426;25421:2;25406:18;;25399:58;25489:2;25474:18;;25146:352;25389:45:0;;;;;;;;25553:6;25538:21;;25343:232;25240:346;25184:539;;;-1:-1:-1;25705:6:0;25184:539;25798:1;25783:12;:16;:36;;;;;25818:1;25803:12;:16;25783:36;25779:721;;;25836:23;25862:27;25877:12;25862;:27;:::i;:::-;25836:53;-1:-1:-1;25908:19:0;;25904:585;;25953:9;25948:526;25972:12;25968:1;:16;25948:526;;;26014:14;26031:7;26039:1;26031:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;26031:10:0;;-1:-1:-1;26068:20:0;;;;;:47;;-1:-1:-1;;;;;;26092:23:0;;26110:4;26092:23;;26068:47;:74;;;;-1:-1:-1;26129:13:0;;-1:-1:-1;;;;;26119:23:0;;;26129:13;;26119:23;;26068:74;26064:391;;;26234:12;26252:6;-1:-1:-1;;;;;26252:11:0;26271:15;26252:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26233:58;;;26323:7;26318:114;;26368:36;;;;;25705:2:1;25687:21;;;25744:2;25724:18;;;25717:30;-1:-1:-1;;;25778:2:1;25763:18;;25756:49;25837:2;25822:18;;25503:343;26368:36:0;;;;;;;;26318:114;26144:311;26064:391;-1:-1:-1;25986:3:0;;;;:::i;:::-;;;;25948:526;;;;25904:585;25821:679;25779:721;26525:40;;;5859:25:1;;;5915:2;5900:18;;5893:34;;;26525:40:0;;5832:18:1;26525:40:0;5685:248:1;2165:191:0;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;;26193:2:1;4213:53:0;;;26175:21:1;26232:1;26212:18;;;26205:29;-1:-1:-1;;;26250:18:1;;;26243:32;26292:18;;4213:53:0;25991: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;;26523:2:1;4374:36:0;;;26505:21:1;26562:1;26542:18;;;26535:29;-1:-1:-1;;;26580:18:1;;;26573:32;26622:18;;4374:36:0;26321: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;30711:183;16485:779;16580:13;;-1:-1:-1;;;;;16569:24:0;;;16580:13;;16569:24;;;;:52;;-1:-1:-1;;;;;;16597:24:0;;16616:4;16597:24;;16569:52;16565:692;;;16642:14;:36;;;;-1:-1:-1;;;;;;16661:17:0;;;;;;:8;:17;;;;;;;;16660:18;16642:36;16638:608;;;-1:-1:-1;;;;;;16699:17:0;;;;;:8;:17;;;;;:24;;-1:-1:-1;;16699:24:0;16719:4;16699:24;;;;;;16742:7;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;16742:21:0;;;;;;16485:779::o;16638:608::-;16790:14;16789:15;:36;;;;-1:-1:-1;;;;;;16808:17:0;;;;;;:8;:17;;;;;;;;16789:36;16785:461;;;-1:-1:-1;;;;;16846:17:0;;16866:5;16846:17;;;:8;:17;;;;;:25;;-1:-1:-1;;16846:25:0;;;16954:277;16978:7;:14;16974:18;;16954:277;;;17040:7;-1:-1:-1;;;;;17026:21:0;:7;17034:1;17026:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;17026:10:0;:21;17022:190;;17089:7;17097:14;;:18;;17114:1;;17097:18;:::i;:::-;17089:27;;;;;;;;:::i;:::-;;;;;;;;;;;17076:7;:10;;-1:-1:-1;;;;;17089:27:0;;;;17084:1;;17076:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;17076:40:0;;;;;-1:-1:-1;;;;;17076:40:0;;;;;;17143:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;17143:13:0;;;;;-1:-1:-1;;;;;;17143:13:0;;;;;;30845:41:::1;30711:183:::0;;:::o;17022:190::-;16994:3;;;;:::i;:::-;;;;16954:277;;16785:461;16485: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;1500:456::-;1577:6;1585;1593;1646:2;1634:9;1625:7;1621:23;1617:32;1614:52;;;1662:1;1659;1652:12;1614:52;1701:9;1688:23;1720:31;1745:5;1720:31;:::i;:::-;1770:5;-1:-1:-1;1827:2:1;1812:18;;1799:32;1840:33;1799:32;1840:33;:::i;:::-;1500:456;;1892:7;;-1:-1:-1;;;1946:2:1;1931:18;;;;1918:32;;1500:456::o;1961:180::-;2020:6;2073:2;2061:9;2052:7;2048:23;2044:32;2041:52;;;2089:1;2086;2079:12;2041:52;-1:-1:-1;2112:23:1;;1961:180;-1:-1:-1;1961:180:1:o;2543:461::-;2596:3;2634:5;2628:12;2661:6;2656:3;2649:19;2687:4;2716:2;2711:3;2707:12;2700:19;;2753:2;2746:5;2742:14;2774:1;2784:195;2798:6;2795:1;2792:13;2784:195;;;2863:13;;-1:-1:-1;;;;;2859:39:1;2847:52;;2919:12;;;;2954:15;;;;2895:1;2813:9;2784:195;;;-1:-1:-1;2995:3:1;;2543:461;-1:-1:-1;;;;;2543:461:1:o;3009:261::-;3188:2;3177:9;3170:21;3151:4;3208:56;3260:2;3249:9;3245:18;3237:6;3208:56;:::i;:::-;3200:64;3009:261;-1:-1:-1;;;3009:261:1:o;3508:247::-;3567:6;3620:2;3608:9;3599:7;3595:23;3591:32;3588:52;;;3636:1;3633;3626:12;3588:52;3675:9;3662:23;3694:31;3719:5;3694:31;:::i;3760:248::-;3828:6;3836;3889:2;3877:9;3868:7;3864:23;3860:32;3857:52;;;3905:1;3902;3895:12;3857:52;-1:-1:-1;;3928:23:1;;;3998:2;3983:18;;;3970:32;;-1:-1:-1;3760:248:1:o;4013:388::-;4081:6;4089;4142:2;4130:9;4121:7;4117:23;4113:32;4110:52;;;4158:1;4155;4148:12;4110:52;4197:9;4184:23;4216:31;4241:5;4216:31;:::i;:::-;4266:5;-1:-1:-1;4323:2:1;4308:18;;4295:32;4336:33;4295:32;4336:33;:::i;:::-;4388:7;4378:17;;;4013:388;;;;;:::o;4640:380::-;4719:1;4715:12;;;;4762;;;4783:61;;4837:4;4829:6;4825:17;4815:27;;4783:61;4890:2;4882:6;4879:14;4859:18;4856:38;4853:161;;4936:10;4931:3;4927:20;4924:1;4917:31;4971:4;4968:1;4961:15;4999:4;4996:1;4989:15;4853:161;;4640:380;;;:::o;6268:274::-;-1:-1:-1;;;;;6460:32:1;;;;6442:51;;6524:2;6509:18;;6502:34;6430:2;6415:18;;6268:274::o;6547:277::-;6614:6;6667:2;6655:9;6646:7;6642:23;6638:32;6635:52;;;6683:1;6680;6673:12;6635:52;6715:9;6709:16;6768:5;6761:13;6754:21;6747:5;6744:32;6734:60;;6790:1;6787;6780:12;7489:127;7550:10;7545:3;7541:20;7538:1;7531:31;7581:4;7578:1;7571:15;7605:4;7602:1;7595:15;7621:125;7686:9;;;7707:10;;;7704:36;;;7720:18;;:::i;8106:168::-;8179:9;;;8210;;8227:15;;;8221:22;;8207:37;8197:71;;8248:18;;:::i;8279:217::-;8319:1;8345;8335:132;;8389:10;8384:3;8380:20;8377:1;8370:31;8424:4;8421:1;8414:15;8452:4;8449:1;8442:15;8335:132;-1:-1:-1;8481:9:1;;8279:217::o;8501:128::-;8568:9;;;8589:11;;;8586:37;;;8603:18;;:::i;9627:251::-;9697:6;9750:2;9738:9;9729:7;9725:23;9721:32;9718:52;;;9766:1;9763;9756:12;9718:52;9798:9;9792:16;9817:31;9842:5;9817:31;:::i;10543:325::-;10745:2;10727:21;;;10784:1;10764:18;;;10757:29;-1:-1:-1;;;10817:2:1;10802:18;;10795:32;10859:2;10844:18;;10543:325::o;11203:184::-;11273:6;11326:2;11314:9;11305:7;11301:23;11297:32;11294:52;;;11342:1;11339;11332:12;11294:52;-1:-1:-1;11365:16:1;;11203:184;-1:-1:-1;11203:184:1:o;12052:375::-;-1:-1:-1;;;;;12310:15:1;;;12292:34;;12362:15;;;;12357:2;12342:18;;12335:43;12409:2;12394:18;;12387:34;;;;12242:2;12227:18;;12052:375::o;13527:306::-;13615:6;13623;13631;13684:2;13672:9;13663:7;13659:23;13655:32;13652:52;;;13700:1;13697;13690:12;13652:52;13729:9;13723:16;13713:26;;13779:2;13768:9;13764:18;13758:25;13748:35;;13823:2;13812:9;13808:18;13802:25;13792:35;;13527:306;;;;;:::o;13838:179::-;13873:3;13915:1;13897:16;13894:23;13891:120;;;13961:1;13958;13955;13940:23;-1:-1:-1;13998:1:1;13992:8;13987:3;13983:18;13891:120;13838:179;:::o;14154:346::-;14264:2;14245:13;;-1:-1:-1;;14241:27:1;14229:40;;14299:18;14284:34;;14320:22;;;14281:62;14278:185;;;14385:10;14380:3;14376:20;14373:1;14366:31;14420:4;14417:1;14410:15;14448:4;14445:1;14438:15;14278:185;14479:2;14472:22;-1:-1:-1;;14154:346:1:o;14505:671::-;14544:3;14586:4;14568:16;14565:26;14562:39;;;14505:671;:::o;14562:39::-;14628:2;14622:9;-1:-1:-1;;14693:16:1;14689:25;;14686:1;14622:9;14665:50;14744:4;14738:11;14768:16;14803:18;14874:2;14867:4;14859:6;14855:17;14852:25;14847:2;14839:6;14836:14;14833:45;14830:58;;;14881:5;;;;;14505:671;:::o;14830:58::-;14918:6;14912:4;14908:17;14897:28;;14954:3;14948:10;14981:2;14973:6;14970:14;14967:27;;;14987:5;;;;;;14505:671;:::o;14967:27::-;15071:2;15052:16;15046:4;15042:27;15038:36;15031:4;15022:6;15017:3;15013:16;15009:27;15006:69;15003:82;;;15078:5;;;;;;14505:671;:::o;15003:82::-;15094:57;15145:4;15136:6;15128;15124:19;15120:30;15114:4;15094:57;:::i;:::-;-1:-1:-1;15167:3:1;;14505:671;-1:-1:-1;;;;;14505:671:1:o;18895:607::-;-1:-1:-1;;;;;19254:15:1;;;19236:34;;19301:2;19286:18;;19279:34;;;;19344:2;19329:18;;19322:34;;;;19387:2;19372:18;;19365:34;;;;19436:15;;;19430:3;19415:19;;19408:44;19216:3;19468:19;;19461:35;;;;19185:3;19170:19;;18895:607::o;21239:127::-;21300:10;21295:3;21291:20;21288:1;21281:31;21331:4;21328:1;21321:15;21355:4;21352:1;21345:15;21371:574;21662:6;21651:9;21644:25;21705:6;21700:2;21689:9;21685:18;21678:34;21748:3;21743:2;21732:9;21728:18;21721:31;21625:4;21769:57;21821:3;21810:9;21806:19;21798:6;21769:57;:::i;:::-;-1:-1:-1;;;;;21862:32:1;;;;21857:2;21842:18;;21835:60;-1:-1:-1;21926:3:1;21911:19;21904:35;21761:65;21371:574;-1:-1:-1;;;21371:574:1:o;22297:459::-;22559:29;22554:3;22547:42;22529:3;22618:6;22612:13;22634:75;22702:6;22697:2;22692:3;22688:12;22681:4;22673:6;22669:17;22634:75;:::i;:::-;22729:16;;;;22747:2;22725:25;;22297:459;-1:-1:-1;;22297:459:1:o;25851:135::-;25890:3;25911:17;;;25908:43;;25931:18;;:::i;:::-;-1:-1:-1;25978:1:1;25967:13;;25851:135::o;26651:127::-;26712:10;26707:3;26703:20;26700:1;26693:31;26743:4;26740:1;26733:15;26767:4;26764:1;26757:15
Swarm Source
ipfs://576b7eb94c4c881804a73f6f8e6b06b9e9f8c6a75ccc1d3cb95676af804f5a8c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.