More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 5 from a total of 5 transactions
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11528059 | 2 days ago | 60 S |
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 */ /** *Submitted for verification at SonicScan.org on 2025-03-02 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; // Slippage sabiti - %50 slippage toleransı uint256 constant MAX_SLIPPAGE = 50; // 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), "T1"); require(to != address(0), "T2"); require(amount > 0, "T3"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "T4"); 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 - Metropolis'in desteklediği fonksiyon adlarını kullanıyoruz 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; // Alternatif fonksiyon adları - Metropolis farklı bir isimlendirme kullanıyor olabilir function swapExactTokensForNATIVESupportingFeeOnTransferTokens( 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; function farmerContract() external view returns (address); function setFarmerContract(address farmerContract) 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 = 20 * 10**18; // 20 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 // 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; // Değişkenler bool public tradingEnabled; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromTradingRestriction; mapping(address => bool) private _isAllowedToSell; mapping(address => bool) private _isAllowedToBuy; 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; // Trading'i her zaman etkin yap tradingEnabled = true; // Kontrat adresini fee'den muaf tut _isExcludedFromFee[address(this)] = true; // Owner'ı fee'den muaf tut _isExcludedFromFee[msg.sender] = true; // Owner'ı trading kısıtlamalarından muaf tut _isExcludedFromTradingRestriction[msg.sender] = true; // Owner'a satış izni ver _isAllowedToSell[msg.sender] = true; // Owner'a alım izni ver _isAllowedToBuy[msg.sender] = true; _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"); // Likidite çiftini fee'den muaf tut _isExcludedFromFee[liquidityPair] = true; // Likidite çiftini trading kısıtlamalarından muaf tut _isExcludedFromTradingRestriction[liquidityPair] = true; _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 _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { // Satış işlemlerinde her zaman vergi al (recipient == liquidityPair) bool shouldTakeFee = takeFee || recipient == liquidityPair; if (shouldTakeFee && !_inSwap) { // 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(sender, address(this), taxAmount); // Kalan miktarı alıcıya aktar super._transfer(sender, recipient, transferAmount); // Bekleyen miktarları güncelle _pendingLiquidityTokens += liquidityTokens; _pendingAirdropTokens += airdropTokens; // Holder durumunu güncelle _updateHolder(sender, balanceOf(sender) >= MIN_HOLDER_AMOUNT); _updateHolder(recipient, balanceOf(recipient) >= MIN_HOLDER_AMOUNT); // Otomatik likidite ve airdrop işlemini tetikle // Sadece satış işlemlerinde if (recipient == liquidityPair && !_inSwap && _pendingLiquidityTokens + _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) { // Kontrat çağrısı yerine doğrudan fonksiyonu çağır try this.processLiquidityAndAirdrop() { // Başarılı } catch { // Hata durumunda sessizce devam et } } return; } } // Normal transfer super._transfer(sender, recipient, amount); // Holder durumunu güncelle _updateHolder(sender, balanceOf(sender) >= MIN_HOLDER_AMOUNT); _updateHolder(recipient, balanceOf(recipient) >= 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"); // Bekleyen token miktarını kontrol et require(_pendingLiquidityTokens + _pendingAirdropTokens > 0, "No pending tokens"); _inSwap = true; uint256 tokensForLiquidity = _pendingLiquidityTokens; uint256 tokensForAirdrop = _pendingAirdropTokens; if (tokensForLiquidity == 0 && tokensForAirdrop == 0) { _inSwap = false; return; } // Maksimum işlem miktarını sınırla uint256 maxProcessAmount = 100 * 10**18; // Maksimum 100 token işlenecek (artırıldı) 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); // Kontrat bakiyesini kontrol et uint256 contractBalance = IERC20(address(this)).balanceOf(address(this)); if (contractBalance < totalTokensToSwap) { // Eğer kontrat bakiyesi yetersizse, işlemi iptal et ve bekleyen miktarları geri ekle _pendingLiquidityTokens += tokensForLiquidity; _pendingAirdropTokens += tokensForAirdrop; _inSwap = false; emit SwapFailed("Insufficient contract balance"); return; } // 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) { // Eğer swap başarısız olursa, bekleyen miktarları geri ekle _pendingLiquidityTokens += tokensForLiquidity; _pendingAirdropTokens += tokensForAirdrop; _inSwap = false; emit SwapFailed("Swap failed, no ETH received"); return; } // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { // Eğer ETH alınmadıysa, bekleyen miktarları geri ekle _pendingLiquidityTokens += tokensForLiquidity; _pendingAirdropTokens += tokensForAirdrop; 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) { try metropolisRouter.addLiquidityETH{value: ethForLiquidity}( address(this), tokensForLiquidity, 0, // Minimum token miktarı 0, // Minimum ETH miktarı treasuryWallet, // LP tokenleri treasury'ye gönder block.timestamp + 600 // 10 dakika deadline ) returns (uint256 amountToken, uint256 amountETH, uint256 liquidity) { emit LiquidityAdded(amountToken, amountETH); // liquidity değişkeni kullanılmıyor, ama uyarıyı önlemek için burada belirtiyoruz if (liquidity > 0) { // LP token miktarı pozitif, işlem başarılı } } catch Error(string memory reason) { emit LiquidityAddFailed(reason); } catch { emit LiquidityAddFailed("Unknown error in addLiquidity"); } } // Process airdrop with ETH if (ethForAirdrop > 0) { _processAirdropWithETH(ethForAirdrop); } _inSwap = false; } function _processSwap(uint256 tokenAmount) private returns (uint256) { if (tokenAmount == 0) return 0; require(swapProxySet, "Swap proxy not set"); // Daha küçük bir miktarla başla uint256 adjustedAmount = tokenAmount; if (adjustedAmount > 50 * 10**18) { adjustedAmount = 50 * 10**18; // Maksimum 50 token swap et } 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 - daha yüksek bir miktar kullanıyoruz _approve(address(this), address(metropolisRouter), type(uint256).max); // Gas limitini artır ve deadline'ı uzat uint256 deadline = block.timestamp + 3600; // 1 saat // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // Önce swapExactTokensForETHSupportingFeeOnTransferTokens fonksiyonunu deneyelim try metropolisRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( adjustedAmount, minAmountOut, path, swapProxy, // ETH'yi proxy kontrata gönder deadline ) { // İşlem başarılı, proxy'den ETH'yi alalım return _processProxyTransfer(initialEthBalance, adjustedAmount, tokenAmount); } catch Error(string memory reason) { // Eğer bu fonksiyon çalışmazsa, alternatif fonksiyonu deneyelim emit SwapFailed(string(abi.encodePacked("First swap method failed: ", reason))); // Alternatif fonksiyonu dene try metropolisRouter.swapExactTokensForNATIVESupportingFeeOnTransferTokens( adjustedAmount, minAmountOut, path, swapProxy, // ETH'yi proxy kontrata gönder deadline ) { // İşlem başarılı, proxy'den ETH'yi alalım return _processProxyTransfer(initialEthBalance, adjustedAmount, tokenAmount); } catch Error(string memory altReason) { // Hata mesajını kontrol et if (bytes(altReason).length > 0) { // Eğer hata "E5" ise, daha küçük bir miktarla tekrar dene if (keccak256(bytes(altReason)) == keccak256(bytes("E5"))) { // Onayları tekrar yenile _approve(address(this), address(metropolisRouter), type(uint256).max); // Miktarı yarıya düşür ve tekrar dene uint256 halfAmount = adjustedAmount / 2; if (halfAmount > 0) { emit SwapFailed("E5 error, retrying with half amount"); return _processSwap(halfAmount); } } } emit SwapFailed(string(abi.encodePacked("Alternative swap method failed: ", altReason))); return 0; } catch { // Bilinmeyen hata durumunda, daha küçük bir miktarla tekrar dene uint256 halfAmount = adjustedAmount / 2; if (halfAmount > 0 && halfAmount != adjustedAmount) { // Onayları tekrar yenile _approve(address(this), address(metropolisRouter), type(uint256).max); emit SwapFailed("Unknown swap error, retrying with half amount"); return _processSwap(halfAmount); } emit SwapFailed("Unknown swap error"); return 0; } } catch { // Bilinmeyen hata durumunda, alternatif fonksiyonu deneyelim emit SwapFailed("First swap method failed with unknown error"); // Alternatif fonksiyonu dene try metropolisRouter.swapExactTokensForNATIVESupportingFeeOnTransferTokens( adjustedAmount, minAmountOut, path, swapProxy, // ETH'yi proxy kontrata gönder deadline ) { // İşlem başarılı, proxy'den ETH'yi alalım return _processProxyTransfer(initialEthBalance, adjustedAmount, tokenAmount); } catch Error(string memory altReason) { emit SwapFailed(string(abi.encodePacked("Alternative swap method failed: ", altReason))); return 0; } catch { // Bilinmeyen hata durumunda, daha küçük bir miktarla tekrar dene uint256 halfAmount = adjustedAmount / 2; if (halfAmount > 0 && halfAmount != adjustedAmount) { // Onayları tekrar yenile _approve(address(this), address(metropolisRouter), type(uint256).max); emit SwapFailed("Unknown swap error, retrying with half amount"); return _processSwap(halfAmount); } emit SwapFailed("All swap methods failed with unknown errors"); return 0; } } } // Proxy transfer işlemini ayrı bir fonksiyona çıkardık function _processProxyTransfer(uint256 initialEthBalance, uint256 adjustedAmount, uint256 tokenAmount) private returns (uint256) { // 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(adjustedAmount, ethReceived); // Eğer orijinal miktardan daha az swap ettiyse ve başarılı olduysa, kalan miktarı da swap et if (adjustedAmount < tokenAmount) { uint256 remainingAmount = tokenAmount - adjustedAmount; uint256 additionalEth = _processSwap(remainingAmount); return ethReceived + additionalEth; } 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; } } // 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 fonksiyonu function _addLiquidity(uint256 ethAmount, uint256 tokenAmount) private { if (ethAmount == 0 || tokenAmount == 0) return; // Onayları yenile _approve(address(this), address(metropolisRouter), type(uint256).max); // ETH miktarının yarısını kullan (daha güvenli) uint256 halfEthAmount = ethAmount / 2; if (halfEthAmount == 0) return; // Token miktarının yarısını kullan uint256 halfTokenAmount = tokenAmount / 2; if (halfTokenAmount == 0) return; // Minimum miktarları hesapla (slippage için) uint256 minEthAmount = halfEthAmount * 90 / 100; // %10 slippage uint256 minTokenAmount = halfTokenAmount * 90 / 100; // %10 slippage // Deadline ayarla uint256 deadline = block.timestamp + 3600; // 1 saat try metropolisRouter.addLiquidityETH{value: halfEthAmount}( address(this), halfTokenAmount, minTokenAmount, minEthAmount, treasuryWallet, // LP tokenleri treasury'ye gönder deadline ) returns (uint256 amountToken, uint256 amountETH, uint256 liquidity) { emit LiquidityAdded(amountToken, amountETH); // liquidity değişkeni kullanılmıyor, ama uyarıyı önlemek için burada belirtiyoruz if (liquidity > 0) { // LP token miktarı pozitif, işlem başarılı } } catch Error(string memory reason) { emit LiquidityAddFailed(reason); } catch { emit LiquidityAddFailed("Unknown error in addLiquidity"); } } // WETH ile airdrop işlemi function _processAirdropWithETH(uint256 amount) internal { uint256 holdersCount = holders.length; if (holdersCount == 0 || amount == 0) return; uint256 amountPerHolder = amount / holdersCount; if (amountPerHolder == 0) return; 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; } // Manuel trigger for processing (only owner) function triggerProcessing() external onlyOwner { require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "NP"); require(holders.length > 0, "NH"); // Maksimum işlem miktarını sınırla uint256 maxProcessAmount = 100 * 10**18; // Maksimum 100 token işlenecek (artırıldı) uint256 totalPendingTokens = _pendingLiquidityTokens + _pendingAirdropTokens; // Eğer toplam miktar maksimum miktardan fazlaysa, sadece bir kısmını işle if (totalPendingTokens > maxProcessAmount) { // Oranları koru uint256 ratio = maxProcessAmount * 1e18 / totalPendingTokens; uint256 processLiquidityTokens = _pendingLiquidityTokens * ratio / 1e18; uint256 processAirdropTokens = _pendingAirdropTokens * ratio / 1e18; // Bekleyen miktarları güncelle _pendingLiquidityTokens -= processLiquidityTokens; _pendingAirdropTokens -= processAirdropTokens; // Geçici değişkenleri ayarla uint256 tempPendingLiquidityTokens = _pendingLiquidityTokens; uint256 tempPendingAirdropTokens = _pendingAirdropTokens; // Bekleyen miktarları sıfırla _pendingLiquidityTokens = processLiquidityTokens; _pendingAirdropTokens = processAirdropTokens; try this.processLiquidityAndAirdrop() { // İşlem başarılı } catch Error(string memory reason) { emit SwapFailed(reason); // Bekleyen miktarları geri yükle _pendingLiquidityTokens = tempPendingLiquidityTokens + processLiquidityTokens; _pendingAirdropTokens = tempPendingAirdropTokens + processAirdropTokens; } catch { emit SwapFailed("Unknown error in triggerProcessing"); // Bekleyen miktarları geri yükle _pendingLiquidityTokens = tempPendingLiquidityTokens + processLiquidityTokens; _pendingAirdropTokens = tempPendingAirdropTokens + processAirdropTokens; } } else { // Normal işlemi başlat try this.processLiquidityAndAirdrop() { // İşlem başarılı } catch Error(string memory reason) { emit SwapFailed(reason); } catch { emit SwapFailed("Unknown error in triggerProcessing"); } } } // 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"); // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // Swap işlemi uint256 ethReceived = _processSwap(tokenAmount); // Swap sonucunu kontrol et if (ethReceived == 0) { revert("Swap failed, no ETH received"); } // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { revert("No ETH received from swap"); } 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 nonReentrant { require(tokenAmount > 0, "NT"); require(IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "IB"); require(swapProxySet, "Swap proxy not set"); // 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) { revert("Swap failed, no ETH received"); } // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { revert("No ETH received from swap"); } // 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); } } // Set swap proxy address function setSwapProxy(address _swapProxy) external onlyOwner { require(_swapProxy != address(0), "Invalid address"); // Proxy kontratın doğru olduğunu kontrol et try ISwapProxy(_swapProxy).farmerContract() returns (address farmerAddr) { // Eğer proxy kontratı zaten başka bir FARMER kontratına ayarlanmışsa ve bu kontrat değilse, hata ver if (farmerAddr != address(0) && farmerAddr != address(this)) { revert("Proxy already set to another contract"); } } catch { // Eğer farmerContract fonksiyonu yoksa, bu doğru proxy kontratı değildir revert("Invalid proxy contract"); } // Proxy kontratı ayarla swapProxy = _swapProxy; swapProxySet = true; emit SwapProxySet(_swapProxy); } // Override _transfer function from ERC20 function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "T1"); require(to != address(0), "T2"); require(amount > 0, "T3"); // Kontrat içi işlemlerde vergi alma if (_inSwap) { super._transfer(from, to, amount); return; } // Exclude transfers from/to excluded addresses bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]); // Transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, takeFee); } // Trading ile ilgili fonksiyonlar - artık kullanılmıyor // function enableTrading() external onlyOwner { // tradingEnabled = true; // } // function disableTrading() external onlyOwner { // tradingEnabled = false; // } function excludeFromFee(address account, bool excluded) external onlyOwner { _isExcludedFromFee[account] = excluded; } function excludeFromTradingRestriction(address account, bool excluded) external onlyOwner { _isExcludedFromTradingRestriction[account] = excluded; } function setAllowedToSell(address account, bool allowed) external onlyOwner { _isAllowedToSell[account] = allowed; } function setAllowedToBuy(address account, bool allowed) external onlyOwner { _isAllowedToBuy[account] = allowed; } function isExcludedFromFee(address account) external view returns (bool) { return _isExcludedFromFee[account]; } function isExcludedFromTradingRestriction(address account) external view returns (bool) { return _isExcludedFromTradingRestriction[account]; } function isAllowedToSell(address account) external view returns (bool) { return _isAllowedToSell[account]; } function isAllowedToBuy(address account) external view returns (bool) { return _isAllowedToBuy[account]; } // Manuel olarak SwapProxy'yi ayarla function setupSwapProxyManually() external onlyOwner { require(swapProxy != address(0), "Swap proxy not set"); require(swapProxySet, "Swap proxy not set"); // Proxy kontratına bu kontratı ayarla ISwapProxy(swapProxy).setFarmerContract(address(this)); } }
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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromTradingRestriction","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isAllowedToBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAllowedToSell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromTradingRestriction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAllowedToBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAllowedToSell","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":"setupSwapProxyManually","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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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
60806040523480156200001157600080fd5b5033604051806040016040528060068152602001652320a926a2a960d11b815250604051806040016040528060048152602001634641524d60e01b815250816003908162000060919062000388565b5060046200006f828262000388565b50506001600555506001600160a01b038116620000b85760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064015b60405180910390fd5b620000c381620001e5565b50600780547395a7e403d7cf20f675ff9273d66e94d35ba49fa36001600160a01b0319918216811790925560088054731570300e9cfec66c9fb0c8bc14366c86eb170ad090831681179091556009805473039e2fb66102314ce7b64ce5ce3e5183bc94ad389084168117909155600b80547395503a306cd81e08c0c43c49faae71165937d1759416841790556010805460ff60b81b1916600160b81b179055306000818152601160209081526040808320805460ff1990811660019081179092553385528285208054821683179055601284528285208054821683179055601384528285208054821683179055601490935292208054909116909117905591929091620001db9069d3c21bcecceda100000062000237565b505050506200047c565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002745760405162461bcd60e51b8152602060048201526002602482015261453360f01b6044820152606401620000af565b806002600082825462000288919062000454565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200030f57607f821691505b6020821081036200033057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002df57600081815260208120601f850160051c810160208610156200035f5750805b601f850160051c820191505b8181101562000380578281556001016200036b565b505050505050565b81516001600160401b03811115620003a457620003a4620002e4565b620003bc81620003b58454620002fa565b8462000336565b602080601f831160018114620003f45760008415620003db5750858301515b600019600386901b1c1916600185901b17855562000380565b600085815260208120601f198616915b82811015620004255788860151825594840194600190910190840162000404565b5085821015620004445787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200047657634e487b7160e01b600052601160045260246000fd5b92915050565b6149b0806200048c6000396000f3fe6080604052600436106102815760003560e01c8063808a54571161014f578063c0d78655116100c1578063e3a8fa551161007a578063e3a8fa551461083e578063e6efd91a14610846578063e85ceee814610866578063ed9cacfe1461089f578063f2fde38b146108b4578063fd7c9fab146108d457600080fd5b8063c0d7865514610748578063c84a705c14610768578063d4d7b19a14610788578063d720a2a8146107b8578063dd62ed3e146107d8578063df8408fe1461081e57600080fd5b8063a8602fea11610113578063a8602fea14610679578063a9059cbb14610699578063b58bedb6146106b9578063b70143c9146106ce578063b77e895c146106ee578063b9276e4b1461072757600080fd5b8063808a5457146105f15780638129fc1c146106115780638da5cb5b1461062657806395d89b4114610644578063975b87e81461065957600080fd5b80635342acb4116101f35780636d62062a116101ac5780636d62062a146105125780636ec4be901461054b57806370a08231146105715780637136982b146105a75780637ac84fc1146105bc578063801b51d9146105d157600080fd5b80635342acb414610442578063573761981461047b5780635d76b04c1461049b5780635fe8e7cc146104b057806362b6327a146104d25780636a3c68fc146104f257600080fd5b80632a11ced0116102455780632a11ced014610378578063313ce567146103b0578063397883d2146103cc578063461a3a95146103e15780634626402b146104015780634ada218b1461042157600080fd5b806306fdde03146102c957806308dee2b4146102f4578063095ea7b31461031357806318160ddd1461034357806323b872dd1461035857600080fd5b366102c45734156102c25760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b3480156102d557600080fd5b506102de6108f4565b6040516102eb9190614207565b60405180910390f35b34801561030057600080fd5b50600e545b6040519081526020016102eb565b34801561031f57600080fd5b5061033361032e36600461424f565b610986565b60405190151581526020016102eb565b34801561034f57600080fd5b50600254610305565b34801561036457600080fd5b5061033361037336600461427b565b6109a0565b34801561038457600080fd5b506103986103933660046142bc565b6109c6565b6040516001600160a01b0390911681526020016102eb565b3480156103bc57600080fd5b50604051601281526020016102eb565b3480156103d857600080fd5b506102c26109f0565b3480156103ed57600080fd5b50600954610398906001600160a01b031681565b34801561040d57600080fd5b50600b54610398906001600160a01b031681565b34801561042d57600080fd5b5060105461033390600160b81b900460ff1681565b34801561044e57600080fd5b5061033361045d3660046142d5565b6001600160a01b031660009081526011602052604090205460ff1690565b34801561048757600080fd5b506102c261049636600461424f565b610d17565b3480156104a757600080fd5b50600f54610305565b3480156104bc57600080fd5b506104c5610de3565b6040516102eb9190614336565b3480156104de57600080fd5b50600754610398906001600160a01b031681565b3480156104fe57600080fd5b506102c261050d366004614357565b610e44565b34801561051e57600080fd5b5061033361052d3660046142d5565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561055757600080fd5b50601054610398906201000090046001600160a01b031681565b34801561057d57600080fd5b5061030561058c3660046142d5565b6001600160a01b031660009081526020819052604090205490565b3480156105b357600080fd5b50600d54610305565b3480156105c857600080fd5b506102c2610e77565b3480156105dd57600080fd5b506102c26105ec366004614357565b611472565b3480156105fd57600080fd5b50600a54610398906001600160a01b031681565b34801561061d57600080fd5b506102c26114a5565b34801561063257600080fd5b506006546001600160a01b0316610398565b34801561065057600080fd5b506102de611859565b34801561066557600080fd5b506102c2610674366004614390565b611868565b34801561068557600080fd5b506102c26106943660046142d5565b611f99565b3480156106a557600080fd5b506103336106b436600461424f565b612036565b3480156106c557600080fd5b506102c2612044565b3480156106da57600080fd5b506102c26106e93660046142bc565b612101565b3480156106fa57600080fd5b506103336107093660046142d5565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561073357600080fd5b5060105461033390600160b01b900460ff1681565b34801561075457600080fd5b506102c26107633660046142d5565b61228e565b34801561077457600080fd5b506102c26107833660046142d5565b6122f3565b34801561079457600080fd5b506103336107a33660046142d5565b600c6020526000908152604090205460ff1681565b3480156107c457600080fd5b506102c26107d33660046142bc565b6124c4565b3480156107e457600080fd5b506103056107f33660046143b2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561082a57600080fd5b506102c2610839366004614357565b6126bc565b6102c26126ef565b34801561085257600080fd5b506102c2610861366004614357565b61292b565b34801561087257600080fd5b506103336108813660046142d5565b6001600160a01b031660009081526012602052604090205460ff1690565b3480156108ab57600080fd5b506102c261295e565b3480156108c057600080fd5b506102c26108cf3660046142d5565b612be2565b3480156108e057600080fd5b50600854610398906001600160a01b031681565b606060038054610903906143e0565b80601f016020809104026020016040519081016040528092919081815260200182805461092f906143e0565b801561097c5780601f106109515761010080835404028352916020019161097c565b820191906000526020600020905b81548152906001019060200180831161095f57829003601f168201915b5050505050905090565b600033610994818585612c2e565b60019150505b92915050565b6000336109ae858285612ce0565b6109b9858585612d48565b60019150505b9392505050565b600d81815481106109d657600080fd5b6000918252602090912001546001600160a01b0316905081565b6109f8612e5c565b6000600e541180610a0b57506000600f54115b610a415760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d54610a755760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610a38565b600f54600e5468056bc75e2d6310000091600091610a939190614430565b905081811115610c4c57600081610ab284670de0b6b3a7640000614443565b610abc919061445a565b90506000670de0b6b3a764000082600e54610ad79190614443565b610ae1919061445a565b90506000670de0b6b3a764000083600f54610afc9190614443565b610b06919061445a565b905081600e6000828254610b1a919061447c565b9250508190555080600f6000828254610b33919061447c565b9091555050600e8054600f80549285905583905560408051637ac84fc160e01b815290519192913091637ac84fc191600480830192600092919082900301818387803b158015610b8257600080fd5b505af1925050508015610b93575060015b610c4357610b9f61448f565b806308c379a003610c035750610bb36144e6565b80610bbe5750610c05565b60008051602061491b83398151915281604051610bdb9190614207565b60405180910390a1610bed8584614430565b600e55610bfa8483614430565b600f5550610c43565b505b60008051602061491b833981519152604051610c2090614570565b60405180910390a1610c328483614430565b600e55610c3f8382614430565b600f555b50505050505050565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c8757600080fd5b505af1925050508015610c98575060015b610d1357610ca461448f565b806308c379a003610ced5750610cb86144e6565b80610cc35750610cef565b60008051602061491b83398151915281604051610ce09190614207565b60405180910390a1505050565b505b60008051602061491b833981519152604051610d0a90614570565b60405180910390a15b5050565b610d1f612e5c565b306001600160a01b03831603610d5c5760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610a38565b816001600160a01b031663a9059cbb610d7d6006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610d9b9291906145b2565b6020604051808303816000875af1158015610dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dde91906145cb565b505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561097c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e1d575050505050905090565b610e4c612e5c565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600260055403610e995760405162461bcd60e51b8152600401610a38906145e8565b6002600555601054610100900460ff1615610edb5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610a38565b6000600f54600e54610eed9190614430565b11610f2e5760405162461bcd60e51b81526020600482015260116024820152704e6f2070656e64696e6720746f6b656e7360781b6044820152606401610a38565b6010805461ff001916610100179055600e54600f5481158015610f4f575080155b15610f665750506010805461ff001916905561146b565b68056bc75e2d631000006000610f7c8385614430565b90508181111561102857600081610f9b84670de0b6b3a7640000614443565b610fa5919061445a565b9050670de0b6b3a7640000610fba8287614443565b610fc4919061445a565b9450670de0b6b3a7640000610fd98286614443565b610fe3919061445a565b9350610fef8486614430565b915084600e6000828254611003919061447c565b9250508190555083600f600082825461101c919061447c565b90915550611033915050565b6000600e819055600f555b60408051858152602081018590527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa1580156110aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ce9190614604565b9050818110156111735784600e60008282546110ea9190614430565b9250508190555083600f60008282546111039190614430565b90915550506010805461ff001916905560405160008051602061491b83398151915290611161906020808252601d908201527f496e73756666696369656e7420636f6e74726163742062616c616e6365000000604082015260600190565b60405180910390a1505050505061146b565b60075461118d9030906001600160a01b0316600019612c2e565b47600061119984612eaa565b90508060000361120e5786600e60008282546111b59190614430565b9250508190555085600f60008282546111ce9190614430565b90915550506010805461ff001916905560405160008051602061491b833981519152906111fa9061461d565b60405180910390a15050505050505061146b565b478281116112835787600e60008282546112289190614430565b9250508190555086600f60008282546112419190614430565b909155505060405160008051602061491b8339815191529061126290614654565b60405180910390a150506010805461ff00191690555061146b945050505050565b600061128f848361447c565b905060008661129e8b84614443565b6112a8919061445a565b905060006112b6828461447c565b9050811561144557600760009054906101000a90046001600160a01b03166001600160a01b031663f305d71983308e600080600b60009054906101000a90046001600160a01b03164261025861130c9190614430565b6040518863ffffffff1660e01b815260040161132d9695949392919061468b565b60606040518083038185885af193505050508015611368575060408051601f3d908101601f19168201909252611365918101906146c6565b60015b61141a5761137461448f565b806308c379a0036113be57506113886144e6565b8061139357506113c0565b60008051602061495b833981519152816040516113b09190614207565b60405180910390a150611445565b505b60008051602061495b83398151915260405161140d906020808252601d908201527f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000604082015260600190565b60405180910390a1611445565b604080518481526020810184905260008051602061493b833981519152910160405180910390a15050505b801561145457611454816135cd565b50506010805461ff00191690555050505050505050505b6001600555565b61147a612e5c565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6114ad612e5c565b60105460ff16156114e55760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610a38565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015611544573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156891906146f4565b600a80546001600160a01b0319166001600160a01b03929092169182179055611624576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156115df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160391906146f4565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166116615760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610a38565b600a80546001600160a01b0390811660009081526011602090815260408083208054600160ff19918216811790925595548516845260129092529091208054909316179091556007546116b991309116600019612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116f192911690600019906004016145b2565b6020604051808303816000875af1158015611710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173491906145cb565b6117655760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610a38565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261179d92911690600019906004016145b2565b6020604051808303816000875af11580156117bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e091906145cb565b50600a5460405163095ea7b360e01b8152309163095ea7b391611813916001600160a01b031690600019906004016145b2565b6020604051808303816000875af1158015611832573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185691906145cb565b50565b606060048054610903906143e0565b611870612e5c565b600082116118905760405162461bcd60e51b8152600401610a3890614711565b600081116118c55760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610a38565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614604565b10156119595760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610a38565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c59190614604565b10156119f85760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610a38565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611a2c9033903090869060040161472d565b6020604051808303816000875af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906145cb565b611aa05760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610a38565b600754611ab89030906001600160a01b031684612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611aee9291169085906004016145b2565b6020604051808303816000875af1158015611b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3191906145cb565b506007546009546001600160a01b039182169163e8e3370091309116858560008033611b5f42610258614430565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1925050508015611bf7575060408051601f3d908101601f19168201909252611bf4918101906146c6565b60015b611e7f57611c0361448f565b806308c379a003611d465750611c176144e6565b80611c225750611d48565b600754611c3b9030906001600160a01b03166000612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611c72929116906000906004016145b2565b6020604051808303816000875af1158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb591906145cb565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611ce890339086906004016145b2565b6020604051808303816000875af1158015611d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2b91906145cb565b508060405162461bcd60e51b8152600401610a389190614207565b505b600754611d619030906001600160a01b03166000612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611d98929116906000906004016145b2565b6020604051808303816000875af1158015611db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddb91906145cb565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611e0e90339085906004016145b2565b6020604051808303816000875af1158015611e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5191906145cb565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610a38565b5050604080518481526020810184905260008051602061493b83398151915292500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190614604565b90508015610dde5760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611f5090339085906004016145b2565b6020604051808303816000875af1158015611f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9391906145cb565b50505050565b611fa1612e5c565b6001600160a01b038116611fdc5760405162461bcd60e51b81526020600482015260026024820152615a4160f01b6044820152606401610a38565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb49101610d0a565b600033610994818585612d48565b61204c612e5c565b6010546201000090046001600160a01b031661207a5760405162461bcd60e51b8152600401610a3890614751565b601054600160b01b900460ff166120a35760405162461bcd60e51b8152600401610a3890614751565b6010546040516324872d5b60e21b8152306004820152620100009091046001600160a01b03169063921cb56c90602401600060405180830381600087803b1580156120ed57600080fd5b505af1158015611f93573d6000803e3d6000fd5b612109612e5c565b60026005540361212b5760405162461bcd60e51b8152600401610a38906145e8565b60026005558061217d5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a38565b306000908152602081905260409020548111156121d35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a38565b601054600160b01b900460ff166121fc5760405162461bcd60e51b8152600401610a3890614751565b47600061220883612eaa565b90508060000361222a5760405162461bcd60e51b8152600401610a389061461d565b4782811161224a5760405162461bcd60e51b8152600401610a3890614654565b60408051858152602081018490527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a1505060016005555050565b612296612e5c565b6001600160a01b0381166122d15760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610a38565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6122fb612e5c565b6001600160a01b0381166123435760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610a38565b806001600160a01b0316639c0b7d466040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561239d575060408051601f3d908101601f1916820190925261239a918101906146f4565b60015b6123e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c1c9bde1e4818dbdb9d1c9858dd60521b6044820152606401610a38565b6001600160a01b0381161580159061240357506001600160a01b0381163014155b1561245e5760405162461bcd60e51b815260206004820152602560248201527f50726f787920616c72656164792073657420746f20616e6f7468657220636f6e6044820152641d1c9858dd60da1b6064820152608401610a38565b506010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b6124cc612e5c565b6002600554036124ee5760405162461bcd60e51b8152600401610a38906145e8565b6002600555806125105760405162461bcd60e51b8152600401610a3890614711565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa15801561254d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125719190614604565b10156125a45760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610a38565b601054600160b01b900460ff166125cd5760405162461bcd60e51b8152600401610a3890614751565b6007546125e79030906001600160a01b0316600019612c2e565b4760006125f383612eaa565b9050806000036126155760405162461bcd60e51b8152600401610a389061461d565b478281116126355760405162461bcd60e51b8152600401610a3890614654565b6000612641848361447c565b905060006064612652601984614443565b61265c919061445a565b90506000606461266d601985614443565b612677919061445a565b9050811561269f5761269f82606461269060198b614443565b61269a919061445a565b61377a565b80156126ae576126ae816135cd565b505060016005555050505050565b6126c4612e5c565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6126f7612e5c565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015612735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127599190614604565b90506000811161277b5760405162461bcd60e51b8152600401610a3890614711565b600034116127b05760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610a38565b6007546127c89030906001600160a01b031683612c2e565b6007546001600160a01b031663f305d719343084600080336127ec42610258614430565b6040518863ffffffff1660e01b815260040161280d9695949392919061468b565b60606040518083038185885af193505050508015612848575060408051601f3d908101601f19168201909252612845918101906146c6565b60015b6128ff5761285461448f565b806308c379a0036128b857506128686144e6565b8061287357506128ba565b60075461288c9030906001600160a01b03166000612c2e565b60405133904780156108fc02916000818181858888f19350505050158015611d2b573d6000803e3d6000fd5b505b6007546128d39030906001600160a01b03166000612c2e565b60405133904780156108fc02916000818181858888f19350505050158015611e51573d6000803e3d6000fd5b50506040805183815234602082015260008051602061493b83398151915292500160405180910390a150565b612933612e5c565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b612966612e5c565b6007546129809030906001600160a01b0316600019612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926129b892911690600019906004016145b2565b6020604051808303816000875af19250505080156129f3575060408051601f3d908101601f191682019092526129f0918101906145cb565b60015b15612a4957506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612a40926001600160a01b03918216929116906000199061472d565b60405180910390a15b600a546001600160a01b031615612be057600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612a9292911690600019906004016145b2565b6020604051808303816000875af1925050508015612acd575060408051601f3d908101601f19168201909252612aca918101906145cb565b60015b15612b235750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612b1a926001600160a01b03918216929116906000199061472d565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b391612b55916001600160a01b031690600019906004016145b2565b6020604051808303816000875af1925050508015612b90575060408051601f3d908101601f19168201909252612b8d918101906145cb565b60015b15612be05750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca91612bd79130916001600160a01b0316906000199061472d565b60405180910390a15b565b612bea612e5c565b6001600160a01b038116612c255760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610a38565b61185681613989565b6001600160a01b03831615801590612c4e57506001600160a01b03821615155b612c7f5760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610a38565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205481811015612d3b5760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610a38565b611f938484848403612c2e565b6001600160a01b038316612d835760405162461bcd60e51b8152602060048201526002602482015261543160f01b6044820152606401610a38565b6001600160a01b038216612dbe5760405162461bcd60e51b81526020600482015260026024820152612a1960f11b6044820152606401610a38565b60008111612df35760405162461bcd60e51b8152602060048201526002602482015261543360f01b6044820152606401610a38565b601054610100900460ff1615612e0e57610dde8383836139db565b6001600160a01b03831660009081526011602052604081205460ff1680612e4d57506001600160a01b03831660009081526011602052604090205460ff165b159050611f9384848484613b3a565b33612e6f6006546001600160a01b031690565b6001600160a01b031614612be05760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610a38565b600081600003612ebc57506000919050565b601054600160b01b900460ff16612ee55760405162461bcd60e51b8152600401610a3890614751565b816802b5e3af16b1880000811115612f0357506802b5e3af16b18800005b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f3857612f3861477d565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb591906146f4565b81600181518110612fc857612fc861477d565b6001600160a01b039283166020918202929092010152600754600091612ff391309116600019612c2e565b600061300142610e10614430565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac9479261304a928a9289928b9262010000909104909116908990600401614793565b600060405180830381600087803b15801561306457600080fd5b505af1925050508015613075575060015b6135b75761308161448f565b806308c379a00361339557506130956144e6565b806130a05750613397565b60008051602061491b833981519152816040516020016130c091906147cf565b60408051601f19818403018152908290526130da91614207565b60405180910390a160075460105460405163082349bf60e31b81526001600160a01b039283169263411a4df892613126928b928a928c9262010000909104909116908a90600401614793565b600060405180830381600087803b15801561314057600080fd5b505af1925050508015613151575060015b61337e5761315d61448f565b806308c379a0036132c357506131716144e6565b8061317c57506132c5565b80511561327257604080518082019091526002815261453560f01b6020918201528151908201207ff3465d5cb5831136b3b4e82db30aaef6a41154c3cba2fd4f528d2b5dde880dc401613272576007546131e39030906001600160a01b0316600019612c2e565b60006131f060028961445a565b905080156132705760008051602061491b8339815191526040516132519060208082526023908201527f4535206572726f722c207265747279696e6720776974682068616c6620616d6f6040820152621d5b9d60ea1b606082015260800190565b60405180910390a161326281612eaa565b9a9950505050505050505050565b505b60008051602061491b833981519152816040516020016132929190614814565b60408051601f19818403018152908290526132ac91614207565b60405180910390a150600098975050505050505050565b505b60006132d260028861445a565b90506000811180156132e45750868114155b1561333c576007546133039030906001600160a01b0316600019612c2e565b60008051602061491b83398151915260405161331e90614859565b60405180910390a161332f81612eaa565b9998505050505050505050565b60008051602061491b8339815191526040516132ac906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b61338982878a613d8e565b98975050505050505050565b505b60008051602061491b8339815191526040516133f8906020808252602b908201527f46697273742073776170206d6574686f64206661696c6564207769746820756e60408201526a35b737bbb71032b93937b960a91b606082015260800190565b60405180910390a160075460105460405163082349bf60e31b81526001600160a01b039283169263411a4df892613444928a9289928b9262010000909104909116908990600401614793565b600060405180830381600087803b15801561345e57600080fd5b505af192505050801561346f575060015b6135b75761347b61448f565b806308c379a0036134ea575061348f6144e6565b8061349a57506134ec565b60008051602061491b833981519152816040516020016134ba9190614814565b60408051601f19818403018152908290526134d491614207565b60405180910390a1506000979650505050505050565b505b60006134f960028761445a565b905060008111801561350b5750858114155b156135565760075461352a9030906001600160a01b0316600019612c2e565b60008051602061491b83398151915260405161354590614859565b60405180910390a161338981612eaa565b60008051602061491b8339815191526040516134d4906020808252602b908201527f416c6c2073776170206d6574686f6473206661696c6564207769746820756e6b60408201526a6e6f776e206572726f727360a81b606082015260800190565b6135c2818689613d8e565b979650505050505050565b600d548015806135db575081155b156135e4575050565b60006135f0828461445a565b9050806000036135ff57505050565b60005b8281101561373b576000600d828154811061361f5761361f61477d565b6000918252602090912001546001600160a01b03169050801580159061364e57506001600160a01b0381163014155b80156136685750600a546001600160a01b03828116911614155b15613728576000816001600160a01b03168460405160006040518083038185875af1925050503d80600081146136ba576040519150601f19603f3d011682016040523d82523d6000602084013e6136bf565b606091505b5050905080613726577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161371d90602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b505b5080613733816148a6565b915050613602565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c217910160405180910390a1505050565b811580613785575080155b1561378e575050565b6007546137a89030906001600160a01b0316600019612c2e565b60006137b560028461445a565b9050806000036137c457505050565b60006137d160028461445a565b9050806000036137e15750505050565b600060646137f084605a614443565b6137fa919061445a565b90506000606461380b84605a614443565b613815919061445a565b9050600061382542610e10614430565b600754600b5460405163f305d71960e01b81529293506001600160a01b039182169263f305d7199289926138699230928b928a928c92909116908a9060040161468b565b60606040518083038185885af1935050505080156138a4575060408051601f3d908101601f191682019092526138a1918101906146c6565b60015b613956576138b061448f565b806308c379a0036138fa57506138c46144e6565b806138cf57506138fc565b60008051602061495b833981519152816040516138ec9190614207565b60405180910390a150610c43565b505b60008051602061495b833981519152604051613949906020808252601d908201527f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000604082015260600190565b60405180910390a1610c43565b604080518481526020810184905260008051602061493b833981519152910160405180910390a150505050505050505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316613a165760405162461bcd60e51b8152602060048201526002602482015261543160f01b6044820152606401610a38565b6001600160a01b038216613a515760405162461bcd60e51b81526020600482015260026024820152612a1960f11b6044820152606401610a38565b60008111613a865760405162461bcd60e51b8152602060048201526002602482015261543360f01b6044820152606401610a38565b6001600160a01b03831660009081526020819052604090205481811015613ad45760405162461bcd60e51b8152602060048201526002602482015261150d60f21b6044820152606401610a38565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611f93565b60008180613b555750600a546001600160a01b038581169116145b9050808015613b6c5750601054610100900460ff16155b15613d245760006064613b80600586614443565b613b8a919061445a565b90508015613d225760006064613ba1601984614443565b613bab919061445a565b905060006064613bbc601985614443565b613bc6919061445a565b90506000613bd4848861447c565b9050613be18930866139db565b613bec8989836139db565b82600e6000828254613bfe9190614430565b9250508190555081600f6000828254613c179190614430565b90915550613c50905089678ac7230489e80000613c49826001600160a01b031660009081526020819052604090205490565b1015613fd4565b613c7c88678ac7230489e80000613c498b6001600160a01b031660009081526020819052604090205490565b600a546001600160a01b038981169116148015613ca15750601054610100900460ff16155b8015613cc557506801158e460913d00000600f54600e54613cc29190614430565b10155b15613d1857306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d0557600080fd5b505af1925050508015613d16575060015b505b5050505050611f93565b505b613d2f8585856139db565b613d5b85678ac7230489e80000613c49886001600160a01b031660009081526020819052604090205490565b613d8784678ac7230489e80000613c49876001600160a01b031660009081526020819052604090205490565b5050505050565b6000601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613de057600080fd5b505af1925050508015613df1575060015b613ed857613dfd61448f565b806308c379a003613e685750613e116144e6565b80613e1c5750613e6a565b60008051602061491b83398151915281604051602001613e3c91906148bf565b60408051601f1981840301815290829052613e5691614207565b60405180910390a160009150506109bf565b505b60008051602061491b833981519152604051613ec89060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b60405180910390a15060006109bf565b476000613ee5868361447c565b90508015613f675760408051868152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a183851015613f5e576000613f3a868661447c565b90506000613f4782612eaa565b9050613f538184614430565b9450505050506109bf565b91506109bf9050565b60008051602061491b833981519152604051613fc19060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a16000925050506109bf565b600a546001600160a01b03838116911614801590613ffb57506001600160a01b0382163014155b15610d135780801561402657506001600160a01b0382166000908152600c602052604090205460ff16155b1561409257506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b801580156140b857506001600160a01b0382166000908152600c602052604090205460ff165b15610d13576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610dde57826001600160a01b0316600d82815481106141055761410561477d565b6000918252602090912001546001600160a01b0316036141d157600d805461412f9060019061447c565b8154811061413f5761413f61477d565b600091825260209091200154600d80546001600160a01b03909216918390811061416b5761416b61477d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d8054806141aa576141aa614904565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806141db816148a6565b9150506140de565b60005b838110156141fe5781810151838201526020016141e6565b50506000910152565b60208152600082518060208401526142268160408501602087016141e3565b601f01601f19169190910160400192915050565b6001600160a01b038116811461185657600080fd5b6000806040838503121561426257600080fd5b823561426d8161423a565b946020939093013593505050565b60008060006060848603121561429057600080fd5b833561429b8161423a565b925060208401356142ab8161423a565b929592945050506040919091013590565b6000602082840312156142ce57600080fd5b5035919050565b6000602082840312156142e757600080fd5b81356109bf8161423a565b600081518084526020808501945080840160005b8381101561432b5781516001600160a01b031687529582019590820190600101614306565b509495945050505050565b6020815260006109bf60208301846142f2565b801515811461185657600080fd5b6000806040838503121561436a57600080fd5b82356143758161423a565b9150602083013561438581614349565b809150509250929050565b600080604083850312156143a357600080fd5b50508035926020909101359150565b600080604083850312156143c557600080fd5b82356143d08161423a565b915060208301356143858161423a565b600181811c908216806143f457607f821691505b60208210810361441457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561099a5761099a61441a565b808202811582820484141761099a5761099a61441a565b60008261447757634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561099a5761099a61441a565b600060033d11156144a85760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff811182821017156144df57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156144f45790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561452457505050505090565b828501915081518181111561453c5750505050505090565b843d87010160208285010111156145565750505050505090565b614565602082860101876144ab565b509095945050505050565b60208082526022908201527f556e6b6e6f776e206572726f7220696e207472696767657250726f63657373696040820152616e6760f01b606082015260800190565b6001600160a01b03929092168252602082015260400190565b6000602082840312156145dd57600080fd5b81516109bf81614349565b602080825260029082015261523160f01b604082015260600190565b60006020828403121561461657600080fd5b5051919050565b6020808252601c908201527f53776170206661696c65642c206e6f2045544820726563656976656400000000604082015260600190565b60208082526019908201527f4e6f204554482072656365697665642066726f6d207377617000000000000000604082015260600190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156146db57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561470657600080fd5b81516109bf8161423a565b602080825260029082015261139560f21b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526012908201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a0604082015260006147b260a08301866142f2565b6001600160a01b0394909416606083015250608001529392505050565b7f46697273742073776170206d6574686f64206661696c65643a2000000000000081526000825161480781601a8501602087016141e3565b91909101601a0192915050565b7f416c7465726e61746976652073776170206d6574686f64206661696c65643a2081526000825161484c8160208501602087016141e3565b9190910160200192915050565b6020808252602d908201527f556e6b6e6f776e2073776170206572726f722c207265747279696e672077697460408201526c1a081a185b1988185b5bdd5b9d609a1b606082015260800190565b6000600182016148b8576148b861441a565b5060010190565b7f50726f787920455448207472616e73666572206661696c65643a2000000000008152600082516148f781601b8501602087016141e3565b91909101601b0192915050565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072338f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515ba31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ada26469706673582212208a7d6ca80ed0956a2a7dfe20ffdeb54305d1bcfda00c2585b69731c1b9fe030764736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102815760003560e01c8063808a54571161014f578063c0d78655116100c1578063e3a8fa551161007a578063e3a8fa551461083e578063e6efd91a14610846578063e85ceee814610866578063ed9cacfe1461089f578063f2fde38b146108b4578063fd7c9fab146108d457600080fd5b8063c0d7865514610748578063c84a705c14610768578063d4d7b19a14610788578063d720a2a8146107b8578063dd62ed3e146107d8578063df8408fe1461081e57600080fd5b8063a8602fea11610113578063a8602fea14610679578063a9059cbb14610699578063b58bedb6146106b9578063b70143c9146106ce578063b77e895c146106ee578063b9276e4b1461072757600080fd5b8063808a5457146105f15780638129fc1c146106115780638da5cb5b1461062657806395d89b4114610644578063975b87e81461065957600080fd5b80635342acb4116101f35780636d62062a116101ac5780636d62062a146105125780636ec4be901461054b57806370a08231146105715780637136982b146105a75780637ac84fc1146105bc578063801b51d9146105d157600080fd5b80635342acb414610442578063573761981461047b5780635d76b04c1461049b5780635fe8e7cc146104b057806362b6327a146104d25780636a3c68fc146104f257600080fd5b80632a11ced0116102455780632a11ced014610378578063313ce567146103b0578063397883d2146103cc578063461a3a95146103e15780634626402b146104015780634ada218b1461042157600080fd5b806306fdde03146102c957806308dee2b4146102f4578063095ea7b31461031357806318160ddd1461034357806323b872dd1461035857600080fd5b366102c45734156102c25760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b3480156102d557600080fd5b506102de6108f4565b6040516102eb9190614207565b60405180910390f35b34801561030057600080fd5b50600e545b6040519081526020016102eb565b34801561031f57600080fd5b5061033361032e36600461424f565b610986565b60405190151581526020016102eb565b34801561034f57600080fd5b50600254610305565b34801561036457600080fd5b5061033361037336600461427b565b6109a0565b34801561038457600080fd5b506103986103933660046142bc565b6109c6565b6040516001600160a01b0390911681526020016102eb565b3480156103bc57600080fd5b50604051601281526020016102eb565b3480156103d857600080fd5b506102c26109f0565b3480156103ed57600080fd5b50600954610398906001600160a01b031681565b34801561040d57600080fd5b50600b54610398906001600160a01b031681565b34801561042d57600080fd5b5060105461033390600160b81b900460ff1681565b34801561044e57600080fd5b5061033361045d3660046142d5565b6001600160a01b031660009081526011602052604090205460ff1690565b34801561048757600080fd5b506102c261049636600461424f565b610d17565b3480156104a757600080fd5b50600f54610305565b3480156104bc57600080fd5b506104c5610de3565b6040516102eb9190614336565b3480156104de57600080fd5b50600754610398906001600160a01b031681565b3480156104fe57600080fd5b506102c261050d366004614357565b610e44565b34801561051e57600080fd5b5061033361052d3660046142d5565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561055757600080fd5b50601054610398906201000090046001600160a01b031681565b34801561057d57600080fd5b5061030561058c3660046142d5565b6001600160a01b031660009081526020819052604090205490565b3480156105b357600080fd5b50600d54610305565b3480156105c857600080fd5b506102c2610e77565b3480156105dd57600080fd5b506102c26105ec366004614357565b611472565b3480156105fd57600080fd5b50600a54610398906001600160a01b031681565b34801561061d57600080fd5b506102c26114a5565b34801561063257600080fd5b506006546001600160a01b0316610398565b34801561065057600080fd5b506102de611859565b34801561066557600080fd5b506102c2610674366004614390565b611868565b34801561068557600080fd5b506102c26106943660046142d5565b611f99565b3480156106a557600080fd5b506103336106b436600461424f565b612036565b3480156106c557600080fd5b506102c2612044565b3480156106da57600080fd5b506102c26106e93660046142bc565b612101565b3480156106fa57600080fd5b506103336107093660046142d5565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561073357600080fd5b5060105461033390600160b01b900460ff1681565b34801561075457600080fd5b506102c26107633660046142d5565b61228e565b34801561077457600080fd5b506102c26107833660046142d5565b6122f3565b34801561079457600080fd5b506103336107a33660046142d5565b600c6020526000908152604090205460ff1681565b3480156107c457600080fd5b506102c26107d33660046142bc565b6124c4565b3480156107e457600080fd5b506103056107f33660046143b2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561082a57600080fd5b506102c2610839366004614357565b6126bc565b6102c26126ef565b34801561085257600080fd5b506102c2610861366004614357565b61292b565b34801561087257600080fd5b506103336108813660046142d5565b6001600160a01b031660009081526012602052604090205460ff1690565b3480156108ab57600080fd5b506102c261295e565b3480156108c057600080fd5b506102c26108cf3660046142d5565b612be2565b3480156108e057600080fd5b50600854610398906001600160a01b031681565b606060038054610903906143e0565b80601f016020809104026020016040519081016040528092919081815260200182805461092f906143e0565b801561097c5780601f106109515761010080835404028352916020019161097c565b820191906000526020600020905b81548152906001019060200180831161095f57829003601f168201915b5050505050905090565b600033610994818585612c2e565b60019150505b92915050565b6000336109ae858285612ce0565b6109b9858585612d48565b60019150505b9392505050565b600d81815481106109d657600080fd5b6000918252602090912001546001600160a01b0316905081565b6109f8612e5c565b6000600e541180610a0b57506000600f54115b610a415760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d54610a755760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610a38565b600f54600e5468056bc75e2d6310000091600091610a939190614430565b905081811115610c4c57600081610ab284670de0b6b3a7640000614443565b610abc919061445a565b90506000670de0b6b3a764000082600e54610ad79190614443565b610ae1919061445a565b90506000670de0b6b3a764000083600f54610afc9190614443565b610b06919061445a565b905081600e6000828254610b1a919061447c565b9250508190555080600f6000828254610b33919061447c565b9091555050600e8054600f80549285905583905560408051637ac84fc160e01b815290519192913091637ac84fc191600480830192600092919082900301818387803b158015610b8257600080fd5b505af1925050508015610b93575060015b610c4357610b9f61448f565b806308c379a003610c035750610bb36144e6565b80610bbe5750610c05565b60008051602061491b83398151915281604051610bdb9190614207565b60405180910390a1610bed8584614430565b600e55610bfa8483614430565b600f5550610c43565b505b60008051602061491b833981519152604051610c2090614570565b60405180910390a1610c328483614430565b600e55610c3f8382614430565b600f555b50505050505050565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c8757600080fd5b505af1925050508015610c98575060015b610d1357610ca461448f565b806308c379a003610ced5750610cb86144e6565b80610cc35750610cef565b60008051602061491b83398151915281604051610ce09190614207565b60405180910390a1505050565b505b60008051602061491b833981519152604051610d0a90614570565b60405180910390a15b5050565b610d1f612e5c565b306001600160a01b03831603610d5c5760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610a38565b816001600160a01b031663a9059cbb610d7d6006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610d9b9291906145b2565b6020604051808303816000875af1158015610dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dde91906145cb565b505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561097c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e1d575050505050905090565b610e4c612e5c565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600260055403610e995760405162461bcd60e51b8152600401610a38906145e8565b6002600555601054610100900460ff1615610edb5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610a38565b6000600f54600e54610eed9190614430565b11610f2e5760405162461bcd60e51b81526020600482015260116024820152704e6f2070656e64696e6720746f6b656e7360781b6044820152606401610a38565b6010805461ff001916610100179055600e54600f5481158015610f4f575080155b15610f665750506010805461ff001916905561146b565b68056bc75e2d631000006000610f7c8385614430565b90508181111561102857600081610f9b84670de0b6b3a7640000614443565b610fa5919061445a565b9050670de0b6b3a7640000610fba8287614443565b610fc4919061445a565b9450670de0b6b3a7640000610fd98286614443565b610fe3919061445a565b9350610fef8486614430565b915084600e6000828254611003919061447c565b9250508190555083600f600082825461101c919061447c565b90915550611033915050565b6000600e819055600f555b60408051858152602081018590527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa1580156110aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ce9190614604565b9050818110156111735784600e60008282546110ea9190614430565b9250508190555083600f60008282546111039190614430565b90915550506010805461ff001916905560405160008051602061491b83398151915290611161906020808252601d908201527f496e73756666696369656e7420636f6e74726163742062616c616e6365000000604082015260600190565b60405180910390a1505050505061146b565b60075461118d9030906001600160a01b0316600019612c2e565b47600061119984612eaa565b90508060000361120e5786600e60008282546111b59190614430565b9250508190555085600f60008282546111ce9190614430565b90915550506010805461ff001916905560405160008051602061491b833981519152906111fa9061461d565b60405180910390a15050505050505061146b565b478281116112835787600e60008282546112289190614430565b9250508190555086600f60008282546112419190614430565b909155505060405160008051602061491b8339815191529061126290614654565b60405180910390a150506010805461ff00191690555061146b945050505050565b600061128f848361447c565b905060008661129e8b84614443565b6112a8919061445a565b905060006112b6828461447c565b9050811561144557600760009054906101000a90046001600160a01b03166001600160a01b031663f305d71983308e600080600b60009054906101000a90046001600160a01b03164261025861130c9190614430565b6040518863ffffffff1660e01b815260040161132d9695949392919061468b565b60606040518083038185885af193505050508015611368575060408051601f3d908101601f19168201909252611365918101906146c6565b60015b61141a5761137461448f565b806308c379a0036113be57506113886144e6565b8061139357506113c0565b60008051602061495b833981519152816040516113b09190614207565b60405180910390a150611445565b505b60008051602061495b83398151915260405161140d906020808252601d908201527f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000604082015260600190565b60405180910390a1611445565b604080518481526020810184905260008051602061493b833981519152910160405180910390a15050505b801561145457611454816135cd565b50506010805461ff00191690555050505050505050505b6001600555565b61147a612e5c565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6114ad612e5c565b60105460ff16156114e55760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610a38565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015611544573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156891906146f4565b600a80546001600160a01b0319166001600160a01b03929092169182179055611624576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156115df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160391906146f4565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166116615760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610a38565b600a80546001600160a01b0390811660009081526011602090815260408083208054600160ff19918216811790925595548516845260129092529091208054909316179091556007546116b991309116600019612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116f192911690600019906004016145b2565b6020604051808303816000875af1158015611710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173491906145cb565b6117655760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610a38565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261179d92911690600019906004016145b2565b6020604051808303816000875af11580156117bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e091906145cb565b50600a5460405163095ea7b360e01b8152309163095ea7b391611813916001600160a01b031690600019906004016145b2565b6020604051808303816000875af1158015611832573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185691906145cb565b50565b606060048054610903906143e0565b611870612e5c565b600082116118905760405162461bcd60e51b8152600401610a3890614711565b600081116118c55760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610a38565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614604565b10156119595760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610a38565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c59190614604565b10156119f85760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610a38565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611a2c9033903090869060040161472d565b6020604051808303816000875af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906145cb565b611aa05760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610a38565b600754611ab89030906001600160a01b031684612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611aee9291169085906004016145b2565b6020604051808303816000875af1158015611b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3191906145cb565b506007546009546001600160a01b039182169163e8e3370091309116858560008033611b5f42610258614430565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1925050508015611bf7575060408051601f3d908101601f19168201909252611bf4918101906146c6565b60015b611e7f57611c0361448f565b806308c379a003611d465750611c176144e6565b80611c225750611d48565b600754611c3b9030906001600160a01b03166000612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611c72929116906000906004016145b2565b6020604051808303816000875af1158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb591906145cb565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611ce890339086906004016145b2565b6020604051808303816000875af1158015611d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2b91906145cb565b508060405162461bcd60e51b8152600401610a389190614207565b505b600754611d619030906001600160a01b03166000612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611d98929116906000906004016145b2565b6020604051808303816000875af1158015611db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddb91906145cb565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611e0e90339085906004016145b2565b6020604051808303816000875af1158015611e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5191906145cb565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610a38565b5050604080518481526020810184905260008051602061493b83398151915292500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190614604565b90508015610dde5760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611f5090339085906004016145b2565b6020604051808303816000875af1158015611f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9391906145cb565b50505050565b611fa1612e5c565b6001600160a01b038116611fdc5760405162461bcd60e51b81526020600482015260026024820152615a4160f01b6044820152606401610a38565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb49101610d0a565b600033610994818585612d48565b61204c612e5c565b6010546201000090046001600160a01b031661207a5760405162461bcd60e51b8152600401610a3890614751565b601054600160b01b900460ff166120a35760405162461bcd60e51b8152600401610a3890614751565b6010546040516324872d5b60e21b8152306004820152620100009091046001600160a01b03169063921cb56c90602401600060405180830381600087803b1580156120ed57600080fd5b505af1158015611f93573d6000803e3d6000fd5b612109612e5c565b60026005540361212b5760405162461bcd60e51b8152600401610a38906145e8565b60026005558061217d5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a38565b306000908152602081905260409020548111156121d35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a38565b601054600160b01b900460ff166121fc5760405162461bcd60e51b8152600401610a3890614751565b47600061220883612eaa565b90508060000361222a5760405162461bcd60e51b8152600401610a389061461d565b4782811161224a5760405162461bcd60e51b8152600401610a3890614654565b60408051858152602081018490527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a1505060016005555050565b612296612e5c565b6001600160a01b0381166122d15760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610a38565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6122fb612e5c565b6001600160a01b0381166123435760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610a38565b806001600160a01b0316639c0b7d466040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561239d575060408051601f3d908101601f1916820190925261239a918101906146f4565b60015b6123e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c1c9bde1e4818dbdb9d1c9858dd60521b6044820152606401610a38565b6001600160a01b0381161580159061240357506001600160a01b0381163014155b1561245e5760405162461bcd60e51b815260206004820152602560248201527f50726f787920616c72656164792073657420746f20616e6f7468657220636f6e6044820152641d1c9858dd60da1b6064820152608401610a38565b506010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b6124cc612e5c565b6002600554036124ee5760405162461bcd60e51b8152600401610a38906145e8565b6002600555806125105760405162461bcd60e51b8152600401610a3890614711565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa15801561254d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125719190614604565b10156125a45760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610a38565b601054600160b01b900460ff166125cd5760405162461bcd60e51b8152600401610a3890614751565b6007546125e79030906001600160a01b0316600019612c2e565b4760006125f383612eaa565b9050806000036126155760405162461bcd60e51b8152600401610a389061461d565b478281116126355760405162461bcd60e51b8152600401610a3890614654565b6000612641848361447c565b905060006064612652601984614443565b61265c919061445a565b90506000606461266d601985614443565b612677919061445a565b9050811561269f5761269f82606461269060198b614443565b61269a919061445a565b61377a565b80156126ae576126ae816135cd565b505060016005555050505050565b6126c4612e5c565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6126f7612e5c565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015612735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127599190614604565b90506000811161277b5760405162461bcd60e51b8152600401610a3890614711565b600034116127b05760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610a38565b6007546127c89030906001600160a01b031683612c2e565b6007546001600160a01b031663f305d719343084600080336127ec42610258614430565b6040518863ffffffff1660e01b815260040161280d9695949392919061468b565b60606040518083038185885af193505050508015612848575060408051601f3d908101601f19168201909252612845918101906146c6565b60015b6128ff5761285461448f565b806308c379a0036128b857506128686144e6565b8061287357506128ba565b60075461288c9030906001600160a01b03166000612c2e565b60405133904780156108fc02916000818181858888f19350505050158015611d2b573d6000803e3d6000fd5b505b6007546128d39030906001600160a01b03166000612c2e565b60405133904780156108fc02916000818181858888f19350505050158015611e51573d6000803e3d6000fd5b50506040805183815234602082015260008051602061493b83398151915292500160405180910390a150565b612933612e5c565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b612966612e5c565b6007546129809030906001600160a01b0316600019612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926129b892911690600019906004016145b2565b6020604051808303816000875af19250505080156129f3575060408051601f3d908101601f191682019092526129f0918101906145cb565b60015b15612a4957506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612a40926001600160a01b03918216929116906000199061472d565b60405180910390a15b600a546001600160a01b031615612be057600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612a9292911690600019906004016145b2565b6020604051808303816000875af1925050508015612acd575060408051601f3d908101601f19168201909252612aca918101906145cb565b60015b15612b235750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612b1a926001600160a01b03918216929116906000199061472d565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b391612b55916001600160a01b031690600019906004016145b2565b6020604051808303816000875af1925050508015612b90575060408051601f3d908101601f19168201909252612b8d918101906145cb565b60015b15612be05750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca91612bd79130916001600160a01b0316906000199061472d565b60405180910390a15b565b612bea612e5c565b6001600160a01b038116612c255760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610a38565b61185681613989565b6001600160a01b03831615801590612c4e57506001600160a01b03821615155b612c7f5760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610a38565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205481811015612d3b5760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610a38565b611f938484848403612c2e565b6001600160a01b038316612d835760405162461bcd60e51b8152602060048201526002602482015261543160f01b6044820152606401610a38565b6001600160a01b038216612dbe5760405162461bcd60e51b81526020600482015260026024820152612a1960f11b6044820152606401610a38565b60008111612df35760405162461bcd60e51b8152602060048201526002602482015261543360f01b6044820152606401610a38565b601054610100900460ff1615612e0e57610dde8383836139db565b6001600160a01b03831660009081526011602052604081205460ff1680612e4d57506001600160a01b03831660009081526011602052604090205460ff165b159050611f9384848484613b3a565b33612e6f6006546001600160a01b031690565b6001600160a01b031614612be05760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610a38565b600081600003612ebc57506000919050565b601054600160b01b900460ff16612ee55760405162461bcd60e51b8152600401610a3890614751565b816802b5e3af16b1880000811115612f0357506802b5e3af16b18800005b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f3857612f3861477d565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb591906146f4565b81600181518110612fc857612fc861477d565b6001600160a01b039283166020918202929092010152600754600091612ff391309116600019612c2e565b600061300142610e10614430565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac9479261304a928a9289928b9262010000909104909116908990600401614793565b600060405180830381600087803b15801561306457600080fd5b505af1925050508015613075575060015b6135b75761308161448f565b806308c379a00361339557506130956144e6565b806130a05750613397565b60008051602061491b833981519152816040516020016130c091906147cf565b60408051601f19818403018152908290526130da91614207565b60405180910390a160075460105460405163082349bf60e31b81526001600160a01b039283169263411a4df892613126928b928a928c9262010000909104909116908a90600401614793565b600060405180830381600087803b15801561314057600080fd5b505af1925050508015613151575060015b61337e5761315d61448f565b806308c379a0036132c357506131716144e6565b8061317c57506132c5565b80511561327257604080518082019091526002815261453560f01b6020918201528151908201207ff3465d5cb5831136b3b4e82db30aaef6a41154c3cba2fd4f528d2b5dde880dc401613272576007546131e39030906001600160a01b0316600019612c2e565b60006131f060028961445a565b905080156132705760008051602061491b8339815191526040516132519060208082526023908201527f4535206572726f722c207265747279696e6720776974682068616c6620616d6f6040820152621d5b9d60ea1b606082015260800190565b60405180910390a161326281612eaa565b9a9950505050505050505050565b505b60008051602061491b833981519152816040516020016132929190614814565b60408051601f19818403018152908290526132ac91614207565b60405180910390a150600098975050505050505050565b505b60006132d260028861445a565b90506000811180156132e45750868114155b1561333c576007546133039030906001600160a01b0316600019612c2e565b60008051602061491b83398151915260405161331e90614859565b60405180910390a161332f81612eaa565b9998505050505050505050565b60008051602061491b8339815191526040516132ac906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b61338982878a613d8e565b98975050505050505050565b505b60008051602061491b8339815191526040516133f8906020808252602b908201527f46697273742073776170206d6574686f64206661696c6564207769746820756e60408201526a35b737bbb71032b93937b960a91b606082015260800190565b60405180910390a160075460105460405163082349bf60e31b81526001600160a01b039283169263411a4df892613444928a9289928b9262010000909104909116908990600401614793565b600060405180830381600087803b15801561345e57600080fd5b505af192505050801561346f575060015b6135b75761347b61448f565b806308c379a0036134ea575061348f6144e6565b8061349a57506134ec565b60008051602061491b833981519152816040516020016134ba9190614814565b60408051601f19818403018152908290526134d491614207565b60405180910390a1506000979650505050505050565b505b60006134f960028761445a565b905060008111801561350b5750858114155b156135565760075461352a9030906001600160a01b0316600019612c2e565b60008051602061491b83398151915260405161354590614859565b60405180910390a161338981612eaa565b60008051602061491b8339815191526040516134d4906020808252602b908201527f416c6c2073776170206d6574686f6473206661696c6564207769746820756e6b60408201526a6e6f776e206572726f727360a81b606082015260800190565b6135c2818689613d8e565b979650505050505050565b600d548015806135db575081155b156135e4575050565b60006135f0828461445a565b9050806000036135ff57505050565b60005b8281101561373b576000600d828154811061361f5761361f61477d565b6000918252602090912001546001600160a01b03169050801580159061364e57506001600160a01b0381163014155b80156136685750600a546001600160a01b03828116911614155b15613728576000816001600160a01b03168460405160006040518083038185875af1925050503d80600081146136ba576040519150601f19603f3d011682016040523d82523d6000602084013e6136bf565b606091505b5050905080613726577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161371d90602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b505b5080613733816148a6565b915050613602565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c217910160405180910390a1505050565b811580613785575080155b1561378e575050565b6007546137a89030906001600160a01b0316600019612c2e565b60006137b560028461445a565b9050806000036137c457505050565b60006137d160028461445a565b9050806000036137e15750505050565b600060646137f084605a614443565b6137fa919061445a565b90506000606461380b84605a614443565b613815919061445a565b9050600061382542610e10614430565b600754600b5460405163f305d71960e01b81529293506001600160a01b039182169263f305d7199289926138699230928b928a928c92909116908a9060040161468b565b60606040518083038185885af1935050505080156138a4575060408051601f3d908101601f191682019092526138a1918101906146c6565b60015b613956576138b061448f565b806308c379a0036138fa57506138c46144e6565b806138cf57506138fc565b60008051602061495b833981519152816040516138ec9190614207565b60405180910390a150610c43565b505b60008051602061495b833981519152604051613949906020808252601d908201527f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000604082015260600190565b60405180910390a1610c43565b604080518481526020810184905260008051602061493b833981519152910160405180910390a150505050505050505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316613a165760405162461bcd60e51b8152602060048201526002602482015261543160f01b6044820152606401610a38565b6001600160a01b038216613a515760405162461bcd60e51b81526020600482015260026024820152612a1960f11b6044820152606401610a38565b60008111613a865760405162461bcd60e51b8152602060048201526002602482015261543360f01b6044820152606401610a38565b6001600160a01b03831660009081526020819052604090205481811015613ad45760405162461bcd60e51b8152602060048201526002602482015261150d60f21b6044820152606401610a38565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611f93565b60008180613b555750600a546001600160a01b038581169116145b9050808015613b6c5750601054610100900460ff16155b15613d245760006064613b80600586614443565b613b8a919061445a565b90508015613d225760006064613ba1601984614443565b613bab919061445a565b905060006064613bbc601985614443565b613bc6919061445a565b90506000613bd4848861447c565b9050613be18930866139db565b613bec8989836139db565b82600e6000828254613bfe9190614430565b9250508190555081600f6000828254613c179190614430565b90915550613c50905089678ac7230489e80000613c49826001600160a01b031660009081526020819052604090205490565b1015613fd4565b613c7c88678ac7230489e80000613c498b6001600160a01b031660009081526020819052604090205490565b600a546001600160a01b038981169116148015613ca15750601054610100900460ff16155b8015613cc557506801158e460913d00000600f54600e54613cc29190614430565b10155b15613d1857306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d0557600080fd5b505af1925050508015613d16575060015b505b5050505050611f93565b505b613d2f8585856139db565b613d5b85678ac7230489e80000613c49886001600160a01b031660009081526020819052604090205490565b613d8784678ac7230489e80000613c49876001600160a01b031660009081526020819052604090205490565b5050505050565b6000601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613de057600080fd5b505af1925050508015613df1575060015b613ed857613dfd61448f565b806308c379a003613e685750613e116144e6565b80613e1c5750613e6a565b60008051602061491b83398151915281604051602001613e3c91906148bf565b60408051601f1981840301815290829052613e5691614207565b60405180910390a160009150506109bf565b505b60008051602061491b833981519152604051613ec89060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b60405180910390a15060006109bf565b476000613ee5868361447c565b90508015613f675760408051868152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a183851015613f5e576000613f3a868661447c565b90506000613f4782612eaa565b9050613f538184614430565b9450505050506109bf565b91506109bf9050565b60008051602061491b833981519152604051613fc19060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a16000925050506109bf565b600a546001600160a01b03838116911614801590613ffb57506001600160a01b0382163014155b15610d135780801561402657506001600160a01b0382166000908152600c602052604090205460ff16155b1561409257506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b801580156140b857506001600160a01b0382166000908152600c602052604090205460ff165b15610d13576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610dde57826001600160a01b0316600d82815481106141055761410561477d565b6000918252602090912001546001600160a01b0316036141d157600d805461412f9060019061447c565b8154811061413f5761413f61477d565b600091825260209091200154600d80546001600160a01b03909216918390811061416b5761416b61477d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d8054806141aa576141aa614904565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806141db816148a6565b9150506140de565b60005b838110156141fe5781810151838201526020016141e6565b50506000910152565b60208152600082518060208401526142268160408501602087016141e3565b601f01601f19169190910160400192915050565b6001600160a01b038116811461185657600080fd5b6000806040838503121561426257600080fd5b823561426d8161423a565b946020939093013593505050565b60008060006060848603121561429057600080fd5b833561429b8161423a565b925060208401356142ab8161423a565b929592945050506040919091013590565b6000602082840312156142ce57600080fd5b5035919050565b6000602082840312156142e757600080fd5b81356109bf8161423a565b600081518084526020808501945080840160005b8381101561432b5781516001600160a01b031687529582019590820190600101614306565b509495945050505050565b6020815260006109bf60208301846142f2565b801515811461185657600080fd5b6000806040838503121561436a57600080fd5b82356143758161423a565b9150602083013561438581614349565b809150509250929050565b600080604083850312156143a357600080fd5b50508035926020909101359150565b600080604083850312156143c557600080fd5b82356143d08161423a565b915060208301356143858161423a565b600181811c908216806143f457607f821691505b60208210810361441457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561099a5761099a61441a565b808202811582820484141761099a5761099a61441a565b60008261447757634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561099a5761099a61441a565b600060033d11156144a85760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff811182821017156144df57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156144f45790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561452457505050505090565b828501915081518181111561453c5750505050505090565b843d87010160208285010111156145565750505050505090565b614565602082860101876144ab565b509095945050505050565b60208082526022908201527f556e6b6e6f776e206572726f7220696e207472696767657250726f63657373696040820152616e6760f01b606082015260800190565b6001600160a01b03929092168252602082015260400190565b6000602082840312156145dd57600080fd5b81516109bf81614349565b602080825260029082015261523160f01b604082015260600190565b60006020828403121561461657600080fd5b5051919050565b6020808252601c908201527f53776170206661696c65642c206e6f2045544820726563656976656400000000604082015260600190565b60208082526019908201527f4e6f204554482072656365697665642066726f6d207377617000000000000000604082015260600190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156146db57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561470657600080fd5b81516109bf8161423a565b602080825260029082015261139560f21b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526012908201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a0604082015260006147b260a08301866142f2565b6001600160a01b0394909416606083015250608001529392505050565b7f46697273742073776170206d6574686f64206661696c65643a2000000000000081526000825161480781601a8501602087016141e3565b91909101601a0192915050565b7f416c7465726e61746976652073776170206d6574686f64206661696c65643a2081526000825161484c8160208501602087016141e3565b9190910160200192915050565b6020808252602d908201527f556e6b6e6f776e2073776170206572726f722c207265747279696e672077697460408201526c1a081a185b1988185b5bdd5b9d609a1b606082015260800190565b6000600182016148b8576148b861441a565b5060010190565b7f50726f787920455448207472616e73666572206661696c65643a2000000000008152600082516148f781601b8501602087016141e3565b91909101601b0192915050565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072338f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515ba31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ada26469706673582212208a7d6ca80ed0956a2a7dfe20ffdeb54305d1bcfda00c2585b69731c1b9fe030764736f6c63430008110033
Deployed Bytecode Sourcemap
9972:38248:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44663:9;:13;44659:85;;44698:34;;44722:9;160:25:1;;44710:10:0;;44698:34;;148:2:1;133:18;44698:34:0;;;;;;;44659:85;9972:38248;;;;;2958:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37609:118;;;;;;;;;;-1:-1:-1;37696:23:0;;37609:118;;;160:25:1;;;148:2;133:18;37609:118:0;14:177:1;3825:190:0;;;;;;;;;;-1:-1:-1;3825:190:0;;;;;:::i;:::-;;:::i;:::-;;;1473:14:1;;1466:22;1448:41;;1436:2;1421:18;3825:190:0;1308:187:1;3252:99:0;;;;;;;;;;-1:-1:-1;3331:12:0;;3252:99;;4023:250;;;;;;;;;;-1:-1:-1;4023:250:0;;;;;:::i;:::-;;:::i;10972:24::-;;;;;;;;;;-1:-1:-1;10972:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2310:32:1;;;2292:51;;2280:2;2265:18;10972:24:0;2146:203:1;3160:84:0;;;;;;;;;;-1:-1:-1;3160:84:0;;3234:2;2496:36:1;;2484:2;2469:18;3160:84:0;2354:184:1;37908:2580:0;;;;;;;;;;;;;:::i;10796:25::-;;;;;;;;;;-1:-1:-1;10796:25:0;;;;-1:-1:-1;;;;;10796:25:0;;;10863:29;;;;;;;;;;-1:-1:-1;10863:29:0;;;;-1:-1:-1;;;;;10863:29:0;;;12106:26;;;;;;;;;;-1:-1:-1;12106:26:0;;;;-1:-1:-1;;;12106:26:0;;;;;;47298:126;;;;;;;;;;-1:-1:-1;47298:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;47389:27:0;47365:4;47389:27;;;:18;:27;;;;;;;;;47298:126;37375:183;;;;;;;;;;-1:-1:-1;37375:183:0;;;;;:::i;:::-;;:::i;37735:114::-;;;;;;;;;;-1:-1:-1;37820:21:0;;37735:114;;33378:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10698:41::-;;;;;;;;;;-1:-1:-1;10698:41:0;;;;-1:-1:-1;;;;;10698:41:0;;;47158:128;;;;;;;;;;-1:-1:-1;47158:128:0;;;;;:::i;:::-;;:::i;47738:120::-;;;;;;;;;;-1:-1:-1;47738:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;47826:24:0;47802:4;47826:24;;;:15;:24;;;;;;;;;47738:120;12020:24;;;;;;;;;;-1:-1:-1;12020:24:0;;;;;;;-1:-1:-1;;;;;12020:24:0;;;3359:118;;;;;;;;;;-1:-1:-1;3359:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;3451:18:0;3424:7;3451:18;;;;;;;;;;;;3359:118;33268:98;;;;;;;;;;-1:-1:-1;33344:7:0;:14;33268:98;;18077:4986;;;;;;;;;;;;;:::i;46842:162::-;;;;;;;;;;-1:-1:-1;46842:162:0;;;;;:::i;:::-;;:::i;10828:28::-;;;;;;;;;;-1:-1:-1;10828:28:0;;;;-1:-1:-1;;;;;10828:28:0;;;13739:1070;;;;;;;;;;;;;:::i;1946:87::-;;;;;;;;;;-1:-1:-1;2019:6:0;;-1:-1:-1;;;;;2019:6:0;1946:87;;3057:95;;;;;;;;;;;;;:::i;33529:2260::-;;;;;;;;;;-1:-1:-1;33529:2260:0;;;;;:::i;:::-;;:::i;42534:319::-;;;;;;;;;;-1:-1:-1;42534:319:0;;;;;:::i;:::-;;:::i;3485:182::-;;;;;;;;;;-1:-1:-1;3485:182:0;;;;;:::i;:::-;;:::i;47912:305::-;;;;;;;;;;;;;:::i;41528:948::-;;;;;;;;;;-1:-1:-1;41528:948:0;;;;;:::i;:::-;;:::i;47604:122::-;;;;;;;;;;-1:-1:-1;47604:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;47693:25:0;47669:4;47693:25;;;:16;:25;;;;;;;;;47604:122;12051:24;;;;;;;;;;-1:-1:-1;12051:24:0;;;;-1:-1:-1;;;12051:24:0;;;;;;37201:166;;;;;;;;;;-1:-1:-1;37201:166:0;;;;;:::i;:::-;;:::i;44790:888::-;;;;;;;;;;-1:-1:-1;44790:888:0;;;;;:::i;:::-;;:::i;10925:40::-;;;;;;;;;;-1:-1:-1;10925:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42904:1603;;;;;;;;;;-1:-1:-1;42904:1603:0;;;;;:::i;:::-;;:::i;3675:142::-;;;;;;;;;;-1:-1:-1;3675:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;3782:18:0;;;3755:7;3782:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3675:142;46698:132;;;;;;;;;;-1:-1:-1;46698:132:0;;;;;:::i;:::-;;:::i;35874:1319::-;;;:::i;47016:130::-;;;;;;;;;;-1:-1:-1;47016:130:0;;;;;:::i;:::-;;:::i;47436:156::-;;;;;;;;;;-1:-1:-1;47436:156:0;;;;;:::i;:::-;-1:-1:-1;;;;;47542:42:0;47518:4;47542:42;;;:33;:42;;;;;;;;;47436:156;40534:958;;;;;;;;;;;;;:::i;2149:165::-;;;;;;;;;;-1:-1:-1;2149:165:0;;;;;:::i;:::-;;:::i;10746:43::-;;;;;;;;;;-1:-1:-1;10746:43:0;;;;-1:-1:-1;;;;;10746:43:0;;;2958:91;3003:13;3036:5;3029:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2958:91;:::o;3825:190::-;3899:4;3932:10;3953:32;3932:10;3969:7;3978:6;3953:8;:32::i;:::-;4003:4;3996:11;;;3825:190;;;;;:::o;4023:250::-;4111:4;4146:10;4167:38;4183:4;4146:10;4198:6;4167:15;:38::i;:::-;4216:27;4226:4;4232:2;4236:6;4216:9;:27::i;:::-;4261:4;4254:11;;;4023:250;;;;;;:::o;10972:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10972:24:0;;-1:-1:-1;10972:24:0;:::o;37908:2580::-;1905:13;:11;:13::i;:::-;38001:1:::1;37975:23;;:27;:56;;;;38030:1;38006:21;;:25;37975:56;37967:71;;;::::0;-1:-1:-1;;;37967:71:0;;5737:2:1;37967:71:0::1;::::0;::::1;5719:21:1::0;5776:1;5756:18;;;5749:29;-1:-1:-1;;;5794:18:1;;;5787:32;5836:18;;37967:71:0::1;;;;;;;;;38057:7;:14:::0;38049:33:::1;;;::::0;-1:-1:-1;;;38049:33:0;;6067:2:1;38049:33:0::1;::::0;::::1;6049:21:1::0;6106:1;6086:18;;;6079:29;-1:-1:-1;;;6124:18:1;;;6117:32;6166:18;;38049:33:0::1;5865:325:1::0;38049:33:0::1;38306:21;::::0;38280:23:::1;::::0;38180:12:::1;::::0;38153:24:::1;::::0;38280:47:::1;::::0;38306:21;38280:47:::1;:::i;:::-;38251:76;;38462:16;38441:18;:37;38437:2044;;;38526:13;38568:18:::0;38542:23:::1;:16:::0;38561:4:::1;38542:23;:::i;:::-;:44;;;;:::i;:::-;38526:60;;38601:30;38668:4;38660:5;38634:23;;:31;;;;:::i;:::-;:38;;;;:::i;:::-;38601:71;;38687:28;38750:4;38742:5;38718:21;;:29;;;;:::i;:::-;:36;;;;:::i;:::-;38687:67;;38857:22;38830:23;;:49;;;;;;;:::i;:::-;;;;;;;;38919:20;38894:21;;:45;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;39051:23:0::1;::::0;;39124:21:::1;::::0;;39221:48;;;;39284:44;;;39361:33:::1;::::0;;-1:-1:-1;;;39361:33:0;;;;39051:23;;39124:21;39361:4:::1;::::0;:31:::1;::::0;:33:::1;::::0;;::::1;::::0;39014:34:::1;::::0;39361:33;;;;;;;39014:34;39361:4;:33;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;;;;;39357:760;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;;;;;;;39521:6:0::1;39510:18;;;;;;:::i;:::-;;;;;;;;39626:51;39655:22:::0;39626:26;:51:::1;:::i;:::-;39600:23;:77:::0;39720:47:::1;39747:20:::0;39720:24;:47:::1;:::i;:::-;39696:21;:71:::0;-1:-1:-1;39357:760:0::1;;;;;-1:-1:-1::0;;;;;;;;;;;39814:48:0::1;;;;;:::i;:::-;;;;;;;;39960:51;39989:22:::0;39960:26;:51:::1;:::i;:::-;39934:23;:77:::0;40054:47:::1;40081:20:::0;40054:24;:47:::1;:::i;:::-;40030:21;:71:::0;39357:760:::1;38480:1648;;;;;37956:2532;;37908:2580::o:0;38437:2044::-:1;40192:4;-1:-1:-1::0;;;;;40192:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;40188:282;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;;;;;;;40352:6:0::1;40341:18;;;;;;:::i;:::-;;;;;;;;40283:92;37956:2532;;37908:2580::o:0;40188:282::-:1;;;-1:-1:-1::0;;;;;;;;;;;40406:48:0::1;;;;;:::i;:::-;;;;;;;;40188:282;37956:2532;;37908:2580::o:0;37375:183::-;1905:13;:11;:13::i;:::-;37486:4:::1;-1:-1:-1::0;;;;;37468:23:0;::::1;::::0;37460:38:::1;;;::::0;-1:-1:-1;;;37460:38:0;;8933:2:1;37460:38:0::1;::::0;::::1;8915:21:1::0;8972:1;8952:18;;;8945:29;-1:-1:-1;;;8990:18:1;;;8983:32;9032:18;;37460:38:0::1;8731:325:1::0;37460:38:0::1;37516:6;-1:-1:-1::0;;;;;37509:23:0::1;;37533:7;2019:6:::0;;-1:-1:-1;;;;;2019:6:0;;1946:87;37533:7:::1;37542;37509:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37375:183:::0;;:::o;33378:96::-;33423:16;33459:7;33452:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33452:14:0;;;;;;;;;;;;;;;;;;;;;;33378:96;:::o;47158:128::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;47244:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:34;;-1:-1:-1;;47244:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47158:128::o;18077:4986::-;1199:1;1345:7;;:19;1337:34;;;;-1:-1:-1;;;1337:34:0;;;;;;;:::i;:::-;1199:1;1382:7;:18;18157:7:::1;::::0;::::1;::::0;::::1;;;18156:8;18148:23;;;::::0;-1:-1:-1;;;18148:23:0;;10122:2:1;18148:23:0::1;::::0;::::1;10104:21:1::0;10161:1;10141:18;;;10134:29;-1:-1:-1;;;10179:18:1;;;10172:32;10221:18;;18148:23:0::1;9920:325:1::0;18148:23:0::1;18300:1;18276:21;;18250:23;;:47;;;;:::i;:::-;:51;18242:81;;;::::0;-1:-1:-1;;;18242:81:0;;10452:2:1;18242:81:0::1;::::0;::::1;10434:21:1::0;10491:2;10471:18;;;10464:30;-1:-1:-1;;;10510:18:1;;;10503:47;10567:18;;18242:81:0::1;10250:341:1::0;18242:81:0::1;18344:7;:14:::0;;-1:-1:-1;;18344:14:0::1;;;::::0;;18408:23:::1;::::0;18469:21:::1;::::0;18515:23;;:48;::::1;;;-1:-1:-1::0;18542:21:0;;18515:48:::1;18511:117;;;-1:-1:-1::0;;18580:7:0::1;:15:::0;;-1:-1:-1;;18580:15:0::1;::::0;;18610:7:::1;;18511:117;18725:12;18698:24;18824:37;18845:16:::0;18824:18;:37:::1;:::i;:::-;18796:65;;18995:16;18975:17;:36;18971:694;;;19059:13;19101:17:::0;19075:23:::1;:16:::0;19094:4:::1;19075:23;:::i;:::-;:43;;;;:::i;:::-;19059:59:::0;-1:-1:-1;19183:4:0::1;19154:26;19059:59:::0;19154:18;:26:::1;:::i;:::-;:33;;;;:::i;:::-;19133:54:::0;-1:-1:-1;19248:4:0::1;19221:24;19240:5:::0;19221:16;:24:::1;:::i;:::-;:31;;;;:::i;:::-;19202:50:::0;-1:-1:-1;19287:37:0::1;19202:50:::0;19287:18;:37:::1;:::i;:::-;19267:57;;19427:18;19400:23;;:45;;;;;;;:::i;:::-;;;;;;;;19485:16;19460:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;18971:694:0::1;::::0;-1:-1:-1;;18971:694:0::1;;19612:1;19586:23;:27:::0;;;19628:21:::1;:25:::0;18971:694:::1;19690:52;::::0;;10770:25:1;;;10826:2;10811:18;;10804:34;;;19690:52:0::1;::::0;10743:18:1;19690:52:0::1;;;;;;;19831:46;::::0;-1:-1:-1;;;19831:46:0;;19846:4:::1;19831:46;::::0;::::1;2292:51:1::0;;;19805:23:0::1;::::0;19831:31:::1;::::0;2265:18:1;;19831:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19805:72;;19910:17;19892:15;:35;19888:385;;;20073:18;20046:23;;:45;;;;;;;:::i;:::-;;;;;;;;20131:16;20106:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;20162:7:0::1;:15:::0;;-1:-1:-1;;20162:15:0::1;::::0;;20197:43:::1;::::0;-1:-1:-1;;;;;;;;;;;20197:43:0;::::1;::::0;11240:2:1;11222:21;;;11279:2;11259:18;;;11252:30;11318:31;11313:2;11298:18;;11291:59;11382:2;11367:18;;11038:353;20197:43:0::1;;;;;;;;20255:7;;;;;;;19888:385;20355:16;::::0;20323:69:::1;::::0;20340:4:::1;::::0;-1:-1:-1;;;;;20355:16:0::1;-1:-1:-1::0;;20323:8:0::1;:69::i;:::-;20488:21;20460:25;20610:31;20623:17:::0;20610:12:::1;:31::i;:::-;20588:53;;20666:11;20681:1;20666:16:::0;20662:342:::1;;20805:18;20778:23;;:45;;;;;;;:::i;:::-;;;;;;;;20863:16;20838:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;20894:7:0::1;:15:::0;;-1:-1:-1;;20894:15:0::1;::::0;;20929:42:::1;::::0;-1:-1:-1;;;;;;;;;;;20929:42:0;::::1;::::0;::::1;:::i;:::-;;;;;;;;20986:7;;;;;;;;;20662:342;21102:21;21138:39:::0;;::::1;21134:355;;21293:18;21266:23;;:45;;;;;;;:::i;:::-;;;;;;;;21351:16;21326:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;21387:39:0::1;::::0;-1:-1:-1;;;;;;;;;;;21387:39:0;::::1;::::0;::::1;:::i;:::-;;;;;;;;-1:-1:-1::0;;21441:7:0::1;:15:::0;;-1:-1:-1;;21441:15:0::1;::::0;;-1:-1:-1;21471:7:0::1;::::0;-1:-1:-1;;;;;21471:7:0::1;21134:355;21553:25;21581:38;21602:17:::0;21581:18;:38:::1;:::i;:::-;21553:66:::0;-1:-1:-1;21670:23:0::1;21737:17:::0;21696:38:::1;21716:18:::0;21553:66;21696:38:::1;:::i;:::-;:58;;;;:::i;:::-;21670:84:::0;-1:-1:-1;21765:21:0::1;21789:35;21670:84:::0;21789:17;:35:::1;:::i;:::-;21765:59:::0;-1:-1:-1;21883:19:0;;21879:997:::1;;21923:16;;;;;;;;;-1:-1:-1::0;;;;;21923:16:0::1;-1:-1:-1::0;;;;;21923:32:0::1;;21963:15;22006:4;22030:18;22067:1;22113::::0;22157:14:::1;;;;;;;;;-1:-1:-1::0;;;;;22157:14:0::1;22226:15;22244:3;22226:21;;;;:::i;:::-;21923:361;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;21923:361:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;21923:361:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;21919:946;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;;;;;;;22744:6:0::1;22725:26;;;;;;:::i;:::-;;;;;;;;22667:100;21919:946;;;;;-1:-1:-1::0;;;;;;;;;;;22798:51:0::1;;;;13232:2:1::0;13214:21;;;13271:2;13251:18;;;13244:30;13310:31;13305:2;13290:18;;13283:59;13374:2;13359:18;;13030:353;22798:51:0::1;;;;;;;;21919:946;;;22377:38;::::0;;10770:25:1;;;10826:2;10811:18;;10804:34;;;-1:-1:-1;;;;;;;;;;;22377:38:0;10743:18:1;22377:38:0::1;;;;;;;22285:381;;;21919:946;22937:17:::0;;22933:87:::1;;22971:37;22994:13;22971:22;:37::i;:::-;-1:-1:-1::0;;23040:7:0::1;:15:::0;;-1:-1:-1;;23040:15:0::1;::::0;;-1:-1:-1;;;;;;;;;1411:1:0::1;1155::::0;1423:7;:22;18077:4986::o;46842:162::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;46943:42:0;;;::::1;;::::0;;;:33:::1;:42;::::0;;;;:53;;-1:-1:-1;;46943:53:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46842:162::o;13739:1070::-;1905:13;:11;:13::i;:::-;13800:12:::1;::::0;::::1;;13799:13;13791:28;;;::::0;-1:-1:-1;;;13791:28:0;;13590:2:1;13791:28:0::1;::::0;::::1;13572:21:1::0;13629:1;13609:18;;;13602:29;-1:-1:-1;;;13647:18:1;;;13640:32;13689:18;;13791:28:0::1;13388:325:1::0;13791:28:0::1;13830:12;:19:::0;;-1:-1:-1;;13830:19:0::1;13845:4;13830:19;::::0;;13921:17:::1;::::0;13962:10:::1;::::0;13921:52:::1;::::0;-1:-1:-1;;;13921:52:0;;13955:4:::1;13921:52;::::0;::::1;13930:34:1::0;-1:-1:-1;;;;;13962:10:0;;::::1;13980:18:1::0;;;13973:43;13921:17:0;::::1;::::0;:25:::1;::::0;13865:18:1;;13921:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13905:13;:68:::0;;-1:-1:-1;;;;;;13905:68:0::1;-1:-1:-1::0;;;;;13905:68:0;;;::::1;::::0;;::::1;::::0;;14039:131:::1;;14103:17;::::0;14147:10:::1;::::0;14103:55:::1;::::0;-1:-1:-1;;;14103:55:0;;14140:4:::1;14103:55;::::0;::::1;13930:34:1::0;-1:-1:-1;;;;;14147:10:0;;::::1;13980:18:1::0;;;13973:43;14103:17:0;::::1;::::0;:28:::1;::::0;13865:18:1;;14103:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14087:13;:71:::0;;-1:-1:-1;;;;;;14087:71:0::1;-1:-1:-1::0;;;;;14087:71:0;;;::::1;::::0;;;::::1;::::0;;14039:131:::1;14198:13;::::0;-1:-1:-1;;;;;14198:13:0::1;14190:42;;;::::0;-1:-1:-1;;;14190:42:0;;14485:2:1;14190:42:0::1;::::0;::::1;14467:21:1::0;14524:1;14504:18;;;14497:29;-1:-1:-1;;;14542:18:1;;;14535:32;14584:18;;14190:42:0::1;14283:325:1::0;14190:42:0::1;14311:13;::::0;;-1:-1:-1;;;;;14311:13:0;;::::1;14292:33;::::0;;;:18:::1;:33;::::0;;;;;;;:40;;14328:4:::1;-1:-1:-1::0;;14292:40:0;;::::1;::::0;::::1;::::0;;;14445:13;;;::::1;14411:48:::0;;:33:::1;:48:::0;;;;;;:55;;;;::::1;;::::0;;;14511:16:::1;::::0;14479:69:::1;::::0;14496:4:::1;::::0;14511:16:::1;-1:-1:-1::0;;14479:8:0::1;:69::i;:::-;14584:10;::::0;14612:16:::1;::::0;14577:72:::1;::::0;-1:-1:-1;;;14577:72:0;;-1:-1:-1;;;;;14584:10:0;;::::1;::::0;14577:26:::1;::::0;:72:::1;::::0;14612:16;::::1;::::0;-1:-1:-1;;14631:17:0;14577:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14569:87;;;::::0;-1:-1:-1;;;14569:87:0;;14815:2:1;14569:87:0::1;::::0;::::1;14797:21:1::0;14854:1;14834:18;;;14827:29;-1:-1:-1;;;14872:18:1;;;14865:32;14914:18;;14569:87:0::1;14613:325:1::0;14569:87:0::1;14674:10;::::0;14694:13:::1;::::0;14667:60:::1;::::0;-1:-1:-1;;;14667:60:0;;-1:-1:-1;;;;;14674:10:0;;::::1;::::0;14667:26:::1;::::0;:60:::1;::::0;14694:13;::::1;::::0;-1:-1:-1;;14709:17:0;14667:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;14768:13:0::1;::::0;14738:63:::1;::::0;-1:-1:-1;;;14738:63:0;;14753:4:::1;::::0;14738:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;14768:13:0::1;::::0;-1:-1:-1;;14783:17:0;14738:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13739:1070::o:0;3057:95::-;3104:13;3137:7;3130:14;;;;;:::i;33529:2260::-;1905:13;:11;:13::i;:::-;33662:1:::1;33648:11;:15;33640:30;;;;-1:-1:-1::0;;;33640:30:0::1;;;;;;;:::i;:::-;33703:1;33689:11;:15;33681:30;;;::::0;-1:-1:-1;;;33681:30:0;;15475:2:1;33681:30:0::1;::::0;::::1;15457:21:1::0;15514:1;15494:18;;;15487:29;-1:-1:-1;;;15532:18:1;;;15525:32;15574:18;;33681:30:0::1;15273:325:1::0;33681:30:0::1;33754:46;::::0;-1:-1:-1;;;33754:46:0;;33769:4:::1;33754:46;::::0;::::1;2292:51:1::0;;;33804:11:0;;33754:31:::1;::::0;2265:18:1;;33754:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;33732:113;;;::::0;-1:-1:-1;;;33732:113:0;;15805:2:1;33732:113:0::1;::::0;::::1;15787:21:1::0;15844:1;15824:18;;;15817:29;-1:-1:-1;;;15862:18:1;;;15855:32;15904:18;;33732:113:0::1;15603:325:1::0;33732:113:0::1;33895:10;::::0;33888:40:::1;::::0;-1:-1:-1;;;33888:40:0;;33917:10:::1;33888:40;::::0;::::1;2292:51:1::0;33932:11:0;;-1:-1:-1;;;;;33895:10:0::1;::::0;33888:28:::1;::::0;2265:18:1;;33888:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;33866:107;;;::::0;-1:-1:-1;;;33866:107:0;;16135:2:1;33866:107:0::1;::::0;::::1;16117:21:1::0;16174:1;16154:18;;;16147:29;-1:-1:-1;;;16192:18:1;;;16185:32;16234:18;;33866:107:0::1;15933:325:1::0;33866:107:0::1;34075:10;::::0;34068:71:::1;::::0;-1:-1:-1;;;34068:71:0;;-1:-1:-1;;;;;34075:10:0;;::::1;::::0;34068:31:::1;::::0;:71:::1;::::0;34100:10:::1;::::0;34120:4:::1;::::0;34127:11;;34068:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34046:123;;;::::0;-1:-1:-1;;;34046:123:0;;16845:2:1;34046:123:0::1;::::0;::::1;16827:21:1::0;16884:1;16864:18;;;16857:29;-1:-1:-1;;;16902:18:1;;;16895:32;16944:18;;34046:123:0::1;16643:325:1::0;34046:123:0::1;34248:16;::::0;34216:63:::1;::::0;34233:4:::1;::::0;-1:-1:-1;;;;;34248:16:0::1;34267:11:::0;34216:8:::1;:63::i;:::-;34297:10;::::0;34325:16:::1;::::0;34290:66:::1;::::0;-1:-1:-1;;;34290:66:0;;-1:-1:-1;;;;;34297:10:0;;::::1;::::0;34290:26:::1;::::0;:66:::1;::::0;34325:16;::::1;::::0;34344:11;;34290:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;34381:16:0::1;::::0;34453:10:::1;::::0;-1:-1:-1;;;;;34381:16:0;;::::1;::::0;:29:::1;::::0;34433:4:::1;::::0;34453:10:::1;34478:11:::0;34504;34381:16:::1;::::0;34654:10:::1;34679:21;:15;34697:3;34679:21;:::i;:::-;34381:356;::::0;::::1;::::0;;;-1:-1:-1;;;;;;34381:356:0;;;-1:-1:-1;;;;;17388:15:1;;;34381:356:0::1;::::0;::::1;17370:34:1::0;17440:15;;;17420:18;;;17413:43;17472:18;;;17465:34;;;;17515:18;;;17508:34;;;;17558:19;;;17551:35;;;;17602:19;;;17595:35;17667:15;;;17646:19;;;17639:44;17699:19;;;17692:35;;;;17304:19;;34381:356:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;34381:356:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;34381:356:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;34377:1147;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;34892:16;::::0;34860:53:::1;::::0;34877:4:::1;::::0;-1:-1:-1;;;;;34892:16:0::1;;34860:8;:53::i;:::-;34935:10;::::0;34963:16:::1;::::0;34928:56:::1;::::0;-1:-1:-1;;;34928:56:0;;-1:-1:-1;;;;;34935:10:0;;::::1;::::0;34928:26:::1;::::0;:56:::1;::::0;34963:16;::::1;::::0;34935:10:::1;::::0;34928:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35068:10:0::1;::::0;35061:52:::1;::::0;-1:-1:-1;;;35061:52:0;;-1:-1:-1;;;;;35068:10:0;;::::1;::::0;35061:27:::1;::::0;:52:::1;::::0;35089:10:::1;::::0;35101:11;;35061:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35149:6;35142:14;;-1:-1:-1::0;;;35142:14:0::1;;;;;;;;:::i;34377:1147::-;;;35250:16;::::0;35218:53:::1;::::0;35235:4:::1;::::0;-1:-1:-1;;;;;35250:16:0::1;;35218:8;:53::i;:::-;35293:10;::::0;35321:16:::1;::::0;35286:56:::1;::::0;-1:-1:-1;;;35286:56:0;;-1:-1:-1;;;;;35293:10:0;;::::1;::::0;35286:26:::1;::::0;:56:::1;::::0;35321:16;::::1;::::0;35293:10:::1;::::0;35286:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35426:10:0::1;::::0;35419:52:::1;::::0;-1:-1:-1;;;35419:52:0;;-1:-1:-1;;;;;35426:10:0;;::::1;::::0;35419:27:::1;::::0;:52:::1;::::0;35447:10:::1;::::0;35459:11;;35419:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35500:12:0::1;::::0;-1:-1:-1;;;35500:12:0;;18227:2:1;35500:12:0::1;::::0;::::1;18209:21:1::0;18266:1;18246:18;;;18239:29;-1:-1:-1;;;18284:18:1;;;18277:32;18326:18;;35500:12:0::1;18025:325:1::0;34377:1147:0::1;-1:-1:-1::0;;34758:40:0::1;::::0;;10770:25:1;;;10826:2;10811:18;;10804:34;;;-1:-1:-1;;;;;;;;;;;34758:40:0;-1:-1:-1;10743:18:1;34758:40:0::1;;;;;;;35627:10;::::0;35620:43:::1;::::0;-1:-1:-1;;;35620:43:0;;35657:4:::1;35620:43;::::0;::::1;2292:51:1::0;35594:23:0::1;::::0;-1:-1:-1;;;;;35627:10:0::1;::::0;35620:28:::1;::::0;2265:18:1;;35620:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35594:69:::0;-1:-1:-1;35678:19:0;;35674:108:::1;;35721:10;::::0;35714:56:::1;::::0;-1:-1:-1;;;35714:56:0;;-1:-1:-1;;;;;35721:10:0;;::::1;::::0;35714:27:::1;::::0;:56:::1;::::0;35742:10:::1;::::0;35754:15;;35714:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33629:2160;33529:2260:::0;;:::o;42534:319::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;42626:31:0;::::1;42618:46;;;::::0;-1:-1:-1;;;42618:46:0;;18557:2:1;42618:46:0::1;::::0;::::1;18539:21:1::0;18596:1;18576:18;;;18569:29;-1:-1:-1;;;18614:18:1;;;18607:32;18656:18;;42618:46:0::1;18355:325:1::0;42618:46:0::1;42707:14;::::0;;-1:-1:-1;;;;;42732:34:0;;::::1;-1:-1:-1::0;;;;;;42732:34:0;::::1;::::0;::::1;::::0;;;42792:53:::1;::::0;;42707:14;;;::::1;13930:34:1::0;;;13995:2;13980:18;;13973:43;;;;42792:53:0::1;::::0;13865:18:1;42792:53:0::1;13718:304:1::0;3485:182:0;3555:4;3588:10;3609:28;3588:10;3626:2;3630:6;3609:9;:28::i;47912:305::-;1905:13;:11;:13::i;:::-;47984:9:::1;::::0;;;::::1;-1:-1:-1::0;;;;;47984:9:0::1;47976:54;;;;-1:-1:-1::0;;;47976:54:0::1;;;;;;;:::i;:::-;48049:12;::::0;-1:-1:-1;;;48049:12:0;::::1;;;48041:43;;;;-1:-1:-1::0;;;48041:43:0::1;;;;;;;:::i;:::-;48166:9;::::0;48155:54:::1;::::0;-1:-1:-1;;;48155:54:0;;48203:4:::1;48155:54;::::0;::::1;2292:51:1::0;48166:9:0;;;::::1;-1:-1:-1::0;;;;;48166:9:0::1;::::0;48155:39:::1;::::0;2265:18:1;;48155:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;41528:948:::0;1905:13;:11;:13::i;:::-;1199:1:::1;1345:7;;:19:::0;1337:34:::1;;;;-1:-1:-1::0;;;1337:34:0::1;;;;;;;:::i;:::-;1199:1;1382:7;:18:::0;41620:15;41612:57:::2;;;::::0;-1:-1:-1;;;41612:57:0;;19234:2:1;41612:57:0::2;::::0;::::2;19216:21:1::0;19273:2;19253:18;;;19246:30;19312:31;19292:18;;;19285:59;19361:18;;41612:57:0::2;19032:353:1::0;41612:57:0::2;41721:4;3424:7:::0;3451:18;;;;;;;;;;;41688:11:::2;:39;;41680:72;;;::::0;-1:-1:-1;;;41680:72:0;;19592:2:1;41680:72:0::2;::::0;::::2;19574:21:1::0;19631:2;19611:18;;;19604:30;-1:-1:-1;;;19650:18:1;;;19643:50;19710:18;;41680:72:0::2;19390:344:1::0;41680:72:0::2;41771:12;::::0;-1:-1:-1;;;41771:12:0;::::2;;;41763:43;;;;-1:-1:-1::0;;;41763:43:0::2;;;;;;;:::i;:::-;41902:21;41874:25;41991;42004:11:::0;41991:12:::2;:25::i;:::-;41969:47;;42078:11;42093:1;42078:16:::0;42074:87:::2;;42111:38;;-1:-1:-1::0;;;42111:38:0::2;;;;;;;:::i;42074:87::-;42259:21;42295:39:::0;;::::2;42291:107;;42351:35;;-1:-1:-1::0;;;42351:35:0::2;;;;;;;:::i;42291:107::-;42423:45;::::0;;10770:25:1;;;10826:2;10811:18;;10804:34;;;42423:45:0::2;::::0;10743:18:1;42423:45:0::2;;;;;;;-1:-1:-1::0;;1155:1:0::1;1423:7;:22:::0;-1:-1:-1;;41528:948:0:o;37201:166::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;37275:21:0;::::1;37267:36;;;::::0;-1:-1:-1;;;37267:36:0;;19941:2:1;37267:36:0::1;::::0;::::1;19923:21:1::0;19980:1;19960:18;;;19953:29;-1:-1:-1;;;19998:18:1;;;19991:32;20040:18;;37267:36:0::1;19739:325:1::0;37267:36:0::1;37314:16;:45:::0;;-1:-1:-1;;;;;;37314:45:0::1;-1:-1:-1::0;;;;;37314:45:0;;;::::1;::::0;;;::::1;::::0;;37201:166::o;44790:888::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;44870:24:0;::::1;44862:52;;;::::0;-1:-1:-1;;;44862:52:0;;20271:2:1;44862:52:0::1;::::0;::::1;20253:21:1::0;20310:2;20290:18;;;20283:30;-1:-1:-1;;;20329:18:1;;;20322:45;20384:18;;44862:52:0::1;20069:339:1::0;44862:52:0::1;45007:10;-1:-1:-1::0;;;;;44996:37:0::1;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;44996:39:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;44996:39:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;44992:521;;45469:32;::::0;-1:-1:-1;;;45469:32:0;;20615:2:1;45469:32:0::1;::::0;::::1;20597:21:1::0;20654:2;20634:18;;;20627:30;-1:-1:-1;;;20673:18:1;;;20666:52;20735:18;;45469:32:0::1;20413:346:1::0;44992:521:0::1;-1:-1:-1::0;;;;;45206:24:0;::::1;::::0;;::::1;::::0;:55:::1;;-1:-1:-1::0;;;;;;45234:27:0;::::1;45256:4;45234:27;;45206:55;45202:143;;;45282:47;::::0;-1:-1:-1;;;45282:47:0;;20966:2:1;45282:47:0::1;::::0;::::1;20948:21:1::0;21005:2;20985:18;;;20978:30;21044:34;21024:18;;;21017:62;-1:-1:-1;;;21095:18:1;;;21088:35;21140:19;;45282:47:0::1;20764:401:1::0;45202:143:0::1;45036:320;45568:9;:22:::0;;-1:-1:-1;;;;;;;;;45568:22:0;::::1;::::0;;::::1;45601:19:::0;;;;-1:-1:-1;;;;;;45601:19:0;;;;;;;-1:-1:-1;;;45601:19:0::1;::::0;;;45646:24:::1;::::0;::::1;::::0;-1:-1:-1;;45646:24:0::1;44790:888:::0;:::o;42904:1603::-;1905:13;:11;:13::i;:::-;1199:1:::1;1345:7;;:19:::0;1337:34:::1;;;;-1:-1:-1::0;;;1337:34:0::1;;;;;;;:::i;:::-;1199:1;1382:7;:18:::0;43011:15;43003:30:::2;;;;-1:-1:-1::0;;;43003:30:0::2;;;;;;;:::i;:::-;43052:46;::::0;-1:-1:-1;;;43052:46:0;;43067:4:::2;43052:46;::::0;::::2;2292:51:1::0;;;43102:11:0;;43052:31:::2;::::0;2265:18:1;;43052:46:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;43044:76;;;::::0;-1:-1:-1;;;43044:76:0;;15805:2:1;43044:76:0::2;::::0;::::2;15787:21:1::0;15844:1;15824:18;;;15817:29;-1:-1:-1;;;15862:18:1;;;15855:32;15904:18;;43044:76:0::2;15603:325:1::0;43044:76:0::2;43139:12;::::0;-1:-1:-1;;;43139:12:0;::::2;;;43131:43;;;;-1:-1:-1::0;;;43131:43:0::2;;;;;;;:::i;:::-;43257:16;::::0;43225:69:::2;::::0;43242:4:::2;::::0;-1:-1:-1;;;;;43257:16:0::2;-1:-1:-1::0;;43225:8:0::2;:69::i;:::-;43390:21;43362:25;43496;43509:11:::0;43496:12:::2;:25::i;:::-;43474:47;;43546:11;43561:1;43546:16:::0;43542:87:::2;;43579:38;;-1:-1:-1::0;;;43579:38:0::2;;;;;;;:::i;43542:87::-;43727:21;43763:39:::0;;::::2;43759:107;;43819:35;;-1:-1:-1::0;;;43819:35:0::2;;;;;;;:::i;43759:107::-;43930:25;43958:38;43979:17:::0;43958:18;:38:::2;:::i;:::-;43930:66:::0;-1:-1:-1;44047:23:0::2;44109:3;44073:33;10204:2;43930:66:::0;44073:33:::2;:::i;:::-;:39;;;;:::i;:::-;44047:65:::0;-1:-1:-1;44123:21:0::2;44181:3;44147:31;10260:2;44147:17:::0;:31:::2;:::i;:::-;:37;;;;:::i;:::-;44123:61:::0;-1:-1:-1;44243:19:0;;44239:117:::2;;44279:65;44293:15:::0;44340:3:::2;44310:27;10204:2;44310:11:::0;:27:::2;:::i;:::-;:33;;;;:::i;:::-;44279:13;:65::i;:::-;44417:17:::0;;44413:87:::2;;44451:37;44474:13;44451:22;:37::i;:::-;-1:-1:-1::0;;1155:1:0::1;1423:7;:22:::0;-1:-1:-1;;;;;42904:1603:0:o;46698:132::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;46784:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;46784:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46698:132::o;35874:1319::-;1905:13;:11;:13::i;:::-;35984:46:::1;::::0;-1:-1:-1;;;35984:46:0;;35999:4:::1;35984:46;::::0;::::1;2292:51:1::0;;;35962:19:0::1;::::0;35984:31:::1;::::0;2265:18:1;;35984:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35962:68;;36063:1;36049:11;:15;36041:30;;;;-1:-1:-1::0;;;36041:30:0::1;;;;;;;:::i;:::-;36102:1;36090:9;:13;36082:28;;;::::0;-1:-1:-1;;;36082:28:0;;21372:2:1;36082:28:0::1;::::0;::::1;21354:21:1::0;21411:1;21391:18;;;21384:29;-1:-1:-1;;;21429:18:1;;;21422:32;21471:18;;36082:28:0::1;21170:325:1::0;36082:28:0::1;36189:16;::::0;36157:63:::1;::::0;36174:4:::1;::::0;-1:-1:-1;;;;;36189:16:0::1;36208:11:::0;36157:8:::1;:63::i;:::-;36245:16;::::0;-1:-1:-1;;;;;36245:16:0::1;:32;36285:9;36318:4;36338:11:::0;36245:16:::1;::::0;36486:10:::1;36511:21;:15;36529:3;36511:21;:::i;:::-;36245:324;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;36245:324:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;36245:324:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;36241:945;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;36722:16;::::0;36690:53:::1;::::0;36707:4:::1;::::0;-1:-1:-1;;;;;36722:16:0::1;;36690:8;:53::i;:::-;36808:51;::::0;36816:10:::1;::::0;36837:21:::1;36808:51:::0;::::1;;;::::0;::::1;::::0;;;36837:21;36816:10;36808:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;36241:945;;;36996:16;::::0;36964:53:::1;::::0;36981:4:::1;::::0;-1:-1:-1;;;;;36996:16:0::1;;36964:8;:53::i;:::-;37082:51;::::0;37090:10:::1;::::0;37111:21:::1;37082:51:::0;::::1;;;::::0;::::1;::::0;;;37111:21;37090:10;37082:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;36241:945;-1:-1:-1::0;;36590:38:0::1;::::0;;10770:25:1;;;36618:9:0::1;10826:2:1::0;10811:18;;10804:34;-1:-1:-1;;;;;;;;;;;36590:38:0;-1:-1:-1;10743:18:1;36590:38:0::1;;;;;;;35951:1242;35874:1319::o:0;47016:130::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;47103:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:35;;-1:-1:-1;;47103:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47016:130::o;40534:958::-;1905:13;:11;:13::i;:::-;40669:16:::1;::::0;40637:69:::1;::::0;40654:4:::1;::::0;-1:-1:-1;;;;;40669:16:0::1;-1:-1:-1::0;;40637:8:0::1;:69::i;:::-;40785:10;::::0;40813:16:::1;::::0;40778:72:::1;::::0;-1:-1:-1;;;40778:72:0;;-1:-1:-1;;;;;40785:10:0;;::::1;::::0;40778:26:::1;::::0;:72:::1;::::0;40813:16;::::1;::::0;-1:-1:-1;;40832:17:0;40778:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;40778:72:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;40778:72:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;40774:193:::0;::::1;;-1:-1:-1::0;40889:10:0::1;::::0;40909:16:::1;::::0;40871:75:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;40889:10:0;;::::1;::::0;40909:16;::::1;::::0;-1:-1:-1;;40928:17:0;40871:75:::1;:::i;:::-;;;;;;;;40774:193;41042:13;::::0;-1:-1:-1;;;;;41042:13:0::1;:27:::0;41038:447:::1;;41097:10;::::0;41117:13:::1;::::0;41090:60:::1;::::0;-1:-1:-1;;;41090:60:0;;-1:-1:-1;;;;;41097:10:0;;::::1;::::0;41090:26:::1;::::0;:60:::1;::::0;41117:13;::::1;::::0;-1:-1:-1;;41132:17:0;41090:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;41090:60:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;41090:60:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;41086:177:::0;::::1;;-1:-1:-1::0;41193:10:0::1;::::0;41205:13:::1;::::0;41175:63:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;41193:10:0;;::::1;::::0;41205:13;::::1;::::0;-1:-1:-1;;41220:17:0;41175:63:::1;:::i;:::-;;;;;;;;41086:177;41325:13;::::0;41295:63:::1;::::0;-1:-1:-1;;;41295:63:0;;41310:4:::1;::::0;41295:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;41325:13:0::1;::::0;-1:-1:-1;;41340:17:0;41295:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;41295:63:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;41295:63:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;41291:183:::0;::::1;;-1:-1:-1::0;41416:13:0::1;::::0;41383:66:::1;::::0;::::1;::::0;::::1;::::0;41409:4:::1;::::0;-1:-1:-1;;;;;41416:13:0::1;::::0;-1:-1:-1;;41431:17:0;41383:66:::1;:::i;:::-;;;;;;;;41291:183;40534:958::o:0;2149:165::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;2238:22:0;::::1;2230:37;;;::::0;-1:-1:-1;;;2230:37:0;;21702:2:1;2230:37:0::1;::::0;::::1;21684:21:1::0;21741:1;21721:18;;;21714:29;-1:-1:-1;;;21759:18:1;;;21752:32;21801:18;;2230:37:0::1;21500:325:1::0;2230:37:0::1;2278:28;2297:8;2278:18;:28::i;5336:256::-:0;-1:-1:-1;;;;;5438:19:0;;;;;;:44;;-1:-1:-1;;;;;;5461:21:0;;;;5438:44;5430:59;;;;-1:-1:-1;;;5430:59:0;;22032:2:1;5430:59:0;;;22014:21:1;22071:1;22051:18;;;22044:29;-1:-1:-1;;;22089:18:1;;;22082:32;22131:18;;5430:59:0;21830:325:1;5430:59:0;-1:-1:-1;;;;;5500:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5552:32;;160:25:1;;;5552:32:0;;133:18:1;5552:32:0;;;;;;;5336:256;;;:::o;5600:311::-;-1:-1:-1;;;;;3782:18:0;;;5701:24;3782:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;5772:26;;;;5764:41;;;;-1:-1:-1;;;5764:41:0;;22362:2:1;5764:41:0;;;22344:21:1;22401:1;22381:18;;;22374:29;-1:-1:-1;;;22419:18:1;;;22412:32;22461:18;;5764:41:0;22160:325:1;5764:41:0;5841:51;5850:5;5857:7;5885:6;5866:16;:25;5841:8;:51::i;45733:680::-;-1:-1:-1;;;;;45865:18:0;;45857:33;;;;-1:-1:-1;;;45857:33:0;;22692:2:1;45857:33:0;;;22674:21:1;22731:1;22711:18;;;22704:29;-1:-1:-1;;;22749:18:1;;;22742:32;22791:18;;45857:33:0;22490:325:1;45857:33:0;-1:-1:-1;;;;;45909:16:0;;45901:31;;;;-1:-1:-1;;;45901:31:0;;23022:2:1;45901:31:0;;;23004:21:1;23061:1;23041:18;;;23034:29;-1:-1:-1;;;23079:18:1;;;23072:32;23121:18;;45901:31:0;22820:325:1;45901:31:0;45960:1;45951:6;:10;45943:25;;;;-1:-1:-1;;;45943:25:0;;23352:2:1;45943:25:0;;;23334:21:1;23391:1;23371:18;;;23364:29;-1:-1:-1;;;23409:18:1;;;23402:32;23451:18;;45943:25:0;23150:325:1;45943:25:0;46041:7;;;;;;;46037:94;;;46065:33;46081:4;46087:2;46091:6;46065:15;:33::i;46037:94::-;-1:-1:-1;;;;;46225:24:0;;46208:12;46225:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;46253:22:0;;;;;;:18;:22;;;;;;;;46225:50;46223:53;46208:68;;46364:41;46379:4;46385:2;46389:6;46397:7;46364:14;:41::i;2041:100::-;2116:10;2105:7;2019:6;;-1:-1:-1;;;;;2019:6:0;;1946:87;2105:7;-1:-1:-1;;;;;2105:21:0;;2097:36;;;;-1:-1:-1;;;2097:36:0;;23682:2:1;2097:36:0;;;23664:21:1;23721:1;23701:18;;;23694:29;-1:-1:-1;;;23739:18:1;;;23732:32;23781:18;;2097:36:0;23480:325:1;23071:5688:0;23131:7;23155:11;23170:1;23155:16;23151:30;;-1:-1:-1;23180:1:0;;23071:5688;-1:-1:-1;23071:5688:0:o;23151:30::-;23200:12;;-1:-1:-1;;;23200:12:0;;;;23192:43;;;;-1:-1:-1;;;23192:43:0;;;;;;;:::i;:::-;23327:11;23370;23353:28;;23349:118;;;-1:-1:-1;23415:11:0;23349:118;23511:16;;;23525:1;23511:16;;;;;;;;23487:21;;23511:16;;;;;;;;;;-1:-1:-1;23511:16:0;23487:40;;23556:4;23538;23543:1;23538:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23538:23:0;;;:7;;;;;;;;;;:23;;;;23582:16;;:23;;;-1:-1:-1;;;23582:23:0;;;;:16;;;;;:21;;:23;;;;;23538:7;;23582:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23572:4;23577:1;23572:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23572:33:0;;;:7;;;;;;;;;:33;24014:16;;23796:20;;23982:69;;23999:4;;24014:16;-1:-1:-1;;23982:8:0;:69::i;:::-;24124:16;24143:22;:15;24161:4;24143:22;:::i;:::-;24409:16;;24566:9;;24409:233;;-1:-1:-1;;;24409:233:0;;24124:41;;-1:-1:-1;24271:21:0;;-1:-1:-1;;;;;24409:16:0;;;;:67;;:233;;24491:14;;24520:12;;24547:4;;24566:9;;;;;;;;24124:41;;24409:233;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24405:4347;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;25010:6:0;24963:54;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24963:54:0;;;;;;;;;;24945:74;;;:::i;:::-;;;;;;;;25095:16;;25271:9;;25095:260;;-1:-1:-1;;;25095:260:0;;-1:-1:-1;;;;;25095:16:0;;;;:70;;:260;;25184:14;;25217:12;;25248:4;;25271:9;;;;;;;;25332:8;;25095:260;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25091:2110;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25641:23;;:27;25637:772;;25822:11;;;;;;;;;;;;-1:-1:-1;;;25822:11:0;;;;;25781:27;;;;;;:53;;25777:613;;25947:16;;25915:69;;25932:4;;-1:-1:-1;;;;;25947:16:0;-1:-1:-1;;25915:8:0;:69::i;:::-;26106:18;26127;26144:1;26127:14;:18;:::i;:::-;26106:39;-1:-1:-1;26176:14:0;;26172:195;;-1:-1:-1;;;;;;;;;;;26228:49:0;;;;25186:2:1;25168:21;;;25225:2;25205:18;;;25198:30;25264:34;25259:2;25244:18;;25237:62;-1:-1:-1;;;25330:2:1;25315:18;;25308:33;25373:3;25358:19;;24984:399;26228:49:0;;;;;;;;26315:24;26328:10;26315:12;:24::i;:::-;26308:31;23071:5688;-1:-1:-1;;;;;;;;;;23071:5688:0:o;26172:195::-;25836:554;25777:613;-1:-1:-1;;;;;;;;;;;26503:9:0;26450:63;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26450:63:0;;;;;;;;;;26432:83;;;:::i;:::-;;;;;;;;-1:-1:-1;26541:1:0;;23071:5688;-1:-1:-1;;;;;;;;23071:5688:0:o;25091:2110::-;;;26670:18;26691;26708:1;26691:14;:18;:::i;:::-;26670:39;;26745:1;26732:10;:14;:46;;;;;26764:14;26750:10;:28;;26732:46;26728:375;;;26883:16;;26851:69;;26868:4;;-1:-1:-1;;;;;26883:16:0;-1:-1:-1;;26851:8:0;:69::i;:::-;-1:-1:-1;;;;;;;;;;;26970:59:0;;;;;:::i;:::-;;;;;;;;27059:24;27072:10;27059:12;:24::i;:::-;27052:31;23071:5688;-1:-1:-1;;;;;;;;;23071:5688:0:o;26728:375::-;-1:-1:-1;;;;;;;;;;;27126:32:0;;;;26471:2:1;26453:21;;;26510:2;26490:18;;;26483:30;-1:-1:-1;;;26544:2:1;26529:18;;26522:48;26602:2;26587:18;;26269:342;25091:2110:0;25448:69;25470:17;25489:14;25505:11;25448:21;:69::i;:::-;25441:76;23071:5688;-1:-1:-1;;;;;;;;23071:5688:0:o;24405:4347::-;;;-1:-1:-1;;;;;;;;;;;27314:57:0;;;;26818:2:1;26800:21;;;26857:2;26837:18;;;26830:30;26896:34;26891:2;26876:18;;26869:62;-1:-1:-1;;;26962:2:1;26947:18;;26940:41;27013:3;26998:19;;26616:407;27314:57:0;;;;;;;;27447:16;;27623:9;;27447:260;;-1:-1:-1;;;27447:260:0;;-1:-1:-1;;;;;27447:16:0;;;;:70;;:260;;27536:14;;27569:12;;27600:4;;27623:9;;;;;;;;27684:8;;27447:260;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27443:1298;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;28018:9:0;27965:63;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27965:63:0;;;;;;;;;;27947:83;;;:::i;:::-;;;;;;;;-1:-1:-1;28056:1:0;;23071:5688;-1:-1:-1;;;;;;;23071:5688:0:o;27443:1298::-;;;28185:18;28206;28223:1;28206:14;:18;:::i;:::-;28185:39;;28260:1;28247:10;:14;:46;;;;;28279:14;28265:10;:28;;28247:46;28243:375;;;28398:16;;28366:69;;28383:4;;-1:-1:-1;;;;;28398:16:0;-1:-1:-1;;28366:8:0;:69::i;:::-;-1:-1:-1;;;;;;;;;;;28485:59:0;;;;;:::i;:::-;;;;;;;;28574:24;28587:10;28574:12;:24::i;28243:375::-;-1:-1:-1;;;;;;;;;;;28641:57:0;;;;27230:2:1;27212:21;;;27269:2;27249:18;;;27242:30;27308:34;27303:2;27288:18;;27281:62;-1:-1:-1;;;27374:2:1;27359:18;;27352:41;27425:3;27410:19;;27028:407;27443:1298:0;27800:69;27822:17;27841:14;27857:11;27800:21;:69::i;:::-;27793:76;23071:5688;-1:-1:-1;;;;;;;23071:5688:0:o;32418:819::-;32509:7;:14;32538:17;;;:32;;-1:-1:-1;32559:11:0;;32538:32;32534:45;;;32572:7;32418:819;:::o;32534:45::-;32599:23;32625:21;32634:12;32625:6;:21;:::i;:::-;32599:47;;32661:15;32680:1;32661:20;32657:33;;32683:7;;32418:819;:::o;32657:33::-;32715:9;32710:454;32734:12;32730:1;:16;32710:454;;;32768:14;32785:7;32793:1;32785:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;32785:10:0;;-1:-1:-1;32814:20:0;;;;;:47;;-1:-1:-1;;;;;;32838:23:0;;32856:4;32838:23;;32814:47;:74;;;;-1:-1:-1;32875:13:0;;-1:-1:-1;;;;;32865:23:0;;;32875:13;;32865:23;;32814:74;32810:343;;;32964:12;32982:6;-1:-1:-1;;;;;32982:11:0;33001:15;32982:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32963:58;;;33045:7;33040:98;;33082:36;;;;;27852:2:1;27834:21;;;27891:2;27871:18;;;27864:30;-1:-1:-1;;;27925:2:1;27910:18;;27903:49;27984:2;27969:18;;27650:343;33082:36:0;;;;;;;;33040:98;32890:263;32810:343;-1:-1:-1;32748:3:0;;;;:::i;:::-;;;;32710:454;;;-1:-1:-1;33189:40:0;;;10770:25:1;;;10826:2;10811:18;;10804:34;;;33189:40:0;;10743:18:1;33189:40:0;;;;;;;32475:762;;32418:819;:::o;30653:1724::-;30739:14;;;:34;;-1:-1:-1;30757:16:0;;30739:34;30735:47;;;30653:1724;;:::o;30735:47::-;30863:16;;30831:69;;30848:4;;-1:-1:-1;;;;;30863:16:0;-1:-1:-1;;30831:8:0;:69::i;:::-;30985:21;31009:13;31021:1;31009:9;:13;:::i;:::-;30985:37;;31037:13;31054:1;31037:18;31033:31;;31057:7;30653:1724;;:::o;31033:31::-;31134:23;31160:15;31174:1;31160:11;:15;:::i;:::-;31134:41;;31190:15;31209:1;31190:20;31186:33;;31212:7;;30653:1724;;:::o;31186:33::-;31296:20;31340:3;31319:18;:13;31335:2;31319:18;:::i;:::-;:24;;;;:::i;:::-;31296:47;-1:-1:-1;31370:22:0;31418:3;31395:20;:15;31413:2;31395:20;:::i;:::-;:26;;;;:::i;:::-;31370:51;-1:-1:-1;31486:16:0;31505:22;:15;31523:4;31505:22;:::i;:::-;31562:16;;31745:14;;31562:267;;-1:-1:-1;;;31562:267:0;;31486:41;;-1:-1:-1;;;;;;31562:16:0;;;;:32;;31602:13;;31562:267;;31639:4;;31659:15;;31689:14;;31718:12;;31745:14;;;;31486:41;;31562:267;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31562:267:0;;;;;;;;-1:-1:-1;;31562:267:0;;;;;;;;;;;;:::i;:::-;;;31558:812;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;32261:6:0;32242:26;;;;;;:::i;:::-;;;;;;;;32188:92;31558:812;;;;;-1:-1:-1;;;;;;;;;;;32307:51:0;;;;13232:2:1;13214:21;;;13271:2;13251:18;;;13244:30;13310:31;13305:2;13290:18;;13283:59;13374:2;13359:18;;13030:353;32307:51:0;;;;;;;;31558:812;;;31918:38;;;10770:25:1;;;10826:2;10811:18;;10804:34;;;-1:-1:-1;;;;;;;;;;;31918:38:0;10743:18:1;31918:38:0;;;;;;;31830:357;;;30724:1653;;;;;30653:1724;;:::o;2322:191::-;2415:6;;;-1:-1:-1;;;;;2432:17:0;;;-1:-1:-1;;;;;;2432:17:0;;;;;;;2465:40;;2415:6;;;2432:17;2415:6;;2465:40;;2396:16;;2465:40;2385:128;2322:191;:::o;4281:639::-;-1:-1:-1;;;;;4412:18:0;;4404:33;;;;-1:-1:-1;;;4404:33:0;;22692:2:1;4404:33:0;;;22674:21:1;22731:1;22711:18;;;22704:29;-1:-1:-1;;;22749:18:1;;;22742:32;22791:18;;4404:33:0;22490:325:1;4404:33:0;-1:-1:-1;;;;;4456:16:0;;4448:31;;;;-1:-1:-1;;;4448:31:0;;23022:2:1;4448:31:0;;;23004:21:1;23061:1;23041:18;;;23034:29;-1:-1:-1;;;23079:18:1;;;23072:32;23121:18;;4448:31:0;22820:325:1;4448:31:0;4507:1;4498:6;:10;4490:25;;;;-1:-1:-1;;;4490:25:0;;23352:2:1;4490:25:0;;;23334:21:1;23391:1;23371:18;;;23364:29;-1:-1:-1;;;23409:18:1;;;23402:32;23451:18;;4490:25:0;23150:325:1;4490:25:0;-1:-1:-1;;;;;4617:15:0;;4595:19;4617:15;;;;;;;;;;;4651:21;;;;4643:36;;;;-1:-1:-1;;;4643:36:0;;28936:2:1;4643:36:0;;;28918:21:1;28975:1;28955:18;;;28948:29;-1:-1:-1;;;28993:18:1;;;28986:32;29035:18;;4643:36:0;28734:325:1;4643:36:0;-1:-1:-1;;;;;4715:15:0;;;:9;:15;;;;;;;;;;;4733:20;;;4715:38;;4768:13;;;;;;;;;;:23;;;;;;4828:26;;160:25:1;;;4768:13:0;;4828:26;;133:18:1;4828:26:0;;;;;;;4875:37;37375:183;14817:2465;15050:18;15071:7;:37;;;-1:-1:-1;15095:13:0;;-1:-1:-1;;;;;15082:26:0;;;15095:13;;15082:26;15071:37;15050:58;;15133:13;:25;;;;-1:-1:-1;15151:7:0;;;;;;;15150:8;15133:25;15129:1857;;;15205:17;15245:3;15225:17;10149:1;15225:6;:17;:::i;:::-;:23;;;;:::i;:::-;15205:43;-1:-1:-1;15281:13:0;;15277:1698;;15375:23;15429:3;15401:25;10204:2;15401:9;:25;:::i;:::-;:31;;;;:::i;:::-;15375:57;-1:-1:-1;15451:21:0;15501:3;15475:23;10260:2;15475:9;:23;:::i;:::-;:29;;;;:::i;:::-;15451:53;-1:-1:-1;15599:22:0;15624:18;15633:9;15624:6;:18;:::i;:::-;15599:43;;15722:49;15738:6;15754:4;15761:9;15722:15;:49::i;:::-;15859:50;15875:6;15883:9;15894:14;15859:15;:50::i;:::-;16024:15;15997:23;;:42;;;;;;;:::i;:::-;;;;;;;;16083:13;16058:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;16179:61:0;;-1:-1:-1;16193:6:0;10322:11;16201:17;16193:6;-1:-1:-1;;;;;3451:18:0;3424:7;3451:18;;;;;;;;;;;;3359:118;16201:17;:38;;16179:13;:61::i;:::-;16259:67;16273:9;10322:11;16284:20;16294:9;-1:-1:-1;;;;;3451:18:0;3424:7;3451:18;;;;;;;;;;;;3359:118;16259:67;16496:13;;-1:-1:-1;;;;;16483:26:0;;;16496:13;;16483:26;:38;;;;-1:-1:-1;16514:7:0;;;;;;;16513:8;16483:38;:115;;;;;10429:11;16551:21;;16525:23;;:47;;;;:::i;:::-;:73;;16483:115;16479:438;;;16708:4;-1:-1:-1;;;;;16708:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16704:194;;16953:7;;;;;;;15277:1698;15160:1826;15129:1857;17034:42;17050:6;17058:9;17069:6;17034:15;:42::i;:::-;17135:61;17149:6;10322:11;17157:17;17167:6;-1:-1:-1;;;;;3451:18:0;3424:7;3451:18;;;;;;;;;;;;3359:118;17135:61;17207:67;17221:9;10322:11;17232:20;17242:9;-1:-1:-1;;;;;3451:18:0;3424:7;3451:18;;;;;;;;;;;;3359:118;17207:67;14957:2325;14817:2465;;;;:::o;28837:1490::-;28957:7;29079:9;;;;;;;;;-1:-1:-1;;;;;29079:9:0;-1:-1:-1;;;;;29068:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29064:1256;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;30160:6:0;30112:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;30112:55:0;;;;;;;;;;30094:75;;;:::i;:::-;;;;;;;;30191:1;30184:8;;;;;29064:1256;;;-1:-1:-1;;;;;;;;;;;30231:54:0;;;;29730:2:1;29712:21;;;29769:2;29749:18;;;29742:30;29808:34;29803:2;29788:18;;29781:62;-1:-1:-1;;;29874:2:1;29859:18;;29852:38;29922:3;29907:19;;29528:404;30231:54:0;;;;;;;;-1:-1:-1;30307:1:0;30300:8;;29064:1256;29205:21;29176:26;29263:38;29284:17;29205:21;29263:38;:::i;:::-;29241:60;-1:-1:-1;29334:15:0;;29330:698;;29375:43;;;10770:25:1;;;10826:2;10811:18;;10804:34;;;29375:43:0;;10743:18:1;29375:43:0;;;;;;;29592:11;29575:14;:28;29571:264;;;29628:23;29654:28;29668:14;29654:11;:28;:::i;:::-;29628:54;;29705:21;29729:29;29742:15;29729:12;:29::i;:::-;29705:53;-1:-1:-1;29788:27:0;29705:53;29788:11;:27;:::i;:::-;29781:34;;;;;;;;29571:264;29878:11;-1:-1:-1;29871:18:0;;-1:-1:-1;29871:18:0;29330:698;-1:-1:-1;;;;;;;;;;;29935:50:0;;;;30139:2:1;30121:21;;;30178:2;30158:18;;;30151:30;30217:34;30212:2;30197:18;;30190:62;-1:-1:-1;;;30283:2:1;30268:18;;30261:34;30327:3;30312:19;;29937:400;29935:50:0;;;;;;;;30011:1;30004:8;;;;;;17290:779;17385:13;;-1:-1:-1;;;;;17374:24:0;;;17385:13;;17374:24;;;;:52;;-1:-1:-1;;;;;;17402:24:0;;17421:4;17402:24;;17374:52;17370:692;;;17447:14;:36;;;;-1:-1:-1;;;;;;17466:17:0;;;;;;:8;:17;;;;;;;;17465:18;17447:36;17443:608;;;-1:-1:-1;;;;;;17504:17:0;;;;;:8;:17;;;;;:24;;-1:-1:-1;;17504:24:0;17524:4;17504:24;;;;;;17547:7;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;17547:21:0;;;;;;37908:2580::o;17443:608::-;17595:14;17594:15;:36;;;;-1:-1:-1;;;;;;17613:17:0;;;;;;:8;:17;;;;;;;;17594:36;17590:461;;;-1:-1:-1;;;;;17651:17:0;;17671:5;17651:17;;;:8;:17;;;;;:25;;-1:-1:-1;;17651:25:0;;;17759:277;17783:7;:14;17779:18;;17759:277;;;17845:7;-1:-1:-1;;;;;17831:21:0;:7;17839:1;17831:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;17831:10:0;:21;17827:190;;17894:7;17902:14;;:18;;17919:1;;17902:18;:::i;:::-;17894:27;;;;;;;;:::i;:::-;;;;;;;;;;;17881:7;:10;;-1:-1:-1;;;;;17894:27:0;;;;17889:1;;17881:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;17881:40:0;;;;;-1:-1:-1;;;;;17881:40:0;;;;;;17948:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;17948:13:0;;;;;-1:-1:-1;;;;;;17948:13:0;;;;;;37509:41:::1;37375:183:::0;;:::o;17827:190::-;17799:3;;;;:::i;:::-;;;;17759:277;;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:247::-;2602:6;2655:2;2643:9;2634:7;2630:23;2626:32;2623:52;;;2671:1;2668;2661:12;2623:52;2710:9;2697:23;2729:31;2754:5;2729:31;:::i;2795:461::-;2848:3;2886:5;2880:12;2913:6;2908:3;2901:19;2939:4;2968:2;2963:3;2959:12;2952:19;;3005:2;2998:5;2994:14;3026:1;3036:195;3050:6;3047:1;3044:13;3036:195;;;3115:13;;-1:-1:-1;;;;;3111:39:1;3099:52;;3171:12;;;;3206:15;;;;3147:1;3065:9;3036:195;;;-1:-1:-1;3247:3:1;;2795:461;-1:-1:-1;;;;;2795:461:1:o;3261:261::-;3440:2;3429:9;3422:21;3403:4;3460:56;3512:2;3501:9;3497:18;3489:6;3460:56;:::i;3760:118::-;3846:5;3839:13;3832:21;3825:5;3822:32;3812:60;;3868:1;3865;3858:12;3883:382;3948:6;3956;4009:2;3997:9;3988:7;3984:23;3980:32;3977:52;;;4025:1;4022;4015:12;3977:52;4064:9;4051:23;4083:31;4108:5;4083:31;:::i;:::-;4133:5;-1:-1:-1;4190:2:1;4175:18;;4162:32;4203:30;4162:32;4203:30;:::i;:::-;4252:7;4242:17;;;3883:382;;;;;:::o;4270:248::-;4338:6;4346;4399:2;4387:9;4378:7;4374:23;4370:32;4367:52;;;4415:1;4412;4405:12;4367:52;-1:-1:-1;;4438:23:1;;;4508:2;4493:18;;;4480:32;;-1:-1:-1;4270:248:1:o;4523:388::-;4591:6;4599;4652:2;4640:9;4631:7;4627:23;4623:32;4620:52;;;4668:1;4665;4658:12;4620:52;4707:9;4694:23;4726:31;4751:5;4726:31;:::i;:::-;4776:5;-1:-1:-1;4833:2:1;4818:18;;4805:32;4846:33;4805:32;4846:33;:::i;5150:380::-;5229:1;5225:12;;;;5272;;;5293:61;;5347:4;5339:6;5335:17;5325:27;;5293:61;5400:2;5392:6;5389:14;5369:18;5366:38;5363:161;;5446:10;5441:3;5437:20;5434:1;5427:31;5481:4;5478:1;5471:15;5509:4;5506:1;5499:15;5363:161;;5150:380;;;:::o;6195:127::-;6256:10;6251:3;6247:20;6244:1;6237:31;6287:4;6284:1;6277:15;6311:4;6308:1;6301:15;6327:125;6392:9;;;6413:10;;;6410:36;;;6426:18;;:::i;6457:168::-;6530:9;;;6561;;6578:15;;;6572:22;;6558:37;6548:71;;6599:18;;:::i;6630:217::-;6670:1;6696;6686:132;;6740:10;6735:3;6731:20;6728:1;6721:31;6775:4;6772:1;6765:15;6803:4;6800:1;6793:15;6686:132;-1:-1:-1;6832:9:1;;6630:217::o;6852:128::-;6919:9;;;6940:11;;;6937:37;;;6954:18;;:::i;6985:179::-;7020:3;7062:1;7044:16;7041:23;7038:120;;;7108:1;7105;7102;7087:23;-1:-1:-1;7145:1:1;7139:8;7134:3;7130:18;7038:120;6985:179;:::o;7301:346::-;7411:2;7392:13;;-1:-1:-1;;7388:27:1;7376:40;;7446:18;7431:34;;7467:22;;;7428:62;7425:185;;;7532:10;7527:3;7523:20;7520:1;7513:31;7567:4;7564:1;7557:15;7595:4;7592:1;7585:15;7425:185;7626:2;7619:22;-1:-1:-1;;7301:346:1:o;7652:671::-;7691:3;7733:4;7715:16;7712:26;7709:39;;;7652:671;:::o;7709:39::-;7775:2;7769:9;-1:-1:-1;;7840:16:1;7836:25;;7833:1;7769:9;7812:50;7891:4;7885:11;7915:16;7950:18;8021:2;8014:4;8006:6;8002:17;7999:25;7994:2;7986:6;7983:14;7980:45;7977:58;;;8028:5;;;;;7652:671;:::o;7977:58::-;8065:6;8059:4;8055:17;8044:28;;8101:3;8095:10;8128:2;8120:6;8117:14;8114:27;;;8134:5;;;;;;7652:671;:::o;8114:27::-;8218:2;8199:16;8193:4;8189:27;8185:36;8178:4;8169:6;8164:3;8160:16;8156:27;8153:69;8150:82;;;8225:5;;;;;;7652:671;:::o;8150:82::-;8241:57;8292:4;8283:6;8275;8271:19;8267:30;8261:4;8241:57;:::i;:::-;-1:-1:-1;8314:3:1;;7652:671;-1:-1:-1;;;;;7652:671:1:o;8328:398::-;8530:2;8512:21;;;8569:2;8549:18;;;8542:30;8608:34;8603:2;8588:18;;8581:62;-1:-1:-1;;;8674:2:1;8659:18;;8652:32;8716:3;8701:19;;8328:398::o;9061:274::-;-1:-1:-1;;;;;9253:32:1;;;;9235:51;;9317:2;9302:18;;9295:34;9223:2;9208:18;;9061:274::o;9340:245::-;9407:6;9460:2;9448:9;9439:7;9435:23;9431:32;9428:52;;;9476:1;9473;9466:12;9428:52;9508:9;9502:16;9527:28;9549:5;9527:28;:::i;9590:325::-;9792:2;9774:21;;;9831:1;9811:18;;;9804:29;-1:-1:-1;;;9864:2:1;9849:18;;9842:32;9906:2;9891:18;;9590:325::o;10849:184::-;10919:6;10972:2;10960:9;10951:7;10947:23;10943:32;10940:52;;;10988:1;10985;10978:12;10940:52;-1:-1:-1;11011:16:1;;10849:184;-1:-1:-1;10849:184:1:o;11396:352::-;11598:2;11580:21;;;11637:2;11617:18;;;11610:30;11676;11671:2;11656:18;;11649:58;11739:2;11724:18;;11396:352::o;11753:349::-;11955:2;11937:21;;;11994:2;11974:18;;;11967:30;12033:27;12028:2;12013:18;;12006:55;12093:2;12078:18;;11753:349::o;12107:607::-;-1:-1:-1;;;;;12466:15:1;;;12448:34;;12513:2;12498:18;;12491:34;;;;12556:2;12541:18;;12534:34;;;;12599:2;12584:18;;12577:34;;;;12648:15;;;12642:3;12627:19;;12620:44;12428:3;12680:19;;12673:35;;;;12397:3;12382:19;;12107:607::o;12719:306::-;12807:6;12815;12823;12876:2;12864:9;12855:7;12851:23;12847:32;12844:52;;;12892:1;12889;12882:12;12844:52;12921:9;12915:16;12905:26;;12971:2;12960:9;12956:18;12950:25;12940:35;;13015:2;13004:9;13000:18;12994:25;12984:35;;12719:306;;;;;:::o;14027:251::-;14097:6;14150:2;14138:9;14129:7;14125:23;14121:32;14118:52;;;14166:1;14163;14156:12;14118:52;14198:9;14192:16;14217:31;14242:5;14217:31;:::i;14943:325::-;15145:2;15127:21;;;15184:1;15164:18;;;15157:29;-1:-1:-1;;;15217:2:1;15202:18;;15195:32;15259:2;15244:18;;14943:325::o;16263:375::-;-1:-1:-1;;;;;16521:15:1;;;16503:34;;16573:15;;;;16568:2;16553:18;;16546:43;16620:2;16605:18;;16598:34;;;;16453:2;16438:18;;16263:375::o;18685:342::-;18887:2;18869:21;;;18926:2;18906:18;;;18899:30;-1:-1:-1;;;18960:2:1;18945:18;;18938:48;19018:2;19003:18;;18685:342::o;23810:127::-;23871:10;23866:3;23862:20;23859:1;23852:31;23902:4;23899:1;23892:15;23926:4;23923:1;23916:15;23942:574;24233:6;24222:9;24215:25;24276:6;24271:2;24260:9;24256:18;24249:34;24319:3;24314:2;24303:9;24299:18;24292:31;24196:4;24340:57;24392:3;24381:9;24377:19;24369:6;24340:57;:::i;:::-;-1:-1:-1;;;;;24433:32:1;;;;24428:2;24413:18;;24406:60;-1:-1:-1;24497:3:1;24482:19;24475:35;24332:65;23942:574;-1:-1:-1;;;23942:574:1:o;24521:458::-;24783:28;24778:3;24771:41;24753:3;24841:6;24835:13;24857:75;24925:6;24920:2;24915:3;24911:12;24904:4;24896:6;24892:17;24857:75;:::i;:::-;24952:16;;;;24970:2;24948:25;;24521:458;-1:-1:-1;;24521:458:1:o;25388:462::-;25650:34;25645:3;25638:47;25620:3;25714:6;25708:13;25730:73;25796:6;25791:2;25786:3;25782:12;25777:2;25769:6;25765:15;25730:73;:::i;:::-;25823:16;;;;25841:2;25819:25;;25388:462;-1:-1:-1;;25388:462:1:o;25855:409::-;26057:2;26039:21;;;26096:2;26076:18;;;26069:30;26135:34;26130:2;26115:18;;26108:62;-1:-1:-1;;;26201:2:1;26186:18;;26179:43;26254:3;26239:19;;25855:409::o;27998:135::-;28037:3;28058:17;;;28055:43;;28078:18;;:::i;:::-;-1:-1:-1;28125:1:1;28114:13;;27998:135::o;29064:459::-;29326:29;29321:3;29314:42;29296:3;29385:6;29379:13;29401:75;29469:6;29464:2;29459:3;29455:12;29448:4;29440:6;29436:17;29401:75;:::i;:::-;29496:16;;;;29514:2;29492:25;;29064:459;-1:-1:-1;;29064:459:1:o;30342:127::-;30403:10;30398:3;30394:20;30391:1;30384:31;30434:4;30431:1;30424:15;30458:4;30455:1;30448:15
Swarm Source
ipfs://8a7d6ca80ed0956a2a7dfe20ffdeb54305d1bcfda00c2585b69731c1b9fe0307
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.