More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 180,543 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Open Trade | 28175538 | 985 days ago | IN | 0 POL | 0.0040695 | ||||
Open Trade | 24158121 | 1091 days ago | IN | 0 POL | 0.00173094 | ||||
Open Trade | 24158063 | 1091 days ago | IN | 0 POL | 0.00154435 | ||||
Open Trade | 23901178 | 1097 days ago | IN | 0 POL | 0.008121 | ||||
Open Trade | 23901095 | 1097 days ago | IN | 0 POL | 0.008121 | ||||
Open Trade | 23900739 | 1097 days ago | IN | 0 POL | 0.0081246 | ||||
Open Trade | 23900739 | 1097 days ago | IN | 0 POL | 0.0081246 | ||||
Open Trade | 23900655 | 1097 days ago | IN | 0 POL | 0.00380092 | ||||
Open Trade | 23840320 | 1099 days ago | IN | 0 POL | 0.008139 | ||||
Open Trade | 23840258 | 1099 days ago | IN | 0 POL | 0.0081246 | ||||
Open Trade | 23748223 | 1101 days ago | IN | 0 POL | 0.0016206 | ||||
Open Trade | 23347185 | 1112 days ago | IN | 0 POL | 0.0162564 | ||||
Open Trade | 22900248 | 1123 days ago | IN | 0 POL | 0.00203025 | ||||
Open Trade | 22888788 | 1123 days ago | IN | 0 POL | 0.00230197 | ||||
Open Trade | 22888258 | 1123 days ago | IN | 0 POL | 0.00254458 | ||||
Open Trade | 22888257 | 1123 days ago | IN | 0 POL | 0.00203115 | ||||
Open Trade | 22888065 | 1123 days ago | IN | 0 POL | 0.00338375 | ||||
Open Trade | 22884408 | 1123 days ago | IN | 0 POL | 0.00173248 | ||||
Execute Nft Orde... | 22762874 | 1127 days ago | IN | 0 POL | 0.01437612 | ||||
Execute Nft Orde... | 22762866 | 1127 days ago | IN | 0 POL | 0.01437612 | ||||
Execute Nft Orde... | 22762864 | 1127 days ago | IN | 0 POL | 0.01303959 | ||||
Execute Nft Orde... | 22762752 | 1127 days ago | IN | 0 POL | 0.00352261 | ||||
Execute Nft Orde... | 22762745 | 1127 days ago | IN | 0 POL | 0.00352261 | ||||
Execute Nft Orde... | 22762738 | 1127 days ago | IN | 0 POL | 0.00352261 | ||||
Execute Nft Orde... | 22762731 | 1127 days ago | IN | 0 POL | 0.00352261 |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
GFarmTradingV5
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-10-12 */ // File: contracts\interfaces\UniswapRouterInterfaceV5.sol // SPDX-License-Identifier: MIT pragma solidity 0.8.7; interface UniswapRouterInterfaceV5{ function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); } // File: contracts\interfaces\AggregatorInterfaceV5.sol pragma solidity 0.8.7; interface AggregatorInterfaceV5{ enum OrderType { MARKET_OPEN, MARKET_CLOSE, LIMIT_OPEN, LIMIT_CLOSE } function getPrice(uint,OrderType,uint) external returns(uint); function tokenPriceDai() external view returns(uint); function pairMinOpenLimitSlippageP(uint) external view returns(uint); function closeFeeP(uint) external view returns(uint); function linkFee(uint,uint) external view returns(uint); function openFeeP(uint) external view returns(uint); function pairMinLeverage(uint) external view returns(uint); function pairMaxLeverage(uint) external view returns(uint); function pairsCount() external view returns(uint); function tokenDaiReservesLp() external view returns(uint, uint); function referralP(uint) external view returns(uint); function nftLimitOrderFeeP(uint) external view returns(uint); } // File: contracts\interfaces\TokenInterfaceV5.sol pragma solidity 0.8.7; interface TokenInterfaceV5{ function burn(address, uint256) external; function mint(address, uint256) external; function transfer(address, uint256) external returns (bool); function transferFrom(address, address, uint256) external returns(bool); function balanceOf(address) external view returns(uint256); function hasRole(bytes32, address) external view returns (bool); function approve(address, uint256) external returns (bool); function allowance(address, address) external view returns (uint256); } // File: contracts\interfaces\NftInterfaceV5.sol pragma solidity 0.8.7; interface NftInterfaceV5{ function balanceOf(address) external view returns (uint); function ownerOf(uint) external view returns (address); function transferFrom(address, address, uint) external; function tokenOfOwnerByIndex(address, uint) external view returns(uint); } // File: contracts\interfaces\VaultInterfaceV5.sol pragma solidity 0.8.7; interface VaultInterfaceV5{ function sendDaiToTrader(address, uint) external; } // File: contracts\interfaces\StorageInterfaceV5.sol pragma solidity 0.8.7; interface StorageInterfaceV5{ enum LimitOrder { TP, SL, LIQ, OPEN } struct Trader{ uint leverageUnlocked; address referral; uint referralRewardsTotal; // 1e18 } struct Trade{ address trader; uint pairIndex; uint index; uint initialPosToken; // 1e18 uint positionSizeDai; // 1e18 uint openPrice; // PRECISION bool buy; uint leverage; uint tp; // PRECISION uint sl; // PRECISION } struct TradeInfo{ uint tokenId; uint tokenPriceDai; // PRECISION uint openInterestDai; // 1e18 uint tpLastUpdated; uint slLastUpdated; bool beingMarketClosed; } struct OpenLimitOrder{ address trader; uint pairIndex; uint index; uint positionSize; // 1e18 (DAI or GFARM2) uint spreadReductionP; bool buy; uint leverage; uint tp; // PRECISION (%) uint sl; // PRECISION (%) uint minPrice; // PRECISION uint maxPrice; // PRECISION uint block; uint tokenId; // index in supportedTokens } struct PendingMarketOrder{ Trade trade; uint block; uint wantedPrice; // PRECISION uint slippageP; // PRECISION (%) uint spreadReductionP; uint tokenId; // index in supportedTokens } struct PendingNftOrder{ address nftHolder; uint nftId; address trader; uint pairIndex; uint index; LimitOrder orderType; } function PRECISION() external pure returns(uint); function gov() external view returns(address); function dev() external view returns(address); function dai() external view returns(TokenInterfaceV5); function token() external view returns(TokenInterfaceV5); function linkErc677() external view returns(TokenInterfaceV5); function tokenDaiRouter() external view returns(UniswapRouterInterfaceV5); function priceAggregator() external view returns(AggregatorInterfaceV5); function vault() external view returns(VaultInterfaceV5); function trading() external view returns(address); function callbacks() external view returns(address); function handleTokens(address,uint,bool) external; function transferDai(address, address, uint) external; function transferLinkToAggregator(address, uint, uint) external; function unregisterTrade(address, uint, uint) external; function unregisterPendingMarketOrder(uint, bool) external; function unregisterOpenLimitOrder(address, uint, uint) external; function hasOpenLimitOrder(address, uint, uint) external view returns(bool); function storePendingMarketOrder(PendingMarketOrder memory, uint, bool) external; function storeReferral(address, address) external; function openTrades(address, uint, uint) external view returns(Trade memory); function openTradesInfo(address, uint, uint) external view returns(TradeInfo memory); function updateSl(address, uint, uint, uint) external; function updateTp(address, uint, uint, uint) external; function getOpenLimitOrder(address, uint, uint) external view returns(OpenLimitOrder memory); function spreadReductionsP(uint) external view returns(uint); function positionSizeTokenDynamic(uint,uint) external view returns(uint); function maxSlP() external view returns(uint); function storeOpenLimitOrder(OpenLimitOrder memory) external; function reqID_pendingMarketOrder(uint) external view returns(PendingMarketOrder memory); function storePendingNftOrder(PendingNftOrder memory, uint) external; function updateOpenLimitOrder(OpenLimitOrder calldata) external; function firstEmptyTradeIndex(address, uint) external view returns(uint); function firstEmptyOpenLimitIndex(address, uint) external view returns(uint); function increaseNftRewards(uint, uint) external; function nftSuccessTimelock() external view returns(uint); function currentPercentProfit(uint,uint,bool,uint) external view returns(int); function reqID_pendingNftOrder(uint) external view returns(PendingNftOrder memory); function setNftLastSuccess(uint) external; function updateTrade(Trade memory) external; function nftLastSuccess(uint) external view returns(uint); function unregisterPendingNftOrder(uint) external; function handleDevGovFees(uint, uint, bool, bool) external returns(uint); function distributeLpRewards(uint) external; function getReferral(address) external view returns(address); function increaseReferralRewards(address, uint) external; function storeTrade(Trade memory, TradeInfo memory) external; function setLeverageUnlocked(address, uint) external; function getLeverageUnlocked(address) external view returns(uint); function openLimitOrdersCount(address, uint) external view returns(uint); function maxOpenLimitOrdersPerPair() external view returns(uint); function openTradesCount(address, uint) external view returns(uint); function pendingMarketOpenCount(address, uint) external view returns(uint); function pendingMarketCloseCount(address, uint) external view returns(uint); function maxTradesPerPair() external view returns(uint); function maxTradesPerBlock() external view returns(uint); function tradesPerBlock(uint) external view returns(uint); function pendingOrderIdsCount(address) external view returns(uint); function maxPendingMarketOrders() external view returns(uint); function maxGainP() external view returns(uint); function defaultLeverageUnlocked() external view returns(uint); function openInterestDai(uint, uint) external view returns(uint); function getPendingOrderIds(address) external view returns(uint[] memory); function traders(address) external view returns(Trader memory); function nfts(uint) external view returns(NftInterfaceV5); } // File: contracts\GFarmTradingV5.sol pragma solidity 0.8.7; contract GFarmTradingV5{ // Is contract active bool public isPaused; // Trading storage StorageInterfaceV5 public storageT; // Variables (specific to this implementation) uint public maxPosDaiP = 0.3 * 1e10; // PRECISION (%) uint public minPosDai = 35 * 1e18; // 1e18 ($) uint public limitOrdersTimelock = 30; // block uint public orderTimeout = 50; // block // Events event Pause(bool paused); event NumberUpdated(string name, uint value); event AddressUpdated(string name, address a); event MarketOrderInitiated(address trader, uint pairIndex, bool open, uint orderId); event NftOrderInitiated(address nftHolder, address trader, uint pairIndex, uint orderId); event OpenLimitPlaced(address indexed trader, uint indexed pairIndex, uint index); event OpenLimitUpdated(address indexed trader, uint indexed pairIndex, uint index); event OpenLimitCanceled(address indexed trader, uint indexed pairIndex, uint index); event TpUpdated(address indexed trader, uint indexed pairIndex, uint index); event SlUpdated(address indexed trader, uint indexed pairIndex, uint index); event ChainlinkCallbackTimeout(uint orderId, StorageInterfaceV5.PendingMarketOrder order); event CouldNotCloseTrade(address indexed trader, uint indexed pairIndex, uint index, string message); constructor(StorageInterfaceV5 _storageT) { require(address(_storageT) != address(0)); storageT = _storageT; } // 1. MANAGE STATE // Modifiers modifier onlyGov(){ require(msg.sender == storageT.gov(), "GOV_ONLY"); _; } // Manage trading storage address // CAREFUL: IF ADDRESS WRONG, CONTRACT CAN BE STUCK function setStorageT(StorageInterfaceV5 _storageT) external onlyGov{ require(_storageT.gov() == storageT.gov()); storageT = _storageT; emit AddressUpdated("storageT", address(_storageT)); } // Prevent doing anything => during contracts update function pause() external onlyGov{ isPaused = !isPaused; emit Pause(isPaused); } // Manage variables function setMaxPosDaiP(uint _maxP) external onlyGov{ require(_maxP > 0); maxPosDaiP = _maxP; emit NumberUpdated("maxPosDaiP", _maxP); } function setMinPosDai(uint _min) external onlyGov{ require(_min > 0); minPosDai = _min; emit NumberUpdated("minPosDai", _min); } function setLimitOrdersTimelock(uint _blocks) external onlyGov{ require(_blocks > 0); limitOrdersTimelock = _blocks; emit NumberUpdated("limitOrdersTimelock", _blocks); } function setOrderTimeout(uint _orderTimeout) external onlyGov{ require(_orderTimeout > 0); orderTimeout = _orderTimeout; emit NumberUpdated("orderTimeout", _orderTimeout); } // 2. EXTERNAL TRADING FUNCTIONS // Modifiers modifier notContract(){ require(tx.origin == msg.sender); _; } modifier notPaused(){ require(!isPaused, "PAUSED"); _; } // Open a new trade (market or limit) function openTrade( StorageInterfaceV5.Trade memory t, bool _limit, uint _spreadReductionId, uint _slippageP, address _referral ) external notContract notPaused{ require(storageT.openTradesCount(msg.sender, t.pairIndex) + storageT.pendingMarketOpenCount(msg.sender, t.pairIndex) + storageT.openLimitOrdersCount(msg.sender, t.pairIndex) < storageT.maxTradesPerPair(), "MAX_TRADES_PER_PAIR"); require(storageT.tradesPerBlock(block.number) < storageT.maxTradesPerBlock(), "MAX_TRADES_PER_BLOCK"); require(storageT.pendingOrderIdsCount(msg.sender) < storageT.maxPendingMarketOrders(), "MAX_PENDING_ORDERS"); (, uint _reserveDai) = storageT.priceAggregator().tokenDaiReservesLp(); require(t.positionSizeDai <= _reserveDai*maxPosDaiP/100/storageT.PRECISION(), "ABOVE_MAX_POS"); require(t.positionSizeDai >= minPosDai, "BELOW_MIN_POS"); require(t.leverage > 0 && t.leverage >= storageT.priceAggregator().pairMinLeverage(t.pairIndex) && t.leverage <= storageT.priceAggregator().pairMaxLeverage(t.pairIndex), "LEVERAGE_INCORRECT"); require(t.leverage <= storageT.defaultLeverageUnlocked() || t.leverage <= storageT.getLeverageUnlocked(msg.sender), "LEVERAGE_NOT_UNLOCKED"); require(_spreadReductionId == 0 || storageT.nfts(_spreadReductionId-1).balanceOf(msg.sender) > 0, "NO_CORRESPONDING_NFT_SPREAD_REDUCTION"); require(t.positionSizeDai * t.leverage + storageT.openInterestDai(t.pairIndex, t.buy ? 0 : 1) <= storageT.openInterestDai(t.pairIndex, 2), "MAX_OPEN_INTEREST"); require(t.tp == 0 || t.buy && t.openPrice < t.tp || !t.buy && t.openPrice > t.tp, "WRONG_TP"); require(t.sl == 0 || t.buy && t.openPrice > t.sl || !t.buy && t.openPrice < t.sl, "WRONG_SL"); storageT.transferDai(msg.sender, address(storageT), t.positionSizeDai); if(_limit){ require(_slippageP >= storageT.priceAggregator().pairMinOpenLimitSlippageP(t.pairIndex), "SLIPPAGE_TOO_SMALL"); uint slip = t.openPrice*_slippageP/storageT.PRECISION()/100; uint index = storageT.firstEmptyOpenLimitIndex(msg.sender, t.pairIndex); storageT.storeOpenLimitOrder(StorageInterfaceV5.OpenLimitOrder( msg.sender, t.pairIndex, index, t.positionSizeDai, _spreadReductionId > 0 ? storageT.spreadReductionsP(_spreadReductionId-1) : 0, t.buy, t.leverage, t.tp, t.sl, t.buy ? t.openPrice - slip : t.openPrice, t.buy ? t.openPrice : t.openPrice + slip, block.number, 0 )); emit OpenLimitPlaced(msg.sender, t.pairIndex, index); }else{ uint order = storageT.priceAggregator().getPrice( t.pairIndex, AggregatorInterfaceV5.OrderType.MARKET_OPEN, t.positionSizeDai * t.leverage ); storageT.storePendingMarketOrder( StorageInterfaceV5.PendingMarketOrder( StorageInterfaceV5.Trade( msg.sender, t.pairIndex, 0, 0, t.positionSizeDai, 0, t.buy, t.leverage, t.tp, t.sl ), 0, t.openPrice, _slippageP, _spreadReductionId > 0 ? storageT.spreadReductionsP(_spreadReductionId-1) : 0, 0 ), order, true ); emit MarketOrderInitiated(msg.sender, t.pairIndex, true, order); } storageT.storeReferral(msg.sender, _referral); } // Update open limit order function updateOpenLimitOrder( uint _pairIndex, uint _index, uint _price, // PRECISION uint _slippageP, // PRECISION, uint _tp, uint _sl ) external notContract notPaused{ require(storageT.hasOpenLimitOrder(msg.sender, _pairIndex, _index), "NO_LIMIT"); require(_slippageP >= storageT.priceAggregator().pairMinOpenLimitSlippageP(_pairIndex), "MIN_LIMIT_SLIPPAGE_P"); StorageInterfaceV5.OpenLimitOrder memory o = storageT.getOpenLimitOrder(msg.sender, _pairIndex, _index); require(block.number - o.block >= limitOrdersTimelock, "LIMIT_TIMELOCK"); require(_tp == 0 || o.buy && _price < _tp || !o.buy && _price > _tp, "WRONG_TP"); require(_sl == 0 || o.buy && _price > _sl || !o.buy && _price < _sl, "WRONG_SL"); uint slip = _price*_slippageP/storageT.PRECISION()/100; o.minPrice = o.buy ? _price - slip : _price; o.maxPrice = o.buy ? _price : _price + slip; o.tp = _tp; o.sl = _sl; storageT.updateOpenLimitOrder(o); emit OpenLimitUpdated(msg.sender, _pairIndex, _index); } // Cancel open limit order function cancelOpenLimitOrder(uint _pairIndex, uint _index) external notContract notPaused{ require(storageT.hasOpenLimitOrder(msg.sender, _pairIndex, _index), "NO_LIMIT"); StorageInterfaceV5.OpenLimitOrder memory o = storageT.getOpenLimitOrder(msg.sender, _pairIndex, _index); require(block.number - o.block >= limitOrdersTimelock, "LIMIT_TIMELOCK"); storageT.transferDai(address(storageT), msg.sender, o.positionSize); storageT.unregisterOpenLimitOrder(msg.sender, _pairIndex, _index); emit OpenLimitCanceled(msg.sender, _pairIndex, _index); } // Update take profit for an open trade // Set to 0 to remove // Can be set in loss (for example exit long on a bounce even if in loss) // If long and tp is below current price => can be closed instantly // If short and tp is above current price => can be closed instantly function updateTp(uint _pairIndex, uint _index, uint _newTp) external notContract notPaused{ StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index); StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index); require(t.leverage > 0, "NO_TRADE"); require(block.number - i.tpLastUpdated >= limitOrdersTimelock, "LIMIT_TIMELOCK"); storageT.updateTp(msg.sender, _pairIndex, _index, _newTp); emit TpUpdated(msg.sender, _pairIndex, _index); } // Update stop loss for an open trade // Set to 0 to remove // If long and sl is above current price => can be closed instantly // If short and sl is below current price => can be closed instantly // Can be set in profit = stop profit // must be above -STOP_LOSS_P profit => if liq at -90% => above -80% // otherwise can set at -89% and earn 11% of position size while at -90% liquidation earns 0 to trader function updateSl(uint _pairIndex, uint _index, uint _newSl) external notContract notPaused{ StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index); StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index); require(t.leverage > 0, "NO_TRADE"); uint maxSlDist = t.openPrice * storageT.maxSlP() / 100 / t.leverage; require(_newSl == 0 || t.buy && _newSl >= t.openPrice - maxSlDist || !t.buy && _newSl <= t.openPrice + maxSlDist, "SL_TOO_BIG"); require(block.number - i.slLastUpdated >= limitOrdersTimelock, "LIMIT_TIMELOCK"); storageT.updateSl(msg.sender, _pairIndex, _index, _newSl); emit SlUpdated(msg.sender, _pairIndex, _index); } // Close open trade at current price function closeTradeMarket(uint _pairIndex, uint _index) external notContract notPaused{ StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index); StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index); require(storageT.tradesPerBlock(block.number) < storageT.maxTradesPerBlock(), "MAX_TRADES_PER_BLOCK"); require(storageT.pendingOrderIdsCount(msg.sender) < storageT.maxPendingMarketOrders(), "MAX_PENDING_ORDERS"); require(!i.beingMarketClosed, "ALREADY_BEING_CLOSED"); require(t.leverage > 0, "NO_TRADE"); uint order = storageT.priceAggregator().getPrice( _pairIndex, AggregatorInterfaceV5.OrderType.MARKET_CLOSE, t.initialPosToken * t.leverage * i.tokenPriceDai / storageT.PRECISION() ); storageT.storePendingMarketOrder(StorageInterfaceV5.PendingMarketOrder( StorageInterfaceV5.Trade( msg.sender, _pairIndex, _index, 0, 0, 0, false, 0, 0, 0 ), 0, 0, 0, 0, 0 ), order, false); emit MarketOrderInitiated(msg.sender, _pairIndex, false, order); } // Try to execute a tp, sl, liquidation, or limit long/short (only done by NFT holders) function executeNftOrder( StorageInterfaceV5.LimitOrder _orderType, address _trader, uint _pairIndex, uint _index, uint _nftId, uint _nftType ) external notContract notPaused{ StorageInterfaceV5.Trade memory t = storageT.openTrades(_trader, _pairIndex, _index); require(_nftType > 0 && _nftType < 6, "WRONG_NFT_TYPE"); require(msg.sender == storageT.gov() || storageT.nfts(_nftType-1).ownerOf(_nftId) == msg.sender, "NO_NFT"); require(block.number >= storageT.nftLastSuccess(_nftId)+storageT.nftSuccessTimelock(), "SUCCESS_TIMELOCK"); require(_orderType != StorageInterfaceV5.LimitOrder.OPEN || storageT.hasOpenLimitOrder(_trader, _pairIndex, _index), "NO_LIMIT"); require(_orderType == StorageInterfaceV5.LimitOrder.OPEN || t.leverage > 0, "NO_TRADE"); require(_orderType != StorageInterfaceV5.LimitOrder.SL || t.sl > 0, "NO_SL"); uint leveragedPosDai; if(_orderType == StorageInterfaceV5.LimitOrder.OPEN){ StorageInterfaceV5.OpenLimitOrder memory l = storageT.getOpenLimitOrder(_trader, _pairIndex, _index); leveragedPosDai = l.positionSize * l.leverage; }else{ StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(_trader, _pairIndex, _index); leveragedPosDai = t.initialPosToken * i.tokenPriceDai * t.leverage / storageT.PRECISION(); } storageT.transferLinkToAggregator(msg.sender, _pairIndex, leveragedPosDai); uint order = storageT.priceAggregator().getPrice( _pairIndex, _orderType == StorageInterfaceV5.LimitOrder.OPEN ? AggregatorInterfaceV5.OrderType.LIMIT_OPEN : AggregatorInterfaceV5.OrderType.LIMIT_CLOSE, leveragedPosDai ); storageT.storePendingNftOrder(StorageInterfaceV5.PendingNftOrder( msg.sender, _nftId, _trader, _pairIndex, _index, _orderType ), order); emit NftOrderInitiated(msg.sender, _trader, _pairIndex, order); } // Claim back position size if market order callback not executed by oracle nodes after 50 blocks function openTradeMarketTimeout(uint _order) external notContract notPaused{ StorageInterfaceV5.PendingMarketOrder memory o = storageT.reqID_pendingMarketOrder(_order); require(o.block > 0 && block.number >= o.block + orderTimeout, "WAIT_TIMEOUT"); require(o.trade.trader == msg.sender, "NOT_YOUR_ORDER"); require(o.trade.leverage > 0, "WRONG_MARKET_ORDER_TYPE"); storageT.transferDai(address(storageT), msg.sender, o.trade.positionSizeDai); storageT.unregisterPendingMarketOrder(_order, true); emit ChainlinkCallbackTimeout(_order, o); } // Trigger market close again if market close order callback not executed by oracle nodes after 50 blocks function closeTradeMarketTimeout(uint _order) external notContract notPaused{ StorageInterfaceV5.PendingMarketOrder memory o = storageT.reqID_pendingMarketOrder(_order); StorageInterfaceV5.Trade memory t = storageT.openTrades(o.trade.trader, o.trade.pairIndex, o.trade.index); require(o.block > 0 && block.number >= o.block + orderTimeout, "WAIT_TIMEOUT"); require(o.trade.trader == msg.sender, "NOT_YOUR_ORDER"); require(o.trade.leverage == 0, "WRONG_MARKET_ORDER_TYPE"); storageT.unregisterPendingMarketOrder(_order, false); (bool success, bytes memory data) = address(this).delegatecall( abi.encodeWithSignature( "closeTradeMarket(uint256,uint256)", t.pairIndex, t.index ) ); if(!success){ emit CouldNotCloseTrade(msg.sender, t.pairIndex, t.index, string(data)); } emit ChainlinkCallbackTimeout(_order, o); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract StorageInterfaceV5","name":"_storageT","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct StorageInterfaceV5.Trade","name":"trade","type":"tuple"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"uint256","name":"wantedPrice","type":"uint256"},{"internalType":"uint256","name":"slippageP","type":"uint256"},{"internalType":"uint256","name":"spreadReductionP","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"indexed":false,"internalType":"struct StorageInterfaceV5.PendingMarketOrder","name":"order","type":"tuple"}],"name":"ChainlinkCallbackTimeout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"CouldNotCloseTrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"bool","name":"open","type":"bool"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"MarketOrderInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nftHolder","type":"address"},{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"NftOrderInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NumberUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"SlUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"TpUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"cancelOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"closeTradeMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_order","type":"uint256"}],"name":"closeTradeMarketTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum StorageInterfaceV5.LimitOrder","name":"_orderType","type":"uint8"},{"internalType":"address","name":"_trader","type":"address"},{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_nftId","type":"uint256"},{"internalType":"uint256","name":"_nftType","type":"uint256"}],"name":"executeNftOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitOrdersTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPosDaiP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPosDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct StorageInterfaceV5.Trade","name":"t","type":"tuple"},{"internalType":"bool","name":"_limit","type":"bool"},{"internalType":"uint256","name":"_spreadReductionId","type":"uint256"},{"internalType":"uint256","name":"_slippageP","type":"uint256"},{"internalType":"address","name":"_referral","type":"address"}],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_order","type":"uint256"}],"name":"openTradeMarketTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"orderTimeout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocks","type":"uint256"}],"name":"setLimitOrdersTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxP","type":"uint256"}],"name":"setMaxPosDaiP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMinPosDai","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderTimeout","type":"uint256"}],"name":"setOrderTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract StorageInterfaceV5","name":"_storageT","type":"address"}],"name":"setStorageT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"storageT","outputs":[{"internalType":"contract StorageInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_slippageP","type":"uint256"},{"internalType":"uint256","name":"_tp","type":"uint256"},{"internalType":"uint256","name":"_sl","type":"uint256"}],"name":"updateOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newSl","type":"uint256"}],"name":"updateSl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newTp","type":"uint256"}],"name":"updateTp","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405263b2d05e006001556801e5b8fa8fe2ac0000600255601e60035560326004553480156200003057600080fd5b506040516200598338038062005983833981016040819052620000539162000093565b6001600160a01b0381166200006757600080fd5b600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055620000c5565b600060208284031215620000a657600080fd5b81516001600160a01b0381168114620000be57600080fd5b9392505050565b6158ae80620000d56000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c8063a2a3c0cb116100d8578063be73fb991161008c578063d0eccac511610066578063d0eccac5146102db578063d4a1caa7146102ee578063d8defd151461030157600080fd5b8063be73fb99146102ac578063befa3411146102bf578063c641558e146102c857600080fd5b8063b8ebd5cc116100bd578063b8ebd5cc1461027d578063b9b6573a14610290578063ba206004146102a357600080fd5b8063a2a3c0cb1461024d578063b187bd261461026057600080fd5b80638456cb591161012f57806392818d661161011457806392818d6614610214578063990382cf146102275780639b0a24e21461023a57600080fd5b80638456cb59146101f9578063876d3abd1461020157600080fd5b8063530e40bb11610160578063530e40bb146101c85780635bd2150d146101dd57806381fc182b146101e657600080fd5b80630890d22a1461017c57806316fff07414610198575b600080fd5b61018560035481565b6040519081526020015b60405180910390f35b6000546101b09061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161018f565b6101db6101d63660046153b4565b610314565b005b61018560025481565b6101db6101f43660046153b4565b61046a565b6101db6105b4565b6101db61020f3660046153b4565b6106d2565b6101db61022236600461506c565b6109b7565b6101db6102353660046153b4565b610c47565b6101db6102483660046152d5565b61108c565b6101db61025b3660046153e6565b612a0b565b60005461026d9060ff1681565b604051901515815260200161018f565b6101db61028b366004615089565b6131b2565b6101db61029e3660046153e6565b613d05565b61018560045481565b6101db6102ba36600461542c565b61402e565b61018560015481565b6101db6102d6366004615458565b614447565b6101db6102e93660046153b4565b614a0b565b6101db6102fc3660046153b4565b614b55565b6101db61030f36600461542c565b614c9f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561036257600080fd5b505afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a919061502b565b6001600160a01b0316336001600160a01b0316146103ea5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064015b60405180910390fd5b600081116103f757600080fd5b6002819055604080518181526009918101919091527f6d696e506f7344616900000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab906080015b60405180910390a150565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f0919061502b565b6001600160a01b0316336001600160a01b03161461053b5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b6000811161054857600080fd5b600181905560408051818152600a918101919091527f6d6178506f7344616950000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561060257600080fd5b505afa158015610616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063a919061502b565b6001600160a01b0316336001600160a01b0316146106855760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b6000805460ff8082161560ff1990921682179092556040519116151581527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f4593049060200160405180910390a1565b3233146106de57600080fd5b60005460ff161561071a5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b6000805460405163b66e6b0560e01b8152600481018490526101009091046001600160a01b03169063b66e6b05906024016101e06040518083038186803b15801561076457600080fd5b505afa158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190615199565b9050600081602001511180156107c3575060045481602001516107bf9190615768565b4310155b6107fe5760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103e1565b8051516001600160a01b031633146108495760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103e1565b805160e0015161089b5760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103e1565b60005481516080015160405163373873db60e11b81526101009092046001600160a01b031660048301819052336024840152604483019190915290636e70e7b690606401600060405180830381600087803b1580156108f957600080fd5b505af115801561090d573d6000803e3d6000fd5b5050600054604051630195728b60e71b815260048101869052600160248201526101009091046001600160a01b0316925063cab945809150604401600060405180830381600087803b15801561096257600080fd5b505af1158015610976573d6000803e3d6000fd5b505050507f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb182826040516109ab9291906156e9565b60405180910390a15050565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0557600080fd5b505afa158015610a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3d919061502b565b6001600160a01b0316336001600160a01b031614610a885760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e919061502b565b6001600160a01b0316816001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5057600080fd5b505afa158015610b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b88919061502b565b6001600160a01b031614610b9b57600080fd5b600080546001600160a01b038316610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9091161790556040517f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819061045f90839060408082526008908201527f73746f726167655400000000000000000000000000000000000000000000000060608201526001600160a01b0391909116602082015260800190565b323314610c5357600080fd5b60005460ff1615610c8f5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b6000805460405163b66e6b0560e01b8152600481018490526101009091046001600160a01b03169063b66e6b05906024016101e06040518083038186803b158015610cd957600080fd5b505afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d119190615199565b6000805482518051602082015160409283015192516351d407ff60e11b81526001600160a01b039283166004820152602481019190915260448101929092529394509192610100909104169063a3a80ffe906064016101406040518083038186803b158015610d7f57600080fd5b505afa158015610d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db791906152b8565b905060008260200151118015610dde57506004548260200151610dda9190615768565b4310155b610e195760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103e1565b8151516001600160a01b03163314610e645760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103e1565b815160e0015115610eb75760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103e1565b60008054604051630195728b60e71b815260048101869052602481019290925261010090046001600160a01b03169063cab9458090604401600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050600080306001600160a01b031683602001518460400151604051602401610f52929190918252602082015260400190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa2a3c0cb0000000000000000000000000000000000000000000000000000000017905251610fb59190615549565b600060405180830381855af49150503d8060008114610ff0576040519150601f19603f3d011682016040523d82523d6000602084013e610ff5565b606091505b50915091508161104c578260200151336001600160a01b03167f6568074ce81701a53e7ce26c7e921b0caf2b92876d65fef4ee1feebdc0d04d498560400151846040516110439291906156af565b60405180910390a35b7f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb1858560405161107d9291906156e9565b60405180910390a15050505050565b32331461109857600080fd5b60005460ff16156110d45760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663f65d9dbe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112257600080fd5b505afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a91906153cd565b60005460208701516040517f97e7995a00000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b0316906397e7995a9060440160206040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff91906153cd565b60005460208801516040517f9c8912f100000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b031690639c8912f19060440160206040518083038186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a491906153cd565b60005460208901516040517f1c8636b400000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b031690631c8636b49060440160206040518083038186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134991906153cd565b6113539190615768565b61135d9190615768565b106113aa5760405162461bcd60e51b815260206004820152601360248201527f4d41585f5452414445535f5045525f504149520000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156113f857600080fd5b505afa15801561140c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143091906153cd565b6000546040516352e5398f60e01b81524360048201526101009091046001600160a01b0316906352e5398f9060240160206040518083038186803b15801561147757600080fd5b505afa15801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af91906153cd565b106114fc5760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b15801561154a57600080fd5b505afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158291906153cd565b60005460405163f7b3c6fd60e01b81523360048201526101009091046001600160a01b03169063f7b3c6fd9060240160206040518083038186803b1580156115c957600080fd5b505afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160191906153cd565b1061164e5760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103e1565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b15801561169d57600080fd5b505afa1580156116b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d5919061502b565b6001600160a01b0316633a2fbfab6040518163ffffffff1660e01b8152600401604080518083038186803b15801561170c57600080fd5b505afa158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190615408565b915050600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561179557600080fd5b505afa1580156117a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cd91906153cd565b6064600154836117dd91906157a2565b6117e79190615780565b6117f19190615780565b866080015111156118445760405162461bcd60e51b815260206004820152600d60248201527f41424f56455f4d41585f504f530000000000000000000000000000000000000060448201526064016103e1565b6002548660800151101561189a5760405162461bcd60e51b815260206004820152600d60248201527f42454c4f575f4d494e5f504f530000000000000000000000000000000000000060448201526064016103e1565b60008660e001511180156119b85750600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f757600080fd5b505afa15801561190b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192f919061502b565b6001600160a01b03166359a992d087602001516040518263ffffffff1660e01b815260040161196091815260200190565b60206040518083038186803b15801561197857600080fd5b505afa15801561198c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b091906153cd565b8660e0015110155b8015611ace5750600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015611a0d57600080fd5b505afa158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a45919061502b565b6001600160a01b031663281b693c87602001516040518263ffffffff1660e01b8152600401611a7691815260200190565b60206040518083038186803b158015611a8e57600080fd5b505afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac691906153cd565b8660e0015111155b611b1a5760405162461bcd60e51b815260206004820152601260248201527f4c455645524147455f494e434f5252454354000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638bbb644c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6857600080fd5b505afa158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba091906153cd565b8660e00151111580611c4d57506000546040517f68ca199d0000000000000000000000000000000000000000000000000000000081523360048201526101009091046001600160a01b0316906368ca199d9060240160206040518083038186803b158015611c0d57600080fd5b505afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4591906153cd565b8660e0015111155b611c995760405162461bcd60e51b815260206004820152601560248201527f4c455645524147455f4e4f545f554e4c4f434b4544000000000000000000000060448201526064016103e1565b831580611dc557506000805461010090046001600160a01b031663265aa621611cc36001886157c1565b6040518263ffffffff1660e01b8152600401611ce191815260200190565b60206040518083038186803b158015611cf957600080fd5b505afa158015611d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d31919061502b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015611d8b57600080fd5b505afa158015611d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc391906153cd565b115b611e375760405162461bcd60e51b815260206004820152602560248201527f4e4f5f434f52524553504f4e44494e475f4e46545f5350524541445f5245445560448201527f4354494f4e00000000000000000000000000000000000000000000000000000060648201526084016103e1565b60005460208701516040517f28daca210000000000000000000000000000000000000000000000000000000081526004810191909152600260248201526101009091046001600160a01b0316906328daca219060440160206040518083038186803b158015611ea557600080fd5b505afa158015611eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edd91906153cd565b600060019054906101000a90046001600160a01b03166001600160a01b03166328daca2188602001518960c00151611f16576001611f19565b60005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260ff16602482015260440160206040518083038186803b158015611f7057600080fd5b505afa158015611f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa891906153cd565b8760e001518860800151611fbc91906157a2565b611fc69190615768565b11156120145760405162461bcd60e51b815260206004820152601160248201527f4d41585f4f50454e5f494e54455245535400000000000000000000000000000060448201526064016103e1565b610100860151158061203a57508560c00151801561203a57508561010001518660a00151105b8061205a57508560c0015115801561205a57508561010001518660a00151115b6120915760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103e1565b61012086015115806120b757508560c0015180156120b757508561012001518660a00151115b806120d757508560c001511580156120d757508561012001518660a00151105b61210e5760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103e1565b600054608087015160405163373873db60e11b81523360048201526101009092046001600160a01b031660248301819052604483019190915290636e70e7b690606401600060405180830381600087803b15801561216b57600080fd5b505af115801561217f573d6000803e3d6000fd5b50505050841561265b57600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156121d757600080fd5b505afa1580156121eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220f919061502b565b6001600160a01b031663d5a9e90c87602001516040518263ffffffff1660e01b815260040161224091815260200190565b60206040518083038186803b15801561225857600080fd5b505afa15801561226c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229091906153cd565b8310156122df5760405162461bcd60e51b815260206004820152601260248201527f534c4950504147455f544f4f5f534d414c4c000000000000000000000000000060448201526064016103e1565b60006064600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561233157600080fd5b505afa158015612345573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236991906153cd565b858960a0015161237991906157a2565b6123839190615780565b61238d9190615780565b6000805460208a01516040517f44d44f5a000000000000000000000000000000000000000000000000000000008152336004820152602481019190915292935090916101009091046001600160a01b0316906344d44f5a9060440160206040518083038186803b15801561240057600080fd5b505afa158015612414573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243891906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663d3b5fe70604051806101a00160405280336001600160a01b031681526020018b6020015181526020018481526020018b60800151815260200160008a116124a2576000612531565b60005461010090046001600160a01b0316633dae10a06124c360018d6157c1565b6040518263ffffffff1660e01b81526004016124e191815260200190565b60206040518083038186803b1580156124f957600080fd5b505afa15801561250d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253191906153cd565b81526020018b60c00151151581526020018b60e0015181526020018b610100015181526020018b610120015181526020018b60c00151612575578b60a00151612585565b858c60a0015161258591906157c1565b81526020018b60c001516125a857858c60a001516125a39190615768565b6125ae565b8b60a001515b815260200143815260200160008152506040518263ffffffff1660e01b81526004016125da9190615565565b600060405180830381600087803b1580156125f457600080fd5b505af1158015612608573d6000803e3d6000fd5b505050508760200151336001600160a01b03167fdfabd6f206f17b7f2e1f9e0d33c40d30d1e8d7b6a4f520a03fdc1c18110593438360405161264c91815260200190565b60405180910390a3505061297f565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156126aa57600080fd5b505afa1580156126be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e2919061502b565b6001600160a01b031663fa8dd498886020015160008a60e001518b6080015161270b91906157a2565b6040518463ffffffff1660e01b81526004016127299392919061568e565b602060405180830381600087803b15801561274357600080fd5b505af1158015612757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277b91906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018c60200151815260200160008152602001600081526020018c608001518152602001600081526020018c60c00151151581526020018c60e0015181526020018c610100015181526020018c61012001518152508152602001600081526020018a60a001518152602001878152602001600089116128455760006128d4565b60005461010090046001600160a01b0316633dae10a061286660018c6157c1565b6040518263ffffffff1660e01b815260040161288491815260200190565b60206040518083038186803b15801561289c57600080fd5b505afa1580156128b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d491906153cd565b815260200160008152508360016040518463ffffffff1660e01b81526004016128ff93929190615605565b600060405180830381600087803b15801561291957600080fd5b505af115801561292d573d6000803e3d6000fd5b50505050602087810151604080513381529283019190915260018282015260608201839052517f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9181900360800190a1505b6000546040517f9d1a10730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03848116602483015261010090920490911690639d1a107390604401600060405180830381600087803b1580156129eb57600080fd5b505af11580156129ff573d6000803e3d6000fd5b50505050505050505050565b323314612a1757600080fd5b60005460ff1615612a535760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101859052604481018490526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015612aaa57600080fd5b505afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae291906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018790526044810186905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b158015612b3d57600080fd5b505afa158015612b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b75919061522a565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612bc557600080fd5b505afa158015612bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfd91906153cd565b6000546040516352e5398f60e01b81524360048201526101009091046001600160a01b0316906352e5398f9060240160206040518083038186803b158015612c4457600080fd5b505afa158015612c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7c91906153cd565b10612cc95760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b158015612d1757600080fd5b505afa158015612d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4f91906153cd565b60005460405163f7b3c6fd60e01b81523360048201526101009091046001600160a01b03169063f7b3c6fd9060240160206040518083038186803b158015612d9657600080fd5b505afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce91906153cd565b10612e1b5760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103e1565b8060a0015115612e6d5760405162461bcd60e51b815260206004820152601460248201527f414c52454144595f4245494e475f434c4f53454400000000000000000000000060448201526064016103e1565b60008260e0015111612eac5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015612efb57600080fd5b505afa158015612f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f33919061502b565b6001600160a01b031663fa8dd498866001600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9257600080fd5b505afa158015612fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fca91906153cd565b86602001518860e001518960600151612fe391906157a2565b612fed91906157a2565b612ff79190615780565b6040518463ffffffff1660e01b81526004016130159392919061568e565b602060405180830381600087803b15801561302f57600080fd5b505af1158015613043573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306791906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018a81526020018981526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525081526020016000815260200160008152602001600081526020016000815260200160008152508360006040518463ffffffff1660e01b815260040161313793929190615605565b600060405180830381600087803b15801561315157600080fd5b505af1158015613165573d6000803e3d6000fd5b50506040805133815260208101899052600091810191909152606081018490527f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9250608001905061107d565b3233146131be57600080fd5b60005460ff16156131fa5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b81526001600160a01b03888116600483015260248201889052604482018790526101009092049091169063a3a80ffe906064016101406040518083038186803b15801561325557600080fd5b505afa158015613269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328d91906152b8565b905060008211801561329f5750600682105b6132eb5760405162461bcd60e51b815260206004820152600e60248201527f57524f4e475f4e46545f5459504500000000000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561333957600080fd5b505afa15801561334d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613371919061502b565b6001600160a01b0316336001600160a01b031614806134a45750600054339061010090046001600160a01b031663265aa6216133ae6001866157c1565b6040518263ffffffff1660e01b81526004016133cc91815260200190565b60206040518083038186803b1580156133e457600080fd5b505afa1580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c919061502b565b6001600160a01b0316636352211e856040518263ffffffff1660e01b815260040161344991815260200190565b60206040518083038186803b15801561346157600080fd5b505afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613499919061502b565b6001600160a01b0316145b6134f05760405162461bcd60e51b815260206004820152600660248201527f4e4f5f4e4654000000000000000000000000000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663f8d24b486040518163ffffffff1660e01b815260040160206040518083038186803b15801561353e57600080fd5b505afa158015613552573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357691906153cd565b6000546040517faa3b7d77000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b03169063aa3b7d779060240160206040518083038186803b1580156135d757600080fd5b505afa1580156135eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360f91906153cd565b6136199190615768565b4310156136685760405162461bcd60e51b815260206004820152601060248201527f535543434553535f54494d454c4f434b0000000000000000000000000000000060448201526064016103e1565b600387600381111561367c5761367c61581e565b1415806137155750600054604051636e6f99cd60e11b81526001600160a01b03888116600483015260248201889052604482018790526101009092049091169063dcdf339a9060640160206040518083038186803b1580156136dd57600080fd5b505afa1580156136f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613715919061504f565b61374c5760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b60038760038111156137605761376061581e565b1480613770575060008160e00151115b6137a75760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60018760038111156137bb576137bb61581e565b1415806137cd57506000816101200151115b6138195760405162461bcd60e51b815260206004820152600560248201527f4e4f5f534c00000000000000000000000000000000000000000000000000000060448201526064016103e1565b6000600388600381111561382f5761382f61581e565b14156138e65760008054604051632e21e28b60e21b81526001600160a01b038a81166004830152602482018a9052604482018990526101009092049091169063b8878a2c906064016101a06040518083038186803b15801561389057600080fd5b505afa1580156138a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c891906150e6565b90508060c0015181606001516138de91906157a2565b915050613a31565b60008054604051638c8ff1d560e01b81526001600160a01b038a81166004830152602482018a90526044820189905261010090920490911690638c8ff1d59060640160c06040518083038186803b15801561394057600080fd5b505afa158015613954573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613978919061522a565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b1580156139c857600080fd5b505afa1580156139dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0091906153cd565b8360e0015182602001518560600151613a1991906157a2565b613a2391906157a2565b613a2d9190615780565b9150505b6000546040517f6690a80600000000000000000000000000000000000000000000000000000000815233600482015260248101889052604481018390526101009091046001600160a01b031690636690a80690606401600060405180830381600087803b158015613aa157600080fd5b505af1158015613ab5573d6000803e3d6000fd5b5050505060008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015613b0857600080fd5b505afa158015613b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b40919061502b565b6001600160a01b031663fa8dd4988860038c6003811115613b6357613b6361581e565b14613b6f576003613b72565b60025b856040518463ffffffff1660e01b8152600401613b919392919061568e565b602060405180830381600087803b158015613bab57600080fd5b505af1158015613bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be391906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663817fa1a46040518060c00160405280336001600160a01b031681526020018881526020018b6001600160a01b031681526020018a81526020018981526020018c6003811115613c5657613c5661581e565b815250836040518363ffffffff1660e01b8152600401613c7792919061562c565b600060405180830381600087803b158015613c9157600080fd5b505af1158015613ca5573d6000803e3d6000fd5b5050604080513381526001600160a01b038c1660208201529081018a9052606081018490527f25a4615e0f832491882811af92c23aeadd8e4ea8679eda01bb90f5276ffdf44f9250608001905060405180910390a1505050505050505050565b323314613d1157600080fd5b60005460ff1615613d4d5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600054604051636e6f99cd60e11b815233600482015260248101849052604481018390526101009091046001600160a01b03169063dcdf339a9060640160206040518083038186803b158015613da257600080fd5b505afa158015613db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dda919061504f565b613e115760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b60008054604051632e21e28b60e21b815233600482015260248101859052604481018490526101009091046001600160a01b03169063b8878a2c906064016101a06040518083038186803b158015613e6857600080fd5b505afa158015613e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea091906150e6565b905060035481610160015143613eb691906157c1565b1015613ef55760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b600054606082015160405163373873db60e11b81526101009092046001600160a01b031660048301819052336024840152604483019190915290636e70e7b690606401600060405180830381600087803b158015613f5257600080fd5b505af1158015613f66573d6000803e3d6000fd5b50506000546040517fb4b0f56700000000000000000000000000000000000000000000000000000000815233600482015260248101879052604481018690526101009091046001600160a01b0316925063b4b0f5679150606401600060405180830381600087803b158015613fda57600080fd5b505af1158015613fee573d6000803e3d6000fd5b50506040518481528592503391507ff1b38881d7f4b2b12141c5f39c5124545d6112532eb6afbe9630cdbde3ee53e99060200160405180910390a3505050565b32331461403a57600080fd5b60005460ff16156140765760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101869052604481018590526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b1580156140cd57600080fd5b505afa1580156140e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410591906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018890526044810187905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b15801561416057600080fd5b505afa158015614174573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614198919061522a565b905060008260e00151116141d95760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60008260e001516064600060019054906101000a90046001600160a01b03166001600160a01b0316635a9125516040518163ffffffff1660e01b815260040160206040518083038186803b15801561423057600080fd5b505afa158015614244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061426891906153cd565b8560a0015161427791906157a2565b6142819190615780565b61428b9190615780565b90508315806142b557508260c0015180156142b55750808360a001516142b191906157c1565b8410155b806142dc57508260c001511580156142dc5750808360a001516142d89190615768565b8411155b6143285760405162461bcd60e51b815260206004820152600a60248201527f534c5f544f4f5f4249470000000000000000000000000000000000000000000060448201526064016103e1565b600354608083015161433a90436157c1565b10156143795760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b6000546040517fa35441810000000000000000000000000000000000000000000000000000000081523360048201526024810188905260448101879052606481018690526101009091046001600160a01b03169063a354418190608401600060405180830381600087803b1580156143f057600080fd5b505af1158015614404573d6000803e3d6000fd5b50506040518781528892503391507fd84b56773a293a915f0b68564b1c050aa07759e003a9eeb5a81d1e6a105d15f69060200160405180910390a3505050505050565b32331461445357600080fd5b60005460ff161561448f5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600054604051636e6f99cd60e11b815233600482015260248101889052604481018790526101009091046001600160a01b03169063dcdf339a9060640160206040518083038186803b1580156144e457600080fd5b505afa1580156144f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061451c919061504f565b6145535760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156145a157600080fd5b505afa1580156145b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d9919061502b565b6001600160a01b031663d5a9e90c876040518263ffffffff1660e01b815260040161460691815260200190565b60206040518083038186803b15801561461e57600080fd5b505afa158015614632573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465691906153cd565b8310156146a55760405162461bcd60e51b815260206004820152601460248201527f4d494e5f4c494d49545f534c4950504147455f5000000000000000000000000060448201526064016103e1565b60008054604051632e21e28b60e21b815233600482015260248101899052604481018890526101009091046001600160a01b03169063b8878a2c906064016101a06040518083038186803b1580156146fc57600080fd5b505afa158015614710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061473491906150e6565b90506003548161016001514361474a91906157c1565b10156147895760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b8215806147a157508060a0015180156147a157508285105b806147b857508060a001511580156147b857508285115b6147ef5760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103e1565b81158061480757508060a00151801561480757508185115b8061481e57508060a0015115801561481e57508185105b6148555760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103e1565b60006064600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b1580156148a757600080fd5b505afa1580156148bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148df91906153cd565b6148e987896157a2565b6148f39190615780565b6148fd9190615780565b90508160a0015161490e5785614918565b61491881876157c1565b61012083015260a0820151614936576149318187615768565b614938565b855b61014083015260e082018490526101008083018490526000546040517fb767608a0000000000000000000000000000000000000000000000000000000081529190046001600160a01b03169063b767608a90614998908590600401615565565b600060405180830381600087803b1580156149b257600080fd5b505af11580156149c6573d6000803e3d6000fd5b50506040518981528a92503391507f1b720cb4ce3eb09408b2a2e9e02ce28a793f9abecffc9e90283bdac26fd643ce9060200160405180910390a35050505050505050565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614a5957600080fd5b505afa158015614a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a91919061502b565b6001600160a01b0316336001600160a01b031614614adc5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b60008111614ae957600080fd5b600481905560408051818152600c918101919091527f6f7264657254696d656f757400000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614ba357600080fd5b505afa158015614bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bdb919061502b565b6001600160a01b0316336001600160a01b031614614c265760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b60008111614c3357600080fd5b6003819055604080518181526013918101919091527f6c696d69744f726465727354696d656c6f636b000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b323314614cab57600080fd5b60005460ff1615614ce75760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101869052604481018590526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015614d3e57600080fd5b505afa158015614d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d7691906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018890526044810187905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b158015614dd157600080fd5b505afa158015614de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e09919061522a565b905060008260e0015111614e4a5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b6003546060820151614e5c90436157c1565b1015614e9b5760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b6000546040517f7fdb96f30000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101869052606481018590526101009091046001600160a01b031690637fdb96f390608401600060405180830381600087803b158015614f1257600080fd5b505af1158015614f26573d6000803e3d6000fd5b50506040518681528792503391507e8aac03745806f29595f6b86f312fe0d5a6427e1c5fc46c3747d29b86f5982c9060200160405180910390a35050505050565b8035614f7281615855565b919050565b8051614f7281615855565b8035614f728161586a565b8051614f728161586a565b60006101408284031215614fab57600080fd5b614fb36156fe565b9050614fbe82614f77565b81526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a0820152614ffe60c08301614f8d565b60c082015260e082015160e082015261010080830151818301525061012080830151818301525092915050565b60006020828403121561503d57600080fd5b815161504881615855565b9392505050565b60006020828403121561506157600080fd5b81516150488161586a565b60006020828403121561507e57600080fd5b813561504881615855565b60008060008060008060c087890312156150a257600080fd5b8635600481106150b157600080fd5b955060208701356150c181615855565b95989597505050506040840135936060810135936080820135935060a0909101359150565b60006101a082840312156150f957600080fd5b615101615736565b61510a83614f77565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015261514060a08401614f8d565b60a082015260c0838101519082015260e080840151908201526101008084015190820152610120808401519082015261014080840151908201526101608084015190820152610180928301519281019290925250919050565b60006101e082840312156151ac57600080fd5b60405160c0810181811067ffffffffffffffff821117156151dd57634e487b7160e01b600052604160045260246000fd5b6040526151ea8484614f98565b81526101408301516020820152610160830151604082015261018083015160608201526101a083015160808201526101c09092015160a083015250919050565b600060c0828403121561523c57600080fd5b60405160c0810181811067ffffffffffffffff8211171561526d57634e487b7160e01b600052604160045260246000fd5b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a08301516152ac8161586a565b60a08201529392505050565b600061014082840312156152cb57600080fd5b6150488383614f98565b60008060008060008587036101c08112156152ef57600080fd5b610140808212156152ff57600080fd5b6153076156fe565b915061531288614f67565b82526020880135602083015260408801356040830152606088013560608301526080880135608083015260a088013560a083015261535260c08901614f82565b60c083015260e088013560e0830152610100808901358184015250610120808901358184015250819650615387818901614f82565b95505050610160860135925061018086013591506153a86101a08701614f67565b90509295509295909350565b6000602082840312156153c657600080fd5b5035919050565b6000602082840312156153df57600080fd5b5051919050565b600080604083850312156153f957600080fd5b50508035926020909101359150565b6000806040838503121561541b57600080fd5b505080516020909101519092909150565b60008060006060848603121561544157600080fd5b505081359360208301359350604090920135919050565b60008060008060008060c0878903121561547157600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b805180516001600160a01b031683526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c08101516154ef60c085018215159052565b5060e081810151908401526101008082015190840152610120908101519083015260208101516101408301526040810151610160830152606081015161018083015260808101516101a083015260a001516101c090910152565b6000825161555b8184602087016157d8565b9190910192915050565b81516001600160a01b031681526101a081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a08301516155b260a084018215159052565b5060c0838101519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018092830151929091019190915290565b6102208101615614828661549b565b836101e0830152821515610200830152949350505050565b600060e0820190506001600160a01b038085511683526020850151602084015280604086015116604084015250606084015160608301526080840151608083015260a084015161567b81615834565b60a083015260c090910191909152919050565b8381526060810161569e84615834565b602082019390935260400152919050565b82815260406020820152600082518060408401526156d48160608501602087016157d8565b601f01601f1916919091016060019392505050565b8281526102008101615048602083018461549b565b604051610140810167ffffffffffffffff8111828210171561573057634e487b7160e01b600052604160045260246000fd5b60405290565b6040516101a0810167ffffffffffffffff8111828210171561573057634e487b7160e01b600052604160045260246000fd5b6000821982111561577b5761577b615808565b500190565b60008261579d57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156157bc576157bc615808565b500290565b6000828210156157d3576157d3615808565b500390565b60005b838110156157f35781810151838201526020016157db565b83811115615802576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6004811061585257634e487b7160e01b600052602160045260246000fd5b50565b6001600160a01b038116811461585257600080fd5b801515811461585257600080fdfea26469706673582212205dec3529b37f38929b3b6b4d605ebac74a18fa136f97505a725dfd5de683b79864736f6c63430008070033000000000000000000000000aee4d11a16b2bc65edd6416fb626eb404a6d65bd
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101775760003560e01c8063a2a3c0cb116100d8578063be73fb991161008c578063d0eccac511610066578063d0eccac5146102db578063d4a1caa7146102ee578063d8defd151461030157600080fd5b8063be73fb99146102ac578063befa3411146102bf578063c641558e146102c857600080fd5b8063b8ebd5cc116100bd578063b8ebd5cc1461027d578063b9b6573a14610290578063ba206004146102a357600080fd5b8063a2a3c0cb1461024d578063b187bd261461026057600080fd5b80638456cb591161012f57806392818d661161011457806392818d6614610214578063990382cf146102275780639b0a24e21461023a57600080fd5b80638456cb59146101f9578063876d3abd1461020157600080fd5b8063530e40bb11610160578063530e40bb146101c85780635bd2150d146101dd57806381fc182b146101e657600080fd5b80630890d22a1461017c57806316fff07414610198575b600080fd5b61018560035481565b6040519081526020015b60405180910390f35b6000546101b09061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161018f565b6101db6101d63660046153b4565b610314565b005b61018560025481565b6101db6101f43660046153b4565b61046a565b6101db6105b4565b6101db61020f3660046153b4565b6106d2565b6101db61022236600461506c565b6109b7565b6101db6102353660046153b4565b610c47565b6101db6102483660046152d5565b61108c565b6101db61025b3660046153e6565b612a0b565b60005461026d9060ff1681565b604051901515815260200161018f565b6101db61028b366004615089565b6131b2565b6101db61029e3660046153e6565b613d05565b61018560045481565b6101db6102ba36600461542c565b61402e565b61018560015481565b6101db6102d6366004615458565b614447565b6101db6102e93660046153b4565b614a0b565b6101db6102fc3660046153b4565b614b55565b6101db61030f36600461542c565b614c9f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561036257600080fd5b505afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a919061502b565b6001600160a01b0316336001600160a01b0316146103ea5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064015b60405180910390fd5b600081116103f757600080fd5b6002819055604080518181526009918101919091527f6d696e506f7344616900000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab906080015b60405180910390a150565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f0919061502b565b6001600160a01b0316336001600160a01b03161461053b5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b6000811161054857600080fd5b600181905560408051818152600a918101919091527f6d6178506f7344616950000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561060257600080fd5b505afa158015610616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063a919061502b565b6001600160a01b0316336001600160a01b0316146106855760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b6000805460ff8082161560ff1990921682179092556040519116151581527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f4593049060200160405180910390a1565b3233146106de57600080fd5b60005460ff161561071a5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b6000805460405163b66e6b0560e01b8152600481018490526101009091046001600160a01b03169063b66e6b05906024016101e06040518083038186803b15801561076457600080fd5b505afa158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190615199565b9050600081602001511180156107c3575060045481602001516107bf9190615768565b4310155b6107fe5760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103e1565b8051516001600160a01b031633146108495760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103e1565b805160e0015161089b5760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103e1565b60005481516080015160405163373873db60e11b81526101009092046001600160a01b031660048301819052336024840152604483019190915290636e70e7b690606401600060405180830381600087803b1580156108f957600080fd5b505af115801561090d573d6000803e3d6000fd5b5050600054604051630195728b60e71b815260048101869052600160248201526101009091046001600160a01b0316925063cab945809150604401600060405180830381600087803b15801561096257600080fd5b505af1158015610976573d6000803e3d6000fd5b505050507f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb182826040516109ab9291906156e9565b60405180910390a15050565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0557600080fd5b505afa158015610a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3d919061502b565b6001600160a01b0316336001600160a01b031614610a885760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e919061502b565b6001600160a01b0316816001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5057600080fd5b505afa158015610b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b88919061502b565b6001600160a01b031614610b9b57600080fd5b600080546001600160a01b038316610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9091161790556040517f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819061045f90839060408082526008908201527f73746f726167655400000000000000000000000000000000000000000000000060608201526001600160a01b0391909116602082015260800190565b323314610c5357600080fd5b60005460ff1615610c8f5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b6000805460405163b66e6b0560e01b8152600481018490526101009091046001600160a01b03169063b66e6b05906024016101e06040518083038186803b158015610cd957600080fd5b505afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d119190615199565b6000805482518051602082015160409283015192516351d407ff60e11b81526001600160a01b039283166004820152602481019190915260448101929092529394509192610100909104169063a3a80ffe906064016101406040518083038186803b158015610d7f57600080fd5b505afa158015610d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db791906152b8565b905060008260200151118015610dde57506004548260200151610dda9190615768565b4310155b610e195760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103e1565b8151516001600160a01b03163314610e645760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103e1565b815160e0015115610eb75760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103e1565b60008054604051630195728b60e71b815260048101869052602481019290925261010090046001600160a01b03169063cab9458090604401600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050600080306001600160a01b031683602001518460400151604051602401610f52929190918252602082015260400190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa2a3c0cb0000000000000000000000000000000000000000000000000000000017905251610fb59190615549565b600060405180830381855af49150503d8060008114610ff0576040519150601f19603f3d011682016040523d82523d6000602084013e610ff5565b606091505b50915091508161104c578260200151336001600160a01b03167f6568074ce81701a53e7ce26c7e921b0caf2b92876d65fef4ee1feebdc0d04d498560400151846040516110439291906156af565b60405180910390a35b7f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb1858560405161107d9291906156e9565b60405180910390a15050505050565b32331461109857600080fd5b60005460ff16156110d45760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663f65d9dbe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112257600080fd5b505afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a91906153cd565b60005460208701516040517f97e7995a00000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b0316906397e7995a9060440160206040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff91906153cd565b60005460208801516040517f9c8912f100000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b031690639c8912f19060440160206040518083038186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a491906153cd565b60005460208901516040517f1c8636b400000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b031690631c8636b49060440160206040518083038186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134991906153cd565b6113539190615768565b61135d9190615768565b106113aa5760405162461bcd60e51b815260206004820152601360248201527f4d41585f5452414445535f5045525f504149520000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156113f857600080fd5b505afa15801561140c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143091906153cd565b6000546040516352e5398f60e01b81524360048201526101009091046001600160a01b0316906352e5398f9060240160206040518083038186803b15801561147757600080fd5b505afa15801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af91906153cd565b106114fc5760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b15801561154a57600080fd5b505afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158291906153cd565b60005460405163f7b3c6fd60e01b81523360048201526101009091046001600160a01b03169063f7b3c6fd9060240160206040518083038186803b1580156115c957600080fd5b505afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160191906153cd565b1061164e5760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103e1565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b15801561169d57600080fd5b505afa1580156116b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d5919061502b565b6001600160a01b0316633a2fbfab6040518163ffffffff1660e01b8152600401604080518083038186803b15801561170c57600080fd5b505afa158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190615408565b915050600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561179557600080fd5b505afa1580156117a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cd91906153cd565b6064600154836117dd91906157a2565b6117e79190615780565b6117f19190615780565b866080015111156118445760405162461bcd60e51b815260206004820152600d60248201527f41424f56455f4d41585f504f530000000000000000000000000000000000000060448201526064016103e1565b6002548660800151101561189a5760405162461bcd60e51b815260206004820152600d60248201527f42454c4f575f4d494e5f504f530000000000000000000000000000000000000060448201526064016103e1565b60008660e001511180156119b85750600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f757600080fd5b505afa15801561190b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192f919061502b565b6001600160a01b03166359a992d087602001516040518263ffffffff1660e01b815260040161196091815260200190565b60206040518083038186803b15801561197857600080fd5b505afa15801561198c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b091906153cd565b8660e0015110155b8015611ace5750600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015611a0d57600080fd5b505afa158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a45919061502b565b6001600160a01b031663281b693c87602001516040518263ffffffff1660e01b8152600401611a7691815260200190565b60206040518083038186803b158015611a8e57600080fd5b505afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac691906153cd565b8660e0015111155b611b1a5760405162461bcd60e51b815260206004820152601260248201527f4c455645524147455f494e434f5252454354000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638bbb644c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6857600080fd5b505afa158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba091906153cd565b8660e00151111580611c4d57506000546040517f68ca199d0000000000000000000000000000000000000000000000000000000081523360048201526101009091046001600160a01b0316906368ca199d9060240160206040518083038186803b158015611c0d57600080fd5b505afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4591906153cd565b8660e0015111155b611c995760405162461bcd60e51b815260206004820152601560248201527f4c455645524147455f4e4f545f554e4c4f434b4544000000000000000000000060448201526064016103e1565b831580611dc557506000805461010090046001600160a01b031663265aa621611cc36001886157c1565b6040518263ffffffff1660e01b8152600401611ce191815260200190565b60206040518083038186803b158015611cf957600080fd5b505afa158015611d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d31919061502b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015611d8b57600080fd5b505afa158015611d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc391906153cd565b115b611e375760405162461bcd60e51b815260206004820152602560248201527f4e4f5f434f52524553504f4e44494e475f4e46545f5350524541445f5245445560448201527f4354494f4e00000000000000000000000000000000000000000000000000000060648201526084016103e1565b60005460208701516040517f28daca210000000000000000000000000000000000000000000000000000000081526004810191909152600260248201526101009091046001600160a01b0316906328daca219060440160206040518083038186803b158015611ea557600080fd5b505afa158015611eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edd91906153cd565b600060019054906101000a90046001600160a01b03166001600160a01b03166328daca2188602001518960c00151611f16576001611f19565b60005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260ff16602482015260440160206040518083038186803b158015611f7057600080fd5b505afa158015611f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa891906153cd565b8760e001518860800151611fbc91906157a2565b611fc69190615768565b11156120145760405162461bcd60e51b815260206004820152601160248201527f4d41585f4f50454e5f494e54455245535400000000000000000000000000000060448201526064016103e1565b610100860151158061203a57508560c00151801561203a57508561010001518660a00151105b8061205a57508560c0015115801561205a57508561010001518660a00151115b6120915760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103e1565b61012086015115806120b757508560c0015180156120b757508561012001518660a00151115b806120d757508560c001511580156120d757508561012001518660a00151105b61210e5760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103e1565b600054608087015160405163373873db60e11b81523360048201526101009092046001600160a01b031660248301819052604483019190915290636e70e7b690606401600060405180830381600087803b15801561216b57600080fd5b505af115801561217f573d6000803e3d6000fd5b50505050841561265b57600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156121d757600080fd5b505afa1580156121eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220f919061502b565b6001600160a01b031663d5a9e90c87602001516040518263ffffffff1660e01b815260040161224091815260200190565b60206040518083038186803b15801561225857600080fd5b505afa15801561226c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229091906153cd565b8310156122df5760405162461bcd60e51b815260206004820152601260248201527f534c4950504147455f544f4f5f534d414c4c000000000000000000000000000060448201526064016103e1565b60006064600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561233157600080fd5b505afa158015612345573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236991906153cd565b858960a0015161237991906157a2565b6123839190615780565b61238d9190615780565b6000805460208a01516040517f44d44f5a000000000000000000000000000000000000000000000000000000008152336004820152602481019190915292935090916101009091046001600160a01b0316906344d44f5a9060440160206040518083038186803b15801561240057600080fd5b505afa158015612414573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243891906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663d3b5fe70604051806101a00160405280336001600160a01b031681526020018b6020015181526020018481526020018b60800151815260200160008a116124a2576000612531565b60005461010090046001600160a01b0316633dae10a06124c360018d6157c1565b6040518263ffffffff1660e01b81526004016124e191815260200190565b60206040518083038186803b1580156124f957600080fd5b505afa15801561250d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253191906153cd565b81526020018b60c00151151581526020018b60e0015181526020018b610100015181526020018b610120015181526020018b60c00151612575578b60a00151612585565b858c60a0015161258591906157c1565b81526020018b60c001516125a857858c60a001516125a39190615768565b6125ae565b8b60a001515b815260200143815260200160008152506040518263ffffffff1660e01b81526004016125da9190615565565b600060405180830381600087803b1580156125f457600080fd5b505af1158015612608573d6000803e3d6000fd5b505050508760200151336001600160a01b03167fdfabd6f206f17b7f2e1f9e0d33c40d30d1e8d7b6a4f520a03fdc1c18110593438360405161264c91815260200190565b60405180910390a3505061297f565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156126aa57600080fd5b505afa1580156126be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e2919061502b565b6001600160a01b031663fa8dd498886020015160008a60e001518b6080015161270b91906157a2565b6040518463ffffffff1660e01b81526004016127299392919061568e565b602060405180830381600087803b15801561274357600080fd5b505af1158015612757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277b91906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018c60200151815260200160008152602001600081526020018c608001518152602001600081526020018c60c00151151581526020018c60e0015181526020018c610100015181526020018c61012001518152508152602001600081526020018a60a001518152602001878152602001600089116128455760006128d4565b60005461010090046001600160a01b0316633dae10a061286660018c6157c1565b6040518263ffffffff1660e01b815260040161288491815260200190565b60206040518083038186803b15801561289c57600080fd5b505afa1580156128b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d491906153cd565b815260200160008152508360016040518463ffffffff1660e01b81526004016128ff93929190615605565b600060405180830381600087803b15801561291957600080fd5b505af115801561292d573d6000803e3d6000fd5b50505050602087810151604080513381529283019190915260018282015260608201839052517f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9181900360800190a1505b6000546040517f9d1a10730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03848116602483015261010090920490911690639d1a107390604401600060405180830381600087803b1580156129eb57600080fd5b505af11580156129ff573d6000803e3d6000fd5b50505050505050505050565b323314612a1757600080fd5b60005460ff1615612a535760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101859052604481018490526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015612aaa57600080fd5b505afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae291906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018790526044810186905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b158015612b3d57600080fd5b505afa158015612b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b75919061522a565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612bc557600080fd5b505afa158015612bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfd91906153cd565b6000546040516352e5398f60e01b81524360048201526101009091046001600160a01b0316906352e5398f9060240160206040518083038186803b158015612c4457600080fd5b505afa158015612c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7c91906153cd565b10612cc95760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b158015612d1757600080fd5b505afa158015612d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4f91906153cd565b60005460405163f7b3c6fd60e01b81523360048201526101009091046001600160a01b03169063f7b3c6fd9060240160206040518083038186803b158015612d9657600080fd5b505afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce91906153cd565b10612e1b5760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103e1565b8060a0015115612e6d5760405162461bcd60e51b815260206004820152601460248201527f414c52454144595f4245494e475f434c4f53454400000000000000000000000060448201526064016103e1565b60008260e0015111612eac5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015612efb57600080fd5b505afa158015612f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f33919061502b565b6001600160a01b031663fa8dd498866001600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9257600080fd5b505afa158015612fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fca91906153cd565b86602001518860e001518960600151612fe391906157a2565b612fed91906157a2565b612ff79190615780565b6040518463ffffffff1660e01b81526004016130159392919061568e565b602060405180830381600087803b15801561302f57600080fd5b505af1158015613043573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306791906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018a81526020018981526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525081526020016000815260200160008152602001600081526020016000815260200160008152508360006040518463ffffffff1660e01b815260040161313793929190615605565b600060405180830381600087803b15801561315157600080fd5b505af1158015613165573d6000803e3d6000fd5b50506040805133815260208101899052600091810191909152606081018490527f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9250608001905061107d565b3233146131be57600080fd5b60005460ff16156131fa5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b81526001600160a01b03888116600483015260248201889052604482018790526101009092049091169063a3a80ffe906064016101406040518083038186803b15801561325557600080fd5b505afa158015613269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328d91906152b8565b905060008211801561329f5750600682105b6132eb5760405162461bcd60e51b815260206004820152600e60248201527f57524f4e475f4e46545f5459504500000000000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561333957600080fd5b505afa15801561334d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613371919061502b565b6001600160a01b0316336001600160a01b031614806134a45750600054339061010090046001600160a01b031663265aa6216133ae6001866157c1565b6040518263ffffffff1660e01b81526004016133cc91815260200190565b60206040518083038186803b1580156133e457600080fd5b505afa1580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c919061502b565b6001600160a01b0316636352211e856040518263ffffffff1660e01b815260040161344991815260200190565b60206040518083038186803b15801561346157600080fd5b505afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613499919061502b565b6001600160a01b0316145b6134f05760405162461bcd60e51b815260206004820152600660248201527f4e4f5f4e4654000000000000000000000000000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663f8d24b486040518163ffffffff1660e01b815260040160206040518083038186803b15801561353e57600080fd5b505afa158015613552573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357691906153cd565b6000546040517faa3b7d77000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b03169063aa3b7d779060240160206040518083038186803b1580156135d757600080fd5b505afa1580156135eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360f91906153cd565b6136199190615768565b4310156136685760405162461bcd60e51b815260206004820152601060248201527f535543434553535f54494d454c4f434b0000000000000000000000000000000060448201526064016103e1565b600387600381111561367c5761367c61581e565b1415806137155750600054604051636e6f99cd60e11b81526001600160a01b03888116600483015260248201889052604482018790526101009092049091169063dcdf339a9060640160206040518083038186803b1580156136dd57600080fd5b505afa1580156136f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613715919061504f565b61374c5760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b60038760038111156137605761376061581e565b1480613770575060008160e00151115b6137a75760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60018760038111156137bb576137bb61581e565b1415806137cd57506000816101200151115b6138195760405162461bcd60e51b815260206004820152600560248201527f4e4f5f534c00000000000000000000000000000000000000000000000000000060448201526064016103e1565b6000600388600381111561382f5761382f61581e565b14156138e65760008054604051632e21e28b60e21b81526001600160a01b038a81166004830152602482018a9052604482018990526101009092049091169063b8878a2c906064016101a06040518083038186803b15801561389057600080fd5b505afa1580156138a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c891906150e6565b90508060c0015181606001516138de91906157a2565b915050613a31565b60008054604051638c8ff1d560e01b81526001600160a01b038a81166004830152602482018a90526044820189905261010090920490911690638c8ff1d59060640160c06040518083038186803b15801561394057600080fd5b505afa158015613954573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613978919061522a565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b1580156139c857600080fd5b505afa1580156139dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0091906153cd565b8360e0015182602001518560600151613a1991906157a2565b613a2391906157a2565b613a2d9190615780565b9150505b6000546040517f6690a80600000000000000000000000000000000000000000000000000000000815233600482015260248101889052604481018390526101009091046001600160a01b031690636690a80690606401600060405180830381600087803b158015613aa157600080fd5b505af1158015613ab5573d6000803e3d6000fd5b5050505060008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015613b0857600080fd5b505afa158015613b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b40919061502b565b6001600160a01b031663fa8dd4988860038c6003811115613b6357613b6361581e565b14613b6f576003613b72565b60025b856040518463ffffffff1660e01b8152600401613b919392919061568e565b602060405180830381600087803b158015613bab57600080fd5b505af1158015613bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be391906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663817fa1a46040518060c00160405280336001600160a01b031681526020018881526020018b6001600160a01b031681526020018a81526020018981526020018c6003811115613c5657613c5661581e565b815250836040518363ffffffff1660e01b8152600401613c7792919061562c565b600060405180830381600087803b158015613c9157600080fd5b505af1158015613ca5573d6000803e3d6000fd5b5050604080513381526001600160a01b038c1660208201529081018a9052606081018490527f25a4615e0f832491882811af92c23aeadd8e4ea8679eda01bb90f5276ffdf44f9250608001905060405180910390a1505050505050505050565b323314613d1157600080fd5b60005460ff1615613d4d5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600054604051636e6f99cd60e11b815233600482015260248101849052604481018390526101009091046001600160a01b03169063dcdf339a9060640160206040518083038186803b158015613da257600080fd5b505afa158015613db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dda919061504f565b613e115760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b60008054604051632e21e28b60e21b815233600482015260248101859052604481018490526101009091046001600160a01b03169063b8878a2c906064016101a06040518083038186803b158015613e6857600080fd5b505afa158015613e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea091906150e6565b905060035481610160015143613eb691906157c1565b1015613ef55760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b600054606082015160405163373873db60e11b81526101009092046001600160a01b031660048301819052336024840152604483019190915290636e70e7b690606401600060405180830381600087803b158015613f5257600080fd5b505af1158015613f66573d6000803e3d6000fd5b50506000546040517fb4b0f56700000000000000000000000000000000000000000000000000000000815233600482015260248101879052604481018690526101009091046001600160a01b0316925063b4b0f5679150606401600060405180830381600087803b158015613fda57600080fd5b505af1158015613fee573d6000803e3d6000fd5b50506040518481528592503391507ff1b38881d7f4b2b12141c5f39c5124545d6112532eb6afbe9630cdbde3ee53e99060200160405180910390a3505050565b32331461403a57600080fd5b60005460ff16156140765760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101869052604481018590526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b1580156140cd57600080fd5b505afa1580156140e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410591906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018890526044810187905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b15801561416057600080fd5b505afa158015614174573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614198919061522a565b905060008260e00151116141d95760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60008260e001516064600060019054906101000a90046001600160a01b03166001600160a01b0316635a9125516040518163ffffffff1660e01b815260040160206040518083038186803b15801561423057600080fd5b505afa158015614244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061426891906153cd565b8560a0015161427791906157a2565b6142819190615780565b61428b9190615780565b90508315806142b557508260c0015180156142b55750808360a001516142b191906157c1565b8410155b806142dc57508260c001511580156142dc5750808360a001516142d89190615768565b8411155b6143285760405162461bcd60e51b815260206004820152600a60248201527f534c5f544f4f5f4249470000000000000000000000000000000000000000000060448201526064016103e1565b600354608083015161433a90436157c1565b10156143795760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b6000546040517fa35441810000000000000000000000000000000000000000000000000000000081523360048201526024810188905260448101879052606481018690526101009091046001600160a01b03169063a354418190608401600060405180830381600087803b1580156143f057600080fd5b505af1158015614404573d6000803e3d6000fd5b50506040518781528892503391507fd84b56773a293a915f0b68564b1c050aa07759e003a9eeb5a81d1e6a105d15f69060200160405180910390a3505050505050565b32331461445357600080fd5b60005460ff161561448f5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600054604051636e6f99cd60e11b815233600482015260248101889052604481018790526101009091046001600160a01b03169063dcdf339a9060640160206040518083038186803b1580156144e457600080fd5b505afa1580156144f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061451c919061504f565b6145535760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156145a157600080fd5b505afa1580156145b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d9919061502b565b6001600160a01b031663d5a9e90c876040518263ffffffff1660e01b815260040161460691815260200190565b60206040518083038186803b15801561461e57600080fd5b505afa158015614632573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465691906153cd565b8310156146a55760405162461bcd60e51b815260206004820152601460248201527f4d494e5f4c494d49545f534c4950504147455f5000000000000000000000000060448201526064016103e1565b60008054604051632e21e28b60e21b815233600482015260248101899052604481018890526101009091046001600160a01b03169063b8878a2c906064016101a06040518083038186803b1580156146fc57600080fd5b505afa158015614710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061473491906150e6565b90506003548161016001514361474a91906157c1565b10156147895760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b8215806147a157508060a0015180156147a157508285105b806147b857508060a001511580156147b857508285115b6147ef5760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103e1565b81158061480757508060a00151801561480757508185115b8061481e57508060a0015115801561481e57508185105b6148555760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103e1565b60006064600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b1580156148a757600080fd5b505afa1580156148bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148df91906153cd565b6148e987896157a2565b6148f39190615780565b6148fd9190615780565b90508160a0015161490e5785614918565b61491881876157c1565b61012083015260a0820151614936576149318187615768565b614938565b855b61014083015260e082018490526101008083018490526000546040517fb767608a0000000000000000000000000000000000000000000000000000000081529190046001600160a01b03169063b767608a90614998908590600401615565565b600060405180830381600087803b1580156149b257600080fd5b505af11580156149c6573d6000803e3d6000fd5b50506040518981528a92503391507f1b720cb4ce3eb09408b2a2e9e02ce28a793f9abecffc9e90283bdac26fd643ce9060200160405180910390a35050505050505050565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614a5957600080fd5b505afa158015614a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a91919061502b565b6001600160a01b0316336001600160a01b031614614adc5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b60008111614ae957600080fd5b600481905560408051818152600c918101919091527f6f7264657254696d656f757400000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614ba357600080fd5b505afa158015614bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bdb919061502b565b6001600160a01b0316336001600160a01b031614614c265760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b60008111614c3357600080fd5b6003819055604080518181526013918101919091527f6c696d69744f726465727354696d656c6f636b000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b323314614cab57600080fd5b60005460ff1615614ce75760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101869052604481018590526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015614d3e57600080fd5b505afa158015614d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d7691906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018890526044810187905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b158015614dd157600080fd5b505afa158015614de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e09919061522a565b905060008260e0015111614e4a5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b6003546060820151614e5c90436157c1565b1015614e9b5760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b6000546040517f7fdb96f30000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101869052606481018590526101009091046001600160a01b031690637fdb96f390608401600060405180830381600087803b158015614f1257600080fd5b505af1158015614f26573d6000803e3d6000fd5b50506040518681528792503391507e8aac03745806f29595f6b86f312fe0d5a6427e1c5fc46c3747d29b86f5982c9060200160405180910390a35050505050565b8035614f7281615855565b919050565b8051614f7281615855565b8035614f728161586a565b8051614f728161586a565b60006101408284031215614fab57600080fd5b614fb36156fe565b9050614fbe82614f77565b81526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a0820152614ffe60c08301614f8d565b60c082015260e082015160e082015261010080830151818301525061012080830151818301525092915050565b60006020828403121561503d57600080fd5b815161504881615855565b9392505050565b60006020828403121561506157600080fd5b81516150488161586a565b60006020828403121561507e57600080fd5b813561504881615855565b60008060008060008060c087890312156150a257600080fd5b8635600481106150b157600080fd5b955060208701356150c181615855565b95989597505050506040840135936060810135936080820135935060a0909101359150565b60006101a082840312156150f957600080fd5b615101615736565b61510a83614f77565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015261514060a08401614f8d565b60a082015260c0838101519082015260e080840151908201526101008084015190820152610120808401519082015261014080840151908201526101608084015190820152610180928301519281019290925250919050565b60006101e082840312156151ac57600080fd5b60405160c0810181811067ffffffffffffffff821117156151dd57634e487b7160e01b600052604160045260246000fd5b6040526151ea8484614f98565b81526101408301516020820152610160830151604082015261018083015160608201526101a083015160808201526101c09092015160a083015250919050565b600060c0828403121561523c57600080fd5b60405160c0810181811067ffffffffffffffff8211171561526d57634e487b7160e01b600052604160045260246000fd5b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a08301516152ac8161586a565b60a08201529392505050565b600061014082840312156152cb57600080fd5b6150488383614f98565b60008060008060008587036101c08112156152ef57600080fd5b610140808212156152ff57600080fd5b6153076156fe565b915061531288614f67565b82526020880135602083015260408801356040830152606088013560608301526080880135608083015260a088013560a083015261535260c08901614f82565b60c083015260e088013560e0830152610100808901358184015250610120808901358184015250819650615387818901614f82565b95505050610160860135925061018086013591506153a86101a08701614f67565b90509295509295909350565b6000602082840312156153c657600080fd5b5035919050565b6000602082840312156153df57600080fd5b5051919050565b600080604083850312156153f957600080fd5b50508035926020909101359150565b6000806040838503121561541b57600080fd5b505080516020909101519092909150565b60008060006060848603121561544157600080fd5b505081359360208301359350604090920135919050565b60008060008060008060c0878903121561547157600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b805180516001600160a01b031683526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c08101516154ef60c085018215159052565b5060e081810151908401526101008082015190840152610120908101519083015260208101516101408301526040810151610160830152606081015161018083015260808101516101a083015260a001516101c090910152565b6000825161555b8184602087016157d8565b9190910192915050565b81516001600160a01b031681526101a081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a08301516155b260a084018215159052565b5060c0838101519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018092830151929091019190915290565b6102208101615614828661549b565b836101e0830152821515610200830152949350505050565b600060e0820190506001600160a01b038085511683526020850151602084015280604086015116604084015250606084015160608301526080840151608083015260a084015161567b81615834565b60a083015260c090910191909152919050565b8381526060810161569e84615834565b602082019390935260400152919050565b82815260406020820152600082518060408401526156d48160608501602087016157d8565b601f01601f1916919091016060019392505050565b8281526102008101615048602083018461549b565b604051610140810167ffffffffffffffff8111828210171561573057634e487b7160e01b600052604160045260246000fd5b60405290565b6040516101a0810167ffffffffffffffff8111828210171561573057634e487b7160e01b600052604160045260246000fd5b6000821982111561577b5761577b615808565b500190565b60008261579d57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156157bc576157bc615808565b500290565b6000828210156157d3576157d3615808565b500390565b60005b838110156157f35781810151838201526020016157db565b83811115615802576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6004811061585257634e487b7160e01b600052602160045260246000fd5b50565b6001600160a01b038116811461585257600080fd5b801515811461585257600080fdfea26469706673582212205dec3529b37f38929b3b6b4d605ebac74a18fa136f97505a725dfd5de683b79864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000aee4d11a16b2bc65edd6416fb626eb404a6d65bd
-----Decoded View---------------
Arg [0] : _storageT (address): 0xaee4d11a16B2bc65EDD6416Fb626EB404a6D65BD
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000aee4d11a16b2bc65edd6416fb626eb404a6d65bd
Deployed Bytecode Sourcemap
9097:16979:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9449:36;;;;;;;;;28776:25:1;;;28764:2;28749:18;9449:36:0;;;;;;;;9209:34;;;;;;;;-1:-1:-1;;;;;9209:34:0;;;;;;-1:-1:-1;;;;;11472:55:1;;;11454:74;;11442:2;11427:18;9209:34:0;11308:226:1;11491:160:0;;;;;;:::i;:::-;;:::i;:::-;;9379:33;;;;;;11318:167;;;;;;:::i;:::-;;:::i;11205:80::-;;;:::i;24295:628::-;;;;;;:::i;:::-;;:::i;10918:221::-;;;;;;:::i;:::-;;:::i;25042:1031::-;;;;;;:::i;:::-;;:::i;12311:4150::-;;;;;;:::i;:::-;;:::i;20544:1311::-;;;;;;:::i;:::-;;:::i;9156:20::-;;;;;;;;;;;;14489:14:1;;14482:22;14464:41;;14452:2;14437:18;9156:20:0;14324:187:1;21956:2228:0;;;;;;:::i;:::-;;:::i;17742:612::-;;;;;;:::i;:::-;;:::i;9516:29::-;;;;;;19683:811;;;;;;:::i;:::-;;:::i;9304:35::-;;;;;;16501:1201;;;;;;:::i;:::-;;:::i;11865:205::-;;;;;;:::i;:::-;;:::i;11657:202::-;;;;;;:::i;:::-;;:::i;18660:573::-;;;;;;:::i;:::-;;:::i;11491:160::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;;;;;;;;;11566:1:::1;11559:4;:8;11551:17;;;::::0;::::1;;11579:9;:16:::0;;;11611:32:::1;::::0;;18814:21:1;;;18871:1;18851:18;;;18844:29;;;;18909:11;18904:2;18889:18;;18882:39;18988:4;18973:20;;18966:36;;;11611:32:0::1;::::0;18953:3:1;18938:19;11611:32:0::1;;;;;;;;11491:160:::0;:::o;11318:167::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11396:1:::1;11388:5;:9;11380:18;;;::::0;::::1;;11409:10;:18:::0;;;11443:34:::1;::::0;;24294:21:1;;;24351:2;24331:18;;;24324:30;;;;24390:12;24385:2;24370:18;;24363:40;24470:4;24455:20;;24448:36;;;11443:34:0::1;::::0;24435:3:1;24420:19;11443:34:0::1;24082:408:1::0;11205:80:0;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11252:8:::1;::::0;;::::1;::::0;;::::1;11251:9;-1:-1:-1::0;;11240:20:0;;::::1;::::0;::::1;::::0;;;11267:15:::1;::::0;11273:8;;14489:14:1;14482:22;14464:41;;11267:15:0::1;::::0;14452:2:1;14437:18;11267:15:0::1;;;;;;;11205:80::o:0;24295:628::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;24383:46:::2;24432:8:::0;;:41:::2;::::0;-1:-1:-1;;;24432:41:0;;::::2;::::0;::::2;28776:25:1::0;;;24432:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;24432:8:0::2;::::0;:33:::2;::::0;28749:18:1;;24432:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24383:90;;24504:1;24494;:7;;;:11;:53;;;;;24535:12;;24525:1;:7;;;:22;;;;:::i;:::-;24509:12;:38;;24494:53;24486:92;;;::::0;-1:-1:-1;;;24486:92:0;;16736:2:1;24486:92:0::2;::::0;::::2;16718:21:1::0;16775:2;16755:18;;;16748:30;-1:-1:-1;;;16794:18:1;;;16787:42;16846:18;;24486:92:0::2;16534:336:1::0;24486:92:0::2;24597:7:::0;;:14;-1:-1:-1;;;;;24597:28:0::2;24615:10;24597:28;24589:55;;;::::0;-1:-1:-1;;;24589:55:0;;21531:2:1;24589:55:0::2;::::0;::::2;21513:21:1::0;21570:2;21550:18;;;21543:30;-1:-1:-1;;;21589:18:1;;;21582:44;21643:18;;24589:55:0::2;21329:338:1::0;24589:55:0::2;24663:7:::0;;:16:::2;;::::0;24655:56:::2;;;::::0;-1:-1:-1;;;24655:56:0;;23932:2:1;24655:56:0::2;::::0;::::2;23914:21:1::0;23971:2;23951:18;;;23944:30;24010:25;23990:18;;;23983:53;24053:18;;24655:56:0::2;23730:347:1::0;24655:56:0::2;24724:8;::::0;24776:7;;:23:::2;;::::0;24724:76:::2;::::0;-1:-1:-1;;;24724:76:0;;:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;24724:8:0::2;:76;::::0;::::2;12134:34:1::0;;;24764:10:0::2;12184:18:1::0;;;12177:43;12236:18;;;12229:34;;;;24724:8:0;:20:::2;::::0;12046:18:1;;24724:76:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;24811:8:0::2;::::0;:51:::2;::::0;-1:-1:-1;;;24811:51:0;;::::2;::::0;::::2;28980:25:1::0;;;24811:8:0::2;29021:18:1::0;;;29014:50;24811:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;24811:8:0::2;::::0;-1:-1:-1;24811:37:0::2;::::0;-1:-1:-1;28953:18:1;;24811:51:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;24880:35;24905:6;24913:1;24880:35;;;;;;;:::i;:::-;;;;;;;;24370:553;24295:628:::0;:::o;10918:221::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11023:8:::1;;;;;;;;;-1:-1:-1::0;;;;;11023:8:0::1;-1:-1:-1::0;;;;;11023:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11004:33:0::1;:9;-1:-1:-1::0;;;;;11004:13:0::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11004:33:0::1;;10996:42;;;::::0;::::1;;11049:8;:20:::0;;-1:-1:-1;;;;;11049:20:0;::::1;;;::::0;;;::::1;;::::0;;11085:46:::1;::::0;::::1;::::0;::::1;::::0;11060:9;;19579:2:1;19561:21;;;19618:1;19598:18;;;19591:29;19656:10;19651:2;19636:18;;19629:38;-1:-1:-1;;;;;19741:55:1;;;;19734:4;19719:20;;19712:85;19699:3;19684:19;;19349:454;25042:1031:0;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;25131:46:::2;25180:8:::0;;:41:::2;::::0;-1:-1:-1;;;25180:41:0;;::::2;::::0;::::2;28776:25:1::0;;;25180:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;25180:8:0::2;::::0;:33:::2;::::0;28749:18:1;;25180:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25232:33;25268:8:::0;;25288:7;;:14;;25304:17:::2;::::0;::::2;::::0;25323:13:::2;::::0;;::::2;::::0;25268:69;;-1:-1:-1;;;25268:69:0;;-1:-1:-1;;;;;13726:55:1;;;25268:69:0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;;13841:18;;;13834:34;;;;25288:7:0;;-1:-1:-1;25232:33:0;;25268:8:::2;::::0;;::::2;;::::0;:19:::2;::::0;13681:18:1;;25268:69:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25232:105;;25368:1;25358;:7;;;:11;:53;;;;;25399:12;;25389:1;:7;;;:22;;;;:::i;:::-;25373:12;:38;;25358:53;25350:92;;;::::0;-1:-1:-1;;;25350:92:0;;16736:2:1;25350:92:0::2;::::0;::::2;16718:21:1::0;16775:2;16755:18;;;16748:30;-1:-1:-1;;;16794:18:1;;;16787:42;16846:18;;25350:92:0::2;16534:336:1::0;25350:92:0::2;25461:7:::0;;:14;-1:-1:-1;;;;;25461:28:0::2;25479:10;25461:28;25453:55;;;::::0;-1:-1:-1;;;25453:55:0;;21531:2:1;25453:55:0::2;::::0;::::2;21513:21:1::0;21570:2;21550:18;;;21543:30;-1:-1:-1;;;21589:18:1;;;21582:44;21643:18;;25453:55:0::2;21329:338:1::0;25453:55:0::2;25527:7:::0;;:16:::2;;::::0;:21;25519:57:::2;;;::::0;-1:-1:-1;;;25519:57:0;;23932:2:1;25519:57:0::2;::::0;::::2;23914:21:1::0;23971:2;23951:18;;;23944:30;24010:25;23990:18;;;23983:53;24053:18;;25519:57:0::2;23730:347:1::0;25519:57:0::2;25589:8;::::0;;:52:::2;::::0;-1:-1:-1;;;25589:52:0;;::::2;::::0;::::2;28980:25:1::0;;;29021:18;;;29014:50;;;;25589:8:0::2;::::0;::::2;-1:-1:-1::0;;;;;25589:8:0::2;::::0;:37:::2;::::0;28953:18:1;;25589:52:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;25655:12;25669:17:::0;25698:4:::2;-1:-1:-1::0;;;;;25690:26:0::2;25827:1;:11;;;25857:1;:7;;;25731:148;;;;;;;;29640:25:1::0;;;29696:2;29681:18;;29674:34;29628:2;29613:18;;29458:256;25731:148:0::2;;::::0;;-1:-1:-1;;25731:148:0;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;::::2;;;;::::0;;25690:200;::::2;::::0;25731:148;25690:200:::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25654:236;;;;25907:7;25903:110;;25966:1;:11;;;25954:10;-1:-1:-1::0;;;;;25935:66:0::2;;25979:1;:7;;;25995:4;25935:66;;;;;;;:::i;:::-;;;;;;;;25903:110;26030:35;26055:6;26063:1;26030:35;;;;;;;:::i;:::-;;;;;;;;25118:955;;;;25042:1031:::0;:::o;12311:4150::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;12724:8:::2;;;;;;;;;-1:-1:-1::0;;;;;12724:8:0::2;-1:-1:-1::0;;;;;12724:25:0::2;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12667:8;::::0;12709:11:::2;::::0;::::2;::::0;12667:54:::2;::::0;;;;12697:10:::2;12667:54;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;12667:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12667:8:0::2;::::0;:29:::2;::::0;12896:18:1;;12667:54:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12594:8;::::0;12638:11:::2;::::0;::::2;::::0;12594:56:::2;::::0;;;;12626:10:::2;12594:56;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;12594:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12594:8:0::2;::::0;:31:::2;::::0;12896:18:1;;12594:56:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12542:8;::::0;12579:11:::2;::::0;::::2;::::0;12542:49:::2;::::0;;;;12567:10:::2;12542:49;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;12542:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12542:8:0::2;::::0;:24:::2;::::0;12896:18:1;;12542:49:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:108;;;;:::i;:::-;:179;;;;:::i;:::-;:209;12534:255;;;::::0;-1:-1:-1;;;12534:255:0;;20346:2:1;12534:255:0::2;::::0;::::2;20328:21:1::0;20385:2;20365:18;;;20358:30;20424:21;20404:18;;;20397:49;20463:18;;12534:255:0::2;20144:343:1::0;12534:255:0::2;12848:8;;;;;;;;;-1:-1:-1::0;;;;;12848:8:0::2;-1:-1:-1::0;;;;;12848:26:0::2;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12808:8;::::0;:37:::2;::::0;-1:-1:-1;;;12808:37:0;;12832:12:::2;12808:37;::::0;::::2;28776:25:1::0;12808:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12808:8:0::2;::::0;:23:::2;::::0;28749:18:1;;12808:37:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;12800:115;;;::::0;-1:-1:-1;;;12800:115:0;;23583:2:1;12800:115:0::2;::::0;::::2;23565:21:1::0;23622:2;23602:18;;;23595:30;23661:22;23641:18;;;23634:50;23701:18;;12800:115:0::2;23381:344:1::0;12800:115:0::2;12978:8;;;;;;;;;-1:-1:-1::0;;;;;12978:8:0::2;-1:-1:-1::0;;;;;12978:31:0::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12934:8;::::0;:41:::2;::::0;-1:-1:-1;;;12934:41:0;;12964:10:::2;12934:41;::::0;::::2;11454:74:1::0;12934:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12934:8:0::2;::::0;:29:::2;::::0;11427:18:1;;12934:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;12926:122;;;::::0;-1:-1:-1;;;12926:122:0;;22554:2:1;12926:122:0::2;::::0;::::2;22536:21:1::0;22593:2;22573:18;;;22566:30;22632:20;22612:18;;;22605:48;22670:18;;12926:122:0::2;22352:342:1::0;12926:122:0::2;13062:16;13082:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;13082:8:0::2;-1:-1:-1::0;;;;;13082:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13082:45:0::2;;:47;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13059:70;;;13196:8;;;;;;;;;-1:-1:-1::0;;;;;13196:8:0::2;-1:-1:-1::0;;;;;13196:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13192:3;13181:10;;13169:11;:22;;;;:::i;:::-;:26;;;;:::i;:::-;:47;;;;:::i;:::-;13148:1;:17;;;:68;;13140:108;;;::::0;-1:-1:-1;;;13140:108:0;;15309:2:1;13140:108:0::2;::::0;::::2;15291:21:1::0;15348:2;15328:18;;;15321:30;15387:15;15367:18;;;15360:43;15420:18;;13140:108:0::2;15107:337:1::0;13140:108:0::2;13288:9;;13267:1;:17;;;:30;;13259:56;;;::::0;-1:-1:-1;;;13259:56:0;;17772:2:1;13259:56:0::2;::::0;::::2;17754:21:1::0;17811:2;17791:18;;;17784:30;17850:15;17830:18;;;17823:43;17883:18;;13259:56:0::2;17570:337:1::0;13259:56:0::2;13347:1;13334;:10;;;:14;:87;;;;;13366:8;;;;;;;;;-1:-1:-1::0;;;;;13366:8:0::2;-1:-1:-1::0;;;;;13366:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13366:42:0::2;;13409:1;:11;;;13366:55;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;13366:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13352:1;:10;;;:69;;13334:87;:174;;;;;13453:8;;;;;;;;;-1:-1:-1::0;;;;;13453:8:0::2;-1:-1:-1::0;;;;;13453:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13453:42:0::2;;13496:1;:11;;;13453:55;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;13453:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13439:1;:10;;;:69;;13334:174;13326:219;;;::::0;-1:-1:-1;;;13326:219:0;;18114:2:1;13326:219:0::2;::::0;::::2;18096:21:1::0;18153:2;18133:18;;;18126:30;18192:20;18172:18;;;18165:48;18230:18;;13326:219:0::2;17912:342:1::0;13326:219:0::2;13578:8;;;;;;;;;-1:-1:-1::0;;;;;13578:8:0::2;-1:-1:-1::0;;;;;13578:32:0::2;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13564:1;:10;;;:48;;:106;;;-1:-1:-1::0;13630:8:0::2;::::0;:40:::2;::::0;;;;13659:10:::2;13630:40;::::0;::::2;11454:74:1::0;13630:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;13630:8:0::2;::::0;:28:::2;::::0;11427:18:1;;13630:40:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13616:1;:10;;;:54;;13564:106;13556:153;;;::::0;-1:-1:-1;;;13556:153:0;;17422:2:1;13556:153:0::2;::::0;::::2;17404:21:1::0;17461:2;17441:18;;;17434:30;17500:23;17480:18;;;17473:51;17541:18;;13556:153:0::2;17220:345:1::0;13556:153:0::2;13728:23:::0;;;:88:::2;;-1:-1:-1::0;13815:1:0::2;13755:8:::0;;::::2;::::0;::::2;-1:-1:-1::0;;;;;13755:8:0::2;:13;13769:20;13755:8;13769:18:::0;:20:::2;:::i;:::-;13755:35;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;13755:35:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;::::0;;;;13801:10:::2;13755:57;::::0;::::2;11454:74:1::0;-1:-1:-1;;;;;13755:45:0;;;::::2;::::0;::::2;::::0;11427:18:1;;13755:57:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;13728:88;13720:151;;;::::0;-1:-1:-1;;;13720:151:0;;15651:2:1;13720:151:0::2;::::0;::::2;15633:21:1::0;15690:2;15670:18;;;15663:30;15729:34;15709:18;;;15702:62;15800:7;15780:18;;;15773:35;15825:19;;13720:151:0::2;15449:401:1::0;13720:151:0::2;13993:8;::::0;14018:11:::2;::::0;::::2;::::0;13993:40:::2;::::0;;;;::::2;::::0;::::2;29640:25:1::0;;;;14031:1:0::2;29681:18:1::0;;;29674:34;13993:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;13993:8:0::2;::::0;:24:::2;::::0;29613:18:1;;13993:40:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13923:8;;;;;;;;;-1:-1:-1::0;;;;;13923:8:0::2;-1:-1:-1::0;;;;;13923:24:0::2;;13948:1;:11;;;13961:1;:5;;;:13;;13973:1;13961:13;;;13969:1;13961:13;13923:52;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;30957:25:1::0;;;;31030:4;31018:17;30998:18;;;30991:45;30930:18;;13923:52:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13910:1;:10;;;13890:1;:17;;;:30;;;;:::i;:::-;:85;;;;:::i;:::-;:143;;13882:173;;;::::0;-1:-1:-1;;;13882:173:0;;23237:2:1;13882:173:0::2;::::0;::::2;23219:21:1::0;23276:2;23256:18;;;23249:30;23315:19;23295:18;;;23288:47;23352:18;;13882:173:0::2;23035:341:1::0;13882:173:0::2;14074:4;::::0;::::2;::::0;:9;;:40:::2;;;14087:1;:5;;;:27;;;;;14110:1;:4;;;14096:1;:11;;;:18;14087:27;14074:72;;;;14119:1;:5;;;14118:6;:28;;;;;14142:1;:4;;;14128:1;:11;;;:18;14118:28;14066:93;;;::::0;-1:-1:-1;;;14066:93:0;;19215:2:1;14066:93:0::2;::::0;::::2;19197:21:1::0;19254:1;19234:18;;;19227:29;-1:-1:-1;;;19272:18:1;;;19265:38;19320:18;;14066:93:0::2;19013:331:1::0;14066:93:0::2;14178:4;::::0;::::2;::::0;:9;;:40:::2;;;14191:1;:5;;;:27;;;;;14214:1;:4;;;14200:1;:11;;;:18;14191:27;14178:72;;;;14223:1;:5;;;14222:6;:28;;;;;14246:1;:4;;;14232:1;:11;;;:18;14222:28;14170:93;;;::::0;-1:-1:-1;;;14170:93:0;;20010:2:1;14170:93:0::2;::::0;::::2;19992:21:1::0;20049:1;20029:18;;;20022:29;-1:-1:-1;;;20067:18:1;;;20060:38;20115:18;;14170:93:0::2;19808:331:1::0;14170:93:0::2;14276:8;::::0;14328:17:::2;::::0;::::2;::::0;14276:70:::2;::::0;-1:-1:-1;;;14276:70:0;;14297:10:::2;14276:70;::::0;::::2;12134:34:1::0;14276:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;14276:8:0::2;12184:18:1::0;;;12177:43;;;12236:18;;;12229:34;;;;14276:8:0;:20:::2;::::0;12046:18:1;;14276:70:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;14362:6;14359:2037;;;14406:8;;;;;;;;;-1:-1:-1::0;;;;;14406:8:0::2;-1:-1:-1::0;;;;;14406:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14406:52:0::2;;14459:1;:11;;;14406:65;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;14406:65:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14392:10;:79;;14384:127;;;::::0;-1:-1:-1;;;14384:127:0;;21874:2:1;14384:127:0::2;::::0;::::2;21856:21:1::0;21913:2;21893:18;;;21886:30;21952:20;21932:18;;;21925:48;21990:18;;14384:127:0::2;21672:342:1::0;14384:127:0::2;14528:9;14584:3;14563:8;;;;;;;;;-1:-1:-1::0;;;;;14563:8:0::2;-1:-1:-1::0;;;;;14563:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14552:10;14540:1;:11;;;:22;;;;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;14602:10;14615:8:::0;;14661:11:::2;::::0;::::2;::::0;14615:58:::2;::::0;;;;14649:10:::2;14615:58;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;14528:59:0;;-1:-1:-1;14602:10:0;;14615:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;14615:8:0::2;::::0;:33:::2;::::0;12896:18:1;;14615:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14602:71;;14690:8;;;;;;;;;-1:-1:-1::0;;;;;14690:8:0::2;-1:-1:-1::0;;;;;14690:28:0::2;;14719:531;;;;;;;;14771:10;-1:-1:-1::0;;;;;14719:531:0::2;;;;;14800:1;:11;;;14719:531;;;;14830:5;14719:531;;;;14854:1;:17;;;14719:531;;;;14911:1;14890:18;:22;:77;;14966:1;14890:77;;;14915:8;::::0;::::2;::::0;::::2;-1:-1:-1::0;;;;;14915:8:0::2;:26;14942:20;14915:8;14942:18:::0;:20:::2;:::i;:::-;14915:48;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;14915:48:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14719:531;;;;14986:1;:5;;;14719:531;;;;;;15010:1;:10;;;14719:531;;;;15039:1;:4;;;14719:531;;;;15062:1;:4;;;14719:531;;;;15085:1;:5;;;:40;;15114:1;:11;;;15085:40;;;15107:4;15093:1;:11;;;:18;;;;:::i;:::-;14719:531;;;;15144:1;:5;;;:40;;15180:4;15166:1;:11;;;:18;;;;:::i;:::-;15144:40;;;15152:1;:11;;;15144:40;14719:531;;;;15203:12;14719:531;;;;15234:1;14719:531;;::::0;14690:561:::2;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;15301:1;:11;;;15289:10;-1:-1:-1::0;;;;;15273:47:0::2;;15314:5;15273:47;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;15273:47:0::2;;;;;;;;14369:963;;14359:2037;;;15351:10;15364:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;15364:8:0::2;-1:-1:-1::0;;;;;15364:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15364:35:0::2;;15418:1;:11;;;15449:43;15532:1;:10;;;15512:1;:17;;;:30;;;;:::i;:::-;15364:193;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15351:206;;15574:8;;;;;;;;;-1:-1:-1::0;;;;;15574:8:0::2;-1:-1:-1::0;;;;;15574:32:0::2;;15625:651;;;;;;;;15685:357;;;;;;;;15736:10;-1:-1:-1::0;;;;;15685:357:0::2;;;;;15773:1;:11;;;15685:357;;;;15811:1;15685:357;;;;15814:1;15685:357;;;;15842:1;:17;;;15685:357;;;;15886:1;15685:357;;;;15915:1;:5;;;15685:357;;;;;;15947:1;:10;;;15685:357;;;;15984:1;:4;;;15685:357;;;;16015:1;:4;;;15685:357;;::::0;15625:651:::2;;;;16065:1;15625:651;;;;16089:1;:11;;;15625:651;;;;16123:10;15625:651;;;;16177:1;16156:18;:22;:77;;16232:1;16156:77;;;16181:8;::::0;::::2;::::0;::::2;-1:-1:-1::0;;;;;16181:8:0::2;:26;16208:20;16181:8;16208:18:::0;:20:::2;:::i;:::-;16181:48;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;16181:48:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15625:651;;;;16256:1;15625:651;;::::0;16278:5:::2;16285:4;15574:730;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;;16359:11:0::2;::::0;;::::2;::::0;16326:58:::2;::::0;;16347:10:::2;13276:74:1::0;;13366:18;;;13359:34;;;;16372:4:0::2;13409:18:1::0;;;13402:50;13483:2;13468:18;;13461:34;;;16326:58:0;::::2;::::0;;;;13263:3:1;16326:58:0;;::::2;15336:1060;14359:2037;16408:8;::::0;:45:::2;::::0;;;;16431:10:::2;16408:45;::::0;::::2;11774:34:1::0;-1:-1:-1;;;;;11844:15:1;;;11824:18;;;11817:43;16408:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:22:::2;::::0;11686:18:1;;16408:45:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;12521:3940;12311:4150:::0;;;;;:::o;20544:1311::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;20651:33:::2;20687:8:::0;;:51:::2;::::0;-1:-1:-1;;;20687:51:0;;20707:10:::2;20687:51;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;20687:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20687:8:0::2;::::0;:19:::2;::::0;13681:18:1;;20687:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20749:37;20789:8:::0;;:55:::2;::::0;-1:-1:-1;;;20789:55:0;;20813:10:::2;20789:55;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;20651:87:0;;-1:-1:-1;20749:37:0;;20789:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;20789:8:0::2;::::0;:23:::2;::::0;13681:18:1;;20789:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20749:95;;20903:8;;;;;;;;;-1:-1:-1::0;;;;;20903:8:0::2;-1:-1:-1::0;;;;;20903:26:0::2;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20863:8;::::0;:37:::2;::::0;-1:-1:-1;;;20863:37:0;;20887:12:::2;20863:37;::::0;::::2;28776:25:1::0;20863:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20863:8:0::2;::::0;:23:::2;::::0;28749:18:1;;20863:37:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;20855:115;;;::::0;-1:-1:-1;;;20855:115:0;;23583:2:1;20855:115:0::2;::::0;::::2;23565:21:1::0;23622:2;23602:18;;;23595:30;23661:22;23641:18;;;23634:50;23701:18;;20855:115:0::2;23381:344:1::0;20855:115:0::2;21033:8;;;;;;;;;-1:-1:-1::0;;;;;21033:8:0::2;-1:-1:-1::0;;;;;21033:31:0::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20989:8;::::0;:41:::2;::::0;-1:-1:-1;;;20989:41:0;;21019:10:::2;20989:41;::::0;::::2;11454:74:1::0;20989:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20989:8:0::2;::::0;:29:::2;::::0;11427:18:1;;20989:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;20981:122;;;::::0;-1:-1:-1;;;20981:122:0;;22554:2:1;20981:122:0::2;::::0;::::2;22536:21:1::0;22593:2;22573:18;;;22566:30;22632:20;22612:18;;;22605:48;22670:18;;20981:122:0::2;22352:342:1::0;20981:122:0::2;21123:1;:19;;;21122:20;21114:53;;;::::0;-1:-1:-1;;;21114:53:0;;25036:2:1;21114:53:0::2;::::0;::::2;25018:21:1::0;25075:2;25055:18;;;25048:30;25114:22;25094:18;;;25087:50;25154:18;;21114:53:0::2;24834:344:1::0;21114:53:0::2;21199:1;21186;:10;;;:14;21178:35;;;::::0;-1:-1:-1;;;21178:35:0;;16057:2:1;21178:35:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;21178:35:0::2;15855:331:1::0;21178:35:0::2;21226:10;21239:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;21239:8:0::2;-1:-1:-1::0;;;;;21239:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21239:35:0::2;;21289:10;21315:44;21426:8;;;;;;;;;-1:-1:-1::0;;;;;21426:8:0::2;-1:-1:-1::0;;;;;21426:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21408:1;:15;;;21395:1;:10;;;21375:1;:17;;;:30;;;;:::i;:::-;:48;;;;:::i;:::-;:71;;;;:::i;:::-;21239:218;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21226:231;;21470:8;;;;;;;;;-1:-1:-1::0;;;;;21470:8:0::2;-1:-1:-1::0;;;;;21470:32:0::2;;21503:255;;;;;;;;21555:164;;;;;;;;21598:10;-1:-1:-1::0;;;;;21555:164:0::2;;;;;21627:10;21555:164;;;;21656:6;21555:164;;;;21681:1;21555:164;;;;21684:1;21555:164;;;;21687:1;21555:164;;;;21690:5;21555:164;;;;;;21697:1;21555:164;;;;21700:1;21555:164;;;;21703:1;21555:164;;::::0;21503:255:::2;;;;21734:1;21503:255;;;;21737:1;21503:255;;;;21740:1;21503:255;;;;21743:1;21503:255;;;;21746:1;21503:255;;::::0;21760:5:::2;21767;21470:303;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;21789:58:0::2;::::0;;21810:10:::2;13276:74:1::0;;13381:2;13366:18;;13359:34;;;21834:5:0::2;13409:18:1::0;;;13402:50;;;;13483:2;13468:18;;13461:34;;;21789:58:0::2;::::0;-1:-1:-1;13263:3:1;13248:19;;-1:-1:-1;21789:58:0::2;13051:450:1::0;21956:2228:0;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;22206:33:::2;22242:8:::0;;:48:::2;::::0;-1:-1:-1;;;22242:48:0;;-1:-1:-1;;;;;13726:55:1;;;22242:48:0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;22242:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:19:::2;::::0;13681:18:1;;22242:48:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22206:84;;22320:1;22309:8;:12;:28;;;;;22336:1;22325:8;:12;22309:28;22301:55;;;::::0;-1:-1:-1;;;22301:55:0;;16393:2:1;22301:55:0::2;::::0;::::2;16375:21:1::0;16432:2;16412:18;;;16405:30;16471:16;16451:18;;;16444:44;16505:18;;22301:55:0::2;16191:338:1::0;22301:55:0::2;22389:8;;;;;;;;;-1:-1:-1::0;;;;;22389:8:0::2;-1:-1:-1::0;;;;;22389:12:0::2;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22375:28:0::2;:10;-1:-1:-1::0;;;;;22375:28:0::2;;:87;;;-1:-1:-1::0;22407:8:0::2;::::0;22452:10:::2;::::0;22407:8:::2;::::0;::::2;-1:-1:-1::0;;;;;22407:8:0::2;:13;22421:10;22407:8;22421::::0;:10:::2;:::i;:::-;22407:25;;;;;;;;;;;;;28776::1::0;;28764:2;28749:18;;28630:177;22407:25:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22407:33:0::2;;22441:6;22407:41;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;22407:41:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22407:55:0::2;;22375:87;22367:119;;;::::0;-1:-1:-1;;;22367:119:0;;25385:2:1;22367:119:0::2;::::0;::::2;25367:21:1::0;25424:1;25404:18;;;25397:29;25462:8;25442:18;;;25435:36;25488:18;;22367:119:0::2;25183:329:1::0;22367:119:0::2;22553:8;;;;;;;;;-1:-1:-1::0;;;;;22553:8:0::2;-1:-1:-1::0;;;;;22553:27:0::2;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22521:8;::::0;:31:::2;::::0;;;;::::2;::::0;::::2;28776:25:1::0;;;22521:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;22521:8:0::2;::::0;:23:::2;::::0;28749:18:1;;22521:31:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;;:::i;:::-;22505:12;:77;;22497:119;;;::::0;-1:-1:-1;;;22497:119:0;;17077:2:1;22497:119:0::2;::::0;::::2;17059:21:1::0;17116:2;17096:18;;;17089:30;17155:18;17135;;;17128:46;17191:18;;22497:119:0::2;16875:340:1::0;22497:119:0::2;22649:34;22635:10;:48;;;;;;;;:::i;:::-;;;:107;;;-1:-1:-1::0;22687:8:0::2;::::0;:55:::2;::::0;-1:-1:-1;;;22687:55:0;;-1:-1:-1;;;;;13726:55:1;;;22687::0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;22687:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:26:::2;::::0;13681:18:1;;22687:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22627:142;;;::::0;-1:-1:-1;;;22627:142:0;;22901:2:1;22627:142:0::2;::::0;::::2;22883:21:1::0;22940:1;22920:18;;;22913:29;-1:-1:-1;;;22958:18:1;;;22951:38;23006:18;;22627:142:0::2;22699:331:1::0;22627:142:0::2;22802:34;22788:10;:48;;;;;;;;:::i;:::-;;:66;;;;22853:1;22840;:10;;;:14;22788:66;22780:87;;;::::0;-1:-1:-1;;;22780:87:0;;16057:2:1;22780:87:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;22780:87:0::2;15855:331:1::0;22780:87:0::2;22900:32;22886:10;:46;;;;;;;;:::i;:::-;;;:58;;;;22943:1;22936;:4;;;:8;22886:58;22878:76;;;::::0;-1:-1:-1;;;22878:76:0;;22221:2:1;22878:76:0::2;::::0;::::2;22203:21:1::0;22260:1;22240:18;;;22233:29;22298:7;22278:18;;;22271:35;22323:18;;22878:76:0::2;22019:328:1::0;22878:76:0::2;22967:20;23015:34;23001:10;:48;;;;;;;;:::i;:::-;;22998:466;;;23065:42;23110:8:::0;;:55:::2;::::0;-1:-1:-1;;;23110:55:0;;-1:-1:-1;;;;;13726:55:1;;;23110::0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;23110:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:26:::2;::::0;13681:18:1;;23110:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23065:100;;23215:1;:10;;;23198:1;:14;;;:27;;;;:::i;:::-;23180:45;;23050:187;22998:466;;;23256:37;23296:8:::0;;:52:::2;::::0;-1:-1:-1;;;23296:52:0;;-1:-1:-1;;;;;13726:55:1;;;23296:52:0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;23296:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:23:::2;::::0;13681:18:1;;23296:52:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23256:92;;23432:8;;;;;;;;;-1:-1:-1::0;;;;;23432:8:0::2;-1:-1:-1::0;;;;;23432:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23419:1;:10;;;23401:1;:15;;;23381:1;:17;;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:71;;;;:::i;:::-;23363:89;;23241:223;22998:466;23476:8;::::0;:74:::2;::::0;;;;23510:10:::2;23476:74;::::0;::::2;13708::1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;23476:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;23476:8:0::2;::::0;:33:::2;::::0;13681:18:1;;23476:74:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;23563:10;23576:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;23576:8:0::2;-1:-1:-1::0;;;;;23576:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23576:35:0::2;;23626:10:::0;23666:34:::2;23652:10;:48;;;;;;;;:::i;:::-;;:175;;23784:43;23652:175;;;23721:42;23652:175;23842:15;23576:292;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23563:305;;23881:8;;;;;;;;;-1:-1:-1::0;;;;;23881:8:0::2;-1:-1:-1::0;;;;;23881:29:0::2;;23911:184;;;;;;;;23960:10;-1:-1:-1::0;;;;;23911:184:0::2;;;;;23985:6;23911:184;;;;24006:7;-1:-1:-1::0;;;;;23911:184:0::2;;;;;24028:10;23911:184;;;;24053:6;23911:184;;;;24074:10;23911:184;;;;;;;;:::i;:::-;;;::::0;24097:5:::2;23881:222;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;24119:57:0::2;::::0;;24137:10:::2;12566:34:1::0;;-1:-1:-1;;;;;12636:15:1;;12631:2;12616:18;;12609:43;12668:18;;;12661:34;;;12726:2;12711:18;;12704:34;;;24119:57:0::2;::::0;-1:-1:-1;12492:3:1;12477:19;;-1:-1:-1;24119:57:0::2;;;;;;;22193:1991;;;21956:2228:::0;;;;;;:::o;17742:612::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;17853:8:::2;::::0;:58:::2;::::0;-1:-1:-1;;;17853:58:0;;17880:10:::2;17853:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;17853:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;17853:8:0::2;::::0;:26:::2;::::0;13681:18:1;;17853:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17845:79;;;::::0;-1:-1:-1;;;17845:79:0;;22901:2:1;17845:79:0::2;::::0;::::2;22883:21:1::0;22940:1;22920:18;;;22913:29;-1:-1:-1;;;22958:18:1;;;22951:38;23006:18;;17845:79:0::2;22699:331:1::0;17845:79:0::2;17937:42;17982:8:::0;;:58:::2;::::0;-1:-1:-1;;;17982:58:0;;18009:10:::2;17982:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;17982:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;17982:8:0::2;::::0;:26:::2;::::0;13681:18:1;;17982:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17937:103;;18085:19;;18074:1;:7;;;18059:12;:22;;;;:::i;:::-;:45;;18051:72;;;::::0;-1:-1:-1;;;18051:72:0;;18461:2:1;18051:72:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;18051:72:0::2;18259:338:1::0;18051:72:0::2;18136:8;::::0;18188:14:::2;::::0;::::2;::::0;18136:67:::2;::::0;-1:-1:-1;;;18136:67:0;;:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;18136:8:0::2;:67;::::0;::::2;12134:34:1::0;;;18176:10:0::2;12184:18:1::0;;;12177:43;12236:18;;;12229:34;;;;18136:8:0;:20:::2;::::0;12046:18:1;;18136:67:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;18216:8:0::2;::::0;:65:::2;::::0;;;;18250:10:::2;18216:65;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;18216:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;18216:8:0::2;::::0;-1:-1:-1;18216:33:0::2;::::0;-1:-1:-1;13681:18:1;;18216:65:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;18297:49:0::2;::::0;28776:25:1;;;18327:10:0;;-1:-1:-1;18315:10:0::2;::::0;-1:-1:-1;18297:49:0::2;::::0;28764:2:1;28749:18;18297:49:0::2;;;;;;;17832:522;17742:612:::0;;:::o;19683:811::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;19787:33:::2;19823:8:::0;;:51:::2;::::0;-1:-1:-1;;;19823:51:0;;19843:10:::2;19823:51;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;19823:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;19823:8:0::2;::::0;:19:::2;::::0;13681:18:1;;19823:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19885:37;19925:8:::0;;:55:::2;::::0;-1:-1:-1;;;19925:55:0;;19949:10:::2;19925:55;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;19787:87:0;;-1:-1:-1;19885:37:0;;19925:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;19925:8:0::2;::::0;:23:::2;::::0;13681:18:1;;19925:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19885:95;;20012:1;19999;:10;;;:14;19991:35;;;::::0;-1:-1:-1;;;19991:35:0;;16057:2:1;19991:35:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;19991:35:0::2;15855:331:1::0;19991:35:0::2;20039:14;20096:1;:10;;;20090:3;20070:8;;;;;;;;;-1:-1:-1::0;;;;;20070:8:0::2;-1:-1:-1::0;;;;;20070:15:0::2;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20056:1;:11;;;:31;;;;:::i;:::-;:37;;;;:::i;:::-;:50;;;;:::i;:::-;20039:67:::0;-1:-1:-1;20125:11:0;;;:57:::2;;;20140:1;:5;;;:42;;;;;20173:9;20159:1;:11;;;:23;;;;:::i;:::-;20149:6;:33;;20140:42;20125:118;;;;20201:1;:5;;;20200:6;:43;;;;;20234:9;20220:1;:11;;;:23;;;;:::i;:::-;20210:6;:33;;20200:43;20117:141;;;::::0;-1:-1:-1;;;20117:141:0;;24697:2:1;20117:141:0::2;::::0;::::2;24679:21:1::0;24736:2;24716:18;;;24709:30;24775:12;24755:18;;;24748:40;24805:18;;20117:141:0::2;24495:334:1::0;20117:141:0::2;20311:19;::::0;20292:15:::2;::::0;::::2;::::0;20277:30:::2;::::0;:12:::2;:30;:::i;:::-;:53;;20269:80;;;::::0;-1:-1:-1;;;20269:80:0;;18461:2:1;20269:80:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;20269:80:0::2;18259:338:1::0;20269:80:0::2;20370:8;::::0;:57:::2;::::0;;;;20388:10:::2;20370:57;::::0;::::2;14110:74:1::0;14200:18;;;14193:34;;;14243:18;;;14236:34;;;14286:18;;;14279:34;;;20370:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20370:8:0::2;::::0;:17:::2;::::0;14082:19:1;;20370:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;20445:41:0::2;::::0;28776:25:1;;;20467:10:0;;-1:-1:-1;20455:10:0::2;::::0;-1:-1:-1;20445:41:0::2;::::0;28764:2:1;28749:18;20445:41:0::2;;;;;;;19774:720;;;19683:811:::0;;;:::o;16501:1201::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;16762:8:::2;::::0;:58:::2;::::0;-1:-1:-1;;;16762:58:0;;16789:10:::2;16762:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;16762:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;16762:8:0::2;::::0;:26:::2;::::0;13681:18:1;;16762:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16754:79;;;::::0;-1:-1:-1;;;16754:79:0;;22901:2:1;16754:79:0::2;::::0;::::2;22883:21:1::0;22940:1;22920:18;;;22913:29;-1:-1:-1;;;22958:18:1;;;22951:38;23006:18;;16754:79:0::2;22699:331:1::0;16754:79:0::2;16866:8;;;;;;;;;-1:-1:-1::0;;;;;16866:8:0::2;-1:-1:-1::0;;;;;16866:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16866:52:0::2;;16919:10;16866:64;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;16866:64:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16852:10;:78;;16844:125;;;::::0;-1:-1:-1;;;16844:125:0;;26055:2:1;16844:125:0::2;::::0;::::2;26037:21:1::0;26094:2;26074:18;;;26067:30;26133:22;26113:18;;;26106:50;26173:18;;16844:125:0::2;25853:344:1::0;16844:125:0::2;16982:42;17027:8:::0;;:58:::2;::::0;-1:-1:-1;;;17027:58:0;;17054:10:::2;17027:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;17027:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;17027:8:0::2;::::0;:26:::2;::::0;13681:18:1;;17027:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16982:103;;17130:19;;17119:1;:7;;;17104:12;:22;;;;:::i;:::-;:45;;17096:86;;;::::0;-1:-1:-1;;;17096:86:0;;18461:2:1;17096:86:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;17096:86:0::2;18259:338:1::0;17096:86:0::2;17203:8:::0;;;:33:::2;;;17215:1;:5;;;:21;;;;;17233:3;17224:6;:12;17215:21;17203:59;;;;17241:1;:5;;;17240:6;:22;;;;;17259:3;17250:6;:12;17240:22;17195:80;;;::::0;-1:-1:-1;;;17195:80:0;;19215:2:1;17195:80:0::2;::::0;::::2;19197:21:1::0;19254:1;19234:18;;;19227:29;-1:-1:-1;;;19272:18:1;;;19265:38;19320:18;;17195:80:0::2;19013:331:1::0;17195:80:0::2;17294:8:::0;;;:33:::2;;;17306:1;:5;;;:21;;;;;17324:3;17315:6;:12;17306:21;17294:59;;;;17332:1;:5;;;17331:6;:22;;;;;17350:3;17341:6;:12;17331:22;17286:80;;;::::0;-1:-1:-1;;;17286:80:0;;20010:2:1;17286:80:0::2;::::0;::::2;19992:21:1::0;20049:1;20029:18;;;20022:29;-1:-1:-1;;;20067:18:1;;;20060:38;20115:18;;17286:80:0::2;19808:331:1::0;17286:80:0::2;17379:9;17430:3;17409:8;;;;;;;;;-1:-1:-1::0;;;;;17409:8:0::2;-1:-1:-1::0;;;;;17409:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17391:17;17398:10:::0;17391:6;:17:::2;:::i;:::-;:38;;;;:::i;:::-;:42;;;;:::i;:::-;17379:54;;17457:1;:5;;;:30;;17481:6;17457:30;;;17465:13;17474:4:::0;17465:6;:13:::2;:::i;:::-;17444:10;::::0;::::2;:43:::0;17511:5:::2;::::0;::::2;::::0;:30:::2;;17528:13;17537:4:::0;17528:6;:13:::2;:::i;:::-;17511:30;;;17519:6;17511:30;17498:10;::::0;::::2;:43:::0;17552:4:::2;::::0;::::2;:10:::0;;;17573:4:::2;::::0;;::::2;:10:::0;;;-1:-1:-1;17596:8:0;-1:-1:-1;17596:32:0;;;;:8;;::::2;-1:-1:-1::0;;;;;17596:8:0::2;::::0;:29:::2;::::0;:32:::2;::::0;17498:10;;17596:32:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;17646:48:0::2;::::0;28776:25:1;;;17675:10:0;;-1:-1:-1;17663:10:0::2;::::0;-1:-1:-1;17646:48:0::2;::::0;28764:2:1;28749:18;17646:48:0::2;;;;;;;16741:961;;16501:1201:::0;;;;;;:::o;11865:205::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11961:1:::1;11945:13;:17;11937:26;;;::::0;::::1;;11974:12;:28:::0;;;12018:44:::1;::::0;;20704:21:1;;;20761:2;20741:18;;;20734:30;;;;20800:14;20795:2;20780:18;;20773:42;20882:4;20867:20;;20860:36;;;12018:44:0::1;::::0;20847:3:1;20832:19;12018:44:0::1;20492:410:1::0;11657:202:0;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11748:1:::1;11738:7;:11;11730:20;;;::::0;::::1;;11761:19;:29:::0;;;11806:45:::1;::::0;;21119:21:1;;;21176:2;21156:18;;;21149:30;;;;21215:21;21210:2;21195:18;;21188:49;21304:4;21289:20;;21282:36;;;11806:45:0::1;::::0;21269:3:1;21254:19;11806:45:0::1;20907:417:1::0;18660:573:0;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;18764:33:::2;18800:8:::0;;:51:::2;::::0;-1:-1:-1;;;18800:51:0;;18820:10:::2;18800:51;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;18800:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;18800:8:0::2;::::0;:19:::2;::::0;13681:18:1;;18800:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18862:37;18902:8:::0;;:55:::2;::::0;-1:-1:-1;;;18902:55:0;;18926:10:::2;18902:55;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;18764:87:0;;-1:-1:-1;18862:37:0;;18902:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;18902:8:0::2;::::0;:23:::2;::::0;13681:18:1;;18902:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18862:95;;18991:1;18978;:10;;;:14;18970:35;;;::::0;-1:-1:-1;;;18970:35:0;;16057:2:1;18970:35:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;18970:35:0::2;15855:331:1::0;18970:35:0::2;19058:19;::::0;19039:15:::2;::::0;::::2;::::0;19024:30:::2;::::0;:12:::2;:30;:::i;:::-;:53;;19016:80;;;::::0;-1:-1:-1;;;19016:80:0;;18461:2:1;19016:80:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;19016:80:0::2;18259:338:1::0;19016:80:0::2;19109:8;::::0;:57:::2;::::0;;;;19127:10:::2;19109:57;::::0;::::2;14110:74:1::0;14200:18;;;14193:34;;;14243:18;;;14236:34;;;14286:18;;;14279:34;;;19109:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;19109:8:0::2;::::0;:17:::2;::::0;14082:19:1;;19109:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;19184:41:0::2;::::0;28776:25:1;;;19206:10:0;;-1:-1:-1;19194:10:0::2;::::0;-1:-1:-1;19184:41:0::2;::::0;28764:2:1;28749:18;19184:41:0::2;;;;;;;18751:482;;18660:573:::0;;;:::o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:138::-;232:13;;254:31;232:13;254:31;:::i;296:128::-;361:20;;390:28;361:20;390:28;:::i;429:132::-;505:13;;527:28;505:13;527:28;:::i;566:840::-;629:5;677:6;665:9;660:3;656:19;652:32;649:52;;;697:1;694;687:12;649:52;719:22;;:::i;:::-;710:31;;764:40;794:9;764:40;:::i;:::-;757:5;750:55;858:2;847:9;843:18;837:25;832:2;825:5;821:14;814:49;916:2;905:9;901:18;895:25;890:2;883:5;879:14;872:49;974:2;963:9;959:18;953:25;948:2;941:5;937:14;930:49;1033:3;1022:9;1018:19;1012:26;1006:3;999:5;995:15;988:51;1093:3;1082:9;1078:19;1072:26;1066:3;1059:5;1055:15;1048:51;1132:47;1174:3;1163:9;1159:19;1132:47;:::i;:::-;1126:3;1119:5;1115:15;1108:72;1234:3;1223:9;1219:19;1213:26;1207:3;1200:5;1196:15;1189:51;1259:3;1315:2;1304:9;1300:18;1294:25;1289:2;1282:5;1278:14;1271:49;;1339:3;1395:2;1384:9;1380:18;1374:25;1369:2;1362:5;1358:14;1351:49;;566:840;;;;:::o;1411:251::-;1481:6;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1582:9;1576:16;1601:31;1626:5;1601:31;:::i;:::-;1651:5;1411:251;-1:-1:-1;;;1411:251:1:o;1667:245::-;1734:6;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;1835:9;1829:16;1854:28;1876:5;1854:28;:::i;2480:273::-;2565:6;2618:2;2606:9;2597:7;2593:23;2589:32;2586:52;;;2634:1;2631;2624:12;2586:52;2673:9;2660:23;2692:31;2717:5;2692:31;:::i;2758:686::-;2876:6;2884;2892;2900;2908;2916;2969:3;2957:9;2948:7;2944:23;2940:33;2937:53;;;2986:1;2983;2976:12;2937:53;3025:9;3012:23;3064:1;3057:5;3054:12;3044:40;;3080:1;3077;3070:12;3044:40;3103:5;-1:-1:-1;3160:2:1;3145:18;;3132:32;3173:33;3132:32;3173:33;:::i;:::-;2758:686;;3225:7;;-1:-1:-1;;;;3279:2:1;3264:18;;3251:32;;3330:2;3315:18;;3302:32;;3381:3;3366:19;;3353:33;;-1:-1:-1;3433:3:1;3418:19;;;3405:33;;-1:-1:-1;2758:686:1:o;3449:1143::-;3550:6;3603:3;3591:9;3582:7;3578:23;3574:33;3571:53;;;3620:1;3617;3610:12;3571:53;3646:17;;:::i;:::-;3686:40;3716:9;3686:40;:::i;:::-;3679:5;3672:55;3780:2;3769:9;3765:18;3759:25;3754:2;3747:5;3743:14;3736:49;3838:2;3827:9;3823:18;3817:25;3812:2;3805:5;3801:14;3794:49;3896:2;3885:9;3881:18;3875:25;3870:2;3863:5;3859:14;3852:49;3955:3;3944:9;3940:19;3934:26;3928:3;3921:5;3917:15;3910:51;3994:47;4036:3;4025:9;4021:19;3994:47;:::i;:::-;3988:3;3977:15;;3970:72;4096:3;4081:19;;;4075:26;4058:15;;;4051:51;4156:3;4141:19;;;4135:26;4118:15;;;4111:51;4181:3;4222:18;;;4216:25;4200:14;;;4193:49;4261:3;4302:18;;;4296:25;4280:14;;;4273:49;4341:3;4382:18;;;4376:25;4360:14;;;4353:49;4421:3;4462:18;;;4456:25;4440:14;;;4433:49;4501:3;4542:18;;;4536:25;4520:14;;;4513:49;;;;-1:-1:-1;3981:5:1;3449:1143;-1:-1:-1;3449:1143:1:o;4597:955::-;4702:6;4755:3;4743:9;4734:7;4730:23;4726:33;4723:53;;;4772:1;4769;4762:12;4723:53;4805:2;4799:9;4847:4;4839:6;4835:17;4918:6;4906:10;4903:22;4882:18;4870:10;4867:34;4864:62;4861:242;;;-1:-1:-1;;;4956:1:1;4949:88;5060:4;5057:1;5050:15;5088:4;5085:1;5078:15;4861:242;5119:2;5112:22;5158:54;5204:7;5193:9;5158:54;:::i;:::-;5143:70;;5269:3;5254:19;;5248:26;5241:4;5229:17;;5222:53;5329:3;5314:19;;5308:26;5303:2;5291:15;;5284:51;5391:3;5376:19;;5370:26;5363:4;5351:17;;5344:53;5453:3;5438:19;;5432:26;5425:4;5413:17;;5406:53;5515:3;5500:19;;;5494:26;5487:4;5475:17;;5468:53;-1:-1:-1;5150:6:1;4597:955;-1:-1:-1;4597:955:1:o;5557:962::-;5653:6;5706:3;5694:9;5685:7;5681:23;5677:33;5674:53;;;5723:1;5720;5713:12;5674:53;5756:2;5750:9;5798:3;5790:6;5786:16;5868:6;5856:10;5853:22;5832:18;5820:10;5817:34;5814:62;5811:242;;;-1:-1:-1;;;5906:1:1;5899:88;6010:4;6007:1;6000:15;6038:4;6035:1;6028:15;5811:242;6073:10;6069:2;6062:22;;6114:9;6108:16;6100:6;6093:32;6179:2;6168:9;6164:18;6158:25;6153:2;6145:6;6141:15;6134:50;6238:2;6227:9;6223:18;6217:25;6212:2;6204:6;6200:15;6193:50;6297:2;6286:9;6282:18;6276:25;6271:2;6263:6;6259:15;6252:50;6357:3;6346:9;6342:19;6336:26;6330:3;6322:6;6318:16;6311:52;6406:3;6395:9;6391:19;6385:26;6420:28;6442:5;6420:28;:::i;:::-;6476:3;6464:16;;6457:31;6468:6;5557:962;-1:-1:-1;;;5557:962:1:o;6524:245::-;6616:6;6669:3;6657:9;6648:7;6644:23;6640:33;6637:53;;;6686:1;6683;6676:12;6637:53;6709:54;6755:7;6744:9;6709:54;:::i;6774:1289::-;6888:6;6896;6904;6912;6920;6964:9;6955:7;6951:23;6994:3;6990:2;6986:12;6983:32;;;7011:1;7008;7001:12;6983:32;7034:6;7060:2;7056;7052:11;7049:31;;;7076:1;7073;7066:12;7049:31;7102:22;;:::i;:::-;7089:35;;7147:29;7166:9;7147:29;:::i;:::-;7140:5;7133:44;7237:2;7226:9;7222:18;7209:32;7204:2;7197:5;7193:14;7186:56;7302:2;7291:9;7287:18;7274:32;7269:2;7262:5;7258:14;7251:56;7367:2;7356:9;7352:18;7339:32;7334:2;7327:5;7323:14;7316:56;7433:3;7422:9;7418:19;7405:33;7399:3;7392:5;7388:15;7381:58;7500:3;7489:9;7485:19;7472:33;7466:3;7459:5;7455:15;7448:58;7539:36;7570:3;7559:9;7555:19;7539:36;:::i;:::-;7533:3;7526:5;7522:15;7515:61;7637:3;7626:9;7622:19;7609:33;7603:3;7596:5;7592:15;7585:58;7662:3;7725:2;7714:9;7710:18;7697:32;7692:2;7685:5;7681:14;7674:56;;7749:3;7812:2;7801:9;7797:18;7784:32;7779:2;7772:5;7768:14;7761:56;;7836:5;7826:15;;7860:35;7891:2;7880:9;7876:18;7860:35;:::i;:::-;7850:45;;;;7942:3;7931:9;7927:19;7914:33;7904:43;;7994:3;7983:9;7979:19;7966:33;7956:43;;8018:39;8052:3;8041:9;8037:19;8018:39;:::i;:::-;8008:49;;6774:1289;;;;;;;;:::o;8068:180::-;8127:6;8180:2;8168:9;8159:7;8155:23;8151:32;8148:52;;;8196:1;8193;8186:12;8148:52;-1:-1:-1;8219:23:1;;8068:180;-1:-1:-1;8068:180:1:o;8253:184::-;8323:6;8376:2;8364:9;8355:7;8351:23;8347:32;8344:52;;;8392:1;8389;8382:12;8344:52;-1:-1:-1;8415:16:1;;8253:184;-1:-1:-1;8253:184:1:o;8442:248::-;8510:6;8518;8571:2;8559:9;8550:7;8546:23;8542:32;8539:52;;;8587:1;8584;8577:12;8539:52;-1:-1:-1;;8610:23:1;;;8680:2;8665:18;;;8652:32;;-1:-1:-1;8442:248:1:o;8695:245::-;8774:6;8782;8835:2;8823:9;8814:7;8810:23;8806:32;8803:52;;;8851:1;8848;8841:12;8803:52;-1:-1:-1;;8874:16:1;;8930:2;8915:18;;;8909:25;8874:16;;8909:25;;-1:-1:-1;8695:245:1:o;8945:316::-;9022:6;9030;9038;9091:2;9079:9;9070:7;9066:23;9062:32;9059:52;;;9107:1;9104;9097:12;9059:52;-1:-1:-1;;9130:23:1;;;9200:2;9185:18;;9172:32;;-1:-1:-1;9251:2:1;9236:18;;;9223:32;;8945:316;-1:-1:-1;8945:316:1:o;9266:523::-;9370:6;9378;9386;9394;9402;9410;9463:3;9451:9;9442:7;9438:23;9434:33;9431:53;;;9480:1;9477;9470:12;9431:53;-1:-1:-1;;9503:23:1;;;9573:2;9558:18;;9545:32;;-1:-1:-1;9624:2:1;9609:18;;9596:32;;9675:2;9660:18;;9647:32;;-1:-1:-1;9726:3:1;9711:19;;9698:33;;-1:-1:-1;9778:3:1;9763:19;9750:33;;-1:-1:-1;9266:523:1;-1:-1:-1;9266:523:1:o;10022:1002::-;10104:12;;10144:9;;-1:-1:-1;;;;;9860:54:1;9848:67;;10205:4;10201:2;10197:13;10191:20;10184:4;10179:3;10175:14;10168:44;10258:4;10254:2;10250:13;10244:20;10237:4;10232:3;10228:14;10221:44;10311:4;10307:2;10303:13;10297:20;10290:4;10285:3;10281:14;10274:44;10364:4;10360:2;10356:13;10350:20;10343:4;10338:3;10334:14;10327:44;10417:4;10413:2;10409:13;10403:20;10396:4;10391:3;10387:14;10380:44;10467:4;10463:2;10459:13;10453:20;10482:45;10521:4;10516:3;10512:14;10498:12;9996:13;9989:21;9977:34;;9926:91;10482:45;-1:-1:-1;10573:4:1;10565:13;;;10559:20;10543:14;;;10536:44;10599:6;10641:11;;;10635:18;10621:12;;;10614:40;10673:6;10715:11;;;10709:18;10695:12;;;10688:40;10779:4;10768:16;;10762:23;10753:6;10744:16;;10737:49;10837:4;10826:16;;10820:23;10811:6;10802:16;;10795:49;10895:4;10884:16;;10878:23;10869:6;10860:16;;10853:49;10953:4;10942:16;;10936:23;10927:6;10918:16;;10911:49;11011:4;11000:16;10994:23;10985:6;10976:16;;;10969:49;10022:1002::o;11029:274::-;11158:3;11196:6;11190:13;11212:53;11258:6;11253:3;11246:4;11238:6;11234:17;11212:53;:::i;:::-;11281:16;;;;;11029:274;-1:-1:-1;;11029:274:1:o;26202:1170::-;26430:13;;-1:-1:-1;;;;;9860:54:1;9848:67;;26398:3;26383:19;;26511:4;26503:6;26499:17;26493:24;26486:4;26475:9;26471:20;26464:54;26574:4;26566:6;26562:17;26556:24;26549:4;26538:9;26534:20;26527:54;26637:4;26629:6;26625:17;26619:24;26612:4;26601:9;26597:20;26590:54;26700:4;26692:6;26688:17;26682:24;26675:4;26664:9;26660:20;26653:54;26754:4;26746:6;26742:17;26736:24;26769:51;26814:4;26803:9;26799:20;26785:12;9996:13;9989:21;9977:34;;9926:91;26769:51;-1:-1:-1;26876:4:1;26864:17;;;26858:24;26836:20;;;26829:54;26939:4;26927:17;;;26921:24;26899:20;;;26892:54;26965:6;27013:15;;;27007:22;26987:18;;;26980:50;27049:6;27097:15;;;27091:22;27071:18;;;27064:50;27133:6;27181:15;;;27175:22;27155:18;;;27148:50;27217:6;27265:15;;;27259:22;27239:18;;;27232:50;27301:6;27349:15;;;27343:22;27323:18;;;;27316:50;;;;26202:1170;:::o;27377:432::-;27631:3;27616:19;;27644:55;27620:9;27681:6;27644:55;:::i;:::-;27736:6;27730:3;27719:9;27715:19;27708:35;27794:6;27787:14;27780:22;27774:3;27763:9;27759:19;27752:51;27377:432;;;;;;:::o;27814:811::-;27998:4;28040:3;28029:9;28025:19;28017:27;;-1:-1:-1;;;;;28151:2:1;28142:6;28136:13;28132:22;28121:9;28114:41;28211:4;28203:6;28199:17;28193:24;28186:4;28175:9;28171:20;28164:54;28286:2;28278:4;28270:6;28266:17;28260:24;28256:33;28249:4;28238:9;28234:20;28227:63;;28346:4;28338:6;28334:17;28328:24;28321:4;28310:9;28306:20;28299:54;28409:4;28401:6;28397:17;28391:24;28384:4;28373:9;28369:20;28362:54;28463:4;28455:6;28451:17;28445:24;28478:46;28511:12;28478:46;:::i;:::-;28555:4;28540:20;;28533:42;28606:3;28591:19;;;28584:35;;;;27814:811;;-1:-1:-1;27814:811:1:o;29075:378::-;29287:25;;;29275:2;29260:18;;29321:40;29354:6;29321:40;:::i;:::-;29392:2;29377:18;;29370:34;;;;29435:2;29420:18;29413:34;29075:378;;-1:-1:-1;29075:378:1:o;29719:454::-;29896:6;29885:9;29878:25;29939:2;29934;29923:9;29919:18;29912:30;29859:4;29971:6;29965:13;30014:6;30009:2;29998:9;29994:18;29987:34;30030:66;30089:6;30084:2;30073:9;30069:18;30064:2;30056:6;30052:15;30030:66;:::i;:::-;30157:2;30136:15;-1:-1:-1;;30132:29:1;30117:45;;;;30164:2;30113:54;;29719:454;-1:-1:-1;;;29719:454:1:o;30178:349::-;30423:25;;;30410:3;30395:19;;30457:64;30517:2;30502:18;;30494:6;30457:64;:::i;31047:409::-;31119:2;31113:9;31161:6;31149:19;;31198:18;31183:34;;31219:22;;;31180:62;31177:242;;;-1:-1:-1;;;31272:1:1;31265:88;31376:4;31373:1;31366:15;31404:4;31401:1;31394:15;31177:242;31435:2;31428:22;31047:409;:::o;31461:401::-;31528:2;31522:9;31570:3;31558:16;;31604:18;31589:34;;31625:22;;;31586:62;31583:242;;;-1:-1:-1;;;31678:1:1;31671:88;31782:4;31779:1;31772:15;31810:4;31807:1;31800:15;31867:128;31907:3;31938:1;31934:6;31931:1;31928:13;31925:39;;;31944:18;;:::i;:::-;-1:-1:-1;31980:9:1;;31867:128::o;32000:274::-;32040:1;32066;32056:189;;-1:-1:-1;;;32098:1:1;32091:88;32202:4;32199:1;32192:15;32230:4;32227:1;32220:15;32056:189;-1:-1:-1;32259:9:1;;32000:274::o;32279:168::-;32319:7;32385:1;32381;32377:6;32373:14;32370:1;32367:21;32362:1;32355:9;32348:17;32344:45;32341:71;;;32392:18;;:::i;:::-;-1:-1:-1;32432:9:1;;32279:168::o;32452:125::-;32492:4;32520:1;32517;32514:8;32511:34;;;32525:18;;:::i;:::-;-1:-1:-1;32562:9:1;;32452:125::o;32582:258::-;32654:1;32664:113;32678:6;32675:1;32672:13;32664:113;;;32754:11;;;32748:18;32735:11;;;32728:39;32700:2;32693:10;32664:113;;;32795:6;32792:1;32789:13;32786:48;;;32830:1;32821:6;32816:3;32812:16;32805:27;32786:48;;32582:258;;;:::o;32845:184::-;-1:-1:-1;;;32894:1:1;32887:88;32994:4;32991:1;32984:15;33018:4;33015:1;33008:15;33034:184;-1:-1:-1;;;33083:1:1;33076:88;33183:4;33180:1;33173:15;33207:4;33204:1;33197:15;33223:269;33306:1;33299:5;33296:12;33286:200;;-1:-1:-1;;;33339:1:1;33332:88;33443:4;33440:1;33433:15;33471:4;33468:1;33461:15;33286:200;33223:269;:::o;33497:154::-;-1:-1:-1;;;;;33576:5:1;33572:54;33565:5;33562:65;33552:93;;33641:1;33638;33631:12;33656:118;33742:5;33735:13;33728:21;33721:5;33718:32;33708:60;;33764:1;33761;33754:12
Swarm Source
ipfs://5dec3529b37f38929b3b6b4d605ebac74a18fa136f97505a725dfd5de683b798
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.