{
    "Function": "slitherConstructorConstantVariables",
    "File": "contracts/global/LibStorage.sol",
    "Parent Contracts": [],
    "High-Level Calls": [],
    "Internal Calls": [],
    "Library Calls": [],
    "Low-Level Calls": [],
    "Code": "library LibStorage {\n\n    /// @dev Offset for the initial slot in lib storage, gives us this number of storage slots\n    /// available in StorageLayoutV1 and all subsequent storage layouts that inherit from it.\n    uint256 private constant STORAGE_SLOT_BASE = 1000000;\n    /// @dev Set to MAX_TRADED_MARKET_INDEX * 2, Solidity does not allow assigning constants from imported values\n    uint256 private constant NUM_NTOKEN_MARKET_FACTORS = 14;\n    /// @dev Theoretical maximum for MAX_PORTFOLIO_ASSETS, however, we limit this to MAX_TRADED_MARKET_INDEX\n    /// in practice. It is possible to exceed that value during liquidation up to 14 potential assets.\n    uint256 private constant MAX_PORTFOLIO_ASSETS = 16;\n\n    /// @dev Storage IDs for storage buckets. Each id maps to an internal storage\n    /// slot used for a particular mapping\n    ///     WARNING: APPEND ONLY\n    enum StorageId {\n        Unused,\n        AccountStorage,\n        nTokenContext,\n        nTokenAddress,\n        nTokenDeposit,\n        nTokenInitialization,\n        Balance,\n        Token,\n        SettlementRate,\n        CashGroup,\n        Market,\n        AssetsBitmap,\n        ifCashBitmap,\n        PortfolioArray,\n        nTokenTotalSupply,\n        AssetRate,\n        ExchangeRate\n    }\n\n    /// @dev Mapping from account to currencyId to it's balance storage for that currency\n    function getBalanceStorage() internal pure\n        returns (mapping(address => mapping(uint256 => BalanceStorage)) storage store)\n    {\n        uint256 slot = _getStorageSlot(StorageId.Balance);\n        assembly { store.slot := slot }\n    }\n\n    /// @dev Mapping from currency id to a boolean for underlying or asset token to\n    /// the TokenStorage\n    function getTokenStorage() internal pure\n        returns (mapping(uint256 => mapping(bool => TokenStorage)) storage store)\n    {\n        uint256 slot = _getStorageSlot(StorageId.Token);\n        assembly { store.slot := slot }\n    }\n\n    /// @dev Get the storage slot given a storage ID.\n    /// @param storageId An entry in `StorageId`\n    /// @return slot The storage slot.\n    function _getStorageSlot(StorageId storageId)\n        private\n        pure\n        returns (uint256 slot)\n    {\n        // This should never overflow with a reasonable `STORAGE_SLOT_EXP`\n        // because Solidity will do a range check on `storageId` during the cast.\n        return uint256(storageId) + STORAGE_SLOT_BASE;\n    }\n}"
}