Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
VaultPriceFeed
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-01-25 */ // SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IPancakePair { function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); } pragma solidity 0.6.12; interface IChainlinkFlags { function getFlag(address) external view returns (bool); } pragma solidity 0.6.12; interface ISecondaryPriceFeed { function getPrice(address _token, uint256 _referencePrice, bool _maximise) external view returns (uint256); } pragma solidity 0.6.12; interface IPriceFeed { function description() external view returns (string memory); function aggregator() external view returns (address); function latestAnswer() external view returns (int256); function latestRound() external view returns (uint80); function getRoundData(uint80 roundId) external view returns (uint80, int256, uint256, uint256, uint80); } pragma solidity 0.6.12; interface IVaultPriceFeed { function adjustmentBasisPoints(address _token) external view returns (uint256); function isAdjustmentAdditive(address _token) external view returns (bool); function setAdjustment(address _token, bool _isAdditive, uint256 _adjustmentBps) external; function setUseV2Pricing(bool _useV2Pricing) external; function setIsAmmEnabled(bool _isEnabled) external; function setIsSecondaryPriceEnabled(bool _isEnabled) external; function setSpreadBasisPoints(address _token, uint256 _spreadBasisPoints) external; function setSpreadThresholdBasisPoints(uint256 _spreadThresholdBasisPoints) external; function setFavorPrimaryPrice(bool _favorPrimaryPrice) external; function setPriceSampleSpace(uint256 _priceSampleSpace) external; function setMaxStrictPriceDeviation(uint256 _maxStrictPriceDeviation) external; function getPrice(address _token, bool _maximise, bool _includeAmmPrice, bool _useSwapPricing) external view returns (uint256); function getAmmPrice(address _token) external view returns (uint256); function getLatestPrimaryPrice(address _token) external view returns (uint256); function getPrimaryPrice(address _token, bool _maximise) external view returns (uint256); function setTokenConfig( address _token, address _priceFeed, uint256 _priceDecimals, bool _isStrictStable ) external; } pragma solidity 0.6.12; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } pragma solidity 0.6.12; contract VaultPriceFeed is IVaultPriceFeed { using SafeMath for uint256; uint256 public constant PRICE_PRECISION = 10 ** 30; uint256 public constant ONE_USD = PRICE_PRECISION; uint256 public constant BASIS_POINTS_DIVISOR = 10000; uint256 public constant MAX_SPREAD_BASIS_POINTS = 50; uint256 public constant MAX_ADJUSTMENT_INTERVAL = 2 hours; uint256 public constant MAX_ADJUSTMENT_BASIS_POINTS = 20; // Identifier of the Sequencer offline flag on the Flags contract address constant private FLAG_ARBITRUM_SEQ_OFFLINE = address(bytes20(bytes32(uint256(keccak256("chainlink.flags.arbitrum-seq-offline")) - 1))); address public gov; address public chainlinkFlags; bool public isAmmEnabled = true; bool public isSecondaryPriceEnabled = true; bool public useV2Pricing = false; bool public favorPrimaryPrice = false; uint256 public priceSampleSpace = 3; uint256 public maxStrictPriceDeviation = 0; address public secondaryPriceFeed; uint256 public spreadThresholdBasisPoints = 30; address public btc; address public eth; address public bnb; address public bnbBusd; address public ethBnb; address public btcBnb; mapping (address => address) public priceFeeds; mapping (address => uint256) public priceDecimals; mapping (address => uint256) public spreadBasisPoints; // Chainlink can return prices for stablecoins // that differs from 1 USD by a larger percentage than stableSwapFeeBasisPoints // we use strictStableTokens to cap the price to 1 USD // this allows us to configure stablecoins like DAI as being a stableToken // while not being a strictStableToken mapping (address => bool) public strictStableTokens; mapping (address => uint256) public override adjustmentBasisPoints; mapping (address => bool) public override isAdjustmentAdditive; mapping (address => uint256) public lastAdjustmentTimings; modifier onlyGov() { require(msg.sender == gov, "VaultPriceFeed: forbidden"); _; } constructor() public { gov = msg.sender; } function setGov(address _gov) external onlyGov { gov = _gov; } function setChainlinkFlags(address _chainlinkFlags) external onlyGov { chainlinkFlags = _chainlinkFlags; } function setAdjustment(address _token, bool _isAdditive, uint256 _adjustmentBps) external override onlyGov { require( lastAdjustmentTimings[_token].add(MAX_ADJUSTMENT_INTERVAL) < block.timestamp, "VaultPriceFeed: adjustment frequency exceeded" ); require(_adjustmentBps <= MAX_ADJUSTMENT_BASIS_POINTS, "invalid _adjustmentBps"); isAdjustmentAdditive[_token] = _isAdditive; adjustmentBasisPoints[_token] = _adjustmentBps; lastAdjustmentTimings[_token] = block.timestamp; } function setUseV2Pricing(bool _useV2Pricing) external override onlyGov { useV2Pricing = _useV2Pricing; } function setIsAmmEnabled(bool _isEnabled) external override onlyGov { isAmmEnabled = _isEnabled; } function setIsSecondaryPriceEnabled(bool _isEnabled) external override onlyGov { isSecondaryPriceEnabled = _isEnabled; } function setSecondaryPriceFeed(address _secondaryPriceFeed) external onlyGov { secondaryPriceFeed = _secondaryPriceFeed; } function setTokens(address _btc, address _eth, address _bnb) external onlyGov { btc = _btc; eth = _eth; bnb = _bnb; } function setPairs(address _bnbBusd, address _ethBnb, address _btcBnb) external onlyGov { bnbBusd = _bnbBusd; ethBnb = _ethBnb; btcBnb = _btcBnb; } function setSpreadBasisPoints(address _token, uint256 _spreadBasisPoints) external override onlyGov { require(_spreadBasisPoints <= MAX_SPREAD_BASIS_POINTS, "VaultPriceFeed: invalid _spreadBasisPoints"); spreadBasisPoints[_token] = _spreadBasisPoints; } function setSpreadThresholdBasisPoints(uint256 _spreadThresholdBasisPoints) external override onlyGov { spreadThresholdBasisPoints = _spreadThresholdBasisPoints; } function setFavorPrimaryPrice(bool _favorPrimaryPrice) external override onlyGov { favorPrimaryPrice = _favorPrimaryPrice; } function setPriceSampleSpace(uint256 _priceSampleSpace) external override onlyGov { require(_priceSampleSpace > 0, "VaultPriceFeed: invalid _priceSampleSpace"); priceSampleSpace = _priceSampleSpace; } function setMaxStrictPriceDeviation(uint256 _maxStrictPriceDeviation) external override onlyGov { maxStrictPriceDeviation = _maxStrictPriceDeviation; } function setTokenConfig( address _token, address _priceFeed, uint256 _priceDecimals, bool _isStrictStable ) external override onlyGov { priceFeeds[_token] = _priceFeed; priceDecimals[_token] = _priceDecimals; strictStableTokens[_token] = _isStrictStable; } function getPrice(address _token, bool _maximise, bool _includeAmmPrice, bool /* _useSwapPricing */) public override view returns (uint256) { uint256 price = useV2Pricing ? getPriceV2(_token, _maximise, _includeAmmPrice) : getPriceV1(_token, _maximise, _includeAmmPrice); uint256 adjustmentBps = adjustmentBasisPoints[_token]; if (adjustmentBps > 0) { bool isAdditive = isAdjustmentAdditive[_token]; if (isAdditive) { price = price.mul(BASIS_POINTS_DIVISOR.add(adjustmentBps)).div(BASIS_POINTS_DIVISOR); } else { price = price.mul(BASIS_POINTS_DIVISOR.sub(adjustmentBps)).div(BASIS_POINTS_DIVISOR); } } return price; } function getPriceV1(address _token, bool _maximise, bool _includeAmmPrice) public view returns (uint256) { uint256 price = getPrimaryPrice(_token, _maximise); if (_includeAmmPrice && isAmmEnabled) { uint256 ammPrice = getAmmPrice(_token); if (ammPrice > 0) { if (_maximise && ammPrice > price) { price = ammPrice; } if (!_maximise && ammPrice < price) { price = ammPrice; } } } if (isSecondaryPriceEnabled) { price = getSecondaryPrice(_token, price, _maximise); } if (strictStableTokens[_token]) { uint256 delta = price > ONE_USD ? price.sub(ONE_USD) : ONE_USD.sub(price); if (delta <= maxStrictPriceDeviation) { return ONE_USD; } // if _maximise and price is e.g. 1.02, return 1.02 if (_maximise && price > ONE_USD) { return price; } // if !_maximise and price is e.g. 0.98, return 0.98 if (!_maximise && price < ONE_USD) { return price; } return ONE_USD; } uint256 _spreadBasisPoints = spreadBasisPoints[_token]; if (_maximise) { return price.mul(BASIS_POINTS_DIVISOR.add(_spreadBasisPoints)).div(BASIS_POINTS_DIVISOR); } return price.mul(BASIS_POINTS_DIVISOR.sub(_spreadBasisPoints)).div(BASIS_POINTS_DIVISOR); } function getPriceV2(address _token, bool _maximise, bool _includeAmmPrice) public view returns (uint256) { uint256 price = getPrimaryPrice(_token, _maximise); if (_includeAmmPrice && isAmmEnabled) { price = getAmmPriceV2(_token, _maximise, price); } if (isSecondaryPriceEnabled) { price = getSecondaryPrice(_token, price, _maximise); } if (strictStableTokens[_token]) { uint256 delta = price > ONE_USD ? price.sub(ONE_USD) : ONE_USD.sub(price); if (delta <= maxStrictPriceDeviation) { return ONE_USD; } // if _maximise and price is e.g. 1.02, return 1.02 if (_maximise && price > ONE_USD) { return price; } // if !_maximise and price is e.g. 0.98, return 0.98 if (!_maximise && price < ONE_USD) { return price; } return ONE_USD; } uint256 _spreadBasisPoints = spreadBasisPoints[_token]; if (_maximise) { return price.mul(BASIS_POINTS_DIVISOR.add(_spreadBasisPoints)).div(BASIS_POINTS_DIVISOR); } return price.mul(BASIS_POINTS_DIVISOR.sub(_spreadBasisPoints)).div(BASIS_POINTS_DIVISOR); } function getAmmPriceV2(address _token, bool _maximise, uint256 _primaryPrice) public view returns (uint256) { uint256 ammPrice = getAmmPrice(_token); if (ammPrice == 0) { return _primaryPrice; } uint256 diff = ammPrice > _primaryPrice ? ammPrice.sub(_primaryPrice) : _primaryPrice.sub(ammPrice); if (diff.mul(BASIS_POINTS_DIVISOR) < _primaryPrice.mul(spreadThresholdBasisPoints)) { if (favorPrimaryPrice) { return _primaryPrice; } return ammPrice; } if (_maximise && ammPrice > _primaryPrice) { return ammPrice; } if (!_maximise && ammPrice < _primaryPrice) { return ammPrice; } return _primaryPrice; } function getLatestPrimaryPrice(address _token) public override view returns (uint256) { address priceFeedAddress = priceFeeds[_token]; require(priceFeedAddress != address(0), "VaultPriceFeed: invalid price feed"); IPriceFeed priceFeed = IPriceFeed(priceFeedAddress); int256 price = priceFeed.latestAnswer(); require(price > 0, "VaultPriceFeed: invalid price"); return uint256(price); } function getPrimaryPrice(address _token, bool _maximise) public override view returns (uint256) { address priceFeedAddress = priceFeeds[_token]; require(priceFeedAddress != address(0), "VaultPriceFeed: invalid price feed"); if (chainlinkFlags != address(0)) { bool isRaised = IChainlinkFlags(chainlinkFlags).getFlag(FLAG_ARBITRUM_SEQ_OFFLINE); if (isRaised) { // If flag is raised we shouldn't perform any critical operations revert("Chainlink feeds are not being updated"); } } IPriceFeed priceFeed = IPriceFeed(priceFeedAddress); uint256 price = 0; uint80 roundId = priceFeed.latestRound(); for (uint80 i = 0; i < priceSampleSpace; i++) { if (roundId <= i) { break; } uint256 p; if (i == 0) { int256 _p = priceFeed.latestAnswer(); require(_p > 0, "VaultPriceFeed: invalid price"); p = uint256(_p); } else { (, int256 _p, , ,) = priceFeed.getRoundData(roundId - i); require(_p > 0, "VaultPriceFeed: invalid price"); p = uint256(_p); } if (price == 0) { price = p; continue; } if (_maximise && p > price) { price = p; continue; } if (!_maximise && p < price) { price = p; } } require(price > 0, "VaultPriceFeed: could not fetch price"); // normalise price precision uint256 _priceDecimals = priceDecimals[_token]; return price.mul(PRICE_PRECISION).div(10 ** _priceDecimals); } function getSecondaryPrice(address _token, uint256 _referencePrice, bool _maximise) public view returns (uint256) { if (secondaryPriceFeed == address(0)) { return _referencePrice; } return ISecondaryPriceFeed(secondaryPriceFeed).getPrice(_token, _referencePrice, _maximise); } function getAmmPrice(address _token) public override view returns (uint256) { if (_token == bnb) { // for bnbBusd, reserve0: BNB, reserve1: BUSD return getPairPrice(bnbBusd, true); } if (_token == eth) { uint256 price0 = getPairPrice(bnbBusd, true); // for ethBnb, reserve0: ETH, reserve1: BNB uint256 price1 = getPairPrice(ethBnb, true); // this calculation could overflow if (price0 / 10**30) * (price1 / 10**30) is more than 10**17 return price0.mul(price1).div(PRICE_PRECISION); } if (_token == btc) { uint256 price0 = getPairPrice(bnbBusd, true); // for btcBnb, reserve0: BTC, reserve1: BNB uint256 price1 = getPairPrice(btcBnb, true); // this calculation could overflow if (price0 / 10**30) * (price1 / 10**30) is more than 10**17 return price0.mul(price1).div(PRICE_PRECISION); } return 0; } // if divByReserve0: calculate price as reserve1 / reserve0 // if !divByReserve1: calculate price as reserve0 / reserve1 function getPairPrice(address _pair, bool _divByReserve0) public view returns (uint256) { (uint256 reserve0, uint256 reserve1, ) = IPancakePair(_pair).getReserves(); if (_divByReserve0) { if (reserve0 == 0) { return 0; } return reserve1.mul(PRICE_PRECISION).div(reserve0); } if (reserve1 == 0) { return 0; } return reserve0.mul(PRICE_PRECISION).div(reserve1); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ADJUSTMENT_BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ADJUSTMENT_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SPREAD_BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE_USD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adjustmentBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bnb","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bnbBusd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"btc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"btcBnb","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainlinkFlags","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethBnb","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"favorPrimaryPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getAmmPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"},{"internalType":"uint256","name":"_primaryPrice","type":"uint256"}],"name":"getAmmPriceV2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getLatestPrimaryPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_divByReserve0","type":"bool"}],"name":"getPairPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"},{"internalType":"bool","name":"_includeAmmPrice","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"},{"internalType":"bool","name":"_includeAmmPrice","type":"bool"}],"name":"getPriceV1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"},{"internalType":"bool","name":"_includeAmmPrice","type":"bool"}],"name":"getPriceV2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_maximise","type":"bool"}],"name":"getPrimaryPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_referencePrice","type":"uint256"},{"internalType":"bool","name":"_maximise","type":"bool"}],"name":"getSecondaryPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdjustmentAdditive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAmmEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSecondaryPriceEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastAdjustmentTimings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxStrictPriceDeviation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"priceDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"priceFeeds","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceSampleSpace","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondaryPriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_isAdditive","type":"bool"},{"internalType":"uint256","name":"_adjustmentBps","type":"uint256"}],"name":"setAdjustment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_chainlinkFlags","type":"address"}],"name":"setChainlinkFlags","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_favorPrimaryPrice","type":"bool"}],"name":"setFavorPrimaryPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnabled","type":"bool"}],"name":"setIsAmmEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnabled","type":"bool"}],"name":"setIsSecondaryPriceEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxStrictPriceDeviation","type":"uint256"}],"name":"setMaxStrictPriceDeviation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bnbBusd","type":"address"},{"internalType":"address","name":"_ethBnb","type":"address"},{"internalType":"address","name":"_btcBnb","type":"address"}],"name":"setPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceSampleSpace","type":"uint256"}],"name":"setPriceSampleSpace","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_secondaryPriceFeed","type":"address"}],"name":"setSecondaryPriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_spreadBasisPoints","type":"uint256"}],"name":"setSpreadBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_spreadThresholdBasisPoints","type":"uint256"}],"name":"setSpreadThresholdBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_priceFeed","type":"address"},{"internalType":"uint256","name":"_priceDecimals","type":"uint256"},{"internalType":"bool","name":"_isStrictStable","type":"bool"}],"name":"setTokenConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_btc","type":"address"},{"internalType":"address","name":"_eth","type":"address"},{"internalType":"address","name":"_bnb","type":"address"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_useV2Pricing","type":"bool"}],"name":"setUseV2Pricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"spreadBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"spreadThresholdBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"strictStableTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"useV2Pricing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526001805461ffff60b01b1960ff60a81b1960ff60a01b19909216600160a01b1791909116600160a81b171690556003600281905560009055601e60055534801561004d57600080fd5b50600080546001600160a01b031916331790556121098061006f6000396000f3fe608060405234801561001057600080fd5b50600436106102675760003560e01c80630957aed91461026c5780631193c80914610286578063126082cf146102aa57806312d43a51146102b25780632fa03b8f146102ba5780632fbfe3d3146102d95780632fc3a70a146102f657806330536ee514610334578063378e7bf7146103505780633d949c5f146103585780633eba8d361461038e5780633ebbc601146103c25780633f0c3bb7146103ca578063443be209146103d257806348cac2771461040a57806349a876e4146104305780634a4b1f4f146104385780634b9ade471461044057806356bf9de41461047e57806356c8c2c1146104a4578063593d9e80146104d2578063604f37e9146104da57806367781c0e146104f95780636ce8a44b146105015780636fc8070814610527578063717cfe7a1461052f578063732391b414610555578063826e055f1461058b5780638b86616c146105b15780638c7c9e0c146105b957806393f69074146105c157806395082d25146104f9578063971bd396146105f957806397dfade7146106015780639917dc74146106095780639a0a6635146106285780639b18dc471461064e5780639b889380146106565780639dcb511a14610682578063a27ea386146106a8578063a28d57d8146106ce578063a2ad7b93146106d6578063a39c73a314610704578063b02a2de41461070c578063b731dd8714610740578063b8f611051461075d578063c2138d8c14610783578063cefe0f21146107a9578063cfad57a2146107cf578063d694376c146107f5578063e4440e0214610829578063eb1c92a914610831578063fd34ec4014610850575b600080fd5b61027461086f565b60408051918252519081900360200190f35b61028e610874565b604080516001600160a01b039092168252519081900360200190f35b610274610883565b61028e610889565b6102d7600480360360208110156102d057600080fd5b5035610898565b005b6102d7600480360360208110156102ef57600080fd5b5035610929565b6102746004803603608081101561030c57600080fd5b506001600160a01b03813516906020810135151590604081013515159060600135151561097b565b61033c610a39565b604080519115158252519081900360200190f35b610274610a49565b6102746004803603606081101561036e57600080fd5b506001600160a01b03813516906020810135151590604001351515610a4f565b610274600480360360608110156103a457600080fd5b506001600160a01b0381351690602081013590604001351515610c23565b61033c610cd1565b61033c610ce1565b6102d7600480360360608110156103e857600080fd5b506001600160a01b038135811691602081013582169160409091013516610cf1565b6102746004803603602081101561042057600080fd5b50356001600160a01b0316610d7d565b61028e610d8f565b610274610d9e565b6102d76004803603608081101561045657600080fd5b506001600160a01b038135811691602081013590911690604081013590606001351515610da3565b6102746004803603602081101561049457600080fd5b50356001600160a01b0316610e45565b610274600480360360408110156104ba57600080fd5b506001600160a01b0381351690602001351515610f59565b61033c611386565b6102d7600480360360208110156104f057600080fd5b50351515611396565b610274611401565b61033c6004803603602081101561051757600080fd5b50356001600160a01b0316611411565b610274611426565b6102746004803603602081101561054557600080fd5b50356001600160a01b031661142c565b6102746004803603606081101561056b57600080fd5b506001600160a01b0381351690602081013515159060400135151561143e565b6102d7600480360360208110156105a157600080fd5b50356001600160a01b0316611493565b61028e611502565b61028e611511565b6102d7600480360360608110156105d757600080fd5b506001600160a01b038135811691602081013582169160409091013516611520565b61028e6115ac565b61028e6115bb565b6102d76004803603602081101561061f57600080fd5b503515156115ca565b6102d76004803603602081101561063e57600080fd5b50356001600160a01b0316611635565b6102746116a4565b6102d76004803603604081101561066c57600080fd5b506001600160a01b0381351690602001356116aa565b61028e6004803603602081101561069857600080fd5b50356001600160a01b0316611753565b610274600480360360208110156106be57600080fd5b50356001600160a01b031661176e565b61028e611780565b610274600480360360408110156106ec57600080fd5b506001600160a01b038135169060200135151561178f565b61027461187c565b6102746004803603606081101561072257600080fd5b506001600160a01b0381351690602081013515159060400135611882565b6102d76004803603602081101561075657600080fd5b503561194a565b61033c6004803603602081101561077357600080fd5b50356001600160a01b031661199c565b6102746004803603602081101561079957600080fd5b50356001600160a01b03166119b1565b610274600480360360208110156107bf57600080fd5b50356001600160a01b0316611aaf565b6102d7600480360360208110156107e557600080fd5b50356001600160a01b0316611ac1565b6102d76004803603606081101561080b57600080fd5b506001600160a01b0381351690602081013515159060400135611b30565b61028e611c73565b6102d76004803603602081101561084757600080fd5b50351515611c82565b6102d76004803603602081101561086657600080fd5b50351515611ced565b603281565b600a546001600160a01b031681565b61271081565b6000546001600160a01b031681565b6000546001600160a01b031633146108e5576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b600081116109245760405162461bcd60e51b8152600401808060200182810382526029815260200180611f876029913960400191505060405180910390fd5b600255565b6000546001600160a01b03163314610976576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b600355565b6001546000908190600160b01b900460ff166109a15761099c868686610a4f565b6109ac565b6109ac86868661143e565b6001600160a01b0387166000908152601060205260409020549091508015610a2f576001600160a01b03871660009081526011602052604090205460ff168015610a1757610a10612710610a0a610a038286611d58565b8690611db0565b90611e09565b9250610a2d565b610a2a612710610a0a610a038286611e48565b92505b505b5095945050505050565b600154600160b01b900460ff1681565b60035481565b600080610a5c8585610f59565b9050828015610a745750600154600160a01b900460ff165b15610ab9576000610a84866119b1565b90508015610ab757848015610a9857508181115b15610aa1578091505b84158015610aae57508181105b15610ab7578091505b505b600154600160a81b900460ff1615610ad957610ad6858286610c23565b90505b6001600160a01b0385166000908152600f602052604090205460ff1615610bc257600068327cb2734119d3b7a9601e1b8211610b2a57610b2568327cb2734119d3b7a9601e1b83611e48565b610b40565b610b408268327cb2734119d3b7a9601e1b611e48565b90506003548111610b615768327cb2734119d3b7a9601e1b92505050610c1c565b848015610b79575068327cb2734119d3b7a9601e1b82115b15610b8657509050610c1c565b84158015610b9f575068327cb2734119d3b7a9601e1b82105b15610bac57509050610c1c565b68327cb2734119d3b7a9601e1b92505050610c1c565b6001600160a01b0385166000908152600e60205260409020548415610c0457610bfb612710610a0a610bf48285611d58565b8590611db0565b92505050610c1c565b610c17612710610a0a610bf48285611e48565b925050505b9392505050565b6004546000906001600160a01b0316610c3d575081610c1c565b6004805460408051630ffd9c6d60e31b81526001600160a01b038881169482019490945260248101879052851515604482015290519290911691637fece36891606480820192602092909190829003018186803b158015610c9d57600080fd5b505afa158015610cb1573d6000803e3d6000fd5b505050506040513d6020811015610cc757600080fd5b5051949350505050565b600154600160a81b900460ff1681565b600154600160a01b900460ff1681565b6000546001600160a01b03163314610d3e576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b600680546001600160a01b039485166001600160a01b031991821617909155600780549385169382169390931790925560088054919093169116179055565b60106020526000908152604090205481565b6008546001600160a01b031681565b601481565b6000546001600160a01b03163314610df0576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b6001600160a01b039384166000908152600c6020908152604080832080546001600160a01b0319169690971695909517909555600d855283812092909255600f90935220805460ff1916911515919091179055565b6001600160a01b038082166000908152600c602052604081205490911680610e9e5760405162461bcd60e51b81526004018080602001828103825260228152602001806120b26022913960400191505060405180910390fd5b60008190506000816001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ede57600080fd5b505afa158015610ef2573d6000803e3d6000fd5b505050506040513d6020811015610f0857600080fd5b5051905060008113610f4f576040805162461bcd60e51b815260206004820152601d6024820152600080516020612092833981519152604482015290519081900360640190fd5b925050505b919050565b6001600160a01b038083166000908152600c602052604081205490911680610fb25760405162461bcd60e51b81526004018080602001828103825260228152602001806120b26022913960400191505060405180910390fd5b6001546001600160a01b03161561108f5760015460408051631abf23ff60e11b815273a438451d6458044c3c8cd2f6f31c91ac882a6d91600482015290516000926001600160a01b03169163357e47fe916024808301926020929190829003018186803b15801561102257600080fd5b505afa158015611036573d6000803e3d6000fd5b505050506040513d602081101561104c57600080fd5b50519050801561108d5760405162461bcd60e51b81526004018080602001828103825260258152602001806120436025913960400191505060405180910390fd5b505b6000819050600080826001600160a01b031663668a0f026040518163ffffffff1660e01b815260040160206040518083038186803b1580156110d057600080fd5b505afa1580156110e4573d6000803e3d6000fd5b505050506040513d60208110156110fa57600080fd5b5051905060005b600254816001600160501b0316101561130157806001600160501b0316826001600160501b03161161113257611301565b60006001600160501b0382166111f5576000856001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561117d57600080fd5b505afa158015611191573d6000803e3d6000fd5b505050506040513d60208110156111a757600080fd5b50519050600081136111ee576040805162461bcd60e51b815260206004820152601d6024820152600080516020612092833981519152604482015290519081900360640190fd5b90506112bd565b6000856001600160a01b0316639a6fc8f58486036040518263ffffffff1660e01b815260040180826001600160501b0316815260200191505060a06040518083038186803b15801561124657600080fd5b505afa15801561125a573d6000803e3d6000fd5b505050506040513d60a081101561127057600080fd5b50602001519050600081136112ba576040805162461bcd60e51b815260206004820152601d6024820152600080516020612092833981519152604482015290519081900360640190fd5b90505b836112c95792506112f9565b8780156112d557508381115b156112e15792506112f9565b871580156112ee57508381105b156112f7578093505b505b600101611101565b50600082116113415760405162461bcd60e51b8152600401808060200182810382526025815260200180611fb06025913960400191505060405180910390fd5b6001600160a01b0387166000908152600d6020526040902054611378600a82900a610a0a8568327cb2734119d3b7a9601e1b611db0565b955050505050505b92915050565b600154600160b81b900460ff1681565b6000546001600160a01b031633146113e3576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b60018054911515600160b81b0260ff60b81b19909216919091179055565b68327cb2734119d3b7a9601e1b81565b60116020526000908152604090205460ff1681565b60025481565b60126020526000908152604090205481565b60008061144b8585610f59565b90508280156114635750600154600160a01b900460ff165b15610ab957611473858583611882565b905060015460ff600160a81b9091041615610ad957610ad6858286610c23565b6000546001600160a01b031633146114e0576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031681565b6007546001600160a01b031681565b6000546001600160a01b0316331461156d576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b600980546001600160a01b039485166001600160a01b031991821617909155600a805493851693821693909317909255600b8054919093169116179055565b600b546001600160a01b031681565b6009546001600160a01b031681565b6000546001600160a01b03163314611617576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b60018054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314611682576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b611c2081565b6000546001600160a01b031633146116f7576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b60328111156117375760405162461bcd60e51b815260040180806020018281038252602a815260200180612068602a913960400191505060405180910390fd5b6001600160a01b039091166000908152600e6020526040902055565b600c602052600090815260409020546001600160a01b031681565b600e6020526000908152604090205481565b6006546001600160a01b031681565b6000806000846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156117cd57600080fd5b505afa1580156117e1573d6000803e3d6000fd5b505050506040513d60608110156117f757600080fd5b5080516020909101516001600160701b0391821693501690508315611849578161182657600092505050611380565b61184082610a0a8368327cb2734119d3b7a9601e1b611db0565b92505050611380565b8061185957600092505050611380565b61187381610a0a8468327cb2734119d3b7a9601e1b611db0565b95945050505050565b60055481565b60008061188e856119b1565b90508061189e5782915050610c1c565b60008382116118b6576118b18483611e48565b6118c0565b6118c08285611e48565b90506118d760055485611db090919063ffffffff16565b6118e382612710611db0565b101561190d57600154600160b81b900460ff1615611905578392505050610c1c565b509050610c1c565b84801561191957508382115b1561192657509050610c1c565b8415801561193357508382105b1561194057509050610c1c565b5091949350505050565b6000546001600160a01b03163314611997576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b600555565b600f6020526000908152604090205460ff1681565b6008546000906001600160a01b03838116911614156119e8576009546119e1906001600160a01b0316600161178f565b9050610f54565b6007546001600160a01b0383811691161415611a5a57600954600090611a18906001600160a01b0316600161178f565b600a54909150600090611a35906001600160a01b0316600161178f565b9050611a5168327cb2734119d3b7a9601e1b610a0a8484611db0565b92505050610f54565b6006546001600160a01b0383811691161415611aa757600954600090611a8a906001600160a01b0316600161178f565b600b54909150600090611a35906001600160a01b0316600161178f565b506000919050565b600d6020526000908152604090205481565b6000546001600160a01b03163314611b0e576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b7d576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b6001600160a01b0383166000908152601260205260409020544290611ba490611c20611d58565b10611be05760405162461bcd60e51b815260040180806020018281038252602d815260200180611ff6602d913960400191505060405180910390fd5b6014811115611c2f576040805162461bcd60e51b8152602060048201526016602482015275696e76616c6964205f61646a7573746d656e7442707360501b604482015290519081900360640190fd5b6001600160a01b03929092166000908152601160209081526040808320805460ff191694151594909417909355601081528282209390935560129092529020429055565b6001546001600160a01b031681565b6000546001600160a01b03163314611ccf576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b60018054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314611d3a576040805162461bcd60e51b81526020600482015260196024820152600080516020612023833981519152604482015290519081900360640190fd5b60018054911515600160b01b0260ff60b01b19909216919091179055565b600082820183811015610c1c576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600082611dbf57506000611380565b82820282848281611dcc57fe5b0414610c1c5760405162461bcd60e51b8152600401808060200182810382526021815260200180611fd56021913960400191505060405180910390fd5b6000610c1c83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250611e8a565b6000610c1c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f2c565b60008183611f165760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611edb578181015183820152602001611ec3565b50505050905090810190601f168015611f085780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611f2257fe5b0495945050505050565b60008184841115611f7e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611edb578181015183820152602001611ec3565b50505090039056fe5661756c745072696365466565643a20696e76616c6964205f707269636553616d706c6553706163655661756c745072696365466565643a20636f756c64206e6f74206665746368207072696365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775661756c745072696365466565643a2061646a7573746d656e74206672657175656e63792065786365656465645661756c745072696365466565643a20666f7262696464656e00000000000000436861696e6c696e6b20666565647320617265206e6f74206265696e6720757064617465645661756c745072696365466565643a20696e76616c6964205f7370726561644261736973506f696e74735661756c745072696365466565643a20696e76616c69642070726963650000005661756c745072696365466565643a20696e76616c69642070726963652066656564a2646970667358221220389f99c830eacf64725237fe771b05bf5d29ab7185000574fe9dcbcaaacb2e9e64736f6c634300060c0033
Deployed ByteCode Sourcemap
7740:13914:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7997:52;;;:::i;:::-;;;;;;;;;;;;;;;;8930:21;;;:::i;:::-;;;;-1:-1:-1;;;;;8930:21:0;;;;;;;;;;;;;;7938:52;;;:::i;8407:18::-;;;:::i;12189:223::-;;;;;;;;;;;;;;;;-1:-1:-1;12189:223:0;;:::i;:::-;;12420:165;;;;;;;;;;;;;;;;-1:-1:-1;12420:165:0;;:::i;12930:758::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12930:758:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;8557:32::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;8682:42;;;:::i;13696:1593::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13696:1593:0;;;;;;;;;;;;;;;;;:::i;19740:299::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19740:299:0;;;;;;;;;;;;;;;:::i;8508:42::-;;;:::i;8470:31::-;;;:::i;11231:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11231:149:0;;;;;;;;;;;;;;;;;;;:::i;9538:66::-;;;;;;;;;;;;;;;;-1:-1:-1;9538:66:0;-1:-1:-1;;;;;9538:66:0;;:::i;8876:18::-;;;:::i;8120:56::-;;;:::i;12593:329::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12593:329:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;17451:450::-;;;;;;;;;;;;;;;;-1:-1:-1;17451:450:0;-1:-1:-1;;;;;17451:450:0;;:::i;17909:1823::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17909:1823:0;;;;;;;;;;:::i;8596:37::-;;;:::i;12043:138::-;;;;;;;;;;;;;;;;-1:-1:-1;12043:138:0;;;;:::i;7882:49::-;;;:::i;9611:62::-;;;;;;;;;;;;;;;;-1:-1:-1;9611:62:0;-1:-1:-1;;;;;9611:62:0;;:::i;8640:35::-;;;:::i;9680:57::-;;;;;;;;;;;;;;;;-1:-1:-1;9680:57:0;-1:-1:-1;;;;;9680:57:0;;:::i;15297:1329::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15297:1329:0;;;;;;;;;;;;;;;;;:::i;10007:120::-;;;;;;;;;;;;;;;;-1:-1:-1;10007:120:0;-1:-1:-1;;;;;10007:120:0;;:::i;8731:33::-;;;:::i;8851:18::-;;;:::i;11388:178::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11388:178:0;;;;;;;;;;;;;;;;;;;:::i;8958:21::-;;;:::i;8901:22::-;;;:::i;10825:112::-;;;;;;;;;;;;;;;;-1:-1:-1;10825:112:0;;;;:::i;11087:136::-;;;;;;;;;;;;;;;;-1:-1:-1;11087:136:0;-1:-1:-1;;;;;11087:136:0;;:::i;8056:57::-;;;:::i;11574:276::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11574:276:0;;;;;;;;:::i;8988:46::-;;;;;;;;;;;;;;;;-1:-1:-1;8988:46:0;-1:-1:-1;;;;;8988:46:0;;:::i;9097:53::-;;;;;;;;;;;;;;;;-1:-1:-1;9097:53:0;-1:-1:-1;;;;;9097:53:0;;:::i;8826:18::-;;;:::i;21214:437::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21214:437:0;;;;;;;;;;:::i;8771:46::-;;;:::i;16634:809::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16634:809:0;;;;;;;;;;;;;;;:::i;11858:177::-;;;;;;;;;;;;;;;;-1:-1:-1;11858:177:0;;:::i;9478:51::-;;;;;;;;;;;;;;;;-1:-1:-1;9478:51:0;-1:-1:-1;;;;;9478:51:0;;:::i;20047:1028::-;;;;;;;;;;;;;;;;-1:-1:-1;20047:1028:0;-1:-1:-1;;;;;20047:1028:0;;:::i;9041:49::-;;;;;;;;;;;;;;;;-1:-1:-1;9041:49:0;-1:-1:-1;;;;;9041:49:0;;:::i;9923:76::-;;;;;;;;;;;;;;;;-1:-1:-1;9923:76:0;-1:-1:-1;;;;;9923:76:0;;:::i;10135:556::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10135:556:0;;;;;;;;;;;;;;;:::i;8432:29::-;;;:::i;10945:134::-;;;;;;;;;;;;;;;;-1:-1:-1;10945:134:0;;;;:::i;10699:118::-;;;;;;;;;;;;;;;;-1:-1:-1;10699:118:0;;;;:::i;7997:52::-;8047:2;7997:52;:::o;8930:21::-;;;-1:-1:-1;;;;;8930:21:0;;:::o;7938:52::-;7985:5;7938:52;:::o;8407:18::-;;;-1:-1:-1;;;;;8407:18:0;;:::o;12189:223::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;12310:1:::1;12290:17;:21;12282:75;;;;-1:-1:-1::0;;;12282:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12368:16;:36:::0;12189:223::o;12420:165::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;12527:23:::1;:50:::0;12420:165::o;12930:758::-;13097:12;;13061:7;;;;-1:-1:-1;;;13097:12:0;;;;:112;;13162:47;13173:6;13181:9;13192:16;13162:10;:47::i;:::-;13097:112;;;13112:47;13123:6;13131:9;13142:16;13112:10;:47::i;:::-;-1:-1:-1;;;;;13246:29:0;;13222:21;13246:29;;;:21;:29;;;;;;13081:128;;-1:-1:-1;13290:17:0;;13286:370;;-1:-1:-1;;;;;13342:28:0;;13324:15;13342:28;;;:20;:28;;;;;;;;13385:260;;;;13428:76;7985:5;13428:50;13438:39;7985:5;13463:13;13438:24;:39::i;:::-;13428:5;;:9;:50::i;:::-;:54;;:76::i;:::-;13420:84;;13385:260;;;13553:76;7985:5;13553:50;13563:39;7985:5;13588:13;13563:24;:39::i;13553:76::-;13545:84;;13385:260;13286:370;;-1:-1:-1;13675:5:0;12930:758;-1:-1:-1;;;;;12930:758:0:o;8557:32::-;;;-1:-1:-1;;;8557:32:0;;;;;:::o;8682:42::-;;;;:::o;13696:1593::-;13792:7;13812:13;13828:34;13844:6;13852:9;13828:15;:34::i;:::-;13812:50;;13879:16;:32;;;;-1:-1:-1;13899:12:0;;-1:-1:-1;;;13899:12:0;;;;13879:32;13875:376;;;13928:16;13947:19;13959:6;13947:11;:19::i;:::-;13928:38;-1:-1:-1;13985:12:0;;13981:259;;14022:9;:29;;;;;14046:5;14035:8;:16;14022:29;14018:94;;;14084:8;14076:16;;14018:94;14135:9;14134:10;:30;;;;;14159:5;14148:8;:16;14134:30;14130:95;;;14197:8;14189:16;;14130:95;13875:376;;14267:23;;-1:-1:-1;;;14267:23:0;;;;14263:107;;;14315:43;14333:6;14341:5;14348:9;14315:17;:43::i;:::-;14307:51;;14263:107;-1:-1:-1;;;;;14386:26:0;;;;;;:18;:26;;;;;;;;14382:590;;;14429:13;-1:-1:-1;;;14445:5:0;:15;:57;;14484:18;-1:-1:-1;;;14496:5:0;14484:11;:18::i;:::-;14445:57;;;14463:18;:5;-1:-1:-1;;;14463:9:0;:18::i;:::-;14429:73;;14530:23;;14521:5;:32;14517:87;;-1:-1:-1;;;14574:14:0;;;;;;14517:87;14689:9;:28;;;;;-1:-1:-1;;;14702:5:0;:15;14689:28;14685:81;;;-1:-1:-1;14745:5:0;-1:-1:-1;14738:12:0;;14685:81;14853:9;14852:10;:29;;;;;-1:-1:-1;;;14866:5:0;:15;14852:29;14848:82;;;-1:-1:-1;14909:5:0;-1:-1:-1;14902:12:0;;14848:82;-1:-1:-1;;;14946:14:0;;;;;;14382:590;-1:-1:-1;;;;;15013:25:0;;14984:26;15013:25;;;:17;:25;;;;;;15051:130;;;;15088:81;7985:5;15088:55;15098:44;7985:5;15123:18;15098:24;:44::i;:::-;15088:5;;:9;:55::i;:81::-;15081:88;;;;;;15051:130;15200:81;7985:5;15200:55;15210:44;7985:5;15235:18;15210:24;:44::i;15200:81::-;15193:88;;;;13696:1593;;;;;;:::o;19740:299::-;19869:18;;19845:7;;-1:-1:-1;;;;;19869:18:0;19865:65;;-1:-1:-1;19912:15:0;19905:22;;19865:65;19967:18;;;19947:84;;;-1:-1:-1;;;19947:84:0;;-1:-1:-1;;;;;19947:84:0;;;;;;;;;;;;;;;;;;;;;;;;;19967:18;;;;;19947:48;;:84;;;;;;;;;;;;;;;19967:18;19947:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19947:84:0;;19740:299;-1:-1:-1;;;;19740:299:0:o;8508:42::-;;;-1:-1:-1;;;8508:42:0;;;;;:::o;8470:31::-;;;-1:-1:-1;;;8470:31:0;;;;;:::o;11231:149::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;11320:3:::1;:10:::0;;-1:-1:-1;;;;;11320:10:0;;::::1;-1:-1:-1::0;;;;;;11320:10:0;;::::1;;::::0;;;11341:3:::1;:10:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;11362:3:::1;:10:::0;;;;;::::1;::::0;::::1;;::::0;;11231:149::o;9538:66::-;;;;;;;;;;;;;:::o;8876:18::-;;;-1:-1:-1;;;;;8876:18:0;;:::o;8120:56::-;8174:2;8120:56;:::o;12593:329::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;12779:18:0;;::::1;;::::0;;;:10:::1;:18;::::0;;;;;;;:31;;-1:-1:-1;;;;;;12779:31:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;12821:13:::1;:21:::0;;;;;:38;;;;12870:18:::1;:26:::0;;;;:44;;-1:-1:-1;;12870:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12593:329::o;17451:450::-;-1:-1:-1;;;;;17575:18:0;;;17528:7;17575:18;;;:10;:18;;;;;;17528:7;;17575:18;17612:30;17604:77;;;;-1:-1:-1;;;17604:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17694:20;17728:16;17694:51;;17758:12;17773:9;-1:-1:-1;;;;;17773:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17773:24:0;;-1:-1:-1;17824:1:0;17816:9;;17808:51;;;;;-1:-1:-1;;;17808:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17808:51:0;;;;;;;;;;;;;;;17887:5;-1:-1:-1;;;17451:450:0;;;;:::o;17909:1823::-;-1:-1:-1;;;;;18043:18:0;;;17996:7;18043:18;;;:10;:18;;;;;;17996:7;;18043:18;18080:30;18072:77;;;;-1:-1:-1;;;18072:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18166:14;;-1:-1:-1;;;;;18166:14:0;:28;18162:340;;18243:14;;18227:66;;;-1:-1:-1;;;18227:66:0;;8309:89;18227:66;;;;;;18211:13;;-1:-1:-1;;;;;18243:14:0;;18227:39;;:66;;;;;;;;;;;;;;18243:14;18227:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18227:66:0;;-1:-1:-1;18308:183:0;;;;18428:47;;-1:-1:-1;;;18428:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18308:183;18162:340;;18514:20;18548:16;18514:51;;18578:13;18606:14;18623:9;-1:-1:-1;;;;;18623:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18623:23:0;;-1:-1:-1;18664:8:0;18659:829;18682:16;;18678:1;-1:-1:-1;;;;;18678:20:0;;18659:829;;;18735:1;-1:-1:-1;;;;;18724:12:0;:7;-1:-1:-1;;;;;18724:12:0;;18720:28;;18740:5;;18720:28;18762:9;-1:-1:-1;;;;;18792:6:0;;18788:382;;18819:9;18831;-1:-1:-1;;;;;18831:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18831:24:0;;-1:-1:-1;18887:1:0;18882:6;;18874:48;;;;;-1:-1:-1;;;18874:48:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18874:48:0;;;;;;;;;;;;;;;18953:2;-1:-1:-1;18788:382:0;;;19000:9;19018;-1:-1:-1;;;;;19018:22:0;;19051:1;19041:7;:11;19018:35;;;;;;;;;;;;;-1:-1:-1;;;;;19018:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19018:35:0;;;;-1:-1:-1;19085:1:0;19080:6;;19072:48;;;;;-1:-1:-1;;;19072:48:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19072:48:0;;;;;;;;;;;;;;;19151:2;-1:-1:-1;18788:382:0;19190:10;19186:87;;19229:1;-1:-1:-1;19249:8:0;;19186:87;19293:9;:22;;;;;19310:5;19306:1;:9;19293:22;19289:99;;;19344:1;-1:-1:-1;19364:8:0;;19289:99;19409:9;19408:10;:23;;;;;19426:5;19422:1;:9;19408:23;19404:73;;;19460:1;19452:9;;19404:73;18659:829;;18700:3;;18659:829;;;;19516:1;19508:5;:9;19500:59;;;;-1:-1:-1;;;19500:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19633:21:0;;19608:22;19633:21;;;:13;:21;;;;;;19672:52;19703:2;:20;;;19672:26;:5;-1:-1:-1;;;19672:9:0;:26::i;:52::-;19665:59;;;;;;;17909:1823;;;;;:::o;8596:37::-;;;-1:-1:-1;;;8596:37:0;;;;;:::o;12043:138::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;12135:17:::1;:38:::0;;;::::1;;-1:-1:-1::0;;;12135:38:0::1;-1:-1:-1::0;;;;12135:38:0;;::::1;::::0;;;::::1;::::0;;12043:138::o;7882:49::-;-1:-1:-1;;;7882:49:0;:::o;9611:62::-;;;;;;;;;;;;;;;:::o;8640:35::-;;;;:::o;9680:57::-;;;;;;;;;;;;;:::o;15297:1329::-;15393:7;15413:13;15429:34;15445:6;15453:9;15429:15;:34::i;:::-;15413:50;;15480:16;:32;;;;-1:-1:-1;15500:12:0;;-1:-1:-1;;;15500:12:0;;;;15480:32;15476:112;;;15537:39;15551:6;15559:9;15570:5;15537:13;:39::i;:::-;15529:47;;15604:23;;;-1:-1:-1;;;15604:23:0;;;;15600:107;;;15652:43;15670:6;15678:5;15685:9;15652:17;:43::i;10007:120::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;10087:14:::1;:32:::0;;-1:-1:-1;;;;;;10087:32:0::1;-1:-1:-1::0;;;;;10087:32:0;;;::::1;::::0;;;::::1;::::0;;10007:120::o;8731:33::-;;;-1:-1:-1;;;;;8731:33:0;;:::o;8851:18::-;;;-1:-1:-1;;;;;8851:18:0;;:::o;11388:178::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;11486:7:::1;:18:::0;;-1:-1:-1;;;;;11486:18:0;;::::1;-1:-1:-1::0;;;;;;11486:18:0;;::::1;;::::0;;;11515:6:::1;:16:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;11542:6:::1;:16:::0;;;;;::::1;::::0;::::1;;::::0;;11388:178::o;8958:21::-;;;-1:-1:-1;;;;;8958:21:0;;:::o;8901:22::-;;;-1:-1:-1;;;;;8901:22:0;;:::o;10825:112::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;10904:12:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;10904:25:0::1;-1:-1:-1::0;;;;10904:25:0;;::::1;::::0;;;::::1;::::0;;10825:112::o;11087:136::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;11175:18:::1;:40:::0;;-1:-1:-1;;;;;;11175:40:0::1;-1:-1:-1::0;;;;;11175:40:0;;;::::1;::::0;;;::::1;::::0;;11087:136::o;8056:57::-;8106:7;8056:57;:::o;11574:276::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;8047:2:::1;11693:18;:45;;11685:100;;;;-1:-1:-1::0;;;11685:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;11796:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;:46;11574:276::o;8988:46::-;;;;;;;;;;;;-1:-1:-1;;;;;8988:46:0;;:::o;9097:53::-;;;;;;;;;;;;;:::o;8826:18::-;;;-1:-1:-1;;;;;8826:18:0;;:::o;21214:437::-;21293:7;21314:16;21332;21367:5;-1:-1:-1;;;;;21354:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21354:33:0;;;;;;;-1:-1:-1;;;;;21313:74:0;;;;-1:-1:-1;21313:74:0;;-1:-1:-1;21398:143:0;;;;21437:13;21433:32;;21461:1;21454:8;;;;;;21433:32;21486:43;21520:8;21486:29;:8;-1:-1:-1;;;21486:12:0;:29::i;:43::-;21479:50;;;;;;21398:143;21555:13;21551:32;;21579:1;21572:8;;;;;;21551:32;21600:43;21634:8;21600:29;:8;-1:-1:-1;;;21600:12:0;:29::i;:43::-;21593:50;21214:437;-1:-1:-1;;;;;21214:437:0:o;8771:46::-;;;;:::o;16634:809::-;16733:7;16753:16;16772:19;16784:6;16772:11;:19::i;:::-;16753:38;-1:-1:-1;16806:13:0;16802:66;;16843:13;16836:20;;;;;16802:66;16880:12;16906:13;16895:8;:24;:84;;16952:27;:13;16970:8;16952:17;:27::i;:::-;16895:84;;;16922:27;:8;16935:13;16922:12;:27::i;:::-;16880:99;;17027:45;17045:26;;17027:13;:17;;:45;;;;:::i;:::-;16994:30;:4;7985:5;16994:8;:30::i;:::-;:78;16990:218;;;17093:17;;-1:-1:-1;;;17093:17:0;;;;17089:78;;;17138:13;17131:20;;;;;;17089:78;-1:-1:-1;17188:8:0;-1:-1:-1;17181:15:0;;16990:218;17224:9;:37;;;;;17248:13;17237:8;:24;17224:37;17220:85;;;-1:-1:-1;17285:8:0;-1:-1:-1;17278:15:0;;17220:85;17322:9;17321:10;:38;;;;;17346:13;17335:8;:24;17321:38;17317:86;;;-1:-1:-1;17383:8:0;-1:-1:-1;17376:15:0;;17317:86;-1:-1:-1;17422:13:0;;16634:809;-1:-1:-1;;;;16634:809:0:o;11858:177::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;11971:26:::1;:56:::0;11858:177::o;9478:51::-;;;;;;;;;;;;;;;:::o;20047:1028::-;20148:3;;20114:7;;-1:-1:-1;;;;;20138:13:0;;;20148:3;;20138:13;20134:139;;;20247:7;;20234:27;;-1:-1:-1;;;;;20247:7:0;;20234:12;:27::i;:::-;20227:34;;;;20134:139;20299:3;;-1:-1:-1;;;;;20289:13:0;;;20299:3;;20289:13;20285:375;;;20349:7;;20319:14;;20336:27;;-1:-1:-1;;;;;20349:7:0;;20336:12;:27::i;:::-;20465:6;;20319:44;;-1:-1:-1;20435:14:0;;20452:26;;-1:-1:-1;;;;;20465:6:0;;20452:12;:26::i;:::-;20435:43;-1:-1:-1;20609:39:0;-1:-1:-1;;;20609:18:0;:6;20435:43;20609:10;:18::i;:39::-;20602:46;;;;;;20285:375;20686:3;;-1:-1:-1;;;;;20676:13:0;;;20686:3;;20676:13;20672:375;;;20736:7;;20706:14;;20723:27;;-1:-1:-1;;;;;20736:7:0;;20723:12;:27::i;:::-;20852:6;;20706:44;;-1:-1:-1;20822:14:0;;20839:26;;-1:-1:-1;;;;;20852:6:0;;20839:12;:26::i;20672:375::-;-1:-1:-1;21066:1:0;20047:1028;;;:::o;9041:49::-;;;;;;;;;;;;;:::o;9923:76::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;9981:3:::1;:10:::0;;-1:-1:-1;;;;;;9981:10:0::1;-1:-1:-1::0;;;;;9981:10:0;;;::::1;::::0;;;::::1;::::0;;9923:76::o;10135:556::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10275:29:0;::::1;;::::0;;;:21:::1;:29;::::0;;;;;10336:15:::1;::::0;10275:58:::1;::::0;8106:7:::1;10275:33;:58::i;:::-;:76;10253:171;;;;-1:-1:-1::0;;;10253:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8174:2;10443:14;:45;;10435:80;;;::::0;;-1:-1:-1;;;10435:80:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;10435:80:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;10526:28:0;;;::::1;;::::0;;;:20:::1;:28;::::0;;;;;;;:42;;-1:-1:-1;;10526:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;10579:21:::1;:29:::0;;;;;:46;;;;10636:21:::1;:29:::0;;;;;10668:15:::1;10636:47:::0;;10135:556::o;8432:29::-;;;-1:-1:-1;;;;;8432:29:0;;:::o;10945:134::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;11035:23:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;11035:36:0::1;-1:-1:-1::0;;;;11035:36:0;;::::1;::::0;;;::::1;::::0;;10945:134::o;10699:118::-;9798:3;;-1:-1:-1;;;;;9798:3:0;9784:10;:17;9776:55;;;;;-1:-1:-1;;;9776:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9776:55:0;;;;;;;;;;;;;;;10781:12:::1;:28:::0;;;::::1;;-1:-1:-1::0;;;10781:28:0::1;-1:-1:-1::0;;;;10781:28:0;;::::1;::::0;;;::::1;::::0;;10699:118::o;3253:181::-;3311:7;3343:5;;;3367:6;;;;3359:46;;;;;-1:-1:-1;;;3359:46:0;;;;;;;;;;;;-1:-1:-1;;;3359:46:0;;;;;;;;;;;;;;4607:471;4665:7;4910:6;4906:47;;-1:-1:-1;4940:1:0;4933:8;;4906:47;4977:5;;;4981:1;4977;:5;:1;5001:5;;;;;:10;4993:56;;;;-1:-1:-1;;;4993:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5554:132;5612:7;5639:39;5643:1;5646;5639:39;;;;;;;;;;;;;-1:-1:-1;;;5639:39:0;;;:3;:39::i;3717:136::-;3775:7;3802:43;3806:1;3809;3802:43;;;;;;;;;;;;;;;;;:3;:43::i;6182:278::-;6268:7;6303:12;6296:5;6288:28;;;;-1:-1:-1;;;6288:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6327:9;6343:1;6339;:5;;;;;;;6182:278;-1:-1:-1;;;;;6182:278:0:o;4156:192::-;4242:7;4278:12;4270:6;;;;4262:29;;;;-1:-1:-1;;;4262:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4314:5:0;;;4156:192::o
Swarm Source
ipfs://389f99c830eacf64725237fe771b05bf5d29ab7185000574fe9dcbcaaacb2e9e
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.