Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 13546064 | 1132 days ago | IN | 0 ETH | 0.01184988 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
UniswapAnchoredView
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.6.12; pragma experimental ABIEncoderV2; import "./UniswapConfig.sol"; import "./UniswapLib.sol"; import "../Ownable.sol"; import "../Chainlink/AggregatorValidatorInterface.sol"; struct Observation { uint timestamp; uint acc; } struct PriceData { uint248 price; bool failoverActive; } contract UniswapAnchoredView is AggregatorValidatorInterface, UniswapConfig, Ownable { using FixedPoint for *; /// @notice The number of wei in 1 ETH uint public constant ethBaseUnit = 1e18; /// @notice A common scaling factor to maintain precision uint public constant expScale = 1e18; /// @notice The highest ratio of the new price to the anchor price that will still trigger the price to be updated uint public immutable upperBoundAnchorRatio; /// @notice The lowest ratio of the new price to the anchor price that will still trigger the price to be updated uint public immutable lowerBoundAnchorRatio; /// @notice The minimum amount of time in seconds required for the old uniswap price accumulator to be replaced uint public immutable anchorPeriod; /// @notice Official prices by symbol hash mapping(bytes32 => PriceData) public prices; /// @notice The old observation for each symbolHash mapping(bytes32 => Observation) public oldObservations; /// @notice The new observation for each symbolHash mapping(bytes32 => Observation) public newObservations; /// @notice The event emitted when new prices are posted but the stored price is not updated due to the anchor event PriceGuarded(bytes32 indexed symbolHash, uint reporter, uint anchor); /// @notice The event emitted when the stored price is updated event PriceUpdated(bytes32 indexed symbolHash, uint price); /// @notice The event emitted when anchor price is updated event AnchorPriceUpdated(bytes32 indexed symbolHash, uint anchorPrice, uint oldTimestamp, uint newTimestamp); /// @notice The event emitted when the uniswap window changes event UniswapWindowUpdated(bytes32 indexed symbolHash, uint oldTimestamp, uint newTimestamp, uint oldPrice, uint newPrice); /// @notice The event emitted when failover is activated event FailoverActivated(bytes32 indexed symbolHash); /// @notice The event emitted when failover is deactivated event FailoverDeactivated(bytes32 indexed symbolHash); bytes32 constant ethHash = keccak256(abi.encodePacked("ETH")); /** * @notice Construct a uniswap anchored view for a set of token configurations * @dev Note that to avoid immature TWAPs, the system must run for at least a single anchorPeriod before using. * NOTE: Reported prices are set to 1 during construction. We assume that this contract will not be voted in by * governance until prices have been updated through `validate` for each TokenConfig. * @param anchorToleranceMantissa_ The percentage tolerance that the reporter may deviate from the uniswap anchor * @param anchorPeriod_ The minimum amount of time required for the old uniswap price accumulator to be replaced * @param configs The static token configurations which define what prices are supported and how */ constructor(uint anchorToleranceMantissa_, uint anchorPeriod_, TokenConfig[] memory configs) UniswapConfig(configs) public { anchorPeriod = anchorPeriod_; // Allow the tolerance to be whatever the deployer chooses, but prevent under/overflow (and prices from being 0) upperBoundAnchorRatio = anchorToleranceMantissa_ > uint(-1) - 100e16 ? uint(-1) : 100e16 + anchorToleranceMantissa_; lowerBoundAnchorRatio = anchorToleranceMantissa_ < 100e16 ? 100e16 - anchorToleranceMantissa_ : 1; for (uint i = 0; i < configs.length; i++) { TokenConfig memory config = configs[i]; require(config.baseUnit > 0, "baseUnit must be greater than zero"); address uniswapMarket = config.uniswapMarket; if (config.priceSource == PriceSource.REPORTER) { require(uniswapMarket != address(0), "reported prices must have an anchor"); require(config.reporter != address(0), "reported price must have a reporter"); bytes32 symbolHash = config.symbolHash; prices[symbolHash].price = 1; uint cumulativePrice = currentCumulativePrice(config); oldObservations[symbolHash].timestamp = block.timestamp; newObservations[symbolHash].timestamp = block.timestamp; oldObservations[symbolHash].acc = cumulativePrice; newObservations[symbolHash].acc = cumulativePrice; emit UniswapWindowUpdated(symbolHash, block.timestamp, block.timestamp, cumulativePrice, cumulativePrice); } else { require(uniswapMarket == address(0), "only reported prices utilize an anchor"); } } } /** * @notice Get the official price for a symbol * @param symbol The symbol to fetch the price of * @return Price denominated in USD, with 6 decimals */ function price(string memory symbol) external view returns (uint) { TokenConfig memory config = getTokenConfigBySymbol(symbol); return priceInternal(config); } function priceInternal(TokenConfig memory config) internal view returns (uint) { if (config.priceSource == PriceSource.REPORTER) return prices[config.symbolHash].price; // config.fixedPrice holds a fixed-point number with scaling factor 10**6 for FIXED_USD if (config.priceSource == PriceSource.FIXED_USD) return config.fixedPrice; if (config.priceSource == PriceSource.FIXED_ETH) { uint usdPerEth = prices[ethHash].price; require(usdPerEth > 0, "ETH price not set, cannot convert to dollars"); // config.fixedPrice holds a fixed-point number with scaling factor 10**18 for FIXED_ETH return mul(usdPerEth, config.fixedPrice) / ethBaseUnit; } } /** * @notice Get the underlying price of a cToken, in the format expected by the Comptroller. * @dev Implements the PriceOracle interface for Compound v2. * @param cToken The cToken address for price retrieval * @return Price denominated in USD for the given cToken address, in the format expected by the Comptroller. */ function getUnderlyingPrice(address cToken) external view returns (uint) { TokenConfig memory config = getTokenConfigByCToken(cToken); // Comptroller needs prices in the format: ${raw price} * 1e36 / baseUnit // The baseUnit of an asset is the amount of the smallest denomination of that asset per whole. // For example, the baseUnit of ETH is 1e18. // Since the prices in this view have 6 decimals, we must scale them by 1e(36 - 6)/baseUnit return mul(1e30, priceInternal(config)) / config.baseUnit; } /** * @notice This is called by the reporter whenever a new price is posted on-chain * @dev called by AccessControlledOffchainAggregator * @param currentAnswer the price * @return valid bool */ function validate(uint256/* previousRoundId */, int256 /* previousAnswer */, uint256 /* currentRoundId */, int256 currentAnswer) external override returns (bool valid) { // NOTE: We don't do any access control on msg.sender here. The access control is done in getTokenConfigByReporter, // which will REVERT if an unauthorized address is passed. TokenConfig memory config = getTokenConfigByReporter(msg.sender); uint256 reportedPrice = convertReportedPrice(config, currentAnswer); uint256 anchorPrice = calculateAnchorPriceFromEthPrice(config); PriceData memory priceData = prices[config.symbolHash]; if (priceData.failoverActive) { require(anchorPrice < 2**248, "Anchor price too large"); prices[config.symbolHash].price = uint248(anchorPrice); emit PriceUpdated(config.symbolHash, anchorPrice); } else if (isWithinAnchor(reportedPrice, anchorPrice)) { require(reportedPrice < 2**248, "Reported price too large"); prices[config.symbolHash].price = uint248(reportedPrice); emit PriceUpdated(config.symbolHash, reportedPrice); valid = true; } else { emit PriceGuarded(config.symbolHash, reportedPrice, anchorPrice); } } /** * @notice In the event that a feed is failed over to Uniswap TWAP, this function can be called * by anyone to update the TWAP price. * @dev This only works if the feed represented by the symbolHash is failed over, and will revert otherwise * @param symbolHash bytes32 */ function pokeFailedOverPrice(bytes32 symbolHash) public { PriceData memory priceData = prices[symbolHash]; require(priceData.failoverActive, "Failover must be active"); TokenConfig memory config = getTokenConfigBySymbolHash(symbolHash); uint anchorPrice = calculateAnchorPriceFromEthPrice(config); require(anchorPrice < 2**248, "Anchor price too large"); prices[config.symbolHash].price = uint248(anchorPrice); emit PriceUpdated(config.symbolHash, anchorPrice); } /** * @notice Calculate the anchor price by fetching price data from the TWAP * @param config TokenConfig * @return anchorPrice uint */ function calculateAnchorPriceFromEthPrice(TokenConfig memory config) internal returns (uint anchorPrice) { uint ethPrice = fetchEthAnchorPrice(); require(config.priceSource == PriceSource.REPORTER, "only reporter prices get posted"); if (config.symbolHash == ethHash) { anchorPrice = ethPrice; } else { anchorPrice = fetchAnchorPrice(config.symbolHash, config, ethPrice); } } /** * @notice Convert the reported price to the 6 decimal format that this view requires * @param config TokenConfig * @param reportedPrice from the reporter * @return convertedPrice uint256 */ function convertReportedPrice(TokenConfig memory config, int256 reportedPrice) internal pure returns (uint256) { require(reportedPrice >= 0, "Reported price cannot be negative"); uint256 unsignedPrice = uint256(reportedPrice); uint256 convertedPrice = mul(unsignedPrice, config.reporterMultiplier) / config.baseUnit; return convertedPrice; } function isWithinAnchor(uint reporterPrice, uint anchorPrice) internal view returns (bool) { if (reporterPrice > 0) { uint anchorRatio = mul(anchorPrice, 100e16) / reporterPrice; return anchorRatio <= upperBoundAnchorRatio && anchorRatio >= lowerBoundAnchorRatio; } return false; } /** * @dev Fetches the current token/eth price accumulator from uniswap. */ function currentCumulativePrice(TokenConfig memory config) internal view returns (uint) { (uint cumulativePrice0, uint cumulativePrice1,) = UniswapV2OracleLibrary.currentCumulativePrices(config.uniswapMarket); if (config.isUniswapReversed) { return cumulativePrice1; } else { return cumulativePrice0; } } /** * @dev Fetches the current eth/usd price from uniswap, with 6 decimals of precision. * Conversion factor is 1e18 for eth/usdc market, since we decode uniswap price statically with 18 decimals. */ function fetchEthAnchorPrice() internal returns (uint) { return fetchAnchorPrice(ethHash, getTokenConfigBySymbolHash(ethHash), ethBaseUnit); } /** * @dev Fetches the current token/usd price from uniswap, with 6 decimals of precision. * @param conversionFactor 1e18 if seeking the ETH price, and a 6 decimal ETH-USDC price in the case of other assets */ function fetchAnchorPrice(bytes32 symbolHash, TokenConfig memory config, uint conversionFactor) internal virtual returns (uint) { (uint nowCumulativePrice, uint oldCumulativePrice, uint oldTimestamp) = pokeWindowValues(config); // This should be impossible, but better safe than sorry require(block.timestamp > oldTimestamp, "now must come after before"); uint timeElapsed = block.timestamp - oldTimestamp; // Calculate uniswap time-weighted average price // Underflow is a property of the accumulators: https://uniswap.org/audit.html#orgc9b3190 FixedPoint.uq112x112 memory priceAverage = FixedPoint.uq112x112(uint224((nowCumulativePrice - oldCumulativePrice) / timeElapsed)); uint rawUniswapPriceMantissa = priceAverage.decode112with18(); uint unscaledPriceMantissa = mul(rawUniswapPriceMantissa, conversionFactor); uint anchorPrice; // Adjust rawUniswapPrice according to the units of the non-ETH asset // In the case of ETH, we would have to scale by 1e6 / USDC_UNITS, but since baseUnit2 is 1e6 (USDC), it cancels // In the case of non-ETH tokens // a. pokeWindowValues already handled uniswap reversed cases, so priceAverage will always be Token/ETH TWAP price. // b. conversionFactor = ETH price * 1e6 // unscaledPriceMantissa = priceAverage(token/ETH TWAP price) * expScale * conversionFactor // so -> // anchorPrice = priceAverage * tokenBaseUnit / ethBaseUnit * ETH_price * 1e6 // = priceAverage * conversionFactor * tokenBaseUnit / ethBaseUnit // = unscaledPriceMantissa / expScale * tokenBaseUnit / ethBaseUnit anchorPrice = mul(unscaledPriceMantissa, config.baseUnit) / ethBaseUnit / expScale; emit AnchorPriceUpdated(symbolHash, anchorPrice, oldTimestamp, block.timestamp); return anchorPrice; } /** * @dev Get time-weighted average prices for a token at the current timestamp. * Update new and old observations of lagging window if period elapsed. */ function pokeWindowValues(TokenConfig memory config) internal returns (uint, uint, uint) { bytes32 symbolHash = config.symbolHash; uint cumulativePrice = currentCumulativePrice(config); Observation memory newObservation = newObservations[symbolHash]; // Update new and old observations if elapsed time is greater than or equal to anchor period uint timeElapsed = block.timestamp - newObservation.timestamp; if (timeElapsed >= anchorPeriod) { oldObservations[symbolHash].timestamp = newObservation.timestamp; oldObservations[symbolHash].acc = newObservation.acc; newObservations[symbolHash].timestamp = block.timestamp; newObservations[symbolHash].acc = cumulativePrice; emit UniswapWindowUpdated(config.symbolHash, newObservation.timestamp, block.timestamp, newObservation.acc, cumulativePrice); } return (cumulativePrice, oldObservations[symbolHash].acc, oldObservations[symbolHash].timestamp); } /** * @notice Activate failover, and fall back to using failover directly. * @dev Only the owner can call this function */ function activateFailover(bytes32 symbolHash) external onlyOwner() { require(!prices[symbolHash].failoverActive, "Already activated"); prices[symbolHash].failoverActive = true; emit FailoverActivated(symbolHash); pokeFailedOverPrice(symbolHash); } /** * @notice Deactivate a previously activated failover * @dev Only the owner can call this function */ function deactivateFailover(bytes32 symbolHash) external onlyOwner() { require(prices[symbolHash].failoverActive, "Already deactivated"); prices[symbolHash].failoverActive = false; emit FailoverDeactivated(symbolHash); } /// @dev Overflow proof multiplication function mul(uint a, uint b) internal pure returns (uint) { if (a == 0) return 0; uint c = a * b; require(c / a == b, "multiplication overflow"); return c; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface AggregatorValidatorInterface { function validate(uint256 previousRoundId, int256 previousAnswer, uint256 currentRoundId, int256 currentAnswer) external returns (bool); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.6.12; pragma experimental ABIEncoderV2; interface CErc20 { function underlying() external view returns (address); } contract UniswapConfig { /// @dev Describe how to interpret the fixedPrice in the TokenConfig. enum PriceSource { FIXED_ETH, /// implies the fixedPrice is a constant multiple of the ETH price (which varies) FIXED_USD, /// implies the fixedPrice is a constant multiple of the USD price (which is 1) REPORTER /// implies the price is set by the reporter } /// @dev Describe how the USD price should be determined for an asset. /// There should be 1 TokenConfig object for each supported asset, passed in the constructor. struct TokenConfig { address cToken; address underlying; bytes32 symbolHash; uint256 baseUnit; PriceSource priceSource; uint256 fixedPrice; address uniswapMarket; address reporter; uint256 reporterMultiplier; bool isUniswapReversed; } /// @notice The max number of tokens this contract is hardcoded to support /// @dev Do not change this variable without updating all the fields throughout the contract. uint public constant maxTokens = 25; /// @notice The number of tokens this contract actually supports uint public immutable numTokens; address internal immutable cToken00; address internal immutable cToken01; address internal immutable cToken02; address internal immutable cToken03; address internal immutable cToken04; address internal immutable cToken05; address internal immutable cToken06; address internal immutable cToken07; address internal immutable cToken08; address internal immutable cToken09; address internal immutable cToken10; address internal immutable cToken11; address internal immutable cToken12; address internal immutable cToken13; address internal immutable cToken14; address internal immutable cToken15; address internal immutable cToken16; address internal immutable cToken17; address internal immutable cToken18; address internal immutable cToken19; address internal immutable cToken20; address internal immutable cToken21; address internal immutable cToken22; address internal immutable cToken23; address internal immutable cToken24; address internal immutable underlying00; address internal immutable underlying01; address internal immutable underlying02; address internal immutable underlying03; address internal immutable underlying04; address internal immutable underlying05; address internal immutable underlying06; address internal immutable underlying07; address internal immutable underlying08; address internal immutable underlying09; address internal immutable underlying10; address internal immutable underlying11; address internal immutable underlying12; address internal immutable underlying13; address internal immutable underlying14; address internal immutable underlying15; address internal immutable underlying16; address internal immutable underlying17; address internal immutable underlying18; address internal immutable underlying19; address internal immutable underlying20; address internal immutable underlying21; address internal immutable underlying22; address internal immutable underlying23; address internal immutable underlying24; bytes32 internal immutable symbolHash00; bytes32 internal immutable symbolHash01; bytes32 internal immutable symbolHash02; bytes32 internal immutable symbolHash03; bytes32 internal immutable symbolHash04; bytes32 internal immutable symbolHash05; bytes32 internal immutable symbolHash06; bytes32 internal immutable symbolHash07; bytes32 internal immutable symbolHash08; bytes32 internal immutable symbolHash09; bytes32 internal immutable symbolHash10; bytes32 internal immutable symbolHash11; bytes32 internal immutable symbolHash12; bytes32 internal immutable symbolHash13; bytes32 internal immutable symbolHash14; bytes32 internal immutable symbolHash15; bytes32 internal immutable symbolHash16; bytes32 internal immutable symbolHash17; bytes32 internal immutable symbolHash18; bytes32 internal immutable symbolHash19; bytes32 internal immutable symbolHash20; bytes32 internal immutable symbolHash21; bytes32 internal immutable symbolHash22; bytes32 internal immutable symbolHash23; bytes32 internal immutable symbolHash24; uint256 internal immutable baseUnit00; uint256 internal immutable baseUnit01; uint256 internal immutable baseUnit02; uint256 internal immutable baseUnit03; uint256 internal immutable baseUnit04; uint256 internal immutable baseUnit05; uint256 internal immutable baseUnit06; uint256 internal immutable baseUnit07; uint256 internal immutable baseUnit08; uint256 internal immutable baseUnit09; uint256 internal immutable baseUnit10; uint256 internal immutable baseUnit11; uint256 internal immutable baseUnit12; uint256 internal immutable baseUnit13; uint256 internal immutable baseUnit14; uint256 internal immutable baseUnit15; uint256 internal immutable baseUnit16; uint256 internal immutable baseUnit17; uint256 internal immutable baseUnit18; uint256 internal immutable baseUnit19; uint256 internal immutable baseUnit20; uint256 internal immutable baseUnit21; uint256 internal immutable baseUnit22; uint256 internal immutable baseUnit23; uint256 internal immutable baseUnit24; PriceSource internal immutable priceSource00; PriceSource internal immutable priceSource01; PriceSource internal immutable priceSource02; PriceSource internal immutable priceSource03; PriceSource internal immutable priceSource04; PriceSource internal immutable priceSource05; PriceSource internal immutable priceSource06; PriceSource internal immutable priceSource07; PriceSource internal immutable priceSource08; PriceSource internal immutable priceSource09; PriceSource internal immutable priceSource10; PriceSource internal immutable priceSource11; PriceSource internal immutable priceSource12; PriceSource internal immutable priceSource13; PriceSource internal immutable priceSource14; PriceSource internal immutable priceSource15; PriceSource internal immutable priceSource16; PriceSource internal immutable priceSource17; PriceSource internal immutable priceSource18; PriceSource internal immutable priceSource19; PriceSource internal immutable priceSource20; PriceSource internal immutable priceSource21; PriceSource internal immutable priceSource22; PriceSource internal immutable priceSource23; PriceSource internal immutable priceSource24; uint256 internal immutable fixedPrice00; uint256 internal immutable fixedPrice01; uint256 internal immutable fixedPrice02; uint256 internal immutable fixedPrice03; uint256 internal immutable fixedPrice04; uint256 internal immutable fixedPrice05; uint256 internal immutable fixedPrice06; uint256 internal immutable fixedPrice07; uint256 internal immutable fixedPrice08; uint256 internal immutable fixedPrice09; uint256 internal immutable fixedPrice10; uint256 internal immutable fixedPrice11; uint256 internal immutable fixedPrice12; uint256 internal immutable fixedPrice13; uint256 internal immutable fixedPrice14; uint256 internal immutable fixedPrice15; uint256 internal immutable fixedPrice16; uint256 internal immutable fixedPrice17; uint256 internal immutable fixedPrice18; uint256 internal immutable fixedPrice19; uint256 internal immutable fixedPrice20; uint256 internal immutable fixedPrice21; uint256 internal immutable fixedPrice22; uint256 internal immutable fixedPrice23; uint256 internal immutable fixedPrice24; address internal immutable uniswapMarket00; address internal immutable uniswapMarket01; address internal immutable uniswapMarket02; address internal immutable uniswapMarket03; address internal immutable uniswapMarket04; address internal immutable uniswapMarket05; address internal immutable uniswapMarket06; address internal immutable uniswapMarket07; address internal immutable uniswapMarket08; address internal immutable uniswapMarket09; address internal immutable uniswapMarket10; address internal immutable uniswapMarket11; address internal immutable uniswapMarket12; address internal immutable uniswapMarket13; address internal immutable uniswapMarket14; address internal immutable uniswapMarket15; address internal immutable uniswapMarket16; address internal immutable uniswapMarket17; address internal immutable uniswapMarket18; address internal immutable uniswapMarket19; address internal immutable uniswapMarket20; address internal immutable uniswapMarket21; address internal immutable uniswapMarket22; address internal immutable uniswapMarket23; address internal immutable uniswapMarket24; address internal immutable reporter00; address internal immutable reporter01; address internal immutable reporter02; address internal immutable reporter03; address internal immutable reporter04; address internal immutable reporter05; address internal immutable reporter06; address internal immutable reporter07; address internal immutable reporter08; address internal immutable reporter09; address internal immutable reporter10; address internal immutable reporter11; address internal immutable reporter12; address internal immutable reporter13; address internal immutable reporter14; address internal immutable reporter15; address internal immutable reporter16; address internal immutable reporter17; address internal immutable reporter18; address internal immutable reporter19; address internal immutable reporter20; address internal immutable reporter21; address internal immutable reporter22; address internal immutable reporter23; address internal immutable reporter24; uint256 internal immutable reporterMultiplier00; uint256 internal immutable reporterMultiplier01; uint256 internal immutable reporterMultiplier02; uint256 internal immutable reporterMultiplier03; uint256 internal immutable reporterMultiplier04; uint256 internal immutable reporterMultiplier05; uint256 internal immutable reporterMultiplier06; uint256 internal immutable reporterMultiplier07; uint256 internal immutable reporterMultiplier08; uint256 internal immutable reporterMultiplier09; uint256 internal immutable reporterMultiplier10; uint256 internal immutable reporterMultiplier11; uint256 internal immutable reporterMultiplier12; uint256 internal immutable reporterMultiplier13; uint256 internal immutable reporterMultiplier14; uint256 internal immutable reporterMultiplier15; uint256 internal immutable reporterMultiplier16; uint256 internal immutable reporterMultiplier17; uint256 internal immutable reporterMultiplier18; uint256 internal immutable reporterMultiplier19; uint256 internal immutable reporterMultiplier20; uint256 internal immutable reporterMultiplier21; uint256 internal immutable reporterMultiplier22; uint256 internal immutable reporterMultiplier23; uint256 internal immutable reporterMultiplier24; bool internal immutable isUniswapReversed00; bool internal immutable isUniswapReversed01; bool internal immutable isUniswapReversed02; bool internal immutable isUniswapReversed03; bool internal immutable isUniswapReversed04; bool internal immutable isUniswapReversed05; bool internal immutable isUniswapReversed06; bool internal immutable isUniswapReversed07; bool internal immutable isUniswapReversed08; bool internal immutable isUniswapReversed09; bool internal immutable isUniswapReversed10; bool internal immutable isUniswapReversed11; bool internal immutable isUniswapReversed12; bool internal immutable isUniswapReversed13; bool internal immutable isUniswapReversed14; bool internal immutable isUniswapReversed15; bool internal immutable isUniswapReversed16; bool internal immutable isUniswapReversed17; bool internal immutable isUniswapReversed18; bool internal immutable isUniswapReversed19; bool internal immutable isUniswapReversed20; bool internal immutable isUniswapReversed21; bool internal immutable isUniswapReversed22; bool internal immutable isUniswapReversed23; bool internal immutable isUniswapReversed24; /** * @notice Construct an immutable store of configs into the contract data * @param configs The configs for the supported assets */ constructor(TokenConfig[] memory configs) public { require(configs.length <= maxTokens, "too many configs"); numTokens = configs.length; cToken00 = get(configs, 0).cToken; cToken01 = get(configs, 1).cToken; cToken02 = get(configs, 2).cToken; cToken03 = get(configs, 3).cToken; cToken04 = get(configs, 4).cToken; cToken05 = get(configs, 5).cToken; cToken06 = get(configs, 6).cToken; cToken07 = get(configs, 7).cToken; cToken08 = get(configs, 8).cToken; cToken09 = get(configs, 9).cToken; cToken10 = get(configs, 10).cToken; cToken11 = get(configs, 11).cToken; cToken12 = get(configs, 12).cToken; cToken13 = get(configs, 13).cToken; cToken14 = get(configs, 14).cToken; cToken15 = get(configs, 15).cToken; cToken16 = get(configs, 16).cToken; cToken17 = get(configs, 17).cToken; cToken18 = get(configs, 18).cToken; cToken19 = get(configs, 19).cToken; cToken20 = get(configs, 20).cToken; cToken21 = get(configs, 21).cToken; cToken22 = get(configs, 22).cToken; cToken23 = get(configs, 23).cToken; cToken24 = get(configs, 24).cToken; underlying00 = get(configs, 0).underlying; underlying01 = get(configs, 1).underlying; underlying02 = get(configs, 2).underlying; underlying03 = get(configs, 3).underlying; underlying04 = get(configs, 4).underlying; underlying05 = get(configs, 5).underlying; underlying06 = get(configs, 6).underlying; underlying07 = get(configs, 7).underlying; underlying08 = get(configs, 8).underlying; underlying09 = get(configs, 9).underlying; underlying10 = get(configs, 10).underlying; underlying11 = get(configs, 11).underlying; underlying12 = get(configs, 12).underlying; underlying13 = get(configs, 13).underlying; underlying14 = get(configs, 14).underlying; underlying15 = get(configs, 15).underlying; underlying16 = get(configs, 16).underlying; underlying17 = get(configs, 17).underlying; underlying18 = get(configs, 18).underlying; underlying19 = get(configs, 19).underlying; underlying20 = get(configs, 20).underlying; underlying21 = get(configs, 21).underlying; underlying22 = get(configs, 22).underlying; underlying23 = get(configs, 23).underlying; underlying24 = get(configs, 24).underlying; symbolHash00 = get(configs, 0).symbolHash; symbolHash01 = get(configs, 1).symbolHash; symbolHash02 = get(configs, 2).symbolHash; symbolHash03 = get(configs, 3).symbolHash; symbolHash04 = get(configs, 4).symbolHash; symbolHash05 = get(configs, 5).symbolHash; symbolHash06 = get(configs, 6).symbolHash; symbolHash07 = get(configs, 7).symbolHash; symbolHash08 = get(configs, 8).symbolHash; symbolHash09 = get(configs, 9).symbolHash; symbolHash10 = get(configs, 10).symbolHash; symbolHash11 = get(configs, 11).symbolHash; symbolHash12 = get(configs, 12).symbolHash; symbolHash13 = get(configs, 13).symbolHash; symbolHash14 = get(configs, 14).symbolHash; symbolHash15 = get(configs, 15).symbolHash; symbolHash16 = get(configs, 16).symbolHash; symbolHash17 = get(configs, 17).symbolHash; symbolHash18 = get(configs, 18).symbolHash; symbolHash19 = get(configs, 19).symbolHash; symbolHash20 = get(configs, 20).symbolHash; symbolHash21 = get(configs, 21).symbolHash; symbolHash22 = get(configs, 22).symbolHash; symbolHash23 = get(configs, 23).symbolHash; symbolHash24 = get(configs, 24).symbolHash; baseUnit00 = get(configs, 0).baseUnit; baseUnit01 = get(configs, 1).baseUnit; baseUnit02 = get(configs, 2).baseUnit; baseUnit03 = get(configs, 3).baseUnit; baseUnit04 = get(configs, 4).baseUnit; baseUnit05 = get(configs, 5).baseUnit; baseUnit06 = get(configs, 6).baseUnit; baseUnit07 = get(configs, 7).baseUnit; baseUnit08 = get(configs, 8).baseUnit; baseUnit09 = get(configs, 9).baseUnit; baseUnit10 = get(configs, 10).baseUnit; baseUnit11 = get(configs, 11).baseUnit; baseUnit12 = get(configs, 12).baseUnit; baseUnit13 = get(configs, 13).baseUnit; baseUnit14 = get(configs, 14).baseUnit; baseUnit15 = get(configs, 15).baseUnit; baseUnit16 = get(configs, 16).baseUnit; baseUnit17 = get(configs, 17).baseUnit; baseUnit18 = get(configs, 18).baseUnit; baseUnit19 = get(configs, 19).baseUnit; baseUnit20 = get(configs, 20).baseUnit; baseUnit21 = get(configs, 21).baseUnit; baseUnit22 = get(configs, 22).baseUnit; baseUnit23 = get(configs, 23).baseUnit; baseUnit24 = get(configs, 24).baseUnit; priceSource00 = get(configs, 0).priceSource; priceSource01 = get(configs, 1).priceSource; priceSource02 = get(configs, 2).priceSource; priceSource03 = get(configs, 3).priceSource; priceSource04 = get(configs, 4).priceSource; priceSource05 = get(configs, 5).priceSource; priceSource06 = get(configs, 6).priceSource; priceSource07 = get(configs, 7).priceSource; priceSource08 = get(configs, 8).priceSource; priceSource09 = get(configs, 9).priceSource; priceSource10 = get(configs, 10).priceSource; priceSource11 = get(configs, 11).priceSource; priceSource12 = get(configs, 12).priceSource; priceSource13 = get(configs, 13).priceSource; priceSource14 = get(configs, 14).priceSource; priceSource15 = get(configs, 15).priceSource; priceSource16 = get(configs, 16).priceSource; priceSource17 = get(configs, 17).priceSource; priceSource18 = get(configs, 18).priceSource; priceSource19 = get(configs, 19).priceSource; priceSource20 = get(configs, 20).priceSource; priceSource21 = get(configs, 21).priceSource; priceSource22 = get(configs, 22).priceSource; priceSource23 = get(configs, 23).priceSource; priceSource24 = get(configs, 24).priceSource; fixedPrice00 = get(configs, 0).fixedPrice; fixedPrice01 = get(configs, 1).fixedPrice; fixedPrice02 = get(configs, 2).fixedPrice; fixedPrice03 = get(configs, 3).fixedPrice; fixedPrice04 = get(configs, 4).fixedPrice; fixedPrice05 = get(configs, 5).fixedPrice; fixedPrice06 = get(configs, 6).fixedPrice; fixedPrice07 = get(configs, 7).fixedPrice; fixedPrice08 = get(configs, 8).fixedPrice; fixedPrice09 = get(configs, 9).fixedPrice; fixedPrice10 = get(configs, 10).fixedPrice; fixedPrice11 = get(configs, 11).fixedPrice; fixedPrice12 = get(configs, 12).fixedPrice; fixedPrice13 = get(configs, 13).fixedPrice; fixedPrice14 = get(configs, 14).fixedPrice; fixedPrice15 = get(configs, 15).fixedPrice; fixedPrice16 = get(configs, 16).fixedPrice; fixedPrice17 = get(configs, 17).fixedPrice; fixedPrice18 = get(configs, 18).fixedPrice; fixedPrice19 = get(configs, 19).fixedPrice; fixedPrice20 = get(configs, 20).fixedPrice; fixedPrice21 = get(configs, 21).fixedPrice; fixedPrice22 = get(configs, 22).fixedPrice; fixedPrice23 = get(configs, 23).fixedPrice; fixedPrice24 = get(configs, 24).fixedPrice; uniswapMarket00 = get(configs, 0).uniswapMarket; uniswapMarket01 = get(configs, 1).uniswapMarket; uniswapMarket02 = get(configs, 2).uniswapMarket; uniswapMarket03 = get(configs, 3).uniswapMarket; uniswapMarket04 = get(configs, 4).uniswapMarket; uniswapMarket05 = get(configs, 5).uniswapMarket; uniswapMarket06 = get(configs, 6).uniswapMarket; uniswapMarket07 = get(configs, 7).uniswapMarket; uniswapMarket08 = get(configs, 8).uniswapMarket; uniswapMarket09 = get(configs, 9).uniswapMarket; uniswapMarket10 = get(configs, 10).uniswapMarket; uniswapMarket11 = get(configs, 11).uniswapMarket; uniswapMarket12 = get(configs, 12).uniswapMarket; uniswapMarket13 = get(configs, 13).uniswapMarket; uniswapMarket14 = get(configs, 14).uniswapMarket; uniswapMarket15 = get(configs, 15).uniswapMarket; uniswapMarket16 = get(configs, 16).uniswapMarket; uniswapMarket17 = get(configs, 17).uniswapMarket; uniswapMarket18 = get(configs, 18).uniswapMarket; uniswapMarket19 = get(configs, 19).uniswapMarket; uniswapMarket20 = get(configs, 20).uniswapMarket; uniswapMarket21 = get(configs, 21).uniswapMarket; uniswapMarket22 = get(configs, 22).uniswapMarket; uniswapMarket23 = get(configs, 23).uniswapMarket; uniswapMarket24 = get(configs, 24).uniswapMarket; reporter00 = get(configs, 0).reporter; reporter01 = get(configs, 1).reporter; reporter02 = get(configs, 2).reporter; reporter03 = get(configs, 3).reporter; reporter04 = get(configs, 4).reporter; reporter05 = get(configs, 5).reporter; reporter06 = get(configs, 6).reporter; reporter07 = get(configs, 7).reporter; reporter08 = get(configs, 8).reporter; reporter09 = get(configs, 9).reporter; reporter10 = get(configs, 10).reporter; reporter11 = get(configs, 11).reporter; reporter12 = get(configs, 12).reporter; reporter13 = get(configs, 13).reporter; reporter14 = get(configs, 14).reporter; reporter15 = get(configs, 15).reporter; reporter16 = get(configs, 16).reporter; reporter17 = get(configs, 17).reporter; reporter18 = get(configs, 18).reporter; reporter19 = get(configs, 19).reporter; reporter20 = get(configs, 20).reporter; reporter21 = get(configs, 21).reporter; reporter22 = get(configs, 22).reporter; reporter23 = get(configs, 23).reporter; reporter24 = get(configs, 24).reporter; reporterMultiplier00 = get(configs, 0).reporterMultiplier; reporterMultiplier01 = get(configs, 1).reporterMultiplier; reporterMultiplier02 = get(configs, 2).reporterMultiplier; reporterMultiplier03 = get(configs, 3).reporterMultiplier; reporterMultiplier04 = get(configs, 4).reporterMultiplier; reporterMultiplier05 = get(configs, 5).reporterMultiplier; reporterMultiplier06 = get(configs, 6).reporterMultiplier; reporterMultiplier07 = get(configs, 7).reporterMultiplier; reporterMultiplier08 = get(configs, 8).reporterMultiplier; reporterMultiplier09 = get(configs, 9).reporterMultiplier; reporterMultiplier10 = get(configs, 10).reporterMultiplier; reporterMultiplier11 = get(configs, 11).reporterMultiplier; reporterMultiplier12 = get(configs, 12).reporterMultiplier; reporterMultiplier13 = get(configs, 13).reporterMultiplier; reporterMultiplier14 = get(configs, 14).reporterMultiplier; reporterMultiplier15 = get(configs, 15).reporterMultiplier; reporterMultiplier16 = get(configs, 16).reporterMultiplier; reporterMultiplier17 = get(configs, 17).reporterMultiplier; reporterMultiplier18 = get(configs, 18).reporterMultiplier; reporterMultiplier19 = get(configs, 19).reporterMultiplier; reporterMultiplier20 = get(configs, 20).reporterMultiplier; reporterMultiplier21 = get(configs, 21).reporterMultiplier; reporterMultiplier22 = get(configs, 22).reporterMultiplier; reporterMultiplier23 = get(configs, 23).reporterMultiplier; reporterMultiplier24 = get(configs, 24).reporterMultiplier; isUniswapReversed00 = get(configs, 0).isUniswapReversed; isUniswapReversed01 = get(configs, 1).isUniswapReversed; isUniswapReversed02 = get(configs, 2).isUniswapReversed; isUniswapReversed03 = get(configs, 3).isUniswapReversed; isUniswapReversed04 = get(configs, 4).isUniswapReversed; isUniswapReversed05 = get(configs, 5).isUniswapReversed; isUniswapReversed06 = get(configs, 6).isUniswapReversed; isUniswapReversed07 = get(configs, 7).isUniswapReversed; isUniswapReversed08 = get(configs, 8).isUniswapReversed; isUniswapReversed09 = get(configs, 9).isUniswapReversed; isUniswapReversed10 = get(configs, 10).isUniswapReversed; isUniswapReversed11 = get(configs, 11).isUniswapReversed; isUniswapReversed12 = get(configs, 12).isUniswapReversed; isUniswapReversed13 = get(configs, 13).isUniswapReversed; isUniswapReversed14 = get(configs, 14).isUniswapReversed; isUniswapReversed15 = get(configs, 15).isUniswapReversed; isUniswapReversed16 = get(configs, 16).isUniswapReversed; isUniswapReversed17 = get(configs, 17).isUniswapReversed; isUniswapReversed18 = get(configs, 18).isUniswapReversed; isUniswapReversed19 = get(configs, 19).isUniswapReversed; isUniswapReversed20 = get(configs, 20).isUniswapReversed; isUniswapReversed21 = get(configs, 21).isUniswapReversed; isUniswapReversed22 = get(configs, 22).isUniswapReversed; isUniswapReversed23 = get(configs, 23).isUniswapReversed; isUniswapReversed24 = get(configs, 24).isUniswapReversed; } function get(TokenConfig[] memory configs, uint i) internal pure returns (TokenConfig memory) { if (i < configs.length) return configs[i]; return TokenConfig({ cToken: address(0), underlying: address(0), symbolHash: bytes32(0), baseUnit: uint256(0), priceSource: PriceSource(0), fixedPrice: uint256(0), uniswapMarket: address(0), reporter: address(0), reporterMultiplier: uint256(0), isUniswapReversed: false }); } function getReporterIndex(address reporter) internal view returns(uint) { if (reporter == reporter00) return 0; if (reporter == reporter01) return 1; if (reporter == reporter02) return 2; if (reporter == reporter03) return 3; if (reporter == reporter04) return 4; if (reporter == reporter05) return 5; if (reporter == reporter06) return 6; if (reporter == reporter07) return 7; if (reporter == reporter08) return 8; if (reporter == reporter09) return 9; if (reporter == reporter10) return 10; if (reporter == reporter11) return 11; if (reporter == reporter12) return 12; if (reporter == reporter13) return 13; if (reporter == reporter14) return 14; if (reporter == reporter15) return 15; if (reporter == reporter16) return 16; if (reporter == reporter17) return 17; if (reporter == reporter18) return 18; if (reporter == reporter19) return 19; if (reporter == reporter20) return 20; if (reporter == reporter21) return 21; if (reporter == reporter22) return 22; if (reporter == reporter23) return 23; if (reporter == reporter24) return 24; return type(uint).max; } function getCTokenIndex(address cToken) internal view returns (uint) { if (cToken == cToken00) return 0; if (cToken == cToken01) return 1; if (cToken == cToken02) return 2; if (cToken == cToken03) return 3; if (cToken == cToken04) return 4; if (cToken == cToken05) return 5; if (cToken == cToken06) return 6; if (cToken == cToken07) return 7; if (cToken == cToken08) return 8; if (cToken == cToken09) return 9; if (cToken == cToken10) return 10; if (cToken == cToken11) return 11; if (cToken == cToken12) return 12; if (cToken == cToken13) return 13; if (cToken == cToken14) return 14; if (cToken == cToken15) return 15; if (cToken == cToken16) return 16; if (cToken == cToken17) return 17; if (cToken == cToken18) return 18; if (cToken == cToken19) return 19; if (cToken == cToken20) return 20; if (cToken == cToken21) return 21; if (cToken == cToken22) return 22; if (cToken == cToken23) return 23; if (cToken == cToken24) return 24; return uint(-1); } function getUnderlyingIndex(address underlying) internal view returns (uint) { if (underlying == underlying00) return 0; if (underlying == underlying01) return 1; if (underlying == underlying02) return 2; if (underlying == underlying03) return 3; if (underlying == underlying04) return 4; if (underlying == underlying05) return 5; if (underlying == underlying06) return 6; if (underlying == underlying07) return 7; if (underlying == underlying08) return 8; if (underlying == underlying09) return 9; if (underlying == underlying10) return 10; if (underlying == underlying11) return 11; if (underlying == underlying12) return 12; if (underlying == underlying13) return 13; if (underlying == underlying14) return 14; if (underlying == underlying15) return 15; if (underlying == underlying16) return 16; if (underlying == underlying17) return 17; if (underlying == underlying18) return 18; if (underlying == underlying19) return 19; if (underlying == underlying20) return 20; if (underlying == underlying21) return 21; if (underlying == underlying22) return 22; if (underlying == underlying23) return 23; if (underlying == underlying24) return 24; return uint(-1); } function getSymbolHashIndex(bytes32 symbolHash) internal view returns (uint) { if (symbolHash == symbolHash00) return 0; if (symbolHash == symbolHash01) return 1; if (symbolHash == symbolHash02) return 2; if (symbolHash == symbolHash03) return 3; if (symbolHash == symbolHash04) return 4; if (symbolHash == symbolHash05) return 5; if (symbolHash == symbolHash06) return 6; if (symbolHash == symbolHash07) return 7; if (symbolHash == symbolHash08) return 8; if (symbolHash == symbolHash09) return 9; if (symbolHash == symbolHash10) return 10; if (symbolHash == symbolHash11) return 11; if (symbolHash == symbolHash12) return 12; if (symbolHash == symbolHash13) return 13; if (symbolHash == symbolHash14) return 14; if (symbolHash == symbolHash15) return 15; if (symbolHash == symbolHash16) return 16; if (symbolHash == symbolHash17) return 17; if (symbolHash == symbolHash18) return 18; if (symbolHash == symbolHash19) return 19; if (symbolHash == symbolHash20) return 20; if (symbolHash == symbolHash21) return 21; if (symbolHash == symbolHash22) return 22; if (symbolHash == symbolHash23) return 23; if (symbolHash == symbolHash24) return 24; return uint(-1); } /** * @notice Get the i-th config, according to the order they were passed in originally * @param i The index of the config to get * @return The config object */ function getTokenConfig(uint i) public view returns (TokenConfig memory) { require(i < numTokens, "token config not found"); if (i == 0) return TokenConfig({cToken: cToken00, underlying: underlying00, symbolHash: symbolHash00, baseUnit: baseUnit00, priceSource: priceSource00, fixedPrice: fixedPrice00, uniswapMarket: uniswapMarket00, reporter: reporter00, reporterMultiplier: reporterMultiplier00, isUniswapReversed: isUniswapReversed00}); if (i == 1) return TokenConfig({cToken: cToken01, underlying: underlying01, symbolHash: symbolHash01, baseUnit: baseUnit01, priceSource: priceSource01, fixedPrice: fixedPrice01, uniswapMarket: uniswapMarket01, reporter: reporter01, reporterMultiplier: reporterMultiplier01, isUniswapReversed: isUniswapReversed01}); if (i == 2) return TokenConfig({cToken: cToken02, underlying: underlying02, symbolHash: symbolHash02, baseUnit: baseUnit02, priceSource: priceSource02, fixedPrice: fixedPrice02, uniswapMarket: uniswapMarket02, reporter: reporter02, reporterMultiplier: reporterMultiplier02, isUniswapReversed: isUniswapReversed02}); if (i == 3) return TokenConfig({cToken: cToken03, underlying: underlying03, symbolHash: symbolHash03, baseUnit: baseUnit03, priceSource: priceSource03, fixedPrice: fixedPrice03, uniswapMarket: uniswapMarket03, reporter: reporter03, reporterMultiplier: reporterMultiplier03, isUniswapReversed: isUniswapReversed03}); if (i == 4) return TokenConfig({cToken: cToken04, underlying: underlying04, symbolHash: symbolHash04, baseUnit: baseUnit04, priceSource: priceSource04, fixedPrice: fixedPrice04, uniswapMarket: uniswapMarket04, reporter: reporter04, reporterMultiplier: reporterMultiplier04, isUniswapReversed: isUniswapReversed04}); if (i == 5) return TokenConfig({cToken: cToken05, underlying: underlying05, symbolHash: symbolHash05, baseUnit: baseUnit05, priceSource: priceSource05, fixedPrice: fixedPrice05, uniswapMarket: uniswapMarket05, reporter: reporter05, reporterMultiplier: reporterMultiplier05, isUniswapReversed: isUniswapReversed05}); if (i == 6) return TokenConfig({cToken: cToken06, underlying: underlying06, symbolHash: symbolHash06, baseUnit: baseUnit06, priceSource: priceSource06, fixedPrice: fixedPrice06, uniswapMarket: uniswapMarket06, reporter: reporter06, reporterMultiplier: reporterMultiplier06, isUniswapReversed: isUniswapReversed06}); if (i == 7) return TokenConfig({cToken: cToken07, underlying: underlying07, symbolHash: symbolHash07, baseUnit: baseUnit07, priceSource: priceSource07, fixedPrice: fixedPrice07, uniswapMarket: uniswapMarket07, reporter: reporter07, reporterMultiplier: reporterMultiplier07, isUniswapReversed: isUniswapReversed07}); if (i == 8) return TokenConfig({cToken: cToken08, underlying: underlying08, symbolHash: symbolHash08, baseUnit: baseUnit08, priceSource: priceSource08, fixedPrice: fixedPrice08, uniswapMarket: uniswapMarket08, reporter: reporter08, reporterMultiplier: reporterMultiplier08, isUniswapReversed: isUniswapReversed08}); if (i == 9) return TokenConfig({cToken: cToken09, underlying: underlying09, symbolHash: symbolHash09, baseUnit: baseUnit09, priceSource: priceSource09, fixedPrice: fixedPrice09, uniswapMarket: uniswapMarket09, reporter: reporter09, reporterMultiplier: reporterMultiplier09, isUniswapReversed: isUniswapReversed09}); if (i == 10) return TokenConfig({cToken: cToken10, underlying: underlying10, symbolHash: symbolHash10, baseUnit: baseUnit10, priceSource: priceSource10, fixedPrice: fixedPrice10, uniswapMarket: uniswapMarket10, reporter: reporter10, reporterMultiplier: reporterMultiplier10, isUniswapReversed: isUniswapReversed10}); if (i == 11) return TokenConfig({cToken: cToken11, underlying: underlying11, symbolHash: symbolHash11, baseUnit: baseUnit11, priceSource: priceSource11, fixedPrice: fixedPrice11, uniswapMarket: uniswapMarket11, reporter: reporter11, reporterMultiplier: reporterMultiplier11, isUniswapReversed: isUniswapReversed11}); if (i == 12) return TokenConfig({cToken: cToken12, underlying: underlying12, symbolHash: symbolHash12, baseUnit: baseUnit12, priceSource: priceSource12, fixedPrice: fixedPrice12, uniswapMarket: uniswapMarket12, reporter: reporter12, reporterMultiplier: reporterMultiplier12, isUniswapReversed: isUniswapReversed12}); if (i == 13) return TokenConfig({cToken: cToken13, underlying: underlying13, symbolHash: symbolHash13, baseUnit: baseUnit13, priceSource: priceSource13, fixedPrice: fixedPrice13, uniswapMarket: uniswapMarket13, reporter: reporter13, reporterMultiplier: reporterMultiplier13, isUniswapReversed: isUniswapReversed13}); if (i == 14) return TokenConfig({cToken: cToken14, underlying: underlying14, symbolHash: symbolHash14, baseUnit: baseUnit14, priceSource: priceSource14, fixedPrice: fixedPrice14, uniswapMarket: uniswapMarket14, reporter: reporter14, reporterMultiplier: reporterMultiplier14, isUniswapReversed: isUniswapReversed14}); if (i == 15) return TokenConfig({cToken: cToken15, underlying: underlying15, symbolHash: symbolHash15, baseUnit: baseUnit15, priceSource: priceSource15, fixedPrice: fixedPrice15, uniswapMarket: uniswapMarket15, reporter: reporter15, reporterMultiplier: reporterMultiplier15, isUniswapReversed: isUniswapReversed15}); if (i == 16) return TokenConfig({cToken: cToken16, underlying: underlying16, symbolHash: symbolHash16, baseUnit: baseUnit16, priceSource: priceSource16, fixedPrice: fixedPrice16, uniswapMarket: uniswapMarket16, reporter: reporter16, reporterMultiplier: reporterMultiplier16, isUniswapReversed: isUniswapReversed16}); if (i == 17) return TokenConfig({cToken: cToken17, underlying: underlying17, symbolHash: symbolHash17, baseUnit: baseUnit17, priceSource: priceSource17, fixedPrice: fixedPrice17, uniswapMarket: uniswapMarket17, reporter: reporter17, reporterMultiplier: reporterMultiplier17, isUniswapReversed: isUniswapReversed17}); if (i == 18) return TokenConfig({cToken: cToken18, underlying: underlying18, symbolHash: symbolHash18, baseUnit: baseUnit18, priceSource: priceSource18, fixedPrice: fixedPrice18, uniswapMarket: uniswapMarket18, reporter: reporter18, reporterMultiplier: reporterMultiplier18, isUniswapReversed: isUniswapReversed18}); if (i == 19) return TokenConfig({cToken: cToken19, underlying: underlying19, symbolHash: symbolHash19, baseUnit: baseUnit19, priceSource: priceSource19, fixedPrice: fixedPrice19, uniswapMarket: uniswapMarket19, reporter: reporter19, reporterMultiplier: reporterMultiplier19, isUniswapReversed: isUniswapReversed19}); if (i == 20) return TokenConfig({cToken: cToken20, underlying: underlying20, symbolHash: symbolHash20, baseUnit: baseUnit20, priceSource: priceSource20, fixedPrice: fixedPrice20, uniswapMarket: uniswapMarket20, reporter: reporter20, reporterMultiplier: reporterMultiplier20, isUniswapReversed: isUniswapReversed20}); if (i == 21) return TokenConfig({cToken: cToken21, underlying: underlying21, symbolHash: symbolHash21, baseUnit: baseUnit21, priceSource: priceSource21, fixedPrice: fixedPrice21, uniswapMarket: uniswapMarket21, reporter: reporter21, reporterMultiplier: reporterMultiplier21, isUniswapReversed: isUniswapReversed21}); if (i == 22) return TokenConfig({cToken: cToken22, underlying: underlying22, symbolHash: symbolHash22, baseUnit: baseUnit22, priceSource: priceSource22, fixedPrice: fixedPrice22, uniswapMarket: uniswapMarket22, reporter: reporter22, reporterMultiplier: reporterMultiplier22, isUniswapReversed: isUniswapReversed22}); if (i == 23) return TokenConfig({cToken: cToken23, underlying: underlying23, symbolHash: symbolHash23, baseUnit: baseUnit23, priceSource: priceSource23, fixedPrice: fixedPrice23, uniswapMarket: uniswapMarket23, reporter: reporter23, reporterMultiplier: reporterMultiplier23, isUniswapReversed: isUniswapReversed23}); if (i == 24) return TokenConfig({cToken: cToken24, underlying: underlying24, symbolHash: symbolHash24, baseUnit: baseUnit24, priceSource: priceSource24, fixedPrice: fixedPrice24, uniswapMarket: uniswapMarket24, reporter: reporter24, reporterMultiplier: reporterMultiplier24, isUniswapReversed: isUniswapReversed24}); } /** * @notice Get the config for symbol * @param symbol The symbol of the config to get * @return The config object */ function getTokenConfigBySymbol(string memory symbol) public view returns (TokenConfig memory) { return getTokenConfigBySymbolHash(keccak256(abi.encodePacked(symbol))); } /** * @notice Get the config for the reporter * @param reporter The address of the reporter of the config to get * @return The config object */ function getTokenConfigByReporter(address reporter) public view returns (TokenConfig memory) { uint index = getReporterIndex(reporter); if (index != uint(-1)) { return getTokenConfig(index); } revert("token config not found"); } /** * @notice Get the config for the symbolHash * @param symbolHash The keccack256 of the symbol of the config to get * @return The config object */ function getTokenConfigBySymbolHash(bytes32 symbolHash) public view returns (TokenConfig memory) { uint index = getSymbolHashIndex(symbolHash); if (index != uint(-1)) { return getTokenConfig(index); } revert("token config not found"); } /** * @notice Get the config for the cToken * @dev If a config for the cToken is not found, falls back to searching for the underlying. * @param cToken The address of the cToken of the config to get * @return The config object */ function getTokenConfigByCToken(address cToken) public view returns (TokenConfig memory) { uint index = getCTokenIndex(cToken); if (index != uint(-1)) { return getTokenConfig(index); } return getTokenConfigByUnderlying(CErc20(cToken).underlying()); } /** * @notice Get the config for an underlying asset * @param underlying The address of the underlying asset of the config to get * @return The config object */ function getTokenConfigByUnderlying(address underlying) public view returns (TokenConfig memory) { uint index = getUnderlyingIndex(underlying); if (index != uint(-1)) { return getTokenConfig(index); } revert("token config not found"); } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.6.12; // Based on code from https://github.com/Uniswap/uniswap-v2-periphery // a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format)) library FixedPoint { // range: [0, 2**112 - 1] // resolution: 1 / 2**112 struct uq112x112 { uint224 _x; } // returns a uq112x112 which represents the ratio of the numerator to the denominator // equivalent to encode(numerator).div(denominator) function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) { require(denominator > 0, "FixedPoint: DIV_BY_ZERO"); return uq112x112((uint224(numerator) << 112) / denominator); } // decode a uq112x112 into a uint with 18 decimals of precision function decode112with18(uq112x112 memory self) internal pure returns (uint) { // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous // instead, get close to: // (x * 1e18) >> 112 // without risk of overflowing, e.g.: // (x) / 2 ** (112 - lg(1e18)) return uint(self._x) / 5192296858534827; } } // library with helper methods for oracles that are concerned with computing average prices library UniswapV2OracleLibrary { using FixedPoint for *; // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1] function currentBlockTimestamp() internal view returns (uint32) { return uint32(block.timestamp % 2 ** 32); } // produces the cumulative price using counterfactuals to save gas and avoid a call to sync. function currentCumulativePrices( address pair ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) { blockTimestamp = currentBlockTimestamp(); price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast(); price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast(); // if time has elapsed since the last update on the pair, mock the accumulated price values (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves(); if (blockTimestampLast != blockTimestamp) { // subtraction overflow is desired uint32 timeElapsed = blockTimestamp - blockTimestampLast; // addition overflow is desired // counterfactual price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed; // counterfactual price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed; } } } interface IUniswapV2Pair { function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.6.12; /** * @notice A contract with helpers for safe contract ownership. */ contract Ownable { address private ownerAddr; address private pendingOwnerAddr; event OwnershipTransferRequested(address indexed from, address indexed to); event OwnershipTransferred(address indexed from, address indexed to); constructor() public { ownerAddr = msg.sender; } /** * @notice Allows an owner to begin transferring ownership to a new address, * pending. */ function transferOwnership(address to) external onlyOwner() { require(to != msg.sender, "Cannot transfer to self"); pendingOwnerAddr = to; emit OwnershipTransferRequested(ownerAddr, to); } /** * @notice Allows an ownership transfer to be completed by the recipient. */ function acceptOwnership() external { require(msg.sender == pendingOwnerAddr, "Must be proposed owner"); address oldOwner = ownerAddr; ownerAddr = msg.sender; pendingOwnerAddr = address(0); emit OwnershipTransferred(oldOwner, msg.sender); } /** * @notice Get the current owner */ function owner() public view returns (address) { return ownerAddr; } /** * @notice Reverts if called by anyone other than the contract owner. */ modifier onlyOwner() { require(msg.sender == ownerAddr, "Only callable by owner"); _; } }
{ "optimizer": { "enabled": true, "runs": 201 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"anchorToleranceMantissa_","type":"uint256"},{"internalType":"uint256","name":"anchorPeriod_","type":"uint256"},{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig[]","name":"configs","type":"tuple[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"anchorPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTimestamp","type":"uint256"}],"name":"AnchorPriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"FailoverActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"FailoverDeactivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"reporter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"anchor","type":"uint256"}],"name":"PriceGuarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"PriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"oldTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"UniswapWindowUpdated","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"activateFailover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"anchorPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"deactivateFailover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethBaseUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expScale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getTokenConfig","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"}],"name":"getTokenConfigByCToken","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reporter","type":"address"}],"name":"getTokenConfigByReporter","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"symbol","type":"string"}],"name":"getTokenConfigBySymbol","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"getTokenConfigBySymbolHash","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"underlying","type":"address"}],"name":"getTokenConfigByUnderlying","outputs":[{"components":[{"internalType":"address","name":"cToken","type":"address"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"bytes32","name":"symbolHash","type":"bytes32"},{"internalType":"uint256","name":"baseUnit","type":"uint256"},{"internalType":"enum UniswapConfig.PriceSource","name":"priceSource","type":"uint8"},{"internalType":"uint256","name":"fixedPrice","type":"uint256"},{"internalType":"address","name":"uniswapMarket","type":"address"},{"internalType":"address","name":"reporter","type":"address"},{"internalType":"uint256","name":"reporterMultiplier","type":"uint256"},{"internalType":"bool","name":"isUniswapReversed","type":"bool"}],"internalType":"struct UniswapConfig.TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"cToken","type":"address"}],"name":"getUnderlyingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lowerBoundAnchorRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"newObservations","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"acc","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"oldObservations","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"acc","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"symbolHash","type":"bytes32"}],"name":"pokeFailedOverPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"symbol","type":"string"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"prices","outputs":[{"internalType":"uint248","name":"price","type":"uint248"},{"internalType":"bool","name":"failoverActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upperBoundAnchorRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"int256","name":"currentAnswer","type":"int256"}],"name":"validate","outputs":[{"internalType":"bool","name":"valid","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6120406040523480156200001257600080fd5b5060405162009434380380620094348339810160408190526200003591620024ad565b80601981511115620000645760405162461bcd60e51b81526004016200005b9062002603565b60405180910390fd5b80516080526200007681600062001f84565b5160601b6001600160601b03191660a0526200009481600162001f84565b5160601b6001600160601b03191660c052620000b281600262001f84565b5160601b6001600160601b03191660e052620000d081600362001f84565b5160601b6001600160601b03191661010052620000ef81600462001f84565b5160601b6001600160601b031916610120526200010e81600562001f84565b5160601b6001600160601b031916610140526200012d81600662001f84565b5160601b6001600160601b031916610160526200014c81600762001f84565b5160601b6001600160601b031916610180526200016b81600862001f84565b5160601b6001600160601b0319166101a0526200018a81600962001f84565b5160601b6001600160601b0319166101c052620001a981600a62001f84565b5160601b6001600160601b0319166101e052620001c881600b62001f84565b5160601b6001600160601b03191661020052620001e781600c62001f84565b5160601b6001600160601b031916610220526200020681600d62001f84565b5160601b6001600160601b031916610240526200022581600e62001f84565b5160601b6001600160601b031916610260526200024481600f62001f84565b5160601b6001600160601b031916610280526200026381601062001f84565b5160601b6001600160601b0319166102a0526200028281601162001f84565b5160601b6001600160601b0319166102c052620002a181601262001f84565b5160601b6001600160601b0319166102e052620002c081601362001f84565b5160601b6001600160601b03191661030052620002df81601462001f84565b5160601b6001600160601b03191661032052620002fe81601562001f84565b5160601b6001600160601b031916610340526200031d81601662001f84565b5160601b6001600160601b031916610360526200033c81601762001f84565b5160601b6001600160601b031916610380526200035b81601862001f84565b5160601b6001600160601b0319166103a0526200037a81600062001f84565b6020015160601b6001600160601b0319166103c0526200039c81600162001f84565b6020015160601b6001600160601b0319166103e052620003be81600262001f84565b6020015160601b6001600160601b03191661040052620003e081600362001f84565b6020015160601b6001600160601b031916610420526200040281600462001f84565b6020015160601b6001600160601b031916610440526200042481600562001f84565b6020015160601b6001600160601b031916610460526200044681600662001f84565b6020015160601b6001600160601b031916610480526200046881600762001f84565b6020015160601b6001600160601b0319166104a0526200048a81600862001f84565b6020015160601b6001600160601b0319166104c052620004ac81600962001f84565b6020015160601b6001600160601b0319166104e052620004ce81600a62001f84565b6020015160601b6001600160601b03191661050052620004f081600b62001f84565b6020015160601b6001600160601b031916610520526200051281600c62001f84565b6020015160601b6001600160601b031916610540526200053481600d62001f84565b6020015160601b6001600160601b031916610560526200055681600e62001f84565b6020015160601b6001600160601b031916610580526200057881600f62001f84565b6020015160601b6001600160601b0319166105a0526200059a81601062001f84565b6020015160601b6001600160601b0319166105c052620005bc81601162001f84565b6020015160601b6001600160601b0319166105e052620005de81601262001f84565b6020015160601b6001600160601b031916610600526200060081601362001f84565b6020015160601b6001600160601b031916610620526200062281601462001f84565b6020015160601b6001600160601b031916610640526200064481601562001f84565b6020015160601b6001600160601b031916610660526200066681601662001f84565b6020015160601b6001600160601b031916610680526200068881601762001f84565b6020015160601b6001600160601b0319166106a052620006aa81601862001f84565b6020015160601b6001600160601b0319166106c052620006cc81600062001f84565b604001516106e052620006e181600162001f84565b6040015161070052620006f681600262001f84565b60400151610720526200070b81600362001f84565b60400151610740526200072081600462001f84565b60400151610760526200073581600562001f84565b60400151610780526200074a81600662001f84565b604001516107a0526200075f81600762001f84565b604001516107c0526200077481600862001f84565b604001516107e0526200078981600962001f84565b60400151610800526200079e81600a62001f84565b6040015161082052620007b381600b62001f84565b6040015161084052620007c881600c62001f84565b6040015161086052620007dd81600d62001f84565b6040015161088052620007f281600e62001f84565b604001516108a0526200080781600f62001f84565b604001516108c0526200081c81601062001f84565b604001516108e0526200083181601162001f84565b60400151610900526200084681601262001f84565b60400151610920526200085b81601362001f84565b60400151610940526200087081601462001f84565b60400151610960526200088581601562001f84565b60400151610980526200089a81601662001f84565b604001516109a052620008af81601762001f84565b604001516109c052620008c481601862001f84565b604001516109e052620008d981600062001f84565b60600151610a0052620008ee81600162001f84565b60600151610a20526200090381600262001f84565b60600151610a40526200091881600362001f84565b60600151610a60526200092d81600462001f84565b60600151610a80526200094281600562001f84565b60600151610aa0526200095781600662001f84565b60600151610ac0526200096c81600762001f84565b60600151610ae0526200098181600862001f84565b60600151610b00526200099681600962001f84565b60600151610b2052620009ab81600a62001f84565b60600151610b4052620009c081600b62001f84565b60600151610b6052620009d581600c62001f84565b60600151610b8052620009ea81600d62001f84565b60600151610ba052620009ff81600e62001f84565b60600151610bc05262000a1481600f62001f84565b60600151610be05262000a2981601062001f84565b60600151610c005262000a3e81601162001f84565b60600151610c205262000a5381601262001f84565b60600151610c405262000a6881601362001f84565b60600151610c605262000a7d81601462001f84565b60600151610c805262000a9281601562001f84565b60600151610ca05262000aa781601662001f84565b60600151610cc05262000abc81601762001f84565b60600151610ce05262000ad181601862001f84565b60600151610d005262000ae681600062001f84565b60800151600281111562000af657fe5b610d2081600281111562000b0657fe5b60f81b90525062000b1981600162001f84565b60800151600281111562000b2957fe5b610d4081600281111562000b3957fe5b60f81b90525062000b4c81600262001f84565b60800151600281111562000b5c57fe5b610d6081600281111562000b6c57fe5b60f81b90525062000b7f81600362001f84565b60800151600281111562000b8f57fe5b610d8081600281111562000b9f57fe5b60f81b90525062000bb281600462001f84565b60800151600281111562000bc257fe5b610da081600281111562000bd257fe5b60f81b90525062000be581600562001f84565b60800151600281111562000bf557fe5b610dc081600281111562000c0557fe5b60f81b90525062000c1881600662001f84565b60800151600281111562000c2857fe5b610de081600281111562000c3857fe5b60f81b90525062000c4b81600762001f84565b60800151600281111562000c5b57fe5b610e0081600281111562000c6b57fe5b60f81b90525062000c7e81600862001f84565b60800151600281111562000c8e57fe5b610e2081600281111562000c9e57fe5b60f81b90525062000cb181600962001f84565b60800151600281111562000cc157fe5b610e4081600281111562000cd157fe5b60f81b90525062000ce481600a62001f84565b60800151600281111562000cf457fe5b610e6081600281111562000d0457fe5b60f81b90525062000d1781600b62001f84565b60800151600281111562000d2757fe5b610e8081600281111562000d3757fe5b60f81b90525062000d4a81600c62001f84565b60800151600281111562000d5a57fe5b610ea081600281111562000d6a57fe5b60f81b90525062000d7d81600d62001f84565b60800151600281111562000d8d57fe5b610ec081600281111562000d9d57fe5b60f81b90525062000db081600e62001f84565b60800151600281111562000dc057fe5b610ee081600281111562000dd057fe5b60f81b90525062000de381600f62001f84565b60800151600281111562000df357fe5b610f0081600281111562000e0357fe5b60f81b90525062000e1681601062001f84565b60800151600281111562000e2657fe5b610f2081600281111562000e3657fe5b60f81b90525062000e4981601162001f84565b60800151600281111562000e5957fe5b610f4081600281111562000e6957fe5b60f81b90525062000e7c81601262001f84565b60800151600281111562000e8c57fe5b610f6081600281111562000e9c57fe5b60f81b90525062000eaf81601362001f84565b60800151600281111562000ebf57fe5b610f8081600281111562000ecf57fe5b60f81b90525062000ee281601462001f84565b60800151600281111562000ef257fe5b610fa081600281111562000f0257fe5b60f81b90525062000f1581601562001f84565b60800151600281111562000f2557fe5b610fc081600281111562000f3557fe5b60f81b90525062000f4881601662001f84565b60800151600281111562000f5857fe5b610fe081600281111562000f6857fe5b60f81b90525062000f7b81601762001f84565b60800151600281111562000f8b57fe5b61100081600281111562000f9b57fe5b60f81b90525062000fae81601862001f84565b60800151600281111562000fbe57fe5b61102081600281111562000fce57fe5b60f81b90525062000fe181600062001f84565b60a001516110405262000ff681600162001f84565b60a00151611060526200100b81600262001f84565b60a00151611080526200102081600362001f84565b60a001516110a0526200103581600462001f84565b60a001516110c0526200104a81600562001f84565b60a001516110e0526200105f81600662001f84565b60a00151611100526200107481600762001f84565b60a00151611120526200108981600862001f84565b60a00151611140526200109e81600962001f84565b60a0015161116052620010b381600a62001f84565b60a0015161118052620010c881600b62001f84565b60a001516111a052620010dd81600c62001f84565b60a001516111c052620010f281600d62001f84565b60a001516111e0526200110781600e62001f84565b60a00151611200526200111c81600f62001f84565b60a00151611220526200113181601062001f84565b60a00151611240526200114681601162001f84565b60a00151611260526200115b81601262001f84565b60a00151611280526200117081601362001f84565b60a001516112a0526200118581601462001f84565b60a001516112c0526200119a81601562001f84565b60a001516112e052620011af81601662001f84565b60a0015161130052620011c481601762001f84565b60a0015161132052620011d981601862001f84565b60a0015161134052620011ee81600062001f84565b60c0015160601b6001600160601b031916611360526200121081600162001f84565b60c0015160601b6001600160601b031916611380526200123281600262001f84565b60c0015160601b6001600160601b0319166113a0526200125481600362001f84565b60c0015160601b6001600160601b0319166113c0526200127681600462001f84565b60c0015160601b6001600160601b0319166113e0526200129881600562001f84565b60c0015160601b6001600160601b03191661140052620012ba81600662001f84565b60c0015160601b6001600160601b03191661142052620012dc81600762001f84565b60c0015160601b6001600160601b03191661144052620012fe81600862001f84565b60c0015160601b6001600160601b031916611460526200132081600962001f84565b60c0015160601b6001600160601b031916611480526200134281600a62001f84565b60c0015160601b6001600160601b0319166114a0526200136481600b62001f84565b60c0015160601b6001600160601b0319166114c0526200138681600c62001f84565b60c0015160601b6001600160601b0319166114e052620013a881600d62001f84565b60c0015160601b6001600160601b03191661150052620013ca81600e62001f84565b60c0015160601b6001600160601b03191661152052620013ec81600f62001f84565b60c0015160601b6001600160601b031916611540526200140e81601062001f84565b60c0015160601b6001600160601b031916611560526200143081601162001f84565b60c0015160601b6001600160601b031916611580526200145281601262001f84565b60c0015160601b6001600160601b0319166115a0526200147481601362001f84565b60c0015160601b6001600160601b0319166115c0526200149681601462001f84565b60c0015160601b6001600160601b0319166115e052620014b881601562001f84565b60c0015160601b6001600160601b03191661160052620014da81601662001f84565b60c0015160601b6001600160601b03191661162052620014fc81601762001f84565b60c0015160601b6001600160601b031916611640526200151e81601862001f84565b60c0015160601b6001600160601b031916611660526200154081600062001f84565b60e0015160601b6001600160601b031916611680526200156281600162001f84565b60e0015160601b6001600160601b0319166116a0526200158481600262001f84565b60e0015160601b6001600160601b0319166116c052620015a681600362001f84565b60e0015160601b6001600160601b0319166116e052620015c881600462001f84565b60e0015160601b6001600160601b03191661170052620015ea81600562001f84565b60e0015160601b6001600160601b031916611720526200160c81600662001f84565b60e0015160601b6001600160601b031916611740526200162e81600762001f84565b60e0015160601b6001600160601b031916611760526200165081600862001f84565b60e0015160601b6001600160601b031916611780526200167281600962001f84565b60e0015160601b6001600160601b0319166117a0526200169481600a62001f84565b60e0015160601b6001600160601b0319166117c052620016b681600b62001f84565b60e0015160601b6001600160601b0319166117e052620016d881600c62001f84565b60e0015160601b6001600160601b03191661180052620016fa81600d62001f84565b60e0015160601b6001600160601b031916611820526200171c81600e62001f84565b60e0015160601b6001600160601b031916611840526200173e81600f62001f84565b60e0015160601b6001600160601b031916611860526200176081601062001f84565b60e0015160601b6001600160601b031916611880526200178281601162001f84565b60e0015160601b6001600160601b0319166118a052620017a481601262001f84565b60e0015160601b6001600160601b0319166118c052620017c681601362001f84565b60e0015160601b6001600160601b0319166118e052620017e881601462001f84565b60e0015160601b6001600160601b031916611900526200180a81601562001f84565b60e0015160601b6001600160601b031916611920526200182c81601662001f84565b60e0015160601b6001600160601b031916611940526200184e81601762001f84565b60e0015160601b6001600160601b031916611960526200187081601862001f84565b60e0015160601b6001600160601b031916611980526200189281600062001f84565b61010001516119a052620018a881600162001f84565b61010001516119c052620018be81600262001f84565b61010001516119e052620018d481600362001f84565b6101000151611a0052620018ea81600462001f84565b6101000151611a20526200190081600562001f84565b6101000151611a40526200191681600662001f84565b6101000151611a60526200192c81600762001f84565b6101000151611a80526200194281600862001f84565b6101000151611aa0526200195881600962001f84565b6101000151611ac0526200196e81600a62001f84565b6101000151611ae0526200198481600b62001f84565b6101000151611b00526200199a81600c62001f84565b6101000151611b2052620019b081600d62001f84565b6101000151611b4052620019c681600e62001f84565b6101000151611b6052620019dc81600f62001f84565b6101000151611b8052620019f281601062001f84565b6101000151611ba05262001a0881601162001f84565b6101000151611bc05262001a1e81601262001f84565b6101000151611be05262001a3481601362001f84565b6101000151611c005262001a4a81601462001f84565b6101000151611c205262001a6081601562001f84565b6101000151611c405262001a7681601662001f84565b6101000151611c605262001a8c81601762001f84565b6101000151611c805262001aa281601862001f84565b6101000151611ca05262001ab881600062001f84565b6101200151151560f81b611cc05262001ad381600162001f84565b6101200151151560f81b611ce05262001aee81600262001f84565b6101200151151560f81b611d005262001b0981600362001f84565b6101200151151560f81b611d205262001b2481600462001f84565b6101200151151560f81b611d405262001b3f81600562001f84565b6101200151151560f81b611d605262001b5a81600662001f84565b6101200151151560f81b611d805262001b7581600762001f84565b6101200151151560f81b611da05262001b9081600862001f84565b6101200151151560f81b611dc05262001bab81600962001f84565b6101200151151560f81b611de05262001bc681600a62001f84565b6101200151151560f81b611e005262001be181600b62001f84565b6101200151151560f81b611e205262001bfc81600c62001f84565b6101200151151560f81b611e405262001c1781600d62001f84565b6101200151151560f81b611e605262001c3281600e62001f84565b6101200151151560f81b611e805262001c4d81600f62001f84565b6101200151151560f81b611ea05262001c6881601062001f84565b6101200151151560f81b611ec05262001c8381601162001f84565b6101200151151560f81b611ee05262001c9e81601262001f84565b6101200151151560f81b611f005262001cb981601362001f84565b6101200151151560f81b611f205262001cd481601462001f84565b6101200151151560f81b611f405262001cef81601562001f84565b6101200151151560f81b611f605262001d0a81601662001f84565b6101200151151560f81b611f805262001d2581601762001f84565b6101200151151560f81b611fa05262001d4081601862001f84565b6101200151151560f81b611fc05250600080546001600160a01b03191633179055612020829052670de0b6b3a764000019831162001d895782670de0b6b3a76400000162001d8d565b6000195b611fe052670de0b6b3a7640000831062001da957600162001db5565b82670de0b6b3a7640000035b6120005260005b815181101562001f7a5762001dd0620022d8565b82828151811062001ddd57fe5b60200260200101519050600081606001511162001e0e5760405162461bcd60e51b81526004016200005b906200257e565b60c081015160028260800151600281111562001e2657fe5b141562001f45576001600160a01b03811662001e565760405162461bcd60e51b81526004016200005b90620025c0565b60e08201516001600160a01b031662001e835760405162461bcd60e51b81526004016200005b90620026aa565b6040808301516000818152600260205291822080547fff000000000000000000000000000000000000000000000000000000000000001660011790559062001ecb846200200e565b600083815260036020908152604080832042808255600490935292819020828155600193840185905592909201839055905191925083917fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a9162001f3591819086908190620026ed565b60405180910390a2505062001f6f565b6001600160a01b0381161562001f6f5760405162461bcd60e51b81526004016200005b9062002664565b505060010162001dbc565b5050505062002748565b62001f8e620022d8565b825182101562001fb55782828151811062001fa557fe5b6020026020010151905062002008565b506040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091525b92915050565b60008060006200202d8460c001516200205160201b6200383b1760201c565b509150915083610120015115620020485791506200204c9050565b5090505b919050565b600080806200205f62002254565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b1580156200209b57600080fd5b505afa158015620020b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020d6919062002494565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b1580156200211257600080fd5b505afa15801562002127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200214d919062002494565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156200218e57600080fd5b505afa158015620021a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021c991906200243a565b9250925092508363ffffffff168163ffffffff16146200224a57600081850390508063ffffffff166200220884866200225e60201b62003a101760201c565b600001516001600160e01b031602870196508063ffffffff166200223885856200225e60201b62003a101760201c565b516001600160e01b0316029590950194505b5050509193909250565b63ffffffff421690565b620022686200232b565b6000826001600160701b031611620022945760405162461bcd60e51b81526004016200005b906200262d565b6040805160208101909152806001600160701b038416600160701b600160e01b03607087901b1681620022c357fe5b046001600160e01b0316815250905092915050565b604080516101408101825260008082526020820181905291810182905260608101829052906080820190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b60408051602081019091526000815290565b80516001600160a01b03811681146200200857600080fd5b805180151581146200200857600080fd5b8051600381106200200857600080fd5b60006101408083850312156200238a578182fd5b620023958162002708565b915050620023a483836200233d565b8152620023b583602084016200233d565b60208201526040820151604082015260608201516060820152620023dd836080840162002366565b608082015260a082015160a0820152620023fb8360c084016200233d565b60c08201526200240f8360e084016200233d565b60e08201526101008281015190820152610120620024308482850162002355565b9082015292915050565b6000806000606084860312156200244f578283fd5b83516200245c816200272f565b60208501519093506200246f816200272f565b604085015190925063ffffffff8116811462002489578182fd5b809150509250925092565b600060208284031215620024a6578081fd5b5051919050565b600080600060608486031215620024c2578283fd5b835160208086015160408701519295509350906001600160401b0380821115620024ea578384fd5b818701915087601f830112620024fe578384fd5b8151818111156200250d578485fd5b6200251c848583020162002708565b8181528481019250838501610140808402860187018c10156200253d578788fd5b8795505b838610156200256d57620025568c8362002376565b855260019590950194938601939081019062002541565b505080955050505050509250925092565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526023908201527f7265706f7274656420707269636573206d757374206861766520616e20616e636040820152623437b960e91b606082015260800190565b60208082526010908201526f746f6f206d616e7920636f6e6669677360801b604082015260600190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b60208082526026908201527f6f6e6c79207265706f7274656420707269636573207574696c697a6520616e2060408201526530b731b437b960d11b606082015260800190565b60208082526023908201527f7265706f72746564207072696365206d75737420686176652061207265706f726040820152623a32b960e91b606082015260800190565b93845260208401929092526040830152606082015260800190565b6040518181016001600160401b03811182821017156200272757600080fd5b604052919050565b6001600160701b03811681146200274557600080fd5b50565b60805160a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c05160601c6102e05160601c6103005160601c6103205160601c6103405160601c6103605160601c6103805160601c6103a05160601c6103c05160601c6103e05160601c6104005160601c6104205160601c6104405160601c6104605160601c6104805160601c6104a05160601c6104c05160601c6104e05160601c6105005160601c6105205160601c6105405160601c6105605160601c6105805160601c6105a05160601c6105c05160601c6105e05160601c6106005160601c6106205160601c6106405160601c6106605160601c6106805160601c6106a05160601c6106c05160601c6106e05161070051610720516107405161076051610780516107a0516107c0516107e05161080051610820516108405161086051610880516108a0516108c0516108e05161090051610920516109405161096051610980516109a0516109c0516109e051610a0051610a2051610a4051610a6051610a8051610aa051610ac051610ae051610b0051610b2051610b4051610b6051610b8051610ba051610bc051610be051610c0051610c2051610c4051610c6051610c8051610ca051610cc051610ce051610d0051610d205160f81c610d405160f81c610d605160f81c610d805160f81c610da05160f81c610dc05160f81c610de05160f81c610e005160f81c610e205160f81c610e405160f81c610e605160f81c610e805160f81c610ea05160f81c610ec05160f81c610ee05160f81c610f005160f81c610f205160f81c610f405160f81c610f605160f81c610f805160f81c610fa05160f81c610fc05160f81c610fe05160f81c6110005160f81c6110205160f81c6110405161106051611080516110a0516110c0516110e05161110051611120516111405161116051611180516111a0516111c0516111e05161120051611220516112405161126051611280516112a0516112c0516112e0516113005161132051611340516113605160601c6113805160601c6113a05160601c6113c05160601c6113e05160601c6114005160601c6114205160601c6114405160601c6114605160601c6114805160601c6114a05160601c6114c05160601c6114e05160601c6115005160601c6115205160601c6115405160601c6115605160601c6115805160601c6115a05160601c6115c05160601c6115e05160601c6116005160601c6116205160601c6116405160601c6116605160601c6116805160601c6116a05160601c6116c05160601c6116e05160601c6117005160601c6117205160601c6117405160601c6117605160601c6117805160601c6117a05160601c6117c05160601c6117e05160601c6118005160601c6118205160601c6118405160601c6118605160601c6118805160601c6118a05160601c6118c05160601c6118e05160601c6119005160601c6119205160601c6119405160601c6119605160601c6119805160601c6119a0516119c0516119e051611a0051611a2051611a4051611a6051611a8051611aa051611ac051611ae051611b0051611b2051611b4051611b6051611b8051611ba051611bc051611be051611c0051611c2051611c4051611c6051611c8051611ca051611cc05160f81c611ce05160f81c611d005160f81c611d205160f81c611d405160f81c611d605160f81c611d805160f81c611da05160f81c611dc05160f81c611de05160f81c611e005160f81c611e205160f81c611e405160f81c611e605160f81c611e805160f81c611ea05160f81c611ec05160f81c611ee05160f81c611f005160f81c611f205160f81c611f405160f81c611f605160f81c611f805160f81c611fa05160f81c611fc05160f81c611fe0516120005161202051615f286200350c600039806136f652806156de52508061343752806153cd52508061039a52806153a25250806133d7525080613210525080613049525080612e82525080612cbb525080612af452508061292d52508061276652508061259f5250806123d852508061221152508061204a525080611e83525080611cbc525080611af552508061192e5250806117675250806115a05250806113d952508061121252508061104b525080610e84525080610cbd525080610af652508061092f5250806133b15250806131ea525080613023525080612e5c525080612c95525080612ace5250806129075250806127405250806125795250806123b25250806121eb525080612024525080611e5d525080611c96525080611acf52508061190852508061174152508061157a5250806113b35250806111ec525080611025525080610e5e525080610c97525080610ad0525080610909525080613382528061457a5250806131bb5280614538525080612ff452806144f6525080612e2d52806144b4525080612c665280614472525080612a9f52806144305250806128d852806143ee52508061271152806143ac52508061254a528061436a52508061238352806143285250806121bc52806142e6525080611ff552806142a4525080611e2e5280614262525080611c675280614220525080611aa052806141de5250806118d9528061419c525080611712528061415a52508061154b528061411852508061138452806140d65250806111bd5280614094525080610ff65280614052525080610e2f5280614010525080610c685280613fce525080610aa15280613f8c5250806108da5280613f4a52508061335352508061318c525080612fc5525080612dfe525080612c37525080612a705250806128a95250806126e252508061251b52508061235452508061218d525080611fc6525080611dff525080611c38525080611a715250806118aa5250806116e352508061151c52508061135552508061118e525080610fc7525080610e00525080610c39525080610a725250806108ab52508061332d525080613166525080612f9f525080612dd8525080612c11525080612a4a5250806128835250806126bc5250806124f552508061232e525080612167525080611fa0525080611dd9525080611c12525080611a4b5250806118845250806116bd5250806114f652508061132f525080611168525080610fa1525080610dda525080610c13525080610a4c5250806108855250806132fc525080613135525080612f6e525080612da7525080612be0525080612a1952508061285252508061268b5250806124c45250806122fd525080612136525080611f6f525080611da8525080611be1525080611a1a52508061185352508061168c5250806114c55250806112fe525080611137525080610f70525080610da9525080610be2525080610a1b5250806108545250806132d652508061310f525080612f48525080612d81525080612bba5250806129f352508061282c52508061266552508061249e5250806122d7525080612110525080611f49525080611d82525080611bbb5250806119f452508061182d52508061166652508061149f5250806112d8525080611111525080610f4a525080610d83525080610bbc5250806109f552508061082e5250806132b05280613f0f5250806130e95280613edf525080612f225280613eaf525080612d5b5280613e7f525080612b945280613e4f5250806129cd5280613e1f5250806128065280613def52508061263f5280613dbf5250806124785280613d8f5250806122b15280613d5f5250806120ea5280613d2f525080611f235280613cff525080611d5c5280613ccf525080611b955280613c9f5250806119ce5280613c6f5250806118075280613c3f5250806116405280613c0f5250806114795280613bdf5250806112b25280613baf5250806110eb5280613b7f525080610f245280613b4f525080610d5d5280613b1f525080610b965280613aef5250806109cf5280613abf5250806108085280613a8f5250806132815280614bee5250806130ba5280614bac525080612ef35280614b6a525080612d2c5280614b28525080612b655280614ae652508061299e5280614aa45250806127d75280614a625250806126105280614a2052508061244952806149de525080612282528061499c5250806120bb528061495a525080611ef45280614918525080611d2d52806148d6525080611b66528061489452508061199f52806148525250806117d8528061481052508061161152806147ce52508061144a528061478c525080611283528061474a5250806110bc5280614708525080610ef552806146c6525080610d2e5280614684525080610b6752806146425250806109a052806146005250806107d952806145be52508061325252806152eb52508061308b52806152a9525080612ec45280615267525080612cfd5280615225525080612b3652806151e352508061296f52806151a15250806127a8528061515f5250806125e1528061511d52508061241a52806150db525080612253528061509952508061208c5280615057525080611ec55280615015525080611cfe5280614fd3525080611b375280614f915250806119705280614f4f5250806117a95280614f0d5250806115e25280614ecb52508061141b5280614e895250806112545280614e4752508061108d5280614e05525080610ec65280614dc3525080610cff5280614d81525080610b385280614d3f5250806109715280614cfd5250806107aa5280614cbb52508061075a52806134135250615f286000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80638a003888116100de578063d1b353b411610097578063eaa1c2ca11610071578063eaa1c2ca146102f7578063f2fde38b1461030a578063fc57d4df1461031d578063fe2c61981461033057610173565b8063d1b353b414610259578063e8315742146102e7578063e9206d78146102ef57610173565b80638a0038881461027c5780638da5cb5b1461028f5780638e499bcf146102a457806392b84357146102ac5780639f599631146102b4578063beed9b51146102c757610173565b80635f396923116101305780635f3969231461021057806360846bc61461022557806368f9a97f1461024657806369aa3ac61461025957806379ba5097146102615780638185b81c1461026957610173565b80631a1252041461017857806324105209146101a1578063276c2cba146101b657806329feb7bc146101c957806337c0e12d146101dc5780634da21942146101fd575b600080fd5b61018b6101863660046158b7565b610343565b6040516101989190615db5565b60405180910390f35b6101a9610398565b6040516101989190615e74565b61018b6101c43660046158cf565b6103bc565b61018b6101d736600461587f565b6103f9565b6101ef6101ea3660046158b7565b61040c565b604051610198929190615e7d565b61018b61020b36600461587f565b610425565b61022361021e3660046158b7565b610438565b005b6102386102333660046158b7565b6104ec565b604051610198929190615e59565b6102236102543660046158b7565b610513565b6101a961061f565b61022361062b565b6102236102773660046158b7565b6106ac565b61018b61028a3660046158b7565b610750565b610297613402565b6040516101989190615a70565b6101a9613411565b6101a9613435565b61018b6102c236600461587f565b613459565b6102da6102d53660046159d6565b6134fb565b6040516101989190615a84565b6101a96136ef565b6101a96136f4565b6101ef6103053660046158b7565b613718565b61022361031836600461587f565b613731565b6101a961032b36600461587f565b6137d5565b6101a961033e3660046158cf565b61381d565b61034b6157e9565b600061035683613a8b565b905060001981146103725761036a81610750565b915050610393565b60405162461bcd60e51b815260040161038a90615b67565b60405180910390fd5b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6103c46157e9565b6103f3826040516020016103d89190615a28565b60405160208183030381529060405280519060200120610343565b92915050565b6104016157e9565b600061035683613f46565b6003602052600090815260409020805460019091015482565b61042d6157e9565b6000610356836145ba565b6000546001600160a01b031633146104625760405162461bcd60e51b815260040161038a90615b00565b600081815260026020526040902054600160f81b900460ff16156104985760405162461bcd60e51b815260040161038a90615cec565b60008181526002602052604080822080546001600160f81b0316600160f81b1790555182917fdd0f1f4e105bf96c7d8e2defcbbc958075661165b324633175ca26f08a11f4b491a26104e981610513565b50565b6002602052600090815260409020546001600160f81b03811690600160f81b900460ff1682565b61051b61583c565b506000818152600260209081526040918290208251808401909352546001600160f81b0381168352600160f81b900460ff1615159082018190526105715760405162461bcd60e51b815260040161038a90615b97565b6105796157e9565b61058283610343565b9050600061058f82614c2e565b9050600160f81b81106105b45760405162461bcd60e51b815260040161038a90615d4e565b604082810180516000908152600260205282902080546001600160f81b0319166001600160f81b0385161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c390610611908490615e74565b60405180910390a250505050565b670de0b6b3a764000081565b6001546001600160a01b031633146106555760405162461bcd60e51b815260040161038a90615a8f565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000546001600160a01b031633146106d65760405162461bcd60e51b815260040161038a90615b00565b600081815260026020526040902054600160f81b900460ff1661070b5760405162461bcd60e51b815260040161038a90615c73565b60008181526002602052604080822080546001600160f81b031690555182917f5a1062b4c89c41b46f5e2da710d564c88989bfe1b4e856dbdbc40c5c59a2ce4b91a250565b6107586157e9565b7f000000000000000000000000000000000000000000000000000000000000000082106107975760405162461bcd60e51b815260040161038a90615b67565b8161095a576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561087e57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160011415610b21576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115610a4557fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160021415610ce8576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115610c0c57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160031415610eaf576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115610dd357fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160041415611076576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115610f9a57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b816005141561123d576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561116157fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160061415611404576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561132857fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600714156115cb576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000060028111156114ef57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160081415611792576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000060028111156116b657fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160091415611959576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561187d57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600a1415611b20576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115611a4457fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600b1415611ce7576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115611c0b57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600c1415611eae576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115611dd257fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600d1415612075576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115611f9957fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600e141561223c576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561216057fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600f1415612403576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561232757fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81601014156125ca576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000060028111156124ee57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160111415612791576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000060028111156126b557fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160121415612958576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561287c57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160131415612b1f576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612a4357fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160141415612ce6576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612c0a57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160151415612ead576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612dd157fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160161415613074576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612f9857fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b816017141561323b576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561315f57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160181415610393576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561332657fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6134616157e9565b600061346c83614cb7565b905060001981146134805761036a81610750565b6134f4836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156134bc57600080fd5b505afa1580156134d0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020b919061589b565b9392505050565b60006135056157e9565b61350e336103f9565b9050600061351c828561532b565b9050600061352983614c2e565b905061353361583c565b50604083810151600090815260026020908152908290208251808401909352546001600160f81b0381168352600160f81b900460ff161580159183019190915261360457600160f81b821061359a5760405162461bcd60e51b815260040161038a90615d4e565b604084810180516000908152600260205282902080546001600160f81b0319166001600160f81b0386161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c3906135f7908590615e74565b60405180910390a26136e3565b61360e8383615379565b156136a457600160f81b83106136365760405162461bcd60e51b815260040161038a90615bce565b604084810180516000908152600260205282902080546001600160f81b0319166001600160f81b0387161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c390613693908690615e74565b60405180910390a2600194506136e3565b83604001517f6b871468876a51b1609c5e5fc5c6f57c7e9a66aba8ad5a41ed4a5b2b50d7d1f684846040516136da929190615e7d565b60405180910390a25b50505050949350505050565b601981565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004602052600090815260409020805460019091015482565b6000546001600160a01b0316331461375b5760405162461bcd60e51b815260040161038a90615b00565b6001600160a01b0381163314156137845760405162461bcd60e51b815260040161038a90615d17565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006137df6157e9565b6137e883613459565b9050806060015161380e6c0c9f2c9cd04674edea4000000061380984615401565b615501565b8161381557fe5b049392505050565b60006138276157e9565b613830836103bc565b90506134f481615401565b600080600061384861553b565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561388357600080fd5b505afa158015613897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138bb91906159be565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b1580156138f657600080fd5b505afa15801561390a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392e91906159be565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561396e57600080fd5b505afa158015613982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a6919061596a565b9250925092508363ffffffff168163ffffffff1614613a065780840363ffffffff81166139d38486613a10565b516001600160e01b031602969096019563ffffffff81166139f48585613a10565b516001600160e01b0316029590950194505b5050509193909250565b613a18615853565b6000826001600160701b031611613a415760405162461bcd60e51b815260040161038a90615d7e565b6040805160208101909152806001600160701b0384166dffffffffffffffffffffffffffff60701b607087901b1681613a7657fe5b046001600160e01b0316815250905092915050565b60007f0000000000000000000000000000000000000000000000000000000000000000821415613abd57506000610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613aed57506001610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613b1d57506002610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613b4d57506003610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613b7d57506004610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613bad57506005610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613bdd57506006610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613c0d57506007610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613c3d57506008610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613c6d57506009610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613c9d5750600a610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613ccd5750600b610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613cfd5750600c610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613d2d5750600d610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613d5d5750600e610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613d8d5750600f610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613dbd57506010610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613ded57506011610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613e1d57506012610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613e4d57506013610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613e7d57506014610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613ead57506015610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613edd57506016610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613f0d57506017610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613f3d57506018610393565b50600019919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f8a57506000610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613fcc57506001610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561400e57506002610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561405057506003610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561409257506004610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156140d457506005610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561411657506006610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561415857506007610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561419a57506008610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156141dc57506009610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561421e5750600a610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156142605750600b610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156142a25750600c610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156142e45750600d610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156143265750600e610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156143685750600f610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156143aa57506010610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156143ec57506011610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561442e57506012610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561447057506013610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156144b257506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156144f457506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561453657506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561457857506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156145fe57506000610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561464057506001610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561468257506002610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156146c457506003610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561470657506004610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561474857506005610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561478a57506006610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156147cc57506007610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561480e57506008610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561485057506009610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156148925750600a610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156148d45750600b610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156149165750600c610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156149585750600d610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561499a5750600e610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156149dc5750600f610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614a1e57506010610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614a6057506011610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614aa257506012610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614ae457506013610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614b2657506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614b6857506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614baa57506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614bec57506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b600080614c39615545565b9050600283608001516002811115614c4d57fe5b14614c6a5760405162461bcd60e51b815260040161038a90615c05565b604051602001614c7990615a61565b6040516020818303038152906040528051906020012083604001511415614ca257809150614cb1565b6134f483604001518483615594565b50919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614cfb57506000610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614d3d57506001610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614d7f57506002610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614dc157506003610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614e0357506004610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614e4557506005610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614e8757506006610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614ec957506007610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614f0b57506008610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614f4d57506009610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614f8f5750600a610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614fd15750600b610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156150135750600c610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156150555750600d610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156150975750600e610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156150d95750600f610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561511b57506010610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561515d57506011610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561519f57506012610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156151e157506013610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561522357506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561526557506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156152a757506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156152e957506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b60008082121561534d5760405162461bcd60e51b815260040161038a90615abf565b60008290506000846060015161536883876101000151615501565b8161536f57fe5b0495945050505050565b600082156153f85760008361539684670de0b6b3a7640000615501565b8161539d57fe5b0490507f000000000000000000000000000000000000000000000000000000000000000081111580156153f057507f00000000000000000000000000000000000000000000000000000000000000008110155b9150506103f3565b50600092915050565b600060028260800151600281111561541557fe5b141561543c57506040808201516000908152600260205220546001600160f81b0316610393565b60018260800151600281111561544e57fe5b141561545f575060a0810151610393565b60008260800151600281111561547157fe5b14156103935760006002600060405160200161548c90615a61565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160f81b03169050806154da5760405162461bcd60e51b815260040161038a90615ca0565b670de0b6b3a76400006154f1828560a00151615501565b816154f857fe5b04915050610393565b600082615510575060006103f3565b8282028284828161551d57fe5b04146134f45760405162461bcd60e51b815260040161038a90615b30565b63ffffffff421690565b600061558f60405160200161555990615a61565b604051602081830303815290604052805190602001206155816040516020016103d890615a61565b670de0b6b3a7640000615594565b905090565b6000806000806155a38661568b565b9250925092508042116155c85760405162461bcd60e51b815260040161038a90615c3c565b428190036155d4615853565b604051806020016040528083868803816155ea57fe5b046001600160e01b0316815250905060006156048261579e565b90506000615612828a615501565b90506000670de0b6b3a76400008061562e848e60600151615501565b8161563557fe5b048161563d57fe5b0490508b7fac9b6bb0c67df7ef0d18e58e4bd539c4d6f780c4c8f341cd8e649109edeb5faf82884260405161567493929190615e8b565b60405180910390a29b9a5050505050505050505050565b6000806000808460400151905060006156a3866157b6565b90506156ad615865565b50600082815260046020908152604091829020825180840190935280548084526001909101549183019190915242037f00000000000000000000000000000000000000000000000000000000000000008110615779578151600085815260036020908152604080832093845581860180516001958601556004909252918290204280825593018690558a82015185519151925190937fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a9361577093928990615ea1565b60405180910390a25b5050600091825260036020526040909120600181015490549196909550909350915050565b516612725dd1d243ab6001600160e01b039091160490565b60008060006157c88460c0015161383b565b5091509150836101200151156157e15791506103939050565b509050610393565b604080516101408101825260008082526020820181905291810182905260608101829052906080820190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604080518082019091526000808252602082015290565b60408051602081019091526000815290565b604051806040016040528060008152602001600081525090565b600060208284031215615890578081fd5b81356134f481615ec8565b6000602082840312156158ac578081fd5b81516134f481615ec8565b6000602082840312156158c8578081fd5b5035919050565b6000602082840312156158e0578081fd5b813567ffffffffffffffff808211156158f7578283fd5b818401915084601f83011261590a578283fd5b813581811115615918578384fd5b604051601f8201601f191681016020018381118282101715615938578586fd5b60405281815283820160200187101561594f578485fd5b615960826020830160208701615ebc565b9695505050505050565b60008060006060848603121561597e578182fd5b835161598981615edd565b602085015190935061599a81615edd565b604085015190925063ffffffff811681146159b3578182fd5b809150509250925092565b6000602082840312156159cf578081fd5b5051919050565b600080600080608085870312156159eb578081fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b03169052565b15159052565b60038110615a2457fe5b9052565b60008251815b81811015615a485760208186018101518583015201615a2e565b81811115615a565782828501525b509190910192915050565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b901515815260200190565b60208082526016908201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b604082015260600190565b60208082526021908201527f5265706f727465642070726963652063616e6e6f74206265206e6567617469766040820152606560f81b606082015260800190565b60208082526016908201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b604082015260600190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526017908201527f4661696c6f766572206d75737420626520616374697665000000000000000000604082015260600190565b60208082526018908201527f5265706f7274656420707269636520746f6f206c617267650000000000000000604082015260600190565b6020808252601f908201527f6f6e6c79207265706f72746572207072696365732067657420706f7374656400604082015260600190565b6020808252601a908201527f6e6f77206d75737420636f6d65206166746572206265666f7265000000000000604082015260600190565b602080825260139082015272105b1c9958591e4819195858dd1a5d985d1959606a1b604082015260600190565b6020808252602c908201527f455448207072696365206e6f74207365742c2063616e6e6f7420636f6e76657260408201526b7420746f20646f6c6c61727360a01b606082015260800190565b602080825260119082015270105b1c9958591e481858dd1a5d985d1959607a1b604082015260600190565b60208082526017908201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604082015260600190565b602080825260169082015275416e63686f7220707269636520746f6f206c6172676560501b604082015260600190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b600061014082019050615dc9828451615a07565b6020830151615ddb6020840182615a07565b5060408301516040830152606083015160608301526080830151615e026080840182615a1a565b5060a083015160a083015260c0830151615e1f60c0840182615a07565b5060e0830151615e3260e0840182615a07565b50610100838101519083015261012080840151615e5182850182615a14565b505092915050565b6001600160f81b039290921682521515602082015260400190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b82818337506000910152565b6001600160a01b03811681146104e957600080fd5b6001600160701b03811681146104e957600080fdfea2646970667358221220102ccdcdda4f5b3d875e6c0f95e4e59a20551e3e318650da1da8654188ef57cd64736f6c634300060c00330000000000000000000000000000000000000000000000000214e8348c4f00000000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000150000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000000000000000000000000000000000000000000000aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc000000000000000000000000264bddfd9d93d48d759fbdb0670be1c6fdd50236000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e36430000000000000000000000006b175474e89094c44da98b954eedeac495271d0fa5e92f3efb6826155f1f728e162af9d7cda33a574a1153b58f03ea01cc37e5680000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a478c2975ab1ea89e8196811f51a7b7ade33eb11000000000000000000000000b2419f587f497cdd64437f1b367e2e80889631ea000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48d6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec78b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e90000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9400000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef3ec6762bdf44eb044276fec7d12c1bb640cb139cfd533f93eeebba5414f5db550000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b6909b960dbbe7392d405429eb2b3649752b4838000000000000000000000000eba6f33730b9751a8ba0b18d9c256093e82f6bc2000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498b8612e326dd19fc983e73ae3bc23fa1c78a3e01478574fa7ceb5b57e589dcebd0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6f348dd3b91a56d117ec0071c1e9b83c0996de40000000000000000000000005c5db112c98dbe5977a4c37ad33f8a4c9ebd5575000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c10000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e86291a08135082b0a28b4ad8ecc7749a009e0408743a9d1cdf34dd6a58d60ee95040000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000008979a3ef9d540480342ac0f56e9d4c88807b1cba00000000000000000000000090655316479383795416b615b61282c72d8382c1000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603594dcbfd8d7239a822743634e138b90febafc5720cec2dbdc6a0e5a2118ba2c5320000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012c6adf3a35000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035a18000230da775cac24873d00ff85bccded5500000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984fba01d52a7cd84480d0573725899486a0b5e55c20ff45d6628874349375d16500000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3d2e2692501a5c9ca623199d38826e513033a1700000000000000000000000070f4d236fd678c9db41a52d28f90e299676d9d90000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e4000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888b6dbcaeee318e11fe1e87d4af04bdd7b4d6a3f13307225dc7ee72f7c085ab4540000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cffdded873554f362ac02f8fb1f02e5ada10516f000000000000000000000000e270b8e9d7a7d2a7ee35a45e43d17d56b3e272b1000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c7000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca921a3539bcb764c889432630877414523e7fbca00c211bc787aeae69e2e3a7790000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2107fa5b38d9bbd2c461d6edf11b11a50f6b974000000000000000000000000bcfd9b1a97ccd0a3942f0408350cdc281cdca1b1000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad860000000000000000000000000000000000085d4780b73119b644ae5ecd22b376a1b8d8f7e538bb573797c963eeeed40d0bcb9f28c56104417d0da1b372ae30510000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9de46fbfa339d54cd65b79d8320a7a53c78177565c2aaf4c8b13eed7865e7cfc80000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dfc14d2af169b0d36c4eff567ada9b2e0cae044f0000000000000000000000000238247e71ad0ab272203af13baea72e99ee7c3c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d70000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2bbf304add43db0a05d104474683215530b076be1dfdf72a4d53a1e443d8e4c210000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce84867c3c02b05dc570d0135103d3fb9cc19433000000000000000000000000875aca7030b75b5d8cb59c913910a7405337dff7000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2ec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd63812221920200000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2adda861f89bbb333c90c492cb837741916a225000000000000000000000000ba895504a8e286691e7dacfb47ae8a3a737e2ce1000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c339460000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93eec34391362c28ee226b3b8624a699ee507a40fa771fd01d38b03ac7b70998bbe0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fdbadf3c4d5a8666bc06645b8358ab803996e28000000000000000000000000ba4319741782151d2b1df4799d757892efda4165000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f40000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e90000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9400000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041171993284df560249b57358f931d9eb7b925d0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1e6ce7ecb96a43fc15fb4020f93c37885612803dd74366bb6815e4f607ac3ca200000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f67000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca58c46f3a00a69ae5a5ce163895c14f8f5b7791333af9fe6e7a73618cb54609130000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878000000000000000000000000de2fa230d4c05ec0337d7b4fc10e16f5663044b0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000944dd1c7ce133b75880cee913d513f8c073123930000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb0a6a7de01e8b7ba6a4a61c782a73188d808fc1f3cf5743fadb68a02ed884b594f0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000819f3450da6f110ba6ea52195b3beafa246062de00000000000000000000000044750a79ae69d5e9bc1651e099dffe1fb8611aba000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c80638a003888116100de578063d1b353b411610097578063eaa1c2ca11610071578063eaa1c2ca146102f7578063f2fde38b1461030a578063fc57d4df1461031d578063fe2c61981461033057610173565b8063d1b353b414610259578063e8315742146102e7578063e9206d78146102ef57610173565b80638a0038881461027c5780638da5cb5b1461028f5780638e499bcf146102a457806392b84357146102ac5780639f599631146102b4578063beed9b51146102c757610173565b80635f396923116101305780635f3969231461021057806360846bc61461022557806368f9a97f1461024657806369aa3ac61461025957806379ba5097146102615780638185b81c1461026957610173565b80631a1252041461017857806324105209146101a1578063276c2cba146101b657806329feb7bc146101c957806337c0e12d146101dc5780634da21942146101fd575b600080fd5b61018b6101863660046158b7565b610343565b6040516101989190615db5565b60405180910390f35b6101a9610398565b6040516101989190615e74565b61018b6101c43660046158cf565b6103bc565b61018b6101d736600461587f565b6103f9565b6101ef6101ea3660046158b7565b61040c565b604051610198929190615e7d565b61018b61020b36600461587f565b610425565b61022361021e3660046158b7565b610438565b005b6102386102333660046158b7565b6104ec565b604051610198929190615e59565b6102236102543660046158b7565b610513565b6101a961061f565b61022361062b565b6102236102773660046158b7565b6106ac565b61018b61028a3660046158b7565b610750565b610297613402565b6040516101989190615a70565b6101a9613411565b6101a9613435565b61018b6102c236600461587f565b613459565b6102da6102d53660046159d6565b6134fb565b6040516101989190615a84565b6101a96136ef565b6101a96136f4565b6101ef6103053660046158b7565b613718565b61022361031836600461587f565b613731565b6101a961032b36600461587f565b6137d5565b6101a961033e3660046158cf565b61381d565b61034b6157e9565b600061035683613a8b565b905060001981146103725761036a81610750565b915050610393565b60405162461bcd60e51b815260040161038a90615b67565b60405180910390fd5b919050565b7f0000000000000000000000000000000000000000000000000ff59ee833b3000081565b6103c46157e9565b6103f3826040516020016103d89190615a28565b60405160208183030381529060405280519060200120610343565b92915050565b6104016157e9565b600061035683613f46565b6003602052600090815260409020805460019091015482565b61042d6157e9565b6000610356836145ba565b6000546001600160a01b031633146104625760405162461bcd60e51b815260040161038a90615b00565b600081815260026020526040902054600160f81b900460ff16156104985760405162461bcd60e51b815260040161038a90615cec565b60008181526002602052604080822080546001600160f81b0316600160f81b1790555182917fdd0f1f4e105bf96c7d8e2defcbbc958075661165b324633175ca26f08a11f4b491a26104e981610513565b50565b6002602052600090815260409020546001600160f81b03811690600160f81b900460ff1682565b61051b61583c565b506000818152600260209081526040918290208251808401909352546001600160f81b0381168352600160f81b900460ff1615159082018190526105715760405162461bcd60e51b815260040161038a90615b97565b6105796157e9565b61058283610343565b9050600061058f82614c2e565b9050600160f81b81106105b45760405162461bcd60e51b815260040161038a90615d4e565b604082810180516000908152600260205282902080546001600160f81b0319166001600160f81b0385161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c390610611908490615e74565b60405180910390a250505050565b670de0b6b3a764000081565b6001546001600160a01b031633146106555760405162461bcd60e51b815260040161038a90615a8f565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000546001600160a01b031633146106d65760405162461bcd60e51b815260040161038a90615b00565b600081815260026020526040902054600160f81b900460ff1661070b5760405162461bcd60e51b815260040161038a90615c73565b60008181526002602052604080822080546001600160f81b031690555182917f5a1062b4c89c41b46f5e2da710d564c88989bfe1b4e856dbdbc40c5c59a2ce4b91a250565b6107586157e9565b7f000000000000000000000000000000000000000000000000000000000000001582106107975760405162461bcd60e51b815260040161038a90615b67565b8161095a576040518061014001604052807f0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed56001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017faaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff481526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561087e57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b031681526020017f000000000000000000000000264bddfd9d93d48d759fbdb0670be1c6fdd502366001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000115158152509050610393565b8160011415610b21576040518061014001604052807f0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e36436001600160a01b031681526020017f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b031681526020017fa5e92f3efb6826155f1f728e162af9d7cda33a574a1153b58f03ea01cc37e56881526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115610a4557fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000a478c2975ab1ea89e8196811f51a7b7ade33eb116001600160a01b031681526020017f000000000000000000000000b2419f587f497cdd64437f1b367e2e80889631ea6001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160021415610ce8576040518061014001604052807f00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e75636001600160a01b031681526020017f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b031681526020017fd6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa81526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000016002811115610c0c57fe5b81526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000181526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160031415610eaf576040518061014001604052807f000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc96001600160a01b031681526020017f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b031681526020017f8b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d081526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000016002811115610dd357fe5b81526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000181526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160041415611076576040518061014001604052807f000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a6001600160a01b031681526020017f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5996001600160a01b031681526020017fe98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e981526020017f0000000000000000000000000000000000000000000000000000000005f5e10081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115610f9a57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9406001600160a01b031681526020017f0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e6001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b816005141561123d576040518061014001604052807f0000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e6001600160a01b031681526020017f0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef6001600160a01b031681526020017f3ec6762bdf44eb044276fec7d12c1bb640cb139cfd533f93eeebba5414f5db5581526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561116157fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000b6909b960dbbe7392d405429eb2b3649752b48386001600160a01b031681526020017f000000000000000000000000eba6f33730b9751a8ba0b18d9c256093e82f6bc26001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160061415611404576040518061014001604052807f000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d4076001600160a01b031681526020017f000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f4986001600160a01b031681526020017fb8612e326dd19fc983e73ae3bc23fa1c78a3e01478574fa7ceb5b57e589dcebd81526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561132857fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000c6f348dd3b91a56d117ec0071c1e9b83c0996de46001600160a01b031681526020017f0000000000000000000000005c5db112c98dbe5977a4c37ad33f8a4c9ebd55756001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000115158152509050610393565b81600714156115cb576040518061014001604052807f000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c16001600160a01b031681526020017f0000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e8626001600160a01b031681526020017f91a08135082b0a28b4ad8ecc7749a009e0408743a9d1cdf34dd6a58d60ee950481526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f000000000000000000000000000000000000000000000000000000000000000260028111156114ef57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000008979a3ef9d540480342ac0f56e9d4c88807b1cba6001600160a01b031681526020017f00000000000000000000000090655316479383795416b615b61282c72d8382c16001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160081415611792576040518061014001604052807f000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc6001600160a01b031681526020017f00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603596001600160a01b031681526020017f4dcbfd8d7239a822743634e138b90febafc5720cec2dbdc6a0e5a2118ba2c53281526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f000000000000000000000000000000000000000000000000000000000000000060028111156116b657fe5b81526020017f0000000000000000000000000000000000000000000000000012c6adf3a3500081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000181526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160091415611959576040518061014001604052807f00000000000000000000000035a18000230da775cac24873d00ff85bccded5506001600160a01b031681526020017f0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9846001600160a01b031681526020017ffba01d52a7cd84480d0573725899486a0b5e55c20ff45d6628874349375d165081526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561187d57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000d3d2e2692501a5c9ca623199d38826e513033a176001600160a01b031681526020017f00000000000000000000000070f4d236fd678c9db41a52d28f90e299676d9d906001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600a1415611b20576040518061014001604052807f00000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e46001600160a01b031681526020017f000000000000000000000000c00e94cb662c3520282e6f5717214004a7f268886001600160a01b031681526020017fb6dbcaeee318e11fe1e87d4af04bdd7b4d6a3f13307225dc7ee72f7c085ab45481526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115611a4457fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000cffdded873554f362ac02f8fb1f02e5ada10516f6001600160a01b031681526020017f000000000000000000000000e270b8e9d7a7d2a7ee35a45e43d17d56b3e272b16001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600b1415611ce7576040518061014001604052807f000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c76001600160a01b031681526020017f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca6001600160a01b031681526020017f921a3539bcb764c889432630877414523e7fbca00c211bc787aeae69e2e3a77981526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115611c0b57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000a2107fa5b38d9bbd2c461d6edf11b11a50f6b9746001600160a01b031681526020017f000000000000000000000000bcfd9b1a97ccd0a3942f0408350cdc281cdca1b16001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600c1415611eae576040518061014001604052807f00000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad866001600160a01b031681526020017f0000000000000000000000000000000000085d4780b73119b644ae5ecd22b3766001600160a01b031681526020017fa1b8d8f7e538bb573797c963eeeed40d0bcb9f28c56104417d0da1b372ae305181526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000016002811115611dd257fe5b81526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000181526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600d1415612075576040518061014001604052807f000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c6001600160a01b031681526020017f0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae96001600160a01b031681526020017fde46fbfa339d54cd65b79d8320a7a53c78177565c2aaf4c8b13eed7865e7cfc881526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115611f9957fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000dfc14d2af169b0d36c4eff567ada9b2e0cae044f6001600160a01b031681526020017f0000000000000000000000000238247e71ad0ab272203af13baea72e99ee7c3c6001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600e141561223c576040518061014001604052807f0000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d76001600160a01b031681526020017f0000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe26001600160a01b031681526020017fbbf304add43db0a05d104474683215530b076be1dfdf72a4d53a1e443d8e4c2181526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561216057fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000ce84867c3c02b05dc570d0135103d3fb9cc194336001600160a01b031681526020017f000000000000000000000000875aca7030b75b5d8cb59c913910a7405337dff76001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81600f1415612403576040518061014001604052807f00000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b6001600160a01b031681526020017f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a26001600160a01b031681526020017fec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd638122219202081526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000002600281111561232757fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000c2adda861f89bbb333c90c492cb837741916a2256001600160a01b031681526020017f000000000000000000000000ba895504a8e286691e7dacfb47ae8a3a737e2ce16001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b81601014156125ca576040518061014001604052807f00000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c339466001600160a01b031681526020017f0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e6001600160a01b031681526020017fec34391362c28ee226b3b8624a699ee507a40fa771fd01d38b03ac7b70998bbe81526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f000000000000000000000000000000000000000000000000000000000000000260028111156124ee57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000002fdbadf3c4d5a8666bc06645b8358ab803996e286001600160a01b031681526020017f000000000000000000000000ba4319741782151d2b1df4799d757892efda41656001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160111415612791576040518061014001604052807f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f46001600160a01b031681526020017f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5996001600160a01b031681526020017fe98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e981526020017f0000000000000000000000000000000000000000000000000000000005f5e10081526020017f000000000000000000000000000000000000000000000000000000000000000260028111156126b557fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9406001600160a01b031681526020017f0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e6001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160121415612958576040518061014001604052807f000000000000000000000000041171993284df560249b57358f931d9eb7b925d6001600160a01b031681526020017f0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e16001600160a01b031681526020017fe6ce7ecb96a43fc15fb4020f93c37885612803dd74366bb6815e4f607ac3ca2081526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f0000000000000000000000000000000000000000000000000000000000000001600281111561287c57fe5b81526020017f00000000000000000000000000000000000000000000000000000000000f424081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000181526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160131415612b1f576040518061014001604052807f0000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f676001600160a01b031681526020017f000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca6001600160a01b031681526020017f58c46f3a00a69ae5a5ce163895c14f8f5b7791333af9fe6e7a73618cb546091381526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115612a4357fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a8786001600160a01b031681526020017f000000000000000000000000de2fa230d4c05ec0337d7b4fc10e16f5663044b06001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160141415612ce6576040518061014001604052807f000000000000000000000000944dd1c7ce133b75880cee913d513f8c073123936001600160a01b031681526020017f0000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb06001600160a01b031681526020017fa6a7de01e8b7ba6a4a61c782a73188d808fc1f3cf5743fadb68a02ed884b594f81526020017f0000000000000000000000000000000000000000000000000de0b6b3a764000081526020017f00000000000000000000000000000000000000000000000000000000000000026002811115612c0a57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000819f3450da6f110ba6ea52195b3beafa246062de6001600160a01b031681526020017f00000000000000000000000044750a79ae69d5e9bc1651e099dffe1fb8611aba6001600160a01b031681526020017f000000000000000000000000000000000000000000000000002386f26fc1000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160151415612ead576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612dd157fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160161415613074576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006002811115612f9857fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b816017141561323b576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561315f57fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b8160181415610393576040518061014001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f0000000000000000000000000000000000000000000000000000000000000000600281111561332657fe5b81526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000015158152509050610393565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000001581565b7f0000000000000000000000000000000000000000000000000bcbce7f1b15000081565b6134616157e9565b600061346c83614cb7565b905060001981146134805761036a81610750565b6134f4836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156134bc57600080fd5b505afa1580156134d0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020b919061589b565b9392505050565b60006135056157e9565b61350e336103f9565b9050600061351c828561532b565b9050600061352983614c2e565b905061353361583c565b50604083810151600090815260026020908152908290208251808401909352546001600160f81b0381168352600160f81b900460ff161580159183019190915261360457600160f81b821061359a5760405162461bcd60e51b815260040161038a90615d4e565b604084810180516000908152600260205282902080546001600160f81b0319166001600160f81b0386161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c3906135f7908590615e74565b60405180910390a26136e3565b61360e8383615379565b156136a457600160f81b83106136365760405162461bcd60e51b815260040161038a90615bce565b604084810180516000908152600260205282902080546001600160f81b0319166001600160f81b0387161790555190517f46eec4e0eeeef5830de3472bb39db7e52b1c809286dc87c4b85b20e003cc70c390613693908690615e74565b60405180910390a2600194506136e3565b83604001517f6b871468876a51b1609c5e5fc5c6f57c7e9a66aba8ad5a41ed4a5b2b50d7d1f684846040516136da929190615e7d565b60405180910390a25b50505050949350505050565b601981565b7f000000000000000000000000000000000000000000000000000000000000070881565b6004602052600090815260409020805460019091015482565b6000546001600160a01b0316331461375b5760405162461bcd60e51b815260040161038a90615b00565b6001600160a01b0381163314156137845760405162461bcd60e51b815260040161038a90615d17565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006137df6157e9565b6137e883613459565b9050806060015161380e6c0c9f2c9cd04674edea4000000061380984615401565b615501565b8161381557fe5b049392505050565b60006138276157e9565b613830836103bc565b90506134f481615401565b600080600061384861553b565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561388357600080fd5b505afa158015613897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138bb91906159be565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b1580156138f657600080fd5b505afa15801561390a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392e91906159be565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561396e57600080fd5b505afa158015613982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a6919061596a565b9250925092508363ffffffff168163ffffffff1614613a065780840363ffffffff81166139d38486613a10565b516001600160e01b031602969096019563ffffffff81166139f48585613a10565b516001600160e01b0316029590950194505b5050509193909250565b613a18615853565b6000826001600160701b031611613a415760405162461bcd60e51b815260040161038a90615d7e565b6040805160208101909152806001600160701b0384166dffffffffffffffffffffffffffff60701b607087901b1681613a7657fe5b046001600160e01b0316815250905092915050565b60007faaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4821415613abd57506000610393565b7fa5e92f3efb6826155f1f728e162af9d7cda33a574a1153b58f03ea01cc37e568821415613aed57506001610393565b7fd6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa821415613b1d57506002610393565b7f8b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d0821415613b4d57506003610393565b7fe98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e9821415613b7d57506004610393565b7f3ec6762bdf44eb044276fec7d12c1bb640cb139cfd533f93eeebba5414f5db55821415613bad57506005610393565b7fb8612e326dd19fc983e73ae3bc23fa1c78a3e01478574fa7ceb5b57e589dcebd821415613bdd57506006610393565b7f91a08135082b0a28b4ad8ecc7749a009e0408743a9d1cdf34dd6a58d60ee9504821415613c0d57506007610393565b7f4dcbfd8d7239a822743634e138b90febafc5720cec2dbdc6a0e5a2118ba2c532821415613c3d57506008610393565b7ffba01d52a7cd84480d0573725899486a0b5e55c20ff45d6628874349375d1650821415613c6d57506009610393565b7fb6dbcaeee318e11fe1e87d4af04bdd7b4d6a3f13307225dc7ee72f7c085ab454821415613c9d5750600a610393565b7f921a3539bcb764c889432630877414523e7fbca00c211bc787aeae69e2e3a779821415613ccd5750600b610393565b7fa1b8d8f7e538bb573797c963eeeed40d0bcb9f28c56104417d0da1b372ae3051821415613cfd5750600c610393565b7fde46fbfa339d54cd65b79d8320a7a53c78177565c2aaf4c8b13eed7865e7cfc8821415613d2d5750600d610393565b7fbbf304add43db0a05d104474683215530b076be1dfdf72a4d53a1e443d8e4c21821415613d5d5750600e610393565b7fec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd6381222192020821415613d8d5750600f610393565b7fec34391362c28ee226b3b8624a699ee507a40fa771fd01d38b03ac7b70998bbe821415613dbd57506010610393565b7fe98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e9821415613ded57506011610393565b7fe6ce7ecb96a43fc15fb4020f93c37885612803dd74366bb6815e4f607ac3ca20821415613e1d57506012610393565b7f58c46f3a00a69ae5a5ce163895c14f8f5b7791333af9fe6e7a73618cb5460913821415613e4d57506013610393565b7fa6a7de01e8b7ba6a4a61c782a73188d808fc1f3cf5743fadb68a02ed884b594f821415613e7d57506014610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613ead57506015610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613edd57506016610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613f0d57506017610393565b7f0000000000000000000000000000000000000000000000000000000000000000821415613f3d57506018610393565b50600019919050565b60007f000000000000000000000000264bddfd9d93d48d759fbdb0670be1c6fdd502366001600160a01b0316826001600160a01b03161415613f8a57506000610393565b7f000000000000000000000000b2419f587f497cdd64437f1b367e2e80889631ea6001600160a01b0316826001600160a01b03161415613fcc57506001610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561400e57506002610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561405057506003610393565b7f0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e6001600160a01b0316826001600160a01b0316141561409257506004610393565b7f000000000000000000000000eba6f33730b9751a8ba0b18d9c256093e82f6bc26001600160a01b0316826001600160a01b031614156140d457506005610393565b7f0000000000000000000000005c5db112c98dbe5977a4c37ad33f8a4c9ebd55756001600160a01b0316826001600160a01b0316141561411657506006610393565b7f00000000000000000000000090655316479383795416b615b61282c72d8382c16001600160a01b0316826001600160a01b0316141561415857506007610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561419a57506008610393565b7f00000000000000000000000070f4d236fd678c9db41a52d28f90e299676d9d906001600160a01b0316826001600160a01b031614156141dc57506009610393565b7f000000000000000000000000e270b8e9d7a7d2a7ee35a45e43d17d56b3e272b16001600160a01b0316826001600160a01b0316141561421e5750600a610393565b7f000000000000000000000000bcfd9b1a97ccd0a3942f0408350cdc281cdca1b16001600160a01b0316826001600160a01b031614156142605750600b610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156142a25750600c610393565b7f0000000000000000000000000238247e71ad0ab272203af13baea72e99ee7c3c6001600160a01b0316826001600160a01b031614156142e45750600d610393565b7f000000000000000000000000875aca7030b75b5d8cb59c913910a7405337dff76001600160a01b0316826001600160a01b031614156143265750600e610393565b7f000000000000000000000000ba895504a8e286691e7dacfb47ae8a3a737e2ce16001600160a01b0316826001600160a01b031614156143685750600f610393565b7f000000000000000000000000ba4319741782151d2b1df4799d757892efda41656001600160a01b0316826001600160a01b031614156143aa57506010610393565b7f0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e6001600160a01b0316826001600160a01b031614156143ec57506011610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561442e57506012610393565b7f000000000000000000000000de2fa230d4c05ec0337d7b4fc10e16f5663044b06001600160a01b0316826001600160a01b0316141561447057506013610393565b7f00000000000000000000000044750a79ae69d5e9bc1651e099dffe1fb8611aba6001600160a01b0316826001600160a01b031614156144b257506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156144f457506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561453657506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561457857506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156145fe57506000610393565b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b0316826001600160a01b0316141561464057506001610393565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b0316826001600160a01b0316141561468257506002610393565b7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b0316826001600160a01b031614156146c457506003610393565b7f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5996001600160a01b0316826001600160a01b0316141561470657506004610393565b7f0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef6001600160a01b0316826001600160a01b0316141561474857506005610393565b7f000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f4986001600160a01b0316826001600160a01b0316141561478a57506006610393565b7f0000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e8626001600160a01b0316826001600160a01b031614156147cc57506007610393565b7f00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603596001600160a01b0316826001600160a01b0316141561480e57506008610393565b7f0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f9846001600160a01b0316826001600160a01b0316141561485057506009610393565b7f000000000000000000000000c00e94cb662c3520282e6f5717214004a7f268886001600160a01b0316826001600160a01b031614156148925750600a610393565b7f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca6001600160a01b0316826001600160a01b031614156148d45750600b610393565b7f0000000000000000000000000000000000085d4780b73119b644ae5ecd22b3766001600160a01b0316826001600160a01b031614156149165750600c610393565b7f0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae96001600160a01b0316826001600160a01b031614156149585750600d610393565b7f0000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe26001600160a01b0316826001600160a01b0316141561499a5750600e610393565b7f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a26001600160a01b0316826001600160a01b031614156149dc5750600f610393565b7f0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e6001600160a01b0316826001600160a01b03161415614a1e57506010610393565b7f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5996001600160a01b0316826001600160a01b03161415614a6057506011610393565b7f0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e16001600160a01b0316826001600160a01b03161415614aa257506012610393565b7f000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca6001600160a01b0316826001600160a01b03161415614ae457506013610393565b7f0000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb06001600160a01b0316826001600160a01b03161415614b2657506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614b6857506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614baa57506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415614bec57506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b600080614c39615545565b9050600283608001516002811115614c4d57fe5b14614c6a5760405162461bcd60e51b815260040161038a90615c05565b604051602001614c7990615a61565b6040516020818303038152906040528051906020012083604001511415614ca257809150614cb1565b6134f483604001518483615594565b50919050565b60007f0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed56001600160a01b0316826001600160a01b03161415614cfb57506000610393565b7f0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e36436001600160a01b0316826001600160a01b03161415614d3d57506001610393565b7f00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e75636001600160a01b0316826001600160a01b03161415614d7f57506002610393565b7f000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc96001600160a01b0316826001600160a01b03161415614dc157506003610393565b7f000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a6001600160a01b0316826001600160a01b03161415614e0357506004610393565b7f0000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e6001600160a01b0316826001600160a01b03161415614e4557506005610393565b7f000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d4076001600160a01b0316826001600160a01b03161415614e8757506006610393565b7f000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c16001600160a01b0316826001600160a01b03161415614ec957506007610393565b7f000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc6001600160a01b0316826001600160a01b03161415614f0b57506008610393565b7f00000000000000000000000035a18000230da775cac24873d00ff85bccded5506001600160a01b0316826001600160a01b03161415614f4d57506009610393565b7f00000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e46001600160a01b0316826001600160a01b03161415614f8f5750600a610393565b7f000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c76001600160a01b0316826001600160a01b03161415614fd15750600b610393565b7f00000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad866001600160a01b0316826001600160a01b031614156150135750600c610393565b7f000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c6001600160a01b0316826001600160a01b031614156150555750600d610393565b7f0000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d76001600160a01b0316826001600160a01b031614156150975750600e610393565b7f00000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b6001600160a01b0316826001600160a01b031614156150d95750600f610393565b7f00000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c339466001600160a01b0316826001600160a01b0316141561511b57506010610393565b7f000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f46001600160a01b0316826001600160a01b0316141561515d57506011610393565b7f000000000000000000000000041171993284df560249b57358f931d9eb7b925d6001600160a01b0316826001600160a01b0316141561519f57506012610393565b7f0000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f676001600160a01b0316826001600160a01b031614156151e157506013610393565b7f000000000000000000000000944dd1c7ce133b75880cee913d513f8c073123936001600160a01b0316826001600160a01b0316141561522357506014610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561526557506015610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156152a757506016610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156152e957506017610393565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415613f3d57506018610393565b60008082121561534d5760405162461bcd60e51b815260040161038a90615abf565b60008290506000846060015161536883876101000151615501565b8161536f57fe5b0495945050505050565b600082156153f85760008361539684670de0b6b3a7640000615501565b8161539d57fe5b0490507f0000000000000000000000000000000000000000000000000ff59ee833b3000081111580156153f057507f0000000000000000000000000000000000000000000000000bcbce7f1b1500008110155b9150506103f3565b50600092915050565b600060028260800151600281111561541557fe5b141561543c57506040808201516000908152600260205220546001600160f81b0316610393565b60018260800151600281111561544e57fe5b141561545f575060a0810151610393565b60008260800151600281111561547157fe5b14156103935760006002600060405160200161548c90615a61565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160f81b03169050806154da5760405162461bcd60e51b815260040161038a90615ca0565b670de0b6b3a76400006154f1828560a00151615501565b816154f857fe5b04915050610393565b600082615510575060006103f3565b8282028284828161551d57fe5b04146134f45760405162461bcd60e51b815260040161038a90615b30565b63ffffffff421690565b600061558f60405160200161555990615a61565b604051602081830303815290604052805190602001206155816040516020016103d890615a61565b670de0b6b3a7640000615594565b905090565b6000806000806155a38661568b565b9250925092508042116155c85760405162461bcd60e51b815260040161038a90615c3c565b428190036155d4615853565b604051806020016040528083868803816155ea57fe5b046001600160e01b0316815250905060006156048261579e565b90506000615612828a615501565b90506000670de0b6b3a76400008061562e848e60600151615501565b8161563557fe5b048161563d57fe5b0490508b7fac9b6bb0c67df7ef0d18e58e4bd539c4d6f780c4c8f341cd8e649109edeb5faf82884260405161567493929190615e8b565b60405180910390a29b9a5050505050505050505050565b6000806000808460400151905060006156a3866157b6565b90506156ad615865565b50600082815260046020908152604091829020825180840190935280548084526001909101549183019190915242037f00000000000000000000000000000000000000000000000000000000000007088110615779578151600085815260036020908152604080832093845581860180516001958601556004909252918290204280825593018690558a82015185519151925190937fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a9361577093928990615ea1565b60405180910390a25b5050600091825260036020526040909120600181015490549196909550909350915050565b516612725dd1d243ab6001600160e01b039091160490565b60008060006157c88460c0015161383b565b5091509150836101200151156157e15791506103939050565b509050610393565b604080516101408101825260008082526020820181905291810182905260608101829052906080820190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604080518082019091526000808252602082015290565b60408051602081019091526000815290565b604051806040016040528060008152602001600081525090565b600060208284031215615890578081fd5b81356134f481615ec8565b6000602082840312156158ac578081fd5b81516134f481615ec8565b6000602082840312156158c8578081fd5b5035919050565b6000602082840312156158e0578081fd5b813567ffffffffffffffff808211156158f7578283fd5b818401915084601f83011261590a578283fd5b813581811115615918578384fd5b604051601f8201601f191681016020018381118282101715615938578586fd5b60405281815283820160200187101561594f578485fd5b615960826020830160208701615ebc565b9695505050505050565b60008060006060848603121561597e578182fd5b835161598981615edd565b602085015190935061599a81615edd565b604085015190925063ffffffff811681146159b3578182fd5b809150509250925092565b6000602082840312156159cf578081fd5b5051919050565b600080600080608085870312156159eb578081fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b03169052565b15159052565b60038110615a2457fe5b9052565b60008251815b81811015615a485760208186018101518583015201615a2e565b81811115615a565782828501525b509190910192915050565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b901515815260200190565b60208082526016908201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b604082015260600190565b60208082526021908201527f5265706f727465642070726963652063616e6e6f74206265206e6567617469766040820152606560f81b606082015260800190565b60208082526016908201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b604082015260600190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526017908201527f4661696c6f766572206d75737420626520616374697665000000000000000000604082015260600190565b60208082526018908201527f5265706f7274656420707269636520746f6f206c617267650000000000000000604082015260600190565b6020808252601f908201527f6f6e6c79207265706f72746572207072696365732067657420706f7374656400604082015260600190565b6020808252601a908201527f6e6f77206d75737420636f6d65206166746572206265666f7265000000000000604082015260600190565b602080825260139082015272105b1c9958591e4819195858dd1a5d985d1959606a1b604082015260600190565b6020808252602c908201527f455448207072696365206e6f74207365742c2063616e6e6f7420636f6e76657260408201526b7420746f20646f6c6c61727360a01b606082015260800190565b602080825260119082015270105b1c9958591e481858dd1a5d985d1959607a1b604082015260600190565b60208082526017908201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604082015260600190565b602080825260169082015275416e63686f7220707269636520746f6f206c6172676560501b604082015260600190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b600061014082019050615dc9828451615a07565b6020830151615ddb6020840182615a07565b5060408301516040830152606083015160608301526080830151615e026080840182615a1a565b5060a083015160a083015260c0830151615e1f60c0840182615a07565b5060e0830151615e3260e0840182615a07565b50610100838101519083015261012080840151615e5182850182615a14565b505092915050565b6001600160f81b039290921682521515602082015260400190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b82818337506000910152565b6001600160a01b03811681146104e957600080fd5b6001600160701b03811681146104e957600080fdfea2646970667358221220102ccdcdda4f5b3d875e6c0f95e4e59a20551e3e318650da1da8654188ef57cd64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000214e8348c4f00000000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000150000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000000000000000000000000000000000000000000000aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc000000000000000000000000264bddfd9d93d48d759fbdb0670be1c6fdd50236000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e36430000000000000000000000006b175474e89094c44da98b954eedeac495271d0fa5e92f3efb6826155f1f728e162af9d7cda33a574a1153b58f03ea01cc37e5680000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a478c2975ab1ea89e8196811f51a7b7ade33eb11000000000000000000000000b2419f587f497cdd64437f1b367e2e80889631ea000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48d6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec78b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e90000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9400000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef3ec6762bdf44eb044276fec7d12c1bb640cb139cfd533f93eeebba5414f5db550000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b6909b960dbbe7392d405429eb2b3649752b4838000000000000000000000000eba6f33730b9751a8ba0b18d9c256093e82f6bc2000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498b8612e326dd19fc983e73ae3bc23fa1c78a3e01478574fa7ceb5b57e589dcebd0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6f348dd3b91a56d117ec0071c1e9b83c0996de40000000000000000000000005c5db112c98dbe5977a4c37ad33f8a4c9ebd5575000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c10000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e86291a08135082b0a28b4ad8ecc7749a009e0408743a9d1cdf34dd6a58d60ee95040000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000008979a3ef9d540480342ac0f56e9d4c88807b1cba00000000000000000000000090655316479383795416b615b61282c72d8382c1000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603594dcbfd8d7239a822743634e138b90febafc5720cec2dbdc6a0e5a2118ba2c5320000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012c6adf3a35000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035a18000230da775cac24873d00ff85bccded5500000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984fba01d52a7cd84480d0573725899486a0b5e55c20ff45d6628874349375d16500000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3d2e2692501a5c9ca623199d38826e513033a1700000000000000000000000070f4d236fd678c9db41a52d28f90e299676d9d90000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e4000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888b6dbcaeee318e11fe1e87d4af04bdd7b4d6a3f13307225dc7ee72f7c085ab4540000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cffdded873554f362ac02f8fb1f02e5ada10516f000000000000000000000000e270b8e9d7a7d2a7ee35a45e43d17d56b3e272b1000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c7000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca921a3539bcb764c889432630877414523e7fbca00c211bc787aeae69e2e3a7790000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2107fa5b38d9bbd2c461d6edf11b11a50f6b974000000000000000000000000bcfd9b1a97ccd0a3942f0408350cdc281cdca1b1000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad860000000000000000000000000000000000085d4780b73119b644ae5ecd22b376a1b8d8f7e538bb573797c963eeeed40d0bcb9f28c56104417d0da1b372ae30510000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9de46fbfa339d54cd65b79d8320a7a53c78177565c2aaf4c8b13eed7865e7cfc80000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dfc14d2af169b0d36c4eff567ada9b2e0cae044f0000000000000000000000000238247e71ad0ab272203af13baea72e99ee7c3c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d70000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2bbf304add43db0a05d104474683215530b076be1dfdf72a4d53a1e443d8e4c210000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce84867c3c02b05dc570d0135103d3fb9cc19433000000000000000000000000875aca7030b75b5d8cb59c913910a7405337dff7000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2ec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd63812221920200000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2adda861f89bbb333c90c492cb837741916a225000000000000000000000000ba895504a8e286691e7dacfb47ae8a3a737e2ce1000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c339460000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93eec34391362c28ee226b3b8624a699ee507a40fa771fd01d38b03ac7b70998bbe0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fdbadf3c4d5a8666bc06645b8358ab803996e28000000000000000000000000ba4319741782151d2b1df4799d757892efda4165000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f40000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e90000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d9400000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041171993284df560249b57358f931d9eb7b925d0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1e6ce7ecb96a43fc15fb4020f93c37885612803dd74366bb6815e4f607ac3ca200000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f67000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca58c46f3a00a69ae5a5ce163895c14f8f5b7791333af9fe6e7a73618cb54609130000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878000000000000000000000000de2fa230d4c05ec0337d7b4fc10e16f5663044b0000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000944dd1c7ce133b75880cee913d513f8c073123930000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb0a6a7de01e8b7ba6a4a61c782a73188d808fc1f3cf5743fadb68a02ed884b594f0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000819f3450da6f110ba6ea52195b3beafa246062de00000000000000000000000044750a79ae69d5e9bc1651e099dffe1fb8611aba000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : anchorToleranceMantissa_ (uint256): 150000000000000000
Arg [1] : anchorPeriod_ (uint256): 1800
Arg [2] : configs (tuple[]): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
214 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000214e8348c4f0000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000708
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [4] : 0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed5
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4
Arg [7] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc
Arg [11] : 000000000000000000000000264bddfd9d93d48d759fbdb0670be1c6fdd50236
Arg [12] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [14] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Arg [15] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [16] : a5e92f3efb6826155f1f728e162af9d7cda33a574a1153b58f03ea01cc37e568
Arg [17] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 000000000000000000000000a478c2975ab1ea89e8196811f51a7b7ade33eb11
Arg [21] : 000000000000000000000000b2419f587f497cdd64437f1b367e2e80889631ea
Arg [22] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [24] : 00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563
Arg [25] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [26] : d6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa
Arg [27] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [28] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [29] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [30] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [33] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [34] : 000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9
Arg [35] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [36] : 8b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d0
Arg [37] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [38] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [39] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [40] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [41] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [42] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [43] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [44] : 000000000000000000000000ccf4429db6322d5c611ee964527d42e5d685dd6a
Arg [45] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [46] : e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e9
Arg [47] : 0000000000000000000000000000000000000000000000000000000005f5e100
Arg [48] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [49] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [50] : 000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d940
Arg [51] : 0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e
Arg [52] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [53] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [54] : 0000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e
Arg [55] : 0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef
Arg [56] : 3ec6762bdf44eb044276fec7d12c1bb640cb139cfd533f93eeebba5414f5db55
Arg [57] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [58] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [59] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [60] : 000000000000000000000000b6909b960dbbe7392d405429eb2b3649752b4838
Arg [61] : 000000000000000000000000eba6f33730b9751a8ba0b18d9c256093e82f6bc2
Arg [62] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [63] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [64] : 000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407
Arg [65] : 000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498
Arg [66] : b8612e326dd19fc983e73ae3bc23fa1c78a3e01478574fa7ceb5b57e589dcebd
Arg [67] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [68] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [69] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [70] : 000000000000000000000000c6f348dd3b91a56d117ec0071c1e9b83c0996de4
Arg [71] : 0000000000000000000000005c5db112c98dbe5977a4c37ad33f8a4c9ebd5575
Arg [72] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [73] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [74] : 000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1
Arg [75] : 0000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e862
Arg [76] : 91a08135082b0a28b4ad8ecc7749a009e0408743a9d1cdf34dd6a58d60ee9504
Arg [77] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [78] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [79] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [80] : 0000000000000000000000008979a3ef9d540480342ac0f56e9d4c88807b1cba
Arg [81] : 00000000000000000000000090655316479383795416b615b61282c72d8382c1
Arg [82] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [83] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [84] : 000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc
Arg [85] : 00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a23260359
Arg [86] : 4dcbfd8d7239a822743634e138b90febafc5720cec2dbdc6a0e5a2118ba2c532
Arg [87] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [88] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [89] : 0000000000000000000000000000000000000000000000000012c6adf3a35000
Arg [90] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [91] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [92] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [93] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [94] : 00000000000000000000000035a18000230da775cac24873d00ff85bccded550
Arg [95] : 0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984
Arg [96] : fba01d52a7cd84480d0573725899486a0b5e55c20ff45d6628874349375d1650
Arg [97] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [98] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [99] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [100] : 000000000000000000000000d3d2e2692501a5c9ca623199d38826e513033a17
Arg [101] : 00000000000000000000000070f4d236fd678c9db41a52d28f90e299676d9d90
Arg [102] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [103] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [104] : 00000000000000000000000070e36f6bf80a52b3b46b3af8e106cc0ed743e8e4
Arg [105] : 000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888
Arg [106] : b6dbcaeee318e11fe1e87d4af04bdd7b4d6a3f13307225dc7ee72f7c085ab454
Arg [107] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [108] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [109] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [110] : 000000000000000000000000cffdded873554f362ac02f8fb1f02e5ada10516f
Arg [111] : 000000000000000000000000e270b8e9d7a7d2a7ee35a45e43d17d56b3e272b1
Arg [112] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [113] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [114] : 000000000000000000000000face851a4921ce59e912d19329929ce6da6eb0c7
Arg [115] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [116] : 921a3539bcb764c889432630877414523e7fbca00c211bc787aeae69e2e3a779
Arg [117] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [118] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [119] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [120] : 000000000000000000000000a2107fa5b38d9bbd2c461d6edf11b11a50f6b974
Arg [121] : 000000000000000000000000bcfd9b1a97ccd0a3942f0408350cdc281cdca1b1
Arg [122] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [123] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [124] : 00000000000000000000000012392f67bdf24fae0af363c24ac620a2f67dad86
Arg [125] : 0000000000000000000000000000000000085d4780b73119b644ae5ecd22b376
Arg [126] : a1b8d8f7e538bb573797c963eeeed40d0bcb9f28c56104417d0da1b372ae3051
Arg [127] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [128] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [129] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [130] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [131] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [132] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [133] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [134] : 000000000000000000000000e65cdb6479bac1e22340e4e755fae7e509ecd06c
Arg [135] : 0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9
Arg [136] : de46fbfa339d54cd65b79d8320a7a53c78177565c2aaf4c8b13eed7865e7cfc8
Arg [137] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [138] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [139] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [140] : 000000000000000000000000dfc14d2af169b0d36c4eff567ada9b2e0cae044f
Arg [141] : 0000000000000000000000000238247e71ad0ab272203af13baea72e99ee7c3c
Arg [142] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [143] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [144] : 0000000000000000000000004b0181102a0112a2ef11abee5563bb4a3176c9d7
Arg [145] : 0000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2
Arg [146] : bbf304add43db0a05d104474683215530b076be1dfdf72a4d53a1e443d8e4c21
Arg [147] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [148] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [149] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [150] : 000000000000000000000000ce84867c3c02b05dc570d0135103d3fb9cc19433
Arg [151] : 000000000000000000000000875aca7030b75b5d8cb59c913910a7405337dff7
Arg [152] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [153] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [154] : 00000000000000000000000095b4ef2869ebd94beb4eee400a99824bf5dc325b
Arg [155] : 0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2
Arg [156] : ec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd6381222192020
Arg [157] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [158] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [159] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [160] : 000000000000000000000000c2adda861f89bbb333c90c492cb837741916a225
Arg [161] : 000000000000000000000000ba895504a8e286691e7dacfb47ae8a3a737e2ce1
Arg [162] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [163] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [164] : 00000000000000000000000080a2ae356fc9ef4305676f7a3e2ed04e12c33946
Arg [165] : 0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e
Arg [166] : ec34391362c28ee226b3b8624a699ee507a40fa771fd01d38b03ac7b70998bbe
Arg [167] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [168] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [169] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [170] : 0000000000000000000000002fdbadf3c4d5a8666bc06645b8358ab803996e28
Arg [171] : 000000000000000000000000ba4319741782151d2b1df4799d757892efda4165
Arg [172] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [173] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [174] : 000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4
Arg [175] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [176] : e98e2830be1a7e4156d656a7505e65d08c67660dc618072422e9c78053c261e9
Arg [177] : 0000000000000000000000000000000000000000000000000000000005f5e100
Arg [178] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [179] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [180] : 000000000000000000000000bb2b8038a1640196fbe3e38816f3e67cba72d940
Arg [181] : 0000000000000000000000004846efc15cc725456597044e6267ad0b3b51353e
Arg [182] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [183] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [184] : 000000000000000000000000041171993284df560249b57358f931d9eb7b925d
Arg [185] : 0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1
Arg [186] : e6ce7ecb96a43fc15fb4020f93c37885612803dd74366bb6815e4f607ac3ca20
Arg [187] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [188] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [189] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [190] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [191] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [192] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [193] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [194] : 0000000000000000000000007713dd9ca933848f6819f38b8352d9a15ea73f67
Arg [195] : 000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca
Arg [196] : 58c46f3a00a69ae5a5ce163895c14f8f5b7791333af9fe6e7a73618cb5460913
Arg [197] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [198] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [199] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [200] : 00000000000000000000000094b0a3d511b6ecdb17ebf877278ab030acb0a878
Arg [201] : 000000000000000000000000de2fa230d4c05ec0337d7b4fc10e16f5663044b0
Arg [202] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [203] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [204] : 000000000000000000000000944dd1c7ce133b75880cee913d513f8c07312393
Arg [205] : 0000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb0
Arg [206] : a6a7de01e8b7ba6a4a61c782a73188d808fc1f3cf5743fadb68a02ed884b594f
Arg [207] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [208] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [209] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [210] : 000000000000000000000000819f3450da6f110ba6ea52195b3beafa246062de
Arg [211] : 00000000000000000000000044750a79ae69d5e9bc1651e099dffe1fb8611aba
Arg [212] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [213] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
360:15917:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41936:285:3;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;793:43:2;;;:::i;:::-;;;;;;;:::i;41124:182:3:-;;;;;;:::i;:::-;;:::i;41480:277::-;;;;;;:::i;:::-;;:::i;1321:54:2:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;42976:285:3:-;;;;;;:::i;:::-;;:::i;15372:283:2:-;;;;;;:::i;:::-;;:::i;:::-;;1215:43;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;8935:523::-;;;;;;:::i;:::-;;:::i;631:36::-;;;:::i;875:286:1:-;;;:::i;15785:248:2:-;;;;;;:::i;:::-;;:::i;32719:8256:3:-;;;;;;:::i;:::-;;:::i;1218:80:1:-;;;:::i;:::-;;;;;;;:::i;1361:31:3:-;;;:::i;961:43:2:-;;;:::i;42486:299:3:-;;;;;;:::i;:::-;;:::i;7290:1335:2:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1250:35:3:-;;;:::i;1127:34:2:-;;;:::i;1438:54::-;;;;;;:::i;:::-;;:::i;559:218:1:-;;;;;;:::i;:::-;;:::i;6503:558:2:-;;;;;;:::i;:::-;;:::i;5226:179::-;;;;;;:::i;:::-;;:::i;41936:285:3:-;42013:18;;:::i;:::-;42043:10;42056:30;42075:10;42056:18;:30::i;:::-;42043:43;;-1:-1:-1;;42100:5:3;:17;42096:76;;42140:21;42155:5;42140:14;:21::i;:::-;42133:28;;;;;42096:76;42182:32;;-1:-1:-1;;;42182:32:3;;;;;;;:::i;:::-;;;;;;;;41936:285;;;;:::o;793:43:2:-;;;:::o;41124:182:3:-;41199:18;;:::i;:::-;41236:63;41290:6;41273:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;41263:35;;;;;;41236:26;:63::i;:::-;41229:70;41124:182;-1:-1:-1;;41124:182:3:o;41480:277::-;41553:18;;:::i;:::-;41583:10;41596:26;41613:8;41596:16;:26::i;1321:54:2:-;;;;;;;;;;;;;;;;;;;:::o;42976:285:3:-;43053:18;;:::i;:::-;43083:10;43096:30;43115:10;43096:18;:30::i;15372:283:2:-;1445:9:1;;-1:-1:-1;;;;;1445:9:1;1431:10;:23;1423:58;;;;-1:-1:-1;;;1423:58:1;;;;;;;:::i;:::-;15458:18:2::1;::::0;;;:6:::1;:18;::::0;;;;:33;-1:-1:-1;;;15458:33:2;::::1;;;15457:34;15449:64;;;;-1:-1:-1::0;;;15449:64:2::1;;;;;;;:::i;:::-;15523:18;::::0;;;:6:::1;:18;::::0;;;;;:40;;-1:-1:-1;;;;;15523:40:2::1;-1:-1:-1::0;;;15523:40:2::1;::::0;;15578:29;15530:10;;15578:29:::1;::::0;::::1;15617:31;15637:10;15617:19;:31::i;:::-;15372:283:::0;:::o;1215:43::-;;;;;;;;;;;;-1:-1:-1;;;;;1215:43:2;;;-1:-1:-1;;;1215:43:2;;;;;:::o;8935:523::-;9001:26;;:::i;:::-;-1:-1:-1;9030:18:2;;;;:6;:18;;;;;;;;;9001:47;;;;;;;;;-1:-1:-1;;;;;9001:47:2;;;;-1:-1:-1;;;9001:47:2;;;;;;;;;;;;9058:60;;;;-1:-1:-1;;;9058:60:2;;;;;;;:::i;:::-;9128:25;;:::i;:::-;9156:38;9183:10;9156:26;:38::i;:::-;9128:66;;9204:16;9223:40;9256:6;9223:32;:40::i;:::-;9204:59;;-1:-1:-1;;;9281:11:2;:20;9273:55;;;;-1:-1:-1;;;9273:55:2;;;;;;;:::i;:::-;9345:17;;;;;;9338:25;;;;:6;:25;;;;;:54;;-1:-1:-1;;;;;;9338:54:2;-1:-1:-1;;;;;9338:54:2;;;;;9420:17;9407:44;;;;;;9338:54;;9407:44;:::i;:::-;;;;;;;;8935:523;;;;:::o;631:36::-;663:4;631:36;:::o;875:286:1:-;943:16;;-1:-1:-1;;;;;943:16:1;929:10;:30;921:65;;;;-1:-1:-1;;;921:65:1;;;;;;;:::i;:::-;997:16;1016:9;;1047:10;-1:-1:-1;;;;;;1035:22:1;;;;;;;-1:-1:-1;1067:29:1;;;;;;;1112:42;;-1:-1:-1;;;;;1016:9:1;;;;1047:10;;1016:9;;1112:42;;;875:286;:::o;15785:248:2:-;1445:9:1;;-1:-1:-1;;;;;1445:9:1;1431:10;:23;1423:58;;;;-1:-1:-1;;;1423:58:1;;;;;;;:::i;:::-;15872:18:2::1;::::0;;;:6:::1;:18;::::0;;;;:33;-1:-1:-1;;;15872:33:2;::::1;;;15864:65;;;;-1:-1:-1::0;;;15864:65:2::1;;;;;;;:::i;:::-;15975:5;15939:18:::0;;;:6:::1;:18;::::0;;;;;:41;;-1:-1:-1;;;;;15939:41:2::1;::::0;;15995:31;15946:10;;15995:31:::1;::::0;::::1;15785:248:::0;:::o;32719:8256:3:-;32772:18;;:::i;:::-;32814:9;32810:1;:13;32802:48;;;;-1:-1:-1;;;32802:48:3;;;;;;;:::i;:::-;32865:6;32861:314;;32880:295;;;;;;;;32901:8;-1:-1:-1;;;;;32880:295:3;;;;;32923:12;-1:-1:-1;;;;;32880:295:3;;;;;32949:12;32880:295;;;;32973:10;32880:295;;;;32998:13;32880:295;;;;;;;;;;;;33025:12;32880:295;;;;33054:15;-1:-1:-1;;;;;32880:295:3;;;;;33081:10;-1:-1:-1;;;;;32880:295:3;;;;;33113:20;32880:295;;;;33154:19;32880:295;;;;;32873:302;;;;32861:314;33189:1;33194;33189:6;33185:314;;;33204:295;;;;;;;;33225:8;-1:-1:-1;;;;;33204:295:3;;;;;33247:12;-1:-1:-1;;;;;33204:295:3;;;;;33273:12;33204:295;;;;33297:10;33204:295;;;;33322:13;33204:295;;;;;;;;;;;;33349:12;33204:295;;;;33378:15;-1:-1:-1;;;;;33204:295:3;;;;;33405:10;-1:-1:-1;;;;;33204:295:3;;;;;33437:20;33204:295;;;;33478:19;33204:295;;;;;33197:302;;;;33185:314;33513:1;33518;33513:6;33509:314;;;33528:295;;;;;;;;33549:8;-1:-1:-1;;;;;33528:295:3;;;;;33571:12;-1:-1:-1;;;;;33528:295:3;;;;;33597:12;33528:295;;;;33621:10;33528:295;;;;33646:13;33528:295;;;;;;;;;;;;33673:12;33528:295;;;;33702:15;-1:-1:-1;;;;;33528:295:3;;;;;33729:10;-1:-1:-1;;;;;33528:295:3;;;;;33761:20;33528:295;;;;33802:19;33528:295;;;;;33521:302;;;;33509:314;33837:1;33842;33837:6;33833:314;;;33852:295;;;;;;;;33873:8;-1:-1:-1;;;;;33852:295:3;;;;;33895:12;-1:-1:-1;;;;;33852:295:3;;;;;33921:12;33852:295;;;;33945:10;33852:295;;;;33970:13;33852:295;;;;;;;;;;;;33997:12;33852:295;;;;34026:15;-1:-1:-1;;;;;33852:295:3;;;;;34053:10;-1:-1:-1;;;;;33852:295:3;;;;;34085:20;33852:295;;;;34126:19;33852:295;;;;;33845:302;;;;33833:314;34161:1;34166;34161:6;34157:314;;;34176:295;;;;;;;;34197:8;-1:-1:-1;;;;;34176:295:3;;;;;34219:12;-1:-1:-1;;;;;34176:295:3;;;;;34245:12;34176:295;;;;34269:10;34176:295;;;;34294:13;34176:295;;;;;;;;;;;;34321:12;34176:295;;;;34350:15;-1:-1:-1;;;;;34176:295:3;;;;;34377:10;-1:-1:-1;;;;;34176:295:3;;;;;34409:20;34176:295;;;;34450:19;34176:295;;;;;34169:302;;;;34157:314;34485:1;34490;34485:6;34481:314;;;34500:295;;;;;;;;34521:8;-1:-1:-1;;;;;34500:295:3;;;;;34543:12;-1:-1:-1;;;;;34500:295:3;;;;;34569:12;34500:295;;;;34593:10;34500:295;;;;34618:13;34500:295;;;;;;;;;;;;34645:12;34500:295;;;;34674:15;-1:-1:-1;;;;;34500:295:3;;;;;34701:10;-1:-1:-1;;;;;34500:295:3;;;;;34733:20;34500:295;;;;34774:19;34500:295;;;;;34493:302;;;;34481:314;34809:1;34814;34809:6;34805:314;;;34824:295;;;;;;;;34845:8;-1:-1:-1;;;;;34824:295:3;;;;;34867:12;-1:-1:-1;;;;;34824:295:3;;;;;34893:12;34824:295;;;;34917:10;34824:295;;;;34942:13;34824:295;;;;;;;;;;;;34969:12;34824:295;;;;34998:15;-1:-1:-1;;;;;34824:295:3;;;;;35025:10;-1:-1:-1;;;;;34824:295:3;;;;;35057:20;34824:295;;;;35098:19;34824:295;;;;;34817:302;;;;34805:314;35133:1;35138;35133:6;35129:314;;;35148:295;;;;;;;;35169:8;-1:-1:-1;;;;;35148:295:3;;;;;35191:12;-1:-1:-1;;;;;35148:295:3;;;;;35217:12;35148:295;;;;35241:10;35148:295;;;;35266:13;35148:295;;;;;;;;;;;;35293:12;35148:295;;;;35322:15;-1:-1:-1;;;;;35148:295:3;;;;;35349:10;-1:-1:-1;;;;;35148:295:3;;;;;35381:20;35148:295;;;;35422:19;35148:295;;;;;35141:302;;;;35129:314;35457:1;35462;35457:6;35453:314;;;35472:295;;;;;;;;35493:8;-1:-1:-1;;;;;35472:295:3;;;;;35515:12;-1:-1:-1;;;;;35472:295:3;;;;;35541:12;35472:295;;;;35565:10;35472:295;;;;35590:13;35472:295;;;;;;;;;;;;35617:12;35472:295;;;;35646:15;-1:-1:-1;;;;;35472:295:3;;;;;35673:10;-1:-1:-1;;;;;35472:295:3;;;;;35705:20;35472:295;;;;35746:19;35472:295;;;;;35465:302;;;;35453:314;35781:1;35786;35781:6;35777:314;;;35796:295;;;;;;;;35817:8;-1:-1:-1;;;;;35796:295:3;;;;;35839:12;-1:-1:-1;;;;;35796:295:3;;;;;35865:12;35796:295;;;;35889:10;35796:295;;;;35914:13;35796:295;;;;;;;;;;;;35941:12;35796:295;;;;35970:15;-1:-1:-1;;;;;35796:295:3;;;;;35997:10;-1:-1:-1;;;;;35796:295:3;;;;;36029:20;35796:295;;;;36070:19;35796:295;;;;;35789:302;;;;35777:314;36106:1;36111:2;36106:7;36102:315;;;36122:295;;;;;;;;36143:8;-1:-1:-1;;;;;36122:295:3;;;;;36165:12;-1:-1:-1;;;;;36122:295:3;;;;;36191:12;36122:295;;;;36215:10;36122:295;;;;36240:13;36122:295;;;;;;;;;;;;36267:12;36122:295;;;;36296:15;-1:-1:-1;;;;;36122:295:3;;;;;36323:10;-1:-1:-1;;;;;36122:295:3;;;;;36355:20;36122:295;;;;36396:19;36122:295;;;;;36115:302;;;;36102:315;36431:1;36436:2;36431:7;36427:315;;;36447:295;;;;;;;;36468:8;-1:-1:-1;;;;;36447:295:3;;;;;36490:12;-1:-1:-1;;;;;36447:295:3;;;;;36516:12;36447:295;;;;36540:10;36447:295;;;;36565:13;36447:295;;;;;;;;;;;;36592:12;36447:295;;;;36621:15;-1:-1:-1;;;;;36447:295:3;;;;;36648:10;-1:-1:-1;;;;;36447:295:3;;;;;36680:20;36447:295;;;;36721:19;36447:295;;;;;36440:302;;;;36427:315;36756:1;36761:2;36756:7;36752:315;;;36772:295;;;;;;;;36793:8;-1:-1:-1;;;;;36772:295:3;;;;;36815:12;-1:-1:-1;;;;;36772:295:3;;;;;36841:12;36772:295;;;;36865:10;36772:295;;;;36890:13;36772:295;;;;;;;;;;;;36917:12;36772:295;;;;36946:15;-1:-1:-1;;;;;36772:295:3;;;;;36973:10;-1:-1:-1;;;;;36772:295:3;;;;;37005:20;36772:295;;;;37046:19;36772:295;;;;;36765:302;;;;36752:315;37081:1;37086:2;37081:7;37077:315;;;37097:295;;;;;;;;37118:8;-1:-1:-1;;;;;37097:295:3;;;;;37140:12;-1:-1:-1;;;;;37097:295:3;;;;;37166:12;37097:295;;;;37190:10;37097:295;;;;37215:13;37097:295;;;;;;;;;;;;37242:12;37097:295;;;;37271:15;-1:-1:-1;;;;;37097:295:3;;;;;37298:10;-1:-1:-1;;;;;37097:295:3;;;;;37330:20;37097:295;;;;37371:19;37097:295;;;;;37090:302;;;;37077:315;37406:1;37411:2;37406:7;37402:315;;;37422:295;;;;;;;;37443:8;-1:-1:-1;;;;;37422:295:3;;;;;37465:12;-1:-1:-1;;;;;37422:295:3;;;;;37491:12;37422:295;;;;37515:10;37422:295;;;;37540:13;37422:295;;;;;;;;;;;;37567:12;37422:295;;;;37596:15;-1:-1:-1;;;;;37422:295:3;;;;;37623:10;-1:-1:-1;;;;;37422:295:3;;;;;37655:20;37422:295;;;;37696:19;37422:295;;;;;37415:302;;;;37402:315;37731:1;37736:2;37731:7;37727:315;;;37747:295;;;;;;;;37768:8;-1:-1:-1;;;;;37747:295:3;;;;;37790:12;-1:-1:-1;;;;;37747:295:3;;;;;37816:12;37747:295;;;;37840:10;37747:295;;;;37865:13;37747:295;;;;;;;;;;;;37892:12;37747:295;;;;37921:15;-1:-1:-1;;;;;37747:295:3;;;;;37948:10;-1:-1:-1;;;;;37747:295:3;;;;;37980:20;37747:295;;;;38021:19;37747:295;;;;;37740:302;;;;37727:315;38056:1;38061:2;38056:7;38052:315;;;38072:295;;;;;;;;38093:8;-1:-1:-1;;;;;38072:295:3;;;;;38115:12;-1:-1:-1;;;;;38072:295:3;;;;;38141:12;38072:295;;;;38165:10;38072:295;;;;38190:13;38072:295;;;;;;;;;;;;38217:12;38072:295;;;;38246:15;-1:-1:-1;;;;;38072:295:3;;;;;38273:10;-1:-1:-1;;;;;38072:295:3;;;;;38305:20;38072:295;;;;38346:19;38072:295;;;;;38065:302;;;;38052:315;38381:1;38386:2;38381:7;38377:315;;;38397:295;;;;;;;;38418:8;-1:-1:-1;;;;;38397:295:3;;;;;38440:12;-1:-1:-1;;;;;38397:295:3;;;;;38466:12;38397:295;;;;38490:10;38397:295;;;;38515:13;38397:295;;;;;;;;;;;;38542:12;38397:295;;;;38571:15;-1:-1:-1;;;;;38397:295:3;;;;;38598:10;-1:-1:-1;;;;;38397:295:3;;;;;38630:20;38397:295;;;;38671:19;38397:295;;;;;38390:302;;;;38377:315;38706:1;38711:2;38706:7;38702:315;;;38722:295;;;;;;;;38743:8;-1:-1:-1;;;;;38722:295:3;;;;;38765:12;-1:-1:-1;;;;;38722:295:3;;;;;38791:12;38722:295;;;;38815:10;38722:295;;;;38840:13;38722:295;;;;;;;;;;;;38867:12;38722:295;;;;38896:15;-1:-1:-1;;;;;38722:295:3;;;;;38923:10;-1:-1:-1;;;;;38722:295:3;;;;;38955:20;38722:295;;;;38996:19;38722:295;;;;;38715:302;;;;38702:315;39031:1;39036:2;39031:7;39027:315;;;39047:295;;;;;;;;39068:8;-1:-1:-1;;;;;39047:295:3;;;;;39090:12;-1:-1:-1;;;;;39047:295:3;;;;;39116:12;39047:295;;;;39140:10;39047:295;;;;39165:13;39047:295;;;;;;;;;;;;39192:12;39047:295;;;;39221:15;-1:-1:-1;;;;;39047:295:3;;;;;39248:10;-1:-1:-1;;;;;39047:295:3;;;;;39280:20;39047:295;;;;39321:19;39047:295;;;;;39040:302;;;;39027:315;39357:1;39362:2;39357:7;39353:315;;;39373:295;;;;;;;;39394:8;-1:-1:-1;;;;;39373:295:3;;;;;39416:12;-1:-1:-1;;;;;39373:295:3;;;;;39442:12;39373:295;;;;39466:10;39373:295;;;;39491:13;39373:295;;;;;;;;;;;;39518:12;39373:295;;;;39547:15;-1:-1:-1;;;;;39373:295:3;;;;;39574:10;-1:-1:-1;;;;;39373:295:3;;;;;39606:20;39373:295;;;;39647:19;39373:295;;;;;39366:302;;;;39353:315;39682:1;39687:2;39682:7;39678:315;;;39698:295;;;;;;;;39719:8;-1:-1:-1;;;;;39698:295:3;;;;;39741:12;-1:-1:-1;;;;;39698:295:3;;;;;39767:12;39698:295;;;;39791:10;39698:295;;;;39816:13;39698:295;;;;;;;;;;;;39843:12;39698:295;;;;39872:15;-1:-1:-1;;;;;39698:295:3;;;;;39899:10;-1:-1:-1;;;;;39698:295:3;;;;;39931:20;39698:295;;;;39972:19;39698:295;;;;;39691:302;;;;39678:315;40007:1;40012:2;40007:7;40003:315;;;40023:295;;;;;;;;40044:8;-1:-1:-1;;;;;40023:295:3;;;;;40066:12;-1:-1:-1;;;;;40023:295:3;;;;;40092:12;40023:295;;;;40116:10;40023:295;;;;40141:13;40023:295;;;;;;;;;;;;40168:12;40023:295;;;;40197:15;-1:-1:-1;;;;;40023:295:3;;;;;40224:10;-1:-1:-1;;;;;40023:295:3;;;;;40256:20;40023:295;;;;40297:19;40023:295;;;;;40016:302;;;;40003:315;40332:1;40337:2;40332:7;40328:315;;;40348:295;;;;;;;;40369:8;-1:-1:-1;;;;;40348:295:3;;;;;40391:12;-1:-1:-1;;;;;40348:295:3;;;;;40417:12;40348:295;;;;40441:10;40348:295;;;;40466:13;40348:295;;;;;;;;;;;;40493:12;40348:295;;;;40522:15;-1:-1:-1;;;;;40348:295:3;;;;;40549:10;-1:-1:-1;;;;;40348:295:3;;;;;40581:20;40348:295;;;;40622:19;40348:295;;;;;40341:302;;;;40328:315;40657:1;40662:2;40657:7;40653:315;;;40673:295;;;;;;;;40694:8;-1:-1:-1;;;;;40673:295:3;;;;;40716:12;-1:-1:-1;;;;;40673:295:3;;;;;40742:12;40673:295;;;;40766:10;40673:295;;;;40791:13;40673:295;;;;;;;;;;;;40818:12;40673:295;;;;40847:15;-1:-1:-1;;;;;40673:295:3;;;;;40874:10;-1:-1:-1;;;;;40673:295:3;;;;;40906:20;40673:295;;;;40947:19;40673:295;;;;;40666:302;;;;1218:80:1;1256:7;1282:9;-1:-1:-1;;;;;1282:9:1;1218:80;:::o;1361:31:3:-;;;:::o;961:43:2:-;;;:::o;42486:299:3:-;42555:18;;:::i;:::-;42585:10;42598:22;42613:6;42598:14;:22::i;:::-;42585:35;;-1:-1:-1;;42634:5:3;:17;42630:76;;42674:21;42689:5;42674:14;:21::i;42630:76::-;42723:55;42757:6;-1:-1:-1;;;;;42750:25:3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;42723:55::-;42716:62;42486:299;-1:-1:-1;;;42486:299:3:o;7290:1335:2:-;7482:10;7696:25;;:::i;:::-;7724:36;7749:10;7724:24;:36::i;:::-;7696:64;;7770:21;7794:43;7815:6;7823:13;7794:20;:43::i;:::-;7770:67;;7847:19;7869:40;7902:6;7869:32;:40::i;:::-;7847:62;;7920:26;;:::i;:::-;-1:-1:-1;7956:17:2;;;;;7949:25;;;;:6;:25;;;;;;;;7920:54;;;;;;;;;-1:-1:-1;;;;;7920:54:2;;;;-1:-1:-1;;;7920:54:2;;;;;;;;;;;;;;7984:635;;-1:-1:-1;;;8036:11:2;:20;8028:55;;;;-1:-1:-1;;;8028:55:2;;;;;;;:::i;:::-;8104:17;;;;;;8097:25;;;;:6;:25;;;;;:54;;-1:-1:-1;;;;;;8097:54:2;-1:-1:-1;;;;;8097:54:2;;;;;8183:17;8170:44;;;;;;8097:54;;8170:44;:::i;:::-;;;;;;;;7984:635;;;8235:42;8250:13;8265:11;8235:14;:42::i;:::-;8231:388;;;-1:-1:-1;;;8301:13:2;:22;8293:59;;;;-1:-1:-1;;;8293:59:2;;;;;;;:::i;:::-;8373:17;;;;;;8366:25;;;;:6;:25;;;;;:56;;-1:-1:-1;;;;;;8366:56:2;-1:-1:-1;;;;;8366:56:2;;;;;8454:17;8441:46;;;;;;8366:56;;8441:46;:::i;:::-;;;;;;;;8509:4;8501:12;;8231:388;;;8562:6;:17;;;8549:59;8581:13;8596:11;8549:59;;;;;;;:::i;:::-;;;;;;;;8231:388;7290:1335;;;;;;;;;;:::o;1250:35:3:-;1283:2;1250:35;:::o;1127:34:2:-;;;:::o;1438:54::-;;;;;;;;;;;;;;;;;;;:::o;559:218:1:-;1445:9;;-1:-1:-1;;;;;1445:9:1;1431:10;:23;1423:58;;;;-1:-1:-1;;;1423:58:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;637:16:1;::::1;643:10;637:16;;629:52;;;;-1:-1:-1::0;;;629:52:1::1;;;;;;;:::i;:::-;692:16;:21:::0;;-1:-1:-1;;;;;;692:21:1::1;-1:-1:-1::0;;;;;692:21:1;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;756:9:1;;729:41:::1;::::0;692:21;;756:9:::1;::::0;729:41:::1;::::0;-1:-1:-1;729:41:1::1;559:218:::0;:::o;6503:558:2:-;6570:4;6586:25;;:::i;:::-;6614:30;6637:6;6614:22;:30::i;:::-;6586:58;;7039:6;:15;;;7004:32;7008:4;7014:21;7028:6;7014:13;:21::i;:::-;7004:3;:32::i;:::-;:50;;;;;;;6503:558;-1:-1:-1;;;6503:558:2:o;5226:179::-;5286:4;5302:25;;:::i;:::-;5330:30;5353:6;5330:22;:30::i;:::-;5302:58;;5377:21;5391:6;5377:13;:21::i;1702:1040:4:-;1786:21;1809;1832;1882:23;:21;:23::i;:::-;1865:40;;1949:4;-1:-1:-1;;;;;1934:41:4;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1915:62;;2021:4;-1:-1:-1;;;;;2006:41:4;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1987:62;;2161:16;2179;2197:25;2241:4;-1:-1:-1;;;;;2226:32:4;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2160:100;;;;;;2296:14;2274:36;;:18;:36;;;2270:466;;2394:35;;;2537:62;;;2542:39;2562:8;2572;2542:19;:39::i;:::-;:42;-1:-1:-1;;;;;2537:48:4;:62;2517:82;;;;;2663:62;;;2668:39;2688:8;2698;2668:19;:39::i;:::-;:42;-1:-1:-1;;;;;2663:48:4;:62;2643:82;;;;;-1:-1:-1;2270:466:4;1702:1040;;;;;;;;:::o;518:236::-;599:16;;:::i;:::-;649:1;635:11;-1:-1:-1;;;;;635:15:4;;627:51;;;;-1:-1:-1;;;627:51:4;;;;;;;:::i;:::-;695:52;;;;;;;;;;-1:-1:-1;;;;;705:41:4;;-1:-1:-1;;;728:3:4;706:25;;;;705:41;;;;;;-1:-1:-1;;;;;695:52:4;;;;688:59;;518:236;;;;:::o;31152:1375:3:-;31223:4;31257:12;31243:10;:26;31239:40;;;-1:-1:-1;31278:1:3;31271:8;;31239:40;31307:12;31293:10;:26;31289:40;;;-1:-1:-1;31328:1:3;31321:8;;31289:40;31357:12;31343:10;:26;31339:40;;;-1:-1:-1;31378:1:3;31371:8;;31339:40;31407:12;31393:10;:26;31389:40;;;-1:-1:-1;31428:1:3;31421:8;;31389:40;31457:12;31443:10;:26;31439:40;;;-1:-1:-1;31478:1:3;31471:8;;31439:40;31507:12;31493:10;:26;31489:40;;;-1:-1:-1;31528:1:3;31521:8;;31489:40;31557:12;31543:10;:26;31539:40;;;-1:-1:-1;31578:1:3;31571:8;;31539:40;31607:12;31593:10;:26;31589:40;;;-1:-1:-1;31628:1:3;31621:8;;31589:40;31657:12;31643:10;:26;31639:40;;;-1:-1:-1;31678:1:3;31671:8;;31639:40;31707:12;31693:10;:26;31689:40;;;-1:-1:-1;31728:1:3;31721:8;;31689:40;31757:12;31743:10;:26;31739:41;;;-1:-1:-1;31778:2:3;31771:9;;31739:41;31808:12;31794:10;:26;31790:41;;;-1:-1:-1;31829:2:3;31822:9;;31790:41;31859:12;31845:10;:26;31841:41;;;-1:-1:-1;31880:2:3;31873:9;;31841:41;31910:12;31896:10;:26;31892:41;;;-1:-1:-1;31931:2:3;31924:9;;31892:41;31961:12;31947:10;:26;31943:41;;;-1:-1:-1;31982:2:3;31975:9;;31943:41;32012:12;31998:10;:26;31994:41;;;-1:-1:-1;32033:2:3;32026:9;;31994:41;32063:12;32049:10;:26;32045:41;;;-1:-1:-1;32084:2:3;32077:9;;32045:41;32114:12;32100:10;:26;32096:41;;;-1:-1:-1;32135:2:3;32128:9;;32096:41;32165:12;32151:10;:26;32147:41;;;-1:-1:-1;32186:2:3;32179:9;;32147:41;32216:12;32202:10;:26;32198:41;;;-1:-1:-1;32237:2:3;32230:9;;32198:41;32267:12;32253:10;:26;32249:41;;;-1:-1:-1;32288:2:3;32281:9;;32249:41;32318:12;32304:10;:26;32300:41;;;-1:-1:-1;32339:2:3;32332:9;;32300:41;32369:12;32355:10;:26;32351:41;;;-1:-1:-1;32390:2:3;32383:9;;32351:41;32420:12;32406:10;:26;32402:41;;;-1:-1:-1;32441:2:3;32434:9;;32402:41;32471:12;32457:10;:26;32453:41;;;-1:-1:-1;32492:2:3;32485:9;;32453:41;-1:-1:-1;;;31152:1375:3;;;:::o;27316:1276::-;27382:4;27414:10;-1:-1:-1;;;;;27402:22:3;:8;-1:-1:-1;;;;;27402:22:3;;27398:36;;;-1:-1:-1;27433:1:3;27426:8;;27398:36;27460:10;-1:-1:-1;;;;;27448:22:3;:8;-1:-1:-1;;;;;27448:22:3;;27444:36;;;-1:-1:-1;27479:1:3;27472:8;;27444:36;27506:10;-1:-1:-1;;;;;27494:22:3;:8;-1:-1:-1;;;;;27494:22:3;;27490:36;;;-1:-1:-1;27525:1:3;27518:8;;27490:36;27552:10;-1:-1:-1;;;;;27540:22:3;:8;-1:-1:-1;;;;;27540:22:3;;27536:36;;;-1:-1:-1;27571:1:3;27564:8;;27536:36;27598:10;-1:-1:-1;;;;;27586:22:3;:8;-1:-1:-1;;;;;27586:22:3;;27582:36;;;-1:-1:-1;27617:1:3;27610:8;;27582:36;27644:10;-1:-1:-1;;;;;27632:22:3;:8;-1:-1:-1;;;;;27632:22:3;;27628:36;;;-1:-1:-1;27663:1:3;27656:8;;27628:36;27690:10;-1:-1:-1;;;;;27678:22:3;:8;-1:-1:-1;;;;;27678:22:3;;27674:36;;;-1:-1:-1;27709:1:3;27702:8;;27674:36;27736:10;-1:-1:-1;;;;;27724:22:3;:8;-1:-1:-1;;;;;27724:22:3;;27720:36;;;-1:-1:-1;27755:1:3;27748:8;;27720:36;27782:10;-1:-1:-1;;;;;27770:22:3;:8;-1:-1:-1;;;;;27770:22:3;;27766:36;;;-1:-1:-1;27801:1:3;27794:8;;27766:36;27828:10;-1:-1:-1;;;;;27816:22:3;:8;-1:-1:-1;;;;;27816:22:3;;27812:36;;;-1:-1:-1;27847:1:3;27840:8;;27812:36;27874:10;-1:-1:-1;;;;;27862:22:3;:8;-1:-1:-1;;;;;27862:22:3;;27858:37;;;-1:-1:-1;27893:2:3;27886:9;;27858:37;27921:10;-1:-1:-1;;;;;27909:22:3;:8;-1:-1:-1;;;;;27909:22:3;;27905:37;;;-1:-1:-1;27940:2:3;27933:9;;27905:37;27968:10;-1:-1:-1;;;;;27956:22:3;:8;-1:-1:-1;;;;;27956:22:3;;27952:37;;;-1:-1:-1;27987:2:3;27980:9;;27952:37;28015:10;-1:-1:-1;;;;;28003:22:3;:8;-1:-1:-1;;;;;28003:22:3;;27999:37;;;-1:-1:-1;28034:2:3;28027:9;;27999:37;28062:10;-1:-1:-1;;;;;28050:22:3;:8;-1:-1:-1;;;;;28050:22:3;;28046:37;;;-1:-1:-1;28081:2:3;28074:9;;28046:37;28109:10;-1:-1:-1;;;;;28097:22:3;:8;-1:-1:-1;;;;;28097:22:3;;28093:37;;;-1:-1:-1;28128:2:3;28121:9;;28093:37;28156:10;-1:-1:-1;;;;;28144:22:3;:8;-1:-1:-1;;;;;28144:22:3;;28140:37;;;-1:-1:-1;28175:2:3;28168:9;;28140:37;28203:10;-1:-1:-1;;;;;28191:22:3;:8;-1:-1:-1;;;;;28191:22:3;;28187:37;;;-1:-1:-1;28222:2:3;28215:9;;28187:37;28250:10;-1:-1:-1;;;;;28238:22:3;:8;-1:-1:-1;;;;;28238:22:3;;28234:37;;;-1:-1:-1;28269:2:3;28262:9;;28234:37;28297:10;-1:-1:-1;;;;;28285:22:3;:8;-1:-1:-1;;;;;28285:22:3;;28281:37;;;-1:-1:-1;28316:2:3;28309:9;;28281:37;28344:10;-1:-1:-1;;;;;28332:22:3;:8;-1:-1:-1;;;;;28332:22:3;;28328:37;;;-1:-1:-1;28363:2:3;28356:9;;28328:37;28391:10;-1:-1:-1;;;;;28379:22:3;:8;-1:-1:-1;;;;;28379:22:3;;28375:37;;;-1:-1:-1;28410:2:3;28403:9;;28375:37;28438:10;-1:-1:-1;;;;;28426:22:3;:8;-1:-1:-1;;;;;28426:22:3;;28422:37;;;-1:-1:-1;28457:2:3;28450:9;;28422:37;28485:10;-1:-1:-1;;;;;28473:22:3;:8;-1:-1:-1;;;;;28473:22:3;;28469:37;;;-1:-1:-1;28504:2:3;28497:9;;28469:37;28532:10;-1:-1:-1;;;;;28520:22:3;:8;-1:-1:-1;;;;;28520:22:3;;28516:37;;;-1:-1:-1;28551:2:3;28544:9;;29771:1375;29842:4;29876:12;-1:-1:-1;;;;;29862:26:3;:10;-1:-1:-1;;;;;29862:26:3;;29858:40;;;-1:-1:-1;29897:1:3;29890:8;;29858:40;29926:12;-1:-1:-1;;;;;29912:26:3;:10;-1:-1:-1;;;;;29912:26:3;;29908:40;;;-1:-1:-1;29947:1:3;29940:8;;29908:40;29976:12;-1:-1:-1;;;;;29962:26:3;:10;-1:-1:-1;;;;;29962:26:3;;29958:40;;;-1:-1:-1;29997:1:3;29990:8;;29958:40;30026:12;-1:-1:-1;;;;;30012:26:3;:10;-1:-1:-1;;;;;30012:26:3;;30008:40;;;-1:-1:-1;30047:1:3;30040:8;;30008:40;30076:12;-1:-1:-1;;;;;30062:26:3;:10;-1:-1:-1;;;;;30062:26:3;;30058:40;;;-1:-1:-1;30097:1:3;30090:8;;30058:40;30126:12;-1:-1:-1;;;;;30112:26:3;:10;-1:-1:-1;;;;;30112:26:3;;30108:40;;;-1:-1:-1;30147:1:3;30140:8;;30108:40;30176:12;-1:-1:-1;;;;;30162:26:3;:10;-1:-1:-1;;;;;30162:26:3;;30158:40;;;-1:-1:-1;30197:1:3;30190:8;;30158:40;30226:12;-1:-1:-1;;;;;30212:26:3;:10;-1:-1:-1;;;;;30212:26:3;;30208:40;;;-1:-1:-1;30247:1:3;30240:8;;30208:40;30276:12;-1:-1:-1;;;;;30262:26:3;:10;-1:-1:-1;;;;;30262:26:3;;30258:40;;;-1:-1:-1;30297:1:3;30290:8;;30258:40;30326:12;-1:-1:-1;;;;;30312:26:3;:10;-1:-1:-1;;;;;30312:26:3;;30308:40;;;-1:-1:-1;30347:1:3;30340:8;;30308:40;30376:12;-1:-1:-1;;;;;30362:26:3;:10;-1:-1:-1;;;;;30362:26:3;;30358:41;;;-1:-1:-1;30397:2:3;30390:9;;30358:41;30427:12;-1:-1:-1;;;;;30413:26:3;:10;-1:-1:-1;;;;;30413:26:3;;30409:41;;;-1:-1:-1;30448:2:3;30441:9;;30409:41;30478:12;-1:-1:-1;;;;;30464:26:3;:10;-1:-1:-1;;;;;30464:26:3;;30460:41;;;-1:-1:-1;30499:2:3;30492:9;;30460:41;30529:12;-1:-1:-1;;;;;30515:26:3;:10;-1:-1:-1;;;;;30515:26:3;;30511:41;;;-1:-1:-1;30550:2:3;30543:9;;30511:41;30580:12;-1:-1:-1;;;;;30566:26:3;:10;-1:-1:-1;;;;;30566:26:3;;30562:41;;;-1:-1:-1;30601:2:3;30594:9;;30562:41;30631:12;-1:-1:-1;;;;;30617:26:3;:10;-1:-1:-1;;;;;30617:26:3;;30613:41;;;-1:-1:-1;30652:2:3;30645:9;;30613:41;30682:12;-1:-1:-1;;;;;30668:26:3;:10;-1:-1:-1;;;;;30668:26:3;;30664:41;;;-1:-1:-1;30703:2:3;30696:9;;30664:41;30733:12;-1:-1:-1;;;;;30719:26:3;:10;-1:-1:-1;;;;;30719:26:3;;30715:41;;;-1:-1:-1;30754:2:3;30747:9;;30715:41;30784:12;-1:-1:-1;;;;;30770:26:3;:10;-1:-1:-1;;;;;30770:26:3;;30766:41;;;-1:-1:-1;30805:2:3;30798:9;;30766:41;30835:12;-1:-1:-1;;;;;30821:26:3;:10;-1:-1:-1;;;;;30821:26:3;;30817:41;;;-1:-1:-1;30856:2:3;30849:9;;30817:41;30886:12;-1:-1:-1;;;;;30872:26:3;:10;-1:-1:-1;;;;;30872:26:3;;30868:41;;;-1:-1:-1;30907:2:3;30900:9;;30868:41;30937:12;-1:-1:-1;;;;;30923:26:3;:10;-1:-1:-1;;;;;30923:26:3;;30919:41;;;-1:-1:-1;30958:2:3;30951:9;;30919:41;30988:12;-1:-1:-1;;;;;30974:26:3;:10;-1:-1:-1;;;;;30974:26:3;;30970:41;;;-1:-1:-1;31009:2:3;31002:9;;30970:41;31039:12;-1:-1:-1;;;;;31025:26:3;:10;-1:-1:-1;;;;;31025:26:3;;31021:41;;;-1:-1:-1;31060:2:3;31053:9;;31021:41;31090:12;-1:-1:-1;;;;;31076:26:3;:10;-1:-1:-1;;;;;31076:26:3;;31072:41;;;-1:-1:-1;31111:2:3;31104:9;;9624:443:2;9711:16;9739:13;9755:21;:19;:21::i;:::-;9739:37;-1:-1:-1;9816:20:2;9794:6;:18;;;:42;;;;;;;;;9786:86;;;;-1:-1:-1;;;9786:86:2;;;;;;;:::i;:::-;2479:23;;;;;;;:::i;:::-;;;;;;;;;;;;;2469:34;;;;;;9886:6;:17;;;:28;9882:179;;;9944:8;9930:22;;9882:179;;;9997:53;10014:6;:17;;;10033:6;10041:8;9997:16;:53::i;9882:179::-;9624:443;;;;:::o;28598:1167:3:-;28661:4;28691:8;-1:-1:-1;;;;;28681:18:3;:6;-1:-1:-1;;;;;28681:18:3;;28677:32;;;-1:-1:-1;28708:1:3;28701:8;;28677:32;28733:8;-1:-1:-1;;;;;28723:18:3;:6;-1:-1:-1;;;;;28723:18:3;;28719:32;;;-1:-1:-1;28750:1:3;28743:8;;28719:32;28775:8;-1:-1:-1;;;;;28765:18:3;:6;-1:-1:-1;;;;;28765:18:3;;28761:32;;;-1:-1:-1;28792:1:3;28785:8;;28761:32;28817:8;-1:-1:-1;;;;;28807:18:3;:6;-1:-1:-1;;;;;28807:18:3;;28803:32;;;-1:-1:-1;28834:1:3;28827:8;;28803:32;28859:8;-1:-1:-1;;;;;28849:18:3;:6;-1:-1:-1;;;;;28849:18:3;;28845:32;;;-1:-1:-1;28876:1:3;28869:8;;28845:32;28901:8;-1:-1:-1;;;;;28891:18:3;:6;-1:-1:-1;;;;;28891:18:3;;28887:32;;;-1:-1:-1;28918:1:3;28911:8;;28887:32;28943:8;-1:-1:-1;;;;;28933:18:3;:6;-1:-1:-1;;;;;28933:18:3;;28929:32;;;-1:-1:-1;28960:1:3;28953:8;;28929:32;28985:8;-1:-1:-1;;;;;28975:18:3;:6;-1:-1:-1;;;;;28975:18:3;;28971:32;;;-1:-1:-1;29002:1:3;28995:8;;28971:32;29027:8;-1:-1:-1;;;;;29017:18:3;:6;-1:-1:-1;;;;;29017:18:3;;29013:32;;;-1:-1:-1;29044:1:3;29037:8;;29013:32;29069:8;-1:-1:-1;;;;;29059:18:3;:6;-1:-1:-1;;;;;29059:18:3;;29055:32;;;-1:-1:-1;29086:1:3;29079:8;;29055:32;29111:8;-1:-1:-1;;;;;29101:18:3;:6;-1:-1:-1;;;;;29101:18:3;;29097:33;;;-1:-1:-1;29128:2:3;29121:9;;29097:33;29154:8;-1:-1:-1;;;;;29144:18:3;:6;-1:-1:-1;;;;;29144:18:3;;29140:33;;;-1:-1:-1;29171:2:3;29164:9;;29140:33;29197:8;-1:-1:-1;;;;;29187:18:3;:6;-1:-1:-1;;;;;29187:18:3;;29183:33;;;-1:-1:-1;29214:2:3;29207:9;;29183:33;29240:8;-1:-1:-1;;;;;29230:18:3;:6;-1:-1:-1;;;;;29230:18:3;;29226:33;;;-1:-1:-1;29257:2:3;29250:9;;29226:33;29283:8;-1:-1:-1;;;;;29273:18:3;:6;-1:-1:-1;;;;;29273:18:3;;29269:33;;;-1:-1:-1;29300:2:3;29293:9;;29269:33;29326:8;-1:-1:-1;;;;;29316:18:3;:6;-1:-1:-1;;;;;29316:18:3;;29312:33;;;-1:-1:-1;29343:2:3;29336:9;;29312:33;29369:8;-1:-1:-1;;;;;29359:18:3;:6;-1:-1:-1;;;;;29359:18:3;;29355:33;;;-1:-1:-1;29386:2:3;29379:9;;29355:33;29412:8;-1:-1:-1;;;;;29402:18:3;:6;-1:-1:-1;;;;;29402:18:3;;29398:33;;;-1:-1:-1;29429:2:3;29422:9;;29398:33;29455:8;-1:-1:-1;;;;;29445:18:3;:6;-1:-1:-1;;;;;29445:18:3;;29441:33;;;-1:-1:-1;29472:2:3;29465:9;;29441:33;29498:8;-1:-1:-1;;;;;29488:18:3;:6;-1:-1:-1;;;;;29488:18:3;;29484:33;;;-1:-1:-1;29515:2:3;29508:9;;29484:33;29541:8;-1:-1:-1;;;;;29531:18:3;:6;-1:-1:-1;;;;;29531:18:3;;29527:33;;;-1:-1:-1;29558:2:3;29551:9;;29527:33;29584:8;-1:-1:-1;;;;;29574:18:3;:6;-1:-1:-1;;;;;29574:18:3;;29570:33;;;-1:-1:-1;29601:2:3;29594:9;;29570:33;29627:8;-1:-1:-1;;;;;29617:18:3;:6;-1:-1:-1;;;;;29617:18:3;;29613:33;;;-1:-1:-1;29644:2:3;29637:9;;29613:33;29670:8;-1:-1:-1;;;;;29660:18:3;:6;-1:-1:-1;;;;;29660:18:3;;29656:33;;;-1:-1:-1;29687:2:3;29680:9;;29656:33;29713:8;-1:-1:-1;;;;;29703:18:3;:6;-1:-1:-1;;;;;29703:18:3;;29699:33;;;-1:-1:-1;29730:2:3;29723:9;;10296:377:2;10398:7;10442:1;10425:13;:18;;10417:64;;;;-1:-1:-1;;;10417:64:2;;;;;;;:::i;:::-;10491:21;10523:13;10491:46;;10547:22;10620:6;:15;;;10572:45;10576:13;10591:6;:25;;;10572:3;:45::i;:::-;:63;;;;;;;10296:377;-1:-1:-1;;;;;10296:377:2:o;10680:333::-;10765:4;10785:17;;10781:204;;10818:16;10864:13;10837:24;10841:11;10854:6;10837:3;:24::i;:::-;:40;;;;;;10818:59;;10913:21;10898:11;:36;;:76;;;;;10953:21;10938:11;:36;;10898:76;10891:83;;;;;10781:204;-1:-1:-1;11001:5:2;10680:333;;;;:::o;5411:735::-;5484:4;5526:20;5504:6;:18;;;:42;;;;;;;;;5500:86;;;-1:-1:-1;5562:17:2;;;;;5555:25;;;;:6;:25;;;:31;-1:-1:-1;;;;;5555:31:2;5548:38;;5500:86;5718:21;5696:6;:18;;;:43;;;;;;;;;5692:73;;;-1:-1:-1;5748:17:2;;;;5741:24;;5692:73;5801:21;5779:6;:18;;;:43;;;;;;;;;5775:365;;;5838:14;5855:6;:15;2479:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;2479:23:2;;;;;;;;;2469:34;;2479:23;2469:34;;;;5855:15;;;;;;;;;;-1:-1:-1;5855:15:2;:21;-1:-1:-1;;;;;5855:21:2;;-1:-1:-1;5898:13:2;5890:70;;;;-1:-1:-1;;;5890:70:2;;;;;;;:::i;:::-;558:4;6082:33;6086:9;6097:6;:17;;;6082:3;:33::i;:::-;:47;;;;;;6075:54;;;;;16082:193;16134:4;16154:6;16150:20;;-1:-1:-1;16169:1:2;16162:8;;16150:20;16189:5;;;16193:1;16189;:5;:1;16212:5;;;;;:10;16204:46;;;;-1:-1:-1;;;16204:46:2;;;;;;;:::i;1478:121:4:-;1566:25;:15;:25;;1478:121::o;11699:154:2:-;11748:4;11771:75;2479:23;;;;;;;:::i;:::-;;;;;;;;;;;;;2469:34;;;;;;11797:35;2479:23;;;;;;;:::i;11797:35::-;558:4;11771:16;:75::i;:::-;11764:82;;11699:154;:::o;12088:1926::-;12210:4;12227:23;12252;12277:17;12298:24;12315:6;12298:16;:24::i;:::-;12226:96;;;;;;12424:12;12406:15;:30;12398:69;;;;-1:-1:-1;;;12398:69:2;;;;;;;:::i;:::-;12496:15;:30;;;12692:40;;:::i;:::-;12735:86;;;;;;;;12808:11;12786:18;12765;:39;12764:55;;;;;;-1:-1:-1;;;;;12735:86:2;;;;12692:129;;12831:28;12862:30;:12;:28;:30::i;:::-;12831:61;;12902:26;12931:46;12935:23;12960:16;12931:3;:46::i;:::-;12902:75;;12987:16;663:4;558;13820:43;13824:21;13847:6;:15;;;13820:3;:43::i;:::-;:57;;;;;;:68;;;;;;13806:82;;13923:10;13904:74;13935:11;13948:12;13962:15;13904:74;;;;;;;;:::i;:::-;;;;;;;;13996:11;12088:1926;-1:-1:-1;;;;;;;;;;;12088:1926:2:o;14196:1028::-;14267:4;14273;14279;14295:18;14316:6;:17;;;14295:38;;14343:20;14366:30;14389:6;14366:22;:30::i;:::-;14343:53;;14407:33;;:::i;:::-;-1:-1:-1;14443:27:2;;;;:15;:27;;;;;;;;;14407:63;;;;;;;;;;;;;;;;;;;;;;;;;14601:15;:42;14672:12;14657:27;;14653:459;;14740:24;;;14700:27;;;:15;:27;;;;;;;;:64;;;14812:18;;;;;14778:31;;;;:52;14845:15;:27;;;;;;;14885:15;14845:55;;;14914:31;;:49;;;15003:17;;;;15022:24;;15065:18;;14982:119;;15003:17;;14982:119;;;;15022:24;14948:15;;14982:119;:::i;:::-;;;;;;;;14653:459;-1:-1:-1;;15146:27:2;;;;:15;:27;;;;;;:31;;;;15179:37;;15146:27;;:31;;-1:-1:-1;15179:37:2;;-1:-1:-1;14196:1028:2;-1:-1:-1;;14196:1028:2:o;828:376:4:-;1170:7;1181:16;-1:-1:-1;;;;;1165:13:4;;;:32;;828:376::o;11109:364:2:-;11191:4;11208:21;11231;11257:68;11304:6;:20;;;11257:46;:68::i;:::-;11207:118;;;;;11339:6;:24;;;11335:132;;;11386:16;-1:-1:-1;11379:23:2;;-1:-1:-1;11379:23:2;11335:132;-1:-1:-1;11440:16:2;-1:-1:-1;11433:23:2;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;1564:241::-;;1668:2;1656:9;1647:7;1643:23;1639:32;1636:2;;;-1:-1;;1674:12;1636:2;85:6;72:20;97:33;124:5;97:33;:::i;1812:263::-;;1927:2;1915:9;1906:7;1902:23;1898:32;1895:2;;;-1:-1;;1933:12;1895:2;226:6;220:13;238:33;265:5;238:33;:::i;2082:241::-;;2186:2;2174:9;2165:7;2161:23;2157:32;2154:2;;;-1:-1;;2192:12;2154:2;-1:-1;350:20;;2148:175;-1:-1;2148:175::o;2330:347::-;;2444:2;2432:9;2423:7;2419:23;2415:32;2412:2;;;-1:-1;;2450:12;2412:2;2508:17;2495:31;2546:18;;2538:6;2535:30;2532:2;;;-1:-1;;2568:12;2532:2;2644:6;2633:9;2629:22;;;658:3;651:4;643:6;639:17;635:27;625:2;;-1:-1;;666:12;625:2;713:6;700:20;2546:18;23215:6;23212:30;23209:2;;;-1:-1;;23245:12;23209:2;22878;22872:9;23318;23299:17;;-1:-1;;23295:33;22904:17;;2444:2;22904:17;22964:34;;;23000:22;;;22961:62;22958:2;;;-1:-1;;23026:12;22958:2;22878;23045:22;806:21;;;906:16;;;2444:2;906:16;903:25;-1:-1;900:2;;;-1:-1;;931:12;900:2;951:41;985:6;2444:2;882:5;878:16;2444:2;848:6;844:17;951:41;:::i;:::-;2588:73;2406:271;-1:-1;;;;;;2406:271::o;2684:533::-;;;;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;-1:-1;;2838:12;2800:2;1090:6;1084:13;1102:33;1129:5;1102:33;:::i;:::-;3001:2;3051:22;;1084:13;2890:74;;-1:-1;1102:33;1084:13;1102:33;:::i;:::-;3120:2;3169:22;;1502:13;3009:74;;-1:-1;24900:10;24889:22;;26289:34;;26279:2;;-1:-1;;26327:12;26279:2;3128:73;;;;2794:423;;;;;:::o;3472:263::-;;3587:2;3575:9;3566:7;3562:23;3558:32;3555:2;;;-1:-1;;3593:12;3555:2;-1:-1;1362:13;;3549:186;-1:-1;3549:186::o;3742:613::-;;;;;3895:3;3883:9;3874:7;3870:23;3866:33;3863:2;;;-1:-1;;3902:12;3863:2;-1:-1;;1214:20;;;4054:2;4092:22;;486:20;;-1:-1;4161:2;4200:22;;1214:20;;4269:2;4307:22;486:20;;-1:-1;3857:498;-1:-1;3857:498::o;4362:103::-;-1:-1;;;;;24533:54;4423:37;;4417:48::o;4592:94::-;24027:13;24020:21;4647:34;;4641:45::o;4914:144::-;25584:1;25577:5;25574:12;25564:2;;25590:9;25564:2;4989:64;;4983:75::o;13098:275::-;;5228:5;23496:12;-1:-1;25295:101;25309:6;25306:1;25303:13;25295:101;;;5373:4;25376:11;;;;;25370:18;25357:11;;;25350:39;25324:10;25295:101;;;25411:6;25408:1;25405:13;25402:2;;;-1:-1;25467:6;25462:3;25458:16;25451:27;25402:2;-1:-1;5404:16;;;;;13234:139;-1:-1;;13234:139::o;13380:381::-;-1:-1;;;9080:26;;9065:1;9125:11;;13569:192::o;13768:222::-;-1:-1;;;;;24533:54;;;;4423:37;;13895:2;13880:18;;13866:124::o;13997:210::-;24027:13;;24020:21;4647:34;;14118:2;14103:18;;14089:118::o;14214:416::-;14414:2;14428:47;;;5657:2;14399:18;;;23641:19;-1:-1;;;23681:14;;;5673:45;5737:12;;;14385:245::o;14637:416::-;14837:2;14851:47;;;5988:2;14822:18;;;23641:19;6024:34;23681:14;;;6004:55;-1:-1;;;6079:12;;;6072:25;6116:12;;;14808:245::o;15060:416::-;15260:2;15274:47;;;6367:2;15245:18;;;23641:19;-1:-1;;;23681:14;;;6383:45;6447:12;;;15231:245::o;15483:416::-;15683:2;15697:47;;;6698:2;15668:18;;;23641:19;6734:25;23681:14;;;6714:46;6779:12;;;15654:245::o;15906:416::-;16106:2;16120:47;;;7030:2;16091:18;;;23641:19;-1:-1;;;23681:14;;;7046:45;7110:12;;;16077:245::o;16329:416::-;16529:2;16543:47;;;7361:2;16514:18;;;23641:19;7397:25;23681:14;;;7377:46;7442:12;;;16500:245::o;16752:416::-;16952:2;16966:47;;;7693:2;16937:18;;;23641:19;7729:26;23681:14;;;7709:47;7775:12;;;16923:245::o;17175:416::-;17375:2;17389:47;;;8026:2;17360:18;;;23641:19;8062:33;23681:14;;;8042:54;8115:12;;;17346:245::o;17598:416::-;17798:2;17812:47;;;8366:2;17783:18;;;23641:19;8402:28;23681:14;;;8382:49;8450:12;;;17769:245::o;18021:416::-;18221:2;18235:47;;;8701:2;18206:18;;;23641:19;-1:-1;;;23681:14;;;8717:42;8778:12;;;18192:245::o;18444:416::-;18644:2;18658:47;;;9375:2;18629:18;;;23641:19;9411:34;23681:14;;;9391:55;-1:-1;;;9466:12;;;9459:36;9514:12;;;18615:245::o;18867:416::-;19067:2;19081:47;;;9765:2;19052:18;;;23641:19;-1:-1;;;23681:14;;;9781:40;9840:12;;;19038:245::o;19290:416::-;19490:2;19504:47;;;10091:2;19475:18;;;23641:19;10127:25;23681:14;;;10107:46;10172:12;;;19461:245::o;19713:416::-;19913:2;19927:47;;;10423:2;19898:18;;;23641:19;-1:-1;;;23681:14;;;10439:45;10503:12;;;19884:245::o;20136:416::-;20336:2;20350:47;;;10754:2;20321:18;;;23641:19;10790:25;23681:14;;;10770:46;10835:12;;;20307:245::o;20559:339::-;;20744:3;20733:9;20729:19;20721:27;;11186:63;11234:14;11163:16;11157:23;11186:63;:::i;:::-;11334:4;11327:5;11323:16;11317:23;11346:63;11334:4;11398:3;11394:14;11380:12;11346:63;:::i;:::-;;11494:4;11487:5;11483:16;11477:23;11494:4;11558:3;11554:14;4865:37;11652:4;11645:5;11641:16;11635:23;11652:4;11716:3;11712:14;4865:37;11813:4;11806:5;11802:16;11796:23;11825:77;11813:4;11891:3;11887:14;11873:12;11825:77;:::i;:::-;;11987:4;11980:5;11976:16;11970:23;11987:4;12051:3;12047:14;4865:37;12150:4;12143:5;12139:16;12133:23;12162:63;12150:4;12214:3;12210:14;12196:12;12162:63;:::i;:::-;;12308:4;12301:5;12297:16;12291:23;12320:63;12308:4;12372:3;12368:14;12354:12;12320:63;:::i;:::-;-1:-1;12476:6;12465:18;;;12459:25;12538:16;;;4865:37;12647:6;12636:18;;;12630:25;12661:59;12703:16;;;12630:25;12661:59;:::i;:::-;;;20715:183;;;;:::o;20905:321::-;-1:-1;;;;;24661:76;;;;12819:37;;24027:13;24020:21;21212:2;21197:18;;4647:34;21054:2;21039:18;;21025:201::o;21233:222::-;4865:37;;;21360:2;21345:18;;21331:124::o;21462:333::-;4865:37;;;21781:2;21766:18;;4865:37;21617:2;21602:18;;21588:207::o;21802:444::-;4865:37;;;22149:2;22134:18;;4865:37;;;;22232:2;22217:18;;4865:37;21985:2;21970:18;;21956:290::o;22253:556::-;4865:37;;;22629:2;22614:18;;4865:37;;;;22712:2;22697:18;;4865:37;22795:2;22780:18;;4865:37;22464:3;22449:19;;22435:374::o;25069:145::-;25150:6;25145:3;25140;25127:30;-1:-1;25206:1;25188:16;;25181:27;25120:94::o;25613:117::-;-1:-1;;;;;24533:54;;25672:35;;25662:2;;25721:1;;25711:12;25983:117;-1:-1;;;;;26070:5;24417:42;26045:5;26042:35;26032:2;;26091:1;;26081:12
Swarm Source
ipfs://102ccdcdda4f5b3d875e6c0f95e4e59a20551e3e318650da1da8654188ef57cd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.