{
  "contracts/AddressResolver.sol": {
    "imports": [
      "./Owned.sol",
      "./interfaces/IAddressResolver.sol",
      "./interfaces/IIssuer.sol",
      "./MixinResolver.sol"
    ],
    "contracts": {
      "AddressResolver": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "importAddresses",
            "signature": "importAddresses(bytes32[] names, address[] destinations)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [
              {
                "name": "require(..., \"Input lengths must match\")",
                "lineNumber": 20
              }
            ],
            "events": []
          },
          {
            "name": "rebuildCaches",
            "signature": "rebuildCaches(contract MixinResolver[] destinations)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 32,
            "requires": [],
            "events": []
          },
          {
            "name": "areAddressesImported",
            "signature": "areAddressesImported(bytes32[] names, address[] destinations) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 40,
            "requires": [],
            "events": []
          },
          {
            "name": "getAddress",
            "signature": "getAddress(bytes32 name) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 49,
            "requires": [],
            "events": []
          },
          {
            "name": "requireAndGetAddress",
            "signature": "requireAndGetAddress(bytes32 name, string reason) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 53,
            "requires": [
              {
                "name": "require(..., \"string calldata\")",
                "lineNumber": 55
              }
            ],
            "events": []
          },
          {
            "name": "getPynth",
            "signature": "getPynth(bytes32 key) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 59,
            "requires": [
              {
                "name": "require(..., \"Cannot find Issuer address\")",
                "lineNumber": 61
              }
            ],
            "events": []
          }
        ],
        "events": [
          {
            "name": "AddressImported",
            "parameters": "(bytes32 name, address destination)",
            "lineNumber": 67
          }
        ],
        "variables": [
          {
            "name": "repository",
            "type": "mapping(bytes32 => address)",
            "visibility": "public",
            "lineNumber": 13
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "IAddressResolver"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/AddressSetLib.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {
      "AddressSetLib": {
        "functions": [
          {
            "name": "contains",
            "signature": "contains(struct AddressSetLib.AddressSet set, address candidate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "getPage",
            "signature": "getPage(struct AddressSetLib.AddressSet set, uint256 index, uint256 pageSize) view",
            "returns": "(address[])",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "add",
            "signature": "add(struct AddressSetLib.AddressSet set, address element)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "remove",
            "signature": "remove(struct AddressSetLib.AddressSet set, address element)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 50,
            "requires": [
              {
                "name": "require(..., \"Element not in set.\")",
                "lineNumber": 51
              }
            ],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [
          {
            "name": "AddressSet",
            "members": [
              {
                "name": "elements",
                "type": "address[]"
              },
              {
                "name": "indices",
                "type": "mapping(address => uint256)"
              }
            ],
            "lineNumber": 5
          }
        ],
        "inherits": []
      }
    },
    "interfaces": {}
  },
  "contracts/BaseDebtCache.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinResolver.sol",
      "./MixinSystemSettings.sol",
      "./interfaces/IDebtCache.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IIssuer.sol",
      "./interfaces/IExchanger.sol",
      "./interfaces/IExchangeRates.sol",
      "./interfaces/ISystemStatus.sol",
      "./interfaces/IEtherCollateral.sol",
      "./interfaces/IEtherCollateralpUSD.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/ICollateralManager.sol"
    ],
    "contracts": {
      "BaseDebtCache": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 47,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 51,
            "requires": [],
            "events": []
          },
          {
            "name": "issuer",
            "signature": "issuer() view",
            "returns": "(contract IIssuer)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 64,
            "requires": [],
            "events": []
          },
          {
            "name": "exchanger",
            "signature": "exchanger() view",
            "returns": "(contract IExchanger)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 68,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeRates",
            "signature": "exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 72,
            "requires": [],
            "events": []
          },
          {
            "name": "systemStatus",
            "signature": "systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 76,
            "requires": [],
            "events": []
          },
          {
            "name": "etherCollateral",
            "signature": "etherCollateral() view",
            "returns": "(contract IEtherCollateral)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 80,
            "requires": [],
            "events": []
          },
          {
            "name": "etherCollateralpUSD",
            "signature": "etherCollateralpUSD() view",
            "returns": "(contract IEtherCollateralpUSD)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 84,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralManager",
            "signature": "collateralManager() view",
            "returns": "(contract ICollateralManager)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 88,
            "requires": [],
            "events": []
          },
          {
            "name": "debtSnapshotStaleTime",
            "signature": "debtSnapshotStaleTime() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 92,
            "requires": [],
            "events": []
          },
          {
            "name": "cachedDebt",
            "signature": "cachedDebt() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 96,
            "requires": [],
            "events": []
          },
          {
            "name": "cachedPynthDebt",
            "signature": "cachedPynthDebt(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 100,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheTimestamp",
            "signature": "cacheTimestamp() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 104,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheInvalid",
            "signature": "cacheInvalid() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 108,
            "requires": [],
            "events": []
          },
          {
            "name": "_cacheStale",
            "signature": "_cacheStale(uint256 timestamp) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 112,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheStale",
            "signature": "cacheStale() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 119,
            "requires": [],
            "events": []
          },
          {
            "name": "_issuedPynthValues",
            "signature": "_issuedPynthValues(bytes32[] currencyKeys, uint256[] rates) view",
            "returns": "(uint256[])",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 123,
            "requires": [],
            "events": []
          },
          {
            "name": "_currentPynthDebts",
            "signature": "_currentPynthDebts(bytes32[] currencyKeys) view",
            "returns": "(uint256[] periIssuedDebts, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 163,
            "requires": [],
            "events": []
          },
          {
            "name": "currentPynthDebts",
            "signature": "currentPynthDebts(bytes32[] currencyKeys) view",
            "returns": "(uint256[] debtValues, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 172,
            "requires": [],
            "events": []
          },
          {
            "name": "_cachedPynthDebts",
            "signature": "_cachedPynthDebts(bytes32[] currencyKeys) view",
            "returns": "(uint256[])",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 180,
            "requires": [],
            "events": []
          },
          {
            "name": "cachedPynthDebts",
            "signature": "cachedPynthDebts(bytes32[] currencyKeys) view",
            "returns": "(uint256[] periIssuedDebts)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 189,
            "requires": [],
            "events": []
          },
          {
            "name": "_currentDebt",
            "signature": "_currentDebt() view",
            "returns": "(uint256 debt, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 193,
            "requires": [],
            "events": []
          },
          {
            "name": "currentDebt",
            "signature": "currentDebt() view",
            "returns": "(uint256 debt, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 211,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheInfo",
            "signature": "cacheInfo() view",
            "returns": "(uint256 debt, uint256 timestamp, bool isInvalid, bool isStale)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 215,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebts",
            "signature": "updateCachedPynthDebts(bytes32[] currencyKeys)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 234,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebtWithRate",
            "signature": "updateCachedPynthDebtWithRate(bytes32 currencyKey, uint256 currencyRate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 236,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebtsWithRates",
            "signature": "updateCachedPynthDebtsWithRates(bytes32[] currencyKeys, uint256[] currencyRates)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 238,
            "requires": [],
            "events": []
          },
          {
            "name": "updateDebtCacheValidity",
            "signature": "updateDebtCacheValidity(bool currentlyInvalid)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 240,
            "requires": [],
            "events": []
          },
          {
            "name": "purgeCachedPynthDebt",
            "signature": "purgeCachedPynthDebt(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 242,
            "requires": [],
            "events": []
          },
          {
            "name": "takeDebtSnapshot",
            "signature": "takeDebtSnapshot()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 244,
            "requires": [],
            "events": []
          },
          {
            "name": "_requireSystemActiveIfNotOwner",
            "signature": "_requireSystemActiveIfNotOwner() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 248,
            "requires": [],
            "events": []
          },
          {
            "name": "_onlyIssuer",
            "signature": "_onlyIssuer() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 259,
            "requires": [
              {
                "name": "require(..., \"Sender is not Issuer\")",
                "lineNumber": 260
              }
            ],
            "events": []
          },
          {
            "name": "_onlyIssuerOrExchanger",
            "signature": "_onlyIssuerOrExchanger() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 268,
            "requires": [
              {
                "name": "require(..., \"Sender is not Issuer or Exchanger\")",
                "lineNumber": 269
              }
            ],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "_cachedDebt",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 27
          },
          {
            "name": "_cachedPynthDebt",
            "type": "mapping(bytes32 => uint256)",
            "visibility": "internal",
            "lineNumber": 28
          },
          {
            "name": "_cacheTimestamp",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 29
          },
          {
            "name": "_cacheInvalid",
            "type": "bool",
            "visibility": "internal",
            "lineNumber": 30
          },
          {
            "name": "pUSD",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 34
          },
          {
            "name": "pETH",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 35
          },
          {
            "name": "CONTRACT_ISSUER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 39
          },
          {
            "name": "CONTRACT_EXCHANGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 40
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 41
          },
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 42
          },
          {
            "name": "CONTRACT_ETHERCOLLATERAL",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 43
          },
          {
            "name": "CONTRACT_ETHERCOLLATERAL_PUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 44
          },
          {
            "name": "CONTRACT_COLLATERALMANAGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 45
          }
        ],
        "modifiers": [
          {
            "name": "requireSystemActiveIfNotOwner",
            "signature": "requireSystemActiveIfNotOwner()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 254
          },
          {
            "name": "onlyIssuer",
            "signature": "onlyIssuer()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 263
          },
          {
            "name": "onlyIssuerOrExchanger",
            "signature": "onlyIssuerOrExchanger()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 272
          }
        ],
        "structs": [],
        "inherits": [
          "Owned",
          "MixinSystemSettings",
          "IDebtCache"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/BasePeriFinance.sol": {
    "imports": [
      "./interfaces/IERC20.sol",
      "./ExternStateToken.sol",
      "./MixinResolver.sol",
      "./interfaces/IPeriFinance.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IPynth.sol",
      "./TokenState.sol",
      "./interfaces/IPeriFinanceState.sol",
      "./interfaces/ISystemStatus.sol",
      "./interfaces/IExchanger.sol",
      "./interfaces/IIssuer.sol",
      "./interfaces/IRewardsDistribution.sol",
      "./interfaces/IVirtualPynth.sol",
      "./interfaces/IStakingStateUSDC.sol"
    ],
    "contracts": {
      "BasePeriFinance": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address payable _proxy, contract TokenState _tokenState, address _owner, uint256 _totalSupply, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 45,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 60,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceState",
            "signature": "periFinanceState() view",
            "returns": "(contract IPeriFinanceState)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 70,
            "requires": [],
            "events": []
          },
          {
            "name": "systemStatus",
            "signature": "systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 74,
            "requires": [],
            "events": []
          },
          {
            "name": "exchanger",
            "signature": "exchanger() view",
            "returns": "(contract IExchanger)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 78,
            "requires": [],
            "events": []
          },
          {
            "name": "issuer",
            "signature": "issuer() view",
            "returns": "(contract IIssuer)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 82,
            "requires": [],
            "events": []
          },
          {
            "name": "stakingStateUSDC",
            "signature": "stakingStateUSDC() view",
            "returns": "(contract IStakingStateUSDC)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 86,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardsDistribution",
            "signature": "rewardsDistribution() view",
            "returns": "(contract IRewardsDistribution)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 90,
            "requires": [],
            "events": []
          },
          {
            "name": "getRequiredAddress",
            "signature": "getRequiredAddress(bytes32 _contractName) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 94,
            "requires": [],
            "events": []
          },
          {
            "name": "debtBalanceOf",
            "signature": "debtBalanceOf(address account, bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 100,
            "requires": [],
            "events": []
          },
          {
            "name": "totalIssuedPynths",
            "signature": "totalIssuedPynths(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 104,
            "requires": [],
            "events": []
          },
          {
            "name": "totalIssuedPynthsExcludeEtherCollateral",
            "signature": "totalIssuedPynthsExcludeEtherCollateral(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 108,
            "requires": [],
            "events": []
          },
          {
            "name": "availableCurrencyKeys",
            "signature": "availableCurrencyKeys() view",
            "returns": "(bytes32[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 112,
            "requires": [],
            "events": []
          },
          {
            "name": "availablePynthCount",
            "signature": "availablePynthCount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 116,
            "requires": [],
            "events": []
          },
          {
            "name": "availablePynths",
            "signature": "availablePynths(uint256 index) view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 120,
            "requires": [],
            "events": []
          },
          {
            "name": "pynths",
            "signature": "pynths(bytes32 currencyKey) view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 124,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthsByAddress",
            "signature": "pynthsByAddress(address pynthAddress) view",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 128,
            "requires": [],
            "events": []
          },
          {
            "name": "isWaitingPeriod",
            "signature": "isWaitingPeriod(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 132,
            "requires": [],
            "events": []
          },
          {
            "name": "anyPynthOrPERIRateIsInvalid",
            "signature": "anyPynthOrPERIRateIsInvalid() view",
            "returns": "(bool anyRateInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 136,
            "requires": [],
            "events": []
          },
          {
            "name": "maxIssuablePynths",
            "signature": "maxIssuablePynths(address account) view",
            "returns": "(uint256 maxIssuable)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 140,
            "requires": [],
            "events": []
          },
          {
            "name": "remainingIssuablePynths",
            "signature": "remainingIssuablePynths(address account) view",
            "returns": "(uint256 maxIssuable, uint256 alreadyIssued, uint256 totalSystemDebt)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 144,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralisationRatio",
            "signature": "collateralisationRatio(address _issuer) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 156,
            "requires": [],
            "events": []
          },
          {
            "name": "collateral",
            "signature": "collateral(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 160,
            "requires": [],
            "events": []
          },
          {
            "name": "transferablePeriFinance",
            "signature": "transferablePeriFinance(address account) view",
            "returns": "(uint256 transferable)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 164,
            "requires": [],
            "events": []
          },
          {
            "name": "currentUSDCDebtQuota",
            "signature": "currentUSDCDebtQuota(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 168,
            "requires": [],
            "events": []
          },
          {
            "name": "availableUSDCStakeAmount",
            "signature": "availableUSDCStakeAmount(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 174,
            "requires": [],
            "events": []
          },
          {
            "name": "usdcStakedAmountOf",
            "signature": "usdcStakedAmountOf(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 180,
            "requires": [],
            "events": []
          },
          {
            "name": "usdcTotalStakedAmount",
            "signature": "usdcTotalStakedAmount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 186,
            "requires": [],
            "events": []
          },
          {
            "name": "userUSDCStakingShare",
            "signature": "userUSDCStakingShare(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 192,
            "requires": [],
            "events": []
          },
          {
            "name": "totalUSDCStakerCount",
            "signature": "totalUSDCStakerCount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 198,
            "requires": [],
            "events": []
          },
          {
            "name": "_canTransfer",
            "signature": "_canTransfer(address account, uint256 value) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 204,
            "requires": [],
            "events": []
          },
          {
            "name": "exchange",
            "signature": "exchange(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [
              "exchangeActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 218,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeOnBehalf",
            "signature": "exchangeOnBehalf(address exchangeForAddress, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [
              "exchangeActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 227,
            "requires": [],
            "events": []
          },
          {
            "name": "settle",
            "signature": "settle(bytes32 currencyKey)",
            "returns": "(uint256 reclaimed, uint256 refunded, uint256 numEntriesSettled)",
            "modifiers": [
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 244,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeWithTracking",
            "signature": "exchangeWithTracking(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address originator, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [
              "exchangeActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 257,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeOnBehalfWithTracking",
            "signature": "exchangeOnBehalfWithTracking(address exchangeForAddress, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address originator, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [
              "exchangeActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 277,
            "requires": [],
            "events": []
          },
          {
            "name": "transfer",
            "signature": "transfer(address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [
              "optionalProxy",
              "systemActive"
            ],
            "visibility": "external",
            "lineNumber": 298,
            "requires": [],
            "events": []
          },
          {
            "name": "transferFrom",
            "signature": "transferFrom(address from, address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [
              "optionalProxy",
              "systemActive"
            ],
            "visibility": "external",
            "lineNumber": 308,
            "requires": [],
            "events": []
          },
          {
            "name": "issuePynthsAndStakeUSDC",
            "signature": "issuePynthsAndStakeUSDC(uint256 _issueAmount, uint256 _usdcStakeAmount)",
            "returns": "()",
            "modifiers": [
              "issuanceActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 321,
            "requires": [],
            "events": []
          },
          {
            "name": "issueMaxPynths",
            "signature": "issueMaxPynths()",
            "returns": "()",
            "modifiers": [
              "issuanceActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 327,
            "requires": [],
            "events": []
          },
          {
            "name": "issuePynthsAndStakeMaxUSDC",
            "signature": "issuePynthsAndStakeMaxUSDC(uint256 _issueAmount)",
            "returns": "()",
            "modifiers": [
              "issuanceActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 333,
            "requires": [],
            "events": []
          },
          {
            "name": "burnPynthsAndUnstakeUSDC",
            "signature": "burnPynthsAndUnstakeUSDC(uint256 _burnAmount, uint256 _unstakeAmount)",
            "returns": "()",
            "modifiers": [
              "issuanceActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 339,
            "requires": [],
            "events": []
          },
          {
            "name": "burnPynthsAndUnstakeUSDCToTarget",
            "signature": "burnPynthsAndUnstakeUSDCToTarget()",
            "returns": "()",
            "modifiers": [
              "issuanceActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 345,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeWithVirtual",
            "signature": "exchangeWithVirtual(bytes32, uint256, bytes32, bytes32)",
            "returns": "(uint256, contract IVirtualPynth)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 351,
            "requires": [],
            "events": []
          },
          {
            "name": "mint",
            "signature": "mint()",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 360,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidateDelinquentAccount",
            "signature": "liquidateDelinquentAccount(address, uint256)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 364,
            "requires": [],
            "events": []
          },
          {
            "name": "mintSecondary",
            "signature": "mintSecondary(address, uint256)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 368,
            "requires": [],
            "events": []
          },
          {
            "name": "mintSecondaryRewards",
            "signature": "mintSecondaryRewards(uint256)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 372,
            "requires": [],
            "events": []
          },
          {
            "name": "burnSecondary",
            "signature": "burnSecondary(address, uint256)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 376,
            "requires": [],
            "events": []
          },
          {
            "name": "_notImplemented",
            "signature": "_notImplemented() pure",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 380,
            "requires": [],
            "events": []
          },
          {
            "name": "_systemActive",
            "signature": "_systemActive()",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 391,
            "requires": [],
            "events": []
          },
          {
            "name": "_issuanceActive",
            "signature": "_issuanceActive()",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 400,
            "requires": [],
            "events": []
          },
          {
            "name": "_exchangeActive",
            "signature": "_exchangeActive(bytes32 src, bytes32 dest)",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 409,
            "requires": [],
            "events": []
          },
          {
            "name": "_onlyExchanger",
            "signature": "_onlyExchanger()",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 418,
            "requires": [
              {
                "name": "require(..., \"Only Exchanger can invoke this\")",
                "lineNumber": 419
              }
            ],
            "events": []
          },
          {
            "name": "emitPynthExchange",
            "signature": "emitPynthExchange(address account, bytes32 fromCurrencyKey, uint256 fromAmount, bytes32 toCurrencyKey, uint256 toAmount, address toAddress)",
            "returns": "()",
            "modifiers": [
              "onlyExchanger"
            ],
            "visibility": "external",
            "lineNumber": 434,
            "requires": [],
            "events": []
          },
          {
            "name": "emitExchangeTracking",
            "signature": "emitExchangeTracking(bytes32 trackingCode, bytes32 toCurrencyKey, uint256 toAmount)",
            "returns": "()",
            "modifiers": [
              "onlyExchanger"
            ],
            "visibility": "external",
            "lineNumber": 455,
            "requires": [],
            "events": []
          },
          {
            "name": "emitExchangeReclaim",
            "signature": "emitExchangeReclaim(address account, bytes32 currencyKey, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyExchanger"
            ],
            "visibility": "external",
            "lineNumber": 466,
            "requires": [],
            "events": []
          },
          {
            "name": "emitExchangeRebate",
            "signature": "emitExchangeRebate(address account, bytes32 currencyKey, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyExchanger"
            ],
            "visibility": "external",
            "lineNumber": 477,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "PynthExchange",
            "parameters": "(address account, bytes32 fromCurrencyKey, uint256 fromAmount, bytes32 toCurrencyKey, uint256 toAmount, address toAddress)",
            "lineNumber": 423
          },
          {
            "name": "ExchangeTracking",
            "parameters": "(bytes32 trackingCode, bytes32 toCurrencyKey, uint256 toAmount)",
            "lineNumber": 452
          },
          {
            "name": "ExchangeReclaim",
            "parameters": "(address account, bytes32 currencyKey, uint256 amount)",
            "lineNumber": 463
          },
          {
            "name": "ExchangeRebate",
            "parameters": "(address account, bytes32 currencyKey, uint256 amount)",
            "lineNumber": 474
          }
        ],
        "variables": [
          {
            "name": "TOKEN_NAME",
            "type": "string",
            "visibility": "public",
            "lineNumber": 30
          },
          {
            "name": "TOKEN_SYMBOL",
            "type": "string",
            "visibility": "public",
            "lineNumber": 31
          },
          {
            "name": "DECIMALS",
            "type": "uint8",
            "visibility": "public",
            "lineNumber": 32
          },
          {
            "name": "pUSD",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 33
          },
          {
            "name": "CONTRACT_PERIFINANCESTATE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 36
          },
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 37
          },
          {
            "name": "CONTRACT_EXCHANGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 38
          },
          {
            "name": "CONTRACT_ISSUER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 39
          },
          {
            "name": "CONTRACT_REWARDSDISTRIBUTION",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 40
          },
          {
            "name": "CONTRACT_STAKINGSTATE_USDC",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 41
          },
          {
            "name": "PYNTHEXCHANGE_SIG",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 431
          },
          {
            "name": "EXCHANGE_TRACKING_SIG",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 453
          },
          {
            "name": "EXCHANGERECLAIM_SIG",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 464
          },
          {
            "name": "EXCHANGEREBATE_SIG",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 475
          }
        ],
        "modifiers": [
          {
            "name": "systemActive",
            "signature": "systemActive()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 386
          },
          {
            "name": "issuanceActive",
            "signature": "issuanceActive()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 395
          },
          {
            "name": "exchangeActive",
            "signature": "exchangeActive(bytes32 src, bytes32 dest)",
            "visibility": "internal",
            "parameters": "(bytes32 src, bytes32 dest)",
            "lineNumber": 404
          },
          {
            "name": "onlyExchanger",
            "signature": "onlyExchanger()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 413
          }
        ],
        "structs": [],
        "inherits": [
          "IERC20",
          "ExternStateToken",
          "MixinResolver",
          "IPeriFinance"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/BaseRewardEscrowV2.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinResolver.sol",
      "./LimitedSetup.sol",
      "./interfaces/IRewardEscrowV2.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IFeePool.sol",
      "./interfaces/IPeriFinance.sol",
      "./interfaces/IIssuer.sol"
    ],
    "contracts": {
      "BaseRewardEscrowV2": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 63,
            "requires": [],
            "events": []
          },
          {
            "name": "feePool",
            "signature": "feePool() view",
            "returns": "(contract IFeePool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 69,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinance",
            "signature": "periFinance() view",
            "returns": "(contract IPeriFinance)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 73,
            "requires": [],
            "events": []
          },
          {
            "name": "issuer",
            "signature": "issuer() view",
            "returns": "(contract IIssuer)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 77,
            "requires": [],
            "events": []
          },
          {
            "name": "_notImplemented",
            "signature": "_notImplemented() pure",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 81,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 88,
            "requires": [],
            "events": []
          },
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 98,
            "requires": [],
            "events": []
          },
          {
            "name": "numVestingEntries",
            "signature": "numVestingEntries(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 105,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingEntry",
            "signature": "getVestingEntry(address account, uint256 entryID) view",
            "returns": "(uint64 endTime, uint256 escrowAmount)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 113,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingSchedules",
            "signature": "getVestingSchedules(address account, uint256 index, uint256 pageSize) view",
            "returns": "(struct VestingEntries.VestingEntryWithID[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 118,
            "requires": [],
            "events": []
          },
          {
            "name": "getAccountVestingEntryIDs",
            "signature": "getAccountVestingEntryIDs(address account, uint256 index, uint256 pageSize) view",
            "returns": "(uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 151,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingQuantity",
            "signature": "getVestingQuantity(address account, uint256[] entryIDs) view",
            "returns": "(uint256 total)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 174,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingEntryClaimable",
            "signature": "getVestingEntryClaimable(address account, uint256 entryID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 188,
            "requires": [],
            "events": []
          },
          {
            "name": "_claimableAmount",
            "signature": "_claimableAmount(struct VestingEntries.VestingEntry _entry) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 193,
            "requires": [],
            "events": []
          },
          {
            "name": "vest",
            "signature": "vest(uint256[] entryIDs)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 209,
            "requires": [],
            "events": []
          },
          {
            "name": "createEscrowEntry",
            "signature": "createEscrowEntry(address beneficiary, uint256 deposit, uint256 duration)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 239,
            "requires": [
              {
                "name": "require(..., \"Cannot create escrow with address(0)\")",
                "lineNumber": 244
              },
              {
                "name": "require(..., \"token transfer failed\")",
                "lineNumber": 247
              }
            ],
            "events": []
          },
          {
            "name": "appendVestingEntry",
            "signature": "appendVestingEntry(address account, uint256 quantity, uint256 duration)",
            "returns": "()",
            "modifiers": [
              "onlyFeePool"
            ],
            "visibility": "external",
            "lineNumber": 261,
            "requires": [],
            "events": []
          },
          {
            "name": "_transferVestedTokens",
            "signature": "_transferVestedTokens(address _account, uint256 _amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 270,
            "requires": [],
            "events": [
              "Vested"
            ]
          },
          {
            "name": "_reduceAccountEscrowBalances",
            "signature": "_reduceAccountEscrowBalances(address _account, uint256 _amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 277,
            "requires": [],
            "events": []
          },
          {
            "name": "accountMergingIsOpen",
            "signature": "accountMergingIsOpen() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 285,
            "requires": [],
            "events": []
          },
          {
            "name": "startMergingWindow",
            "signature": "startMergingWindow()",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 289,
            "requires": [],
            "events": [
              "AccountMergingStarted"
            ]
          },
          {
            "name": "setAccountMergingDuration",
            "signature": "setAccountMergingDuration(uint256 duration)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 294,
            "requires": [
              {
                "name": "require(..., \"exceeds max merging duration\")",
                "lineNumber": 295
              }
            ],
            "events": [
              "AccountMergingDurationUpdated"
            ]
          },
          {
            "name": "setMaxAccountMergingWindow",
            "signature": "setMaxAccountMergingWindow(uint256 duration)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 300,
            "requires": [],
            "events": [
              "MaxAccountMergingDurationUpdated"
            ]
          },
          {
            "name": "setMaxEscrowDuration",
            "signature": "setMaxEscrowDuration(uint256 duration)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 305,
            "requires": [],
            "events": [
              "MaxEscrowDurationUpdated"
            ]
          },
          {
            "name": "nominateAccountToMerge",
            "signature": "nominateAccountToMerge(address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 311,
            "requires": [
              {
                "name": "require(..., \"Cannot nominate own account to merge\")",
                "lineNumber": 312
              },
              {
                "name": "require(..., \"Account merging has ended\")",
                "lineNumber": 313
              },
              {
                "name": "require(..., \"Cannot merge accounts with debt\")",
                "lineNumber": 314
              }
            ],
            "events": [
              "NominateAccountToMerge"
            ]
          },
          {
            "name": "mergeAccount",
            "signature": "mergeAccount(address accountToMerge, uint256[] entryIDs)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 319,
            "requires": [
              {
                "name": "require(..., \"Account merging has ended\")",
                "lineNumber": 320
              },
              {
                "name": "require(..., \"Cannot merge accounts with debt\")",
                "lineNumber": 321
              },
              {
                "name": "require(..., \"Address is not nominated to merge\")",
                "lineNumber": 322
              }
            ],
            "events": [
              "AccountMerged"
            ]
          },
          {
            "name": "_addVestingEntry",
            "signature": "_addVestingEntry(address account, struct VestingEntries.VestingEntry entry)",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 355,
            "requires": [],
            "events": []
          },
          {
            "name": "migrateVestingSchedule",
            "signature": "migrateVestingSchedule(address)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 370,
            "requires": [],
            "events": []
          },
          {
            "name": "migrateAccountEscrowBalances",
            "signature": "migrateAccountEscrowBalances(address[], uint256[], uint256[])",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 374,
            "requires": [],
            "events": []
          },
          {
            "name": "burnForMigration",
            "signature": "burnForMigration(address, uint256[])",
            "returns": "(uint256, struct VestingEntries.VestingEntry[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 384,
            "requires": [],
            "events": []
          },
          {
            "name": "importVestingEntries",
            "signature": "importVestingEntries(address, uint256, struct VestingEntries.VestingEntry[])",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 388,
            "requires": [],
            "events": []
          },
          {
            "name": "_appendVestingEntry",
            "signature": "_appendVestingEntry(address account, uint256 quantity, uint256 duration)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 398,
            "requires": [
              {
                "name": "require(..., \"Quantity cannot be zero\")",
                "lineNumber": 404
              },
              {
                "name": "require(..., \"Cannot escrow with 0 duration OR above max_duration\")",
                "lineNumber": 405
              },
              {
                "name": "require(..., \"Must be enough balance in the contract to provide for the vesting entry\")",
                "lineNumber": 410
              }
            ],
            "events": [
              "VestingEntryCreated"
            ]
          }
        ],
        "events": [
          {
            "name": "Vested",
            "parameters": "(address beneficiary, uint256 time, uint256 value)",
            "lineNumber": 439
          },
          {
            "name": "VestingEntryCreated",
            "parameters": "(address beneficiary, uint256 time, uint256 value, uint256 duration, uint256 entryID)",
            "lineNumber": 440
          },
          {
            "name": "MaxEscrowDurationUpdated",
            "parameters": "(uint256 newDuration)",
            "lineNumber": 441
          },
          {
            "name": "MaxAccountMergingDurationUpdated",
            "parameters": "(uint256 newDuration)",
            "lineNumber": 442
          },
          {
            "name": "AccountMergingDurationUpdated",
            "parameters": "(uint256 newDuration)",
            "lineNumber": 443
          },
          {
            "name": "AccountMergingStarted",
            "parameters": "(uint256 time, uint256 endTime)",
            "lineNumber": 444
          },
          {
            "name": "AccountMerged",
            "parameters": "(address accountToMerge, address destinationAddress, uint256 escrowAmountMerged, uint256[] entryIDs, uint256 time)",
            "lineNumber": 445
          },
          {
            "name": "NominateAccountToMerge",
            "parameters": "(address account, address destination)",
            "lineNumber": 452
          }
        ],
        "variables": [
          {
            "name": "vestingSchedules",
            "type": "mapping(address => mapping(uint256 => struct VestingEntries.VestingEntry))",
            "visibility": "public",
            "lineNumber": 24
          },
          {
            "name": "accountVestingEntryIDs",
            "type": "mapping(address => uint256[])",
            "visibility": "public",
            "lineNumber": 26
          },
          {
            "name": "nextEntryId",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 29
          },
          {
            "name": "totalEscrowedAccountBalance",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 32
          },
          {
            "name": "totalVestedAccountBalance",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 35
          },
          {
            "name": "nominatedReceiver",
            "type": "mapping(address => address)",
            "visibility": "public",
            "lineNumber": 38
          },
          {
            "name": "totalEscrowedBalance",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 41
          },
          {
            "name": "max_duration",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 44
          },
          {
            "name": "maxAccountMergingDuration",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 47
          },
          {
            "name": "accountMergingDuration",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 51
          },
          {
            "name": "accountMergingStartTime",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 53
          },
          {
            "name": "CONTRACT_PERIFINANCE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 57
          },
          {
            "name": "CONTRACT_ISSUER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 58
          },
          {
            "name": "CONTRACT_FEEPOOL",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 59
          }
        ],
        "modifiers": [
          {
            "name": "onlyFeePool",
            "signature": "onlyFeePool()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 433
          }
        ],
        "structs": [],
        "inherits": [
          "Owned",
          "IRewardEscrowV2",
          "LimitedSetup",
          "MixinResolver"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/BinaryOption.sol": {
    "imports": [
      "./interfaces/IERC20.sol",
      "./interfaces/IBinaryOption.sol",
      "./SafeDecimalMath.sol",
      "./BinaryOptionMarket.sol"
    ],
    "contracts": {
      "BinaryOption": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address initialBidder, uint256 initialBid)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "_claimableBalanceOf",
            "signature": "_claimableBalanceOf(uint256 _bid, uint256 price, uint256 exercisableDeposits) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 50,
            "requires": [
              {
                "name": "require(..., \"supply < claimable\")",
                "lineNumber": 74
              }
            ],
            "events": []
          },
          {
            "name": "claimableBalanceOf",
            "signature": "claimableBalanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 78,
            "requires": [],
            "events": []
          },
          {
            "name": "_totalClaimableSupply",
            "signature": "_totalClaimableSupply(uint256 exercisableDeposits) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 83,
            "requires": [],
            "events": []
          },
          {
            "name": "totalClaimableSupply",
            "signature": "totalClaimableSupply() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 93,
            "requires": [],
            "events": []
          },
          {
            "name": "_requireMinimumBid",
            "signature": "_requireMinimumBid(uint256 bid) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 100,
            "requires": [
              {
                "name": "require(..., \"Balance < $0.01\")",
                "lineNumber": 101
              }
            ],
            "events": []
          },
          {
            "name": "bid",
            "signature": "bid(address bidder, uint256 newBid)",
            "returns": "()",
            "modifiers": [
              "onlyMarket"
            ],
            "visibility": "external",
            "lineNumber": 106,
            "requires": [],
            "events": []
          },
          {
            "name": "refund",
            "signature": "refund(address bidder, uint256 newRefund)",
            "returns": "()",
            "modifiers": [
              "onlyMarket"
            ],
            "visibility": "external",
            "lineNumber": 112,
            "requires": [],
            "events": []
          },
          {
            "name": "claim",
            "signature": "claim(address claimant, uint256 price, uint256 depositsRemaining)",
            "returns": "(uint256 optionsClaimed)",
            "modifiers": [
              "onlyMarket"
            ],
            "visibility": "external",
            "lineNumber": 119,
            "requires": [],
            "events": [
              "Transfer",
              "Issued"
            ]
          },
          {
            "name": "exercise",
            "signature": "exercise(address claimant)",
            "returns": "()",
            "modifiers": [
              "onlyMarket"
            ],
            "visibility": "external",
            "lineNumber": 144,
            "requires": [],
            "events": [
              "Transfer",
              "Burned"
            ]
          },
          {
            "name": "expire",
            "signature": "expire(address payable beneficiary)",
            "returns": "()",
            "modifiers": [
              "onlyMarket"
            ],
            "visibility": "external",
            "lineNumber": 160,
            "requires": [],
            "events": []
          },
          {
            "name": "_transfer",
            "signature": "_transfer(address _from, address _to, uint256 _value)",
            "returns": "(bool success)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 169,
            "requires": [
              {
                "name": "require(..., \"Invalid address\")",
                "lineNumber": 175
              },
              {
                "name": "require(..., \"Insufficient balance\")",
                "lineNumber": 178
              }
            ],
            "events": [
              "Transfer"
            ]
          },
          {
            "name": "transfer",
            "signature": "transfer(address _to, uint256 _value)",
            "returns": "(bool success)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 187,
            "requires": [],
            "events": []
          },
          {
            "name": "transferFrom",
            "signature": "transferFrom(address _from, address _to, uint256 _value)",
            "returns": "(bool success)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 191,
            "requires": [
              {
                "name": "require(..., \"Insufficient allowance\")",
                "lineNumber": 197
              }
            ],
            "events": []
          },
          {
            "name": "approve",
            "signature": "approve(address _spender, uint256 _value)",
            "returns": "(bool success)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 203,
            "requires": [
              {
                "name": "require(..., \"bool\")",
                "lineNumber": 204
              }
            ],
            "events": [
              "Approval"
            ]
          }
        ],
        "events": [
          {
            "name": "Issued",
            "parameters": "(address account, uint256 value)",
            "lineNumber": 219
          },
          {
            "name": "Burned",
            "parameters": "(address account, uint256 value)",
            "lineNumber": 220
          },
          {
            "name": "Transfer",
            "parameters": "(address from, address to, uint256 value)",
            "lineNumber": 221
          },
          {
            "name": "Approval",
            "parameters": "(address owner, address spender, uint256 value)",
            "lineNumber": 222
          }
        ],
        "variables": [
          {
            "name": "name",
            "type": "string",
            "visibility": "public",
            "lineNumber": 22
          },
          {
            "name": "symbol",
            "type": "string",
            "visibility": "public",
            "lineNumber": 23
          },
          {
            "name": "decimals",
            "type": "uint8",
            "visibility": "public",
            "lineNumber": 24
          },
          {
            "name": "market",
            "type": "contract BinaryOptionMarket",
            "visibility": "public",
            "lineNumber": 26
          },
          {
            "name": "bidOf",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 28
          },
          {
            "name": "totalBids",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 29
          },
          {
            "name": "balanceOf",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 31
          },
          {
            "name": "totalSupply",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 32
          },
          {
            "name": "allowance",
            "type": "mapping(address => mapping(address => uint256))",
            "visibility": "public",
            "lineNumber": 35
          },
          {
            "name": "_MINIMUM_BID",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 38
          }
        ],
        "modifiers": [
          {
            "name": "onlyMarket",
            "signature": "onlyMarket()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 212
          }
        ],
        "structs": [],
        "inherits": [
          "IERC20",
          "IBinaryOption"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/BinaryOptionMarket.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinResolver.sol",
      "./interfaces/IBinaryOptionMarket.sol",
      "./SafeDecimalMath.sol",
      "./BinaryOptionMarketManager.sol",
      "./BinaryOption.sol",
      "./interfaces/IExchangeRates.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IFeePool.sol"
    ],
    "contracts": {
      "BinaryOptionMarket": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _creator, address _resolver, uint256[2] _creatorLimits, bytes32 _oracleKey, uint256 _strikePrice, bool _refundsEnabled, uint256[3] _times, uint256[2] _bids, uint256[3] _fees)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 76,
            "requires": [],
            "events": [
              "Bid",
              "Bid"
            ]
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 121,
            "requires": [],
            "events": []
          },
          {
            "name": "_systemStatus",
            "signature": "_systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 131,
            "requires": [],
            "events": []
          },
          {
            "name": "_exchangeRates",
            "signature": "_exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 135,
            "requires": [],
            "events": []
          },
          {
            "name": "_pUSD",
            "signature": "_pUSD() view",
            "returns": "(contract IERC20)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 139,
            "requires": [],
            "events": []
          },
          {
            "name": "_feePool",
            "signature": "_feePool() view",
            "returns": "(contract IFeePool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 143,
            "requires": [],
            "events": []
          },
          {
            "name": "_manager",
            "signature": "_manager() view",
            "returns": "(contract BinaryOptionMarketManager)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 147,
            "requires": [],
            "events": []
          },
          {
            "name": "_biddingEnded",
            "signature": "_biddingEnded() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 153,
            "requires": [],
            "events": []
          },
          {
            "name": "_matured",
            "signature": "_matured() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 157,
            "requires": [],
            "events": []
          },
          {
            "name": "_expired",
            "signature": "_expired() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 161,
            "requires": [],
            "events": []
          },
          {
            "name": "phase",
            "signature": "phase() view",
            "returns": "(enum IBinaryOptionMarket.Phase)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 165,
            "requires": [],
            "events": []
          },
          {
            "name": "_oraclePriceAndTimestamp",
            "signature": "_oraclePriceAndTimestamp() view",
            "returns": "(uint256 price, uint256 updatedAt)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 180,
            "requires": [],
            "events": []
          },
          {
            "name": "oraclePriceAndTimestamp",
            "signature": "oraclePriceAndTimestamp() view",
            "returns": "(uint256 price, uint256 updatedAt)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 184,
            "requires": [],
            "events": []
          },
          {
            "name": "_isFreshPriceUpdateTime",
            "signature": "_isFreshPriceUpdateTime(uint256 timestamp) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 188,
            "requires": [],
            "events": []
          },
          {
            "name": "canResolve",
            "signature": "canResolve() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 193,
            "requires": [],
            "events": []
          },
          {
            "name": "_result",
            "signature": "_result() view",
            "returns": "(enum IBinaryOptionMarket.Side)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 198,
            "requires": [],
            "events": []
          },
          {
            "name": "result",
            "signature": "result() view",
            "returns": "(enum IBinaryOptionMarket.Side)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 209,
            "requires": [],
            "events": []
          },
          {
            "name": "_computePrices",
            "signature": "_computePrices(uint256 longBids, uint256 shortBids, uint256 _deposited) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 215,
            "requires": [
              {
                "name": "require(..., \"Bids must be nonzero\")",
                "lineNumber": 220
              }
            ],
            "events": []
          },
          {
            "name": "senderPriceAndExercisableDeposits",
            "signature": "senderPriceAndExercisableDeposits() view",
            "returns": "(uint256 price, uint256 exercisable)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 228,
            "requires": [],
            "events": []
          },
          {
            "name": "pricesAfterBidOrRefund",
            "signature": "pricesAfterBidOrRefund(enum IBinaryOptionMarket.Side side, uint256 value, bool refund) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 246,
            "requires": [],
            "events": []
          },
          {
            "name": "bidOrRefundForPrice",
            "signature": "bidOrRefundForPrice(enum IBinaryOptionMarket.Side bidSide, enum IBinaryOptionMarket.Side priceSide, uint256 price, bool refund) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 268,
            "requires": [],
            "events": []
          },
          {
            "name": "_bidsOf",
            "signature": "_bidsOf(address account) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 307,
            "requires": [],
            "events": []
          },
          {
            "name": "bidsOf",
            "signature": "bidsOf(address account) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 311,
            "requires": [],
            "events": []
          },
          {
            "name": "_totalBids",
            "signature": "_totalBids() view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 315,
            "requires": [],
            "events": []
          },
          {
            "name": "totalBids",
            "signature": "totalBids() view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 319,
            "requires": [],
            "events": []
          },
          {
            "name": "_claimableBalancesOf",
            "signature": "_claimableBalancesOf(address account) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 323,
            "requires": [],
            "events": []
          },
          {
            "name": "claimableBalancesOf",
            "signature": "claimableBalancesOf(address account) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 327,
            "requires": [],
            "events": []
          },
          {
            "name": "totalClaimableSupplies",
            "signature": "totalClaimableSupplies() view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 331,
            "requires": [],
            "events": []
          },
          {
            "name": "_balancesOf",
            "signature": "_balancesOf(address account) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 335,
            "requires": [],
            "events": []
          },
          {
            "name": "balancesOf",
            "signature": "balancesOf(address account) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 339,
            "requires": [],
            "events": []
          },
          {
            "name": "totalSupplies",
            "signature": "totalSupplies() view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 343,
            "requires": [],
            "events": []
          },
          {
            "name": "_exercisableDeposits",
            "signature": "_exercisableDeposits(uint256 _deposited) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 347,
            "requires": [],
            "events": []
          },
          {
            "name": "exercisableDeposits",
            "signature": "exercisableDeposits() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 352,
            "requires": [],
            "events": []
          },
          {
            "name": "_chooseSide",
            "signature": "_chooseSide(enum IBinaryOptionMarket.Side side, uint256 longValue, uint256 shortValue) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 358,
            "requires": [],
            "events": []
          },
          {
            "name": "_option",
            "signature": "_option(enum IBinaryOptionMarket.Side side) view",
            "returns": "(contract BinaryOption)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 369,
            "requires": [],
            "events": []
          },
          {
            "name": "_subToZero",
            "signature": "_subToZero(uint256 a, uint256 b) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 377,
            "requires": [],
            "events": []
          },
          {
            "name": "_checkCreatorLimits",
            "signature": "_checkCreatorLimits(uint256 longBid, uint256 shortBid) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 381,
            "requires": [
              {
                "name": "require(..., \"Insufficient capital\")",
                "lineNumber": 383
              },
              {
                "name": "require(..., \"Bids too skewed\")",
                "lineNumber": 385
              }
            ],
            "events": []
          },
          {
            "name": "_incrementDeposited",
            "signature": "_incrementDeposited(uint256 value)",
            "returns": "(uint256 _deposited)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 391,
            "requires": [],
            "events": []
          },
          {
            "name": "_decrementDeposited",
            "signature": "_decrementDeposited(uint256 value)",
            "returns": "(uint256 _deposited)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 397,
            "requires": [],
            "events": []
          },
          {
            "name": "_requireManagerNotPaused",
            "signature": "_requireManagerNotPaused() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 403,
            "requires": [
              {
                "name": "require(..., \"This action cannot be performed while the contract is paused\")",
                "lineNumber": 404
              }
            ],
            "events": []
          },
          {
            "name": "requireActiveAndUnpaused",
            "signature": "requireActiveAndUnpaused() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 407,
            "requires": [
              {
                "name": "_requireManagerNotPaused",
                "lineNumber": 409
              }
            ],
            "events": []
          },
          {
            "name": "_updatePrices",
            "signature": "_updatePrices(uint256 longBids, uint256 shortBids, uint256 _deposited)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 416,
            "requires": [],
            "events": [
              "PricesUpdated"
            ]
          },
          {
            "name": "bid",
            "signature": "bid(enum IBinaryOptionMarket.Side side, uint256 value)",
            "returns": "()",
            "modifiers": [
              "duringBidding"
            ],
            "visibility": "external",
            "lineNumber": 426,
            "requires": [],
            "events": [
              "Bid"
            ]
          },
          {
            "name": "refund",
            "signature": "refund(enum IBinaryOptionMarket.Side side, uint256 value)",
            "returns": "(uint256 refundMinusFee)",
            "modifiers": [
              "duringBidding"
            ],
            "visibility": "external",
            "lineNumber": 441,
            "requires": [
              {
                "name": "require(..., \"Refunds disabled\")",
                "lineNumber": 442
              }
            ],
            "events": [
              "Refund"
            ]
          },
          {
            "name": "resolve",
            "signature": "resolve()",
            "returns": "()",
            "modifiers": [
              "onlyOwner",
              "afterMaturity",
              "systemActive",
              "managerNotPaused"
            ],
            "visibility": "external",
            "lineNumber": 472,
            "requires": [
              {
                "name": "require(..., \"Market already resolved\")",
                "lineNumber": 473
              },
              {
                "name": "require(..., \"Price is stale\")",
                "lineNumber": 478
              }
            ],
            "events": [
              "MarketResolved"
            ]
          },
          {
            "name": "_claimOptions",
            "signature": "_claimOptions()",
            "returns": "(uint256 longClaimed, uint256 shortClaimed)",
            "modifiers": [
              "systemActive",
              "managerNotPaused",
              "afterBidding"
            ],
            "visibility": "internal",
            "lineNumber": 500,
            "requires": [
              {
                "name": "require(..., \"Nothing to claim\")",
                "lineNumber": 521
              }
            ],
            "events": [
              "OptionsClaimed"
            ]
          },
          {
            "name": "claimOptions",
            "signature": "claimOptions()",
            "returns": "(uint256 longClaimed, uint256 shortClaimed)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 526,
            "requires": [],
            "events": []
          },
          {
            "name": "exerciseOptions",
            "signature": "exerciseOptions()",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 530,
            "requires": [
              {
                "name": "require(..., \"Nothing to exercise\")",
                "lineNumber": 544
              }
            ],
            "events": [
              "OptionsExercised"
            ]
          },
          {
            "name": "_selfDestruct",
            "signature": "_selfDestruct(address payable beneficiary)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 566,
            "requires": [],
            "events": []
          },
          {
            "name": "cancel",
            "signature": "cancel(address payable beneficiary)",
            "returns": "()",
            "modifiers": [
              "onlyOwner",
              "duringBidding"
            ],
            "visibility": "external",
            "lineNumber": 586,
            "requires": [
              {
                "name": "require(..., \"Not cancellable\")",
                "lineNumber": 590
              }
            ],
            "events": []
          },
          {
            "name": "expire",
            "signature": "expire(address payable beneficiary)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 594,
            "requires": [
              {
                "name": "require(..., \"Unexpired options remaining\")",
                "lineNumber": 595
              }
            ],
            "events": []
          }
        ],
        "events": [
          {
            "name": "Bid",
            "parameters": "(enum IBinaryOptionMarket.Side side, address account, uint256 value)",
            "lineNumber": 628
          },
          {
            "name": "Refund",
            "parameters": "(enum IBinaryOptionMarket.Side side, address account, uint256 value, uint256 fee)",
            "lineNumber": 629
          },
          {
            "name": "PricesUpdated",
            "parameters": "(uint256 longPrice, uint256 shortPrice)",
            "lineNumber": 630
          },
          {
            "name": "MarketResolved",
            "parameters": "(enum IBinaryOptionMarket.Side result, uint256 oraclePrice, uint256 oracleTimestamp, uint256 deposited, uint256 poolFees, uint256 creatorFees)",
            "lineNumber": 631
          },
          {
            "name": "OptionsClaimed",
            "parameters": "(address account, uint256 longOptions, uint256 shortOptions)",
            "lineNumber": 639
          },
          {
            "name": "OptionsExercised",
            "parameters": "(address account, uint256 value)",
            "lineNumber": 640
          }
        ],
        "variables": [
          {
            "name": "options",
            "type": "struct BinaryOptionMarket.Options",
            "visibility": "public",
            "lineNumber": 51
          },
          {
            "name": "prices",
            "type": "struct BinaryOptionMarket.Prices",
            "visibility": "public",
            "lineNumber": 52
          },
          {
            "name": "times",
            "type": "struct BinaryOptionMarket.Times",
            "visibility": "public",
            "lineNumber": 53
          },
          {
            "name": "oracleDetails",
            "type": "struct BinaryOptionMarket.OracleDetails",
            "visibility": "public",
            "lineNumber": 54
          },
          {
            "name": "fees",
            "type": "struct BinaryOptionMarketManager.Fees",
            "visibility": "public",
            "lineNumber": 55
          },
          {
            "name": "creatorLimits",
            "type": "struct BinaryOptionMarketManager.CreatorLimits",
            "visibility": "public",
            "lineNumber": 56
          },
          {
            "name": "deposited",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 60
          },
          {
            "name": "creator",
            "type": "address",
            "visibility": "public",
            "lineNumber": 61
          },
          {
            "name": "resolved",
            "type": "bool",
            "visibility": "public",
            "lineNumber": 62
          },
          {
            "name": "refundsEnabled",
            "type": "bool",
            "visibility": "public",
            "lineNumber": 63
          },
          {
            "name": "_feeMultiplier",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 65
          },
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 69
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 70
          },
          {
            "name": "CONTRACT_PYNTHPUSD",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 71
          },
          {
            "name": "CONTRACT_FEEPOOL",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 72
          }
        ],
        "modifiers": [
          {
            "name": "duringBidding",
            "signature": "duringBidding()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 601
          },
          {
            "name": "afterBidding",
            "signature": "afterBidding()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 606
          },
          {
            "name": "afterMaturity",
            "signature": "afterMaturity()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 611
          },
          {
            "name": "systemActive",
            "signature": "systemActive()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 616
          },
          {
            "name": "managerNotPaused",
            "signature": "managerNotPaused()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 621
          }
        ],
        "structs": [
          {
            "name": "Options",
            "members": [
              {
                "name": "long",
                "type": "contract BinaryOption"
              },
              {
                "name": "short",
                "type": "contract BinaryOption"
              }
            ],
            "lineNumber": 27
          },
          {
            "name": "Prices",
            "members": [
              {
                "name": "long",
                "type": "uint256"
              },
              {
                "name": "short",
                "type": "uint256"
              }
            ],
            "lineNumber": 32
          },
          {
            "name": "Times",
            "members": [
              {
                "name": "biddingEnd",
                "type": "uint256"
              },
              {
                "name": "maturity",
                "type": "uint256"
              },
              {
                "name": "expiry",
                "type": "uint256"
              }
            ],
            "lineNumber": 37
          },
          {
            "name": "OracleDetails",
            "members": [
              {
                "name": "key",
                "type": "bytes32"
              },
              {
                "name": "strikePrice",
                "type": "uint256"
              },
              {
                "name": "finalPrice",
                "type": "uint256"
              }
            ],
            "lineNumber": 43
          }
        ],
        "inherits": [
          "Owned",
          "MixinResolver",
          "IBinaryOptionMarket"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/BinaryOptionMarketData.sol": {
    "imports": [
      "./BinaryOption.sol",
      "./BinaryOptionMarket.sol",
      "./BinaryOptionMarketManager.sol"
    ],
    "contracts": {
      "BinaryOptionMarketData": {
        "functions": [
          {
            "name": "getMarketParameters",
            "signature": "getMarketParameters(contract BinaryOptionMarket market) view",
            "returns": "(struct BinaryOptionMarketData.MarketParameters)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 59,
            "requires": [],
            "events": []
          },
          {
            "name": "getMarketData",
            "signature": "getMarketData(contract BinaryOptionMarket market) view",
            "returns": "(struct BinaryOptionMarketData.MarketData)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 81,
            "requires": [],
            "events": []
          },
          {
            "name": "getAccountMarketData",
            "signature": "getAccountMarketData(contract BinaryOptionMarket market, address account) view",
            "returns": "(struct BinaryOptionMarketData.AccountData)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 102,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [
          {
            "name": "OptionValues",
            "members": [
              {
                "name": "long",
                "type": "uint256"
              },
              {
                "name": "short",
                "type": "uint256"
              }
            ],
            "lineNumber": 11
          },
          {
            "name": "Deposits",
            "members": [
              {
                "name": "deposited",
                "type": "uint256"
              },
              {
                "name": "exercisableDeposits",
                "type": "uint256"
              }
            ],
            "lineNumber": 16
          },
          {
            "name": "Resolution",
            "members": [
              {
                "name": "resolved",
                "type": "bool"
              },
              {
                "name": "canResolve",
                "type": "bool"
              }
            ],
            "lineNumber": 21
          },
          {
            "name": "OraclePriceAndTimestamp",
            "members": [
              {
                "name": "price",
                "type": "uint256"
              },
              {
                "name": "updatedAt",
                "type": "uint256"
              }
            ],
            "lineNumber": 26
          },
          {
            "name": "MarketParameters",
            "members": [
              {
                "name": "creator",
                "type": "address"
              },
              {
                "name": "options",
                "type": "struct BinaryOptionMarket.Options"
              },
              {
                "name": "times",
                "type": "struct BinaryOptionMarket.Times"
              },
              {
                "name": "oracleDetails",
                "type": "struct BinaryOptionMarket.OracleDetails"
              },
              {
                "name": "fees",
                "type": "struct BinaryOptionMarketManager.Fees"
              },
              {
                "name": "creatorLimits",
                "type": "struct BinaryOptionMarketManager.CreatorLimits"
              }
            ],
            "lineNumber": 32
          },
          {
            "name": "MarketData",
            "members": [
              {
                "name": "oraclePriceAndTimestamp",
                "type": "struct BinaryOptionMarketData.OraclePriceAndTimestamp"
              },
              {
                "name": "prices",
                "type": "struct BinaryOptionMarket.Prices"
              },
              {
                "name": "deposits",
                "type": "struct BinaryOptionMarketData.Deposits"
              },
              {
                "name": "resolution",
                "type": "struct BinaryOptionMarketData.Resolution"
              },
              {
                "name": "phase",
                "type": "enum IBinaryOptionMarket.Phase"
              },
              {
                "name": "result",
                "type": "enum IBinaryOptionMarket.Side"
              },
              {
                "name": "totalBids",
                "type": "struct BinaryOptionMarketData.OptionValues"
              },
              {
                "name": "totalClaimableSupplies",
                "type": "struct BinaryOptionMarketData.OptionValues"
              },
              {
                "name": "totalSupplies",
                "type": "struct BinaryOptionMarketData.OptionValues"
              }
            ],
            "lineNumber": 41
          },
          {
            "name": "AccountData",
            "members": [
              {
                "name": "bids",
                "type": "struct BinaryOptionMarketData.OptionValues"
              },
              {
                "name": "claimable",
                "type": "struct BinaryOptionMarketData.OptionValues"
              },
              {
                "name": "balances",
                "type": "struct BinaryOptionMarketData.OptionValues"
              }
            ],
            "lineNumber": 53
          }
        ],
        "inherits": []
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/BinaryOptionMarketFactory.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinResolver.sol",
      "./BinaryOptionMarket.sol"
    ],
    "contracts": {
      "BinaryOptionMarketFactory": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 24,
            "requires": [],
            "events": []
          },
          {
            "name": "_manager",
            "signature": "_manager() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 31,
            "requires": [],
            "events": []
          },
          {
            "name": "createMarket",
            "signature": "createMarket(address creator, uint256[2] creatorLimits, bytes32 oracleKey, uint256 strikePrice, bool refundsEnabled, uint256[3] times, uint256[2] bids, uint256[3] fees)",
            "returns": "(contract BinaryOptionMarket)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 37,
            "requires": [
              {
                "name": "require(..., \"Only permitted by the manager.\")",
                "lineNumber": 48
              }
            ],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "CONTRACT_BINARYOPTIONMARKETMANAGER",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 16
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "MixinResolver"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/BinaryOptionMarketManager.sol": {
    "imports": [
      "./Owned.sol",
      "./Pausable.sol",
      "./MixinResolver.sol",
      "./interfaces/IBinaryOptionMarketManager.sol",
      "./AddressSetLib.sol",
      "./SafeDecimalMath.sol",
      "./BinaryOptionMarketFactory.sol",
      "./BinaryOptionMarket.sol",
      "./interfaces/IBinaryOptionMarket.sol",
      "./interfaces/IExchangeRates.sol",
      "./interfaces/ISystemStatus.sol",
      "./interfaces/IERC20.sol"
    ],
    "contracts": {
      "BinaryOptionMarketManager": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver, uint256 _maxOraclePriceAge, uint256 _expiryDuration, uint256 _maxTimeToMaturity, uint256 _creatorCapitalRequirement, uint256 _creatorSkewLimit, uint256 _poolFee, uint256 _creatorFee, uint256 _refundFee)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 70,
            "requires": [
              {
                "name": "setCreatorCapitalRequirement",
                "lineNumber": 87
              }
            ],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 97,
            "requires": [],
            "events": []
          },
          {
            "name": "_systemStatus",
            "signature": "_systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 107,
            "requires": [],
            "events": []
          },
          {
            "name": "_pUSD",
            "signature": "_pUSD() view",
            "returns": "(contract IERC20)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 111,
            "requires": [],
            "events": []
          },
          {
            "name": "_exchangeRates",
            "signature": "_exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 115,
            "requires": [],
            "events": []
          },
          {
            "name": "_factory",
            "signature": "_factory() view",
            "returns": "(contract BinaryOptionMarketFactory)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 119,
            "requires": [],
            "events": []
          },
          {
            "name": "_isKnownMarket",
            "signature": "_isKnownMarket(address candidate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 125,
            "requires": [],
            "events": []
          },
          {
            "name": "numActiveMarkets",
            "signature": "numActiveMarkets() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 129,
            "requires": [],
            "events": []
          },
          {
            "name": "activeMarkets",
            "signature": "activeMarkets(uint256 index, uint256 pageSize) view",
            "returns": "(address[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 133,
            "requires": [],
            "events": []
          },
          {
            "name": "numMaturedMarkets",
            "signature": "numMaturedMarkets() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 137,
            "requires": [],
            "events": []
          },
          {
            "name": "maturedMarkets",
            "signature": "maturedMarkets(uint256 index, uint256 pageSize) view",
            "returns": "(address[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 141,
            "requires": [],
            "events": []
          },
          {
            "name": "_isValidKey",
            "signature": "_isValidKey(bytes32 oracleKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 145,
            "requires": [],
            "events": []
          },
          {
            "name": "setMaxOraclePriceAge",
            "signature": "setMaxOraclePriceAge(uint256 _maxOraclePriceAge)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 171,
            "requires": [],
            "events": [
              "MaxOraclePriceAgeUpdated"
            ]
          },
          {
            "name": "setExpiryDuration",
            "signature": "setExpiryDuration(uint256 _expiryDuration)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 176,
            "requires": [],
            "events": [
              "ExpiryDurationUpdated"
            ]
          },
          {
            "name": "setMaxTimeToMaturity",
            "signature": "setMaxTimeToMaturity(uint256 _maxTimeToMaturity)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 181,
            "requires": [],
            "events": [
              "MaxTimeToMaturityUpdated"
            ]
          },
          {
            "name": "setPoolFee",
            "signature": "setPoolFee(uint256 _poolFee)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 186,
            "requires": [
              {
                "name": "require(..., \"Total fee must be less than 100%.\")",
                "lineNumber": 188
              },
              {
                "name": "require(..., \"Total fee must be nonzero.\")",
                "lineNumber": 189
              }
            ],
            "events": [
              "PoolFeeUpdated"
            ]
          },
          {
            "name": "setCreatorFee",
            "signature": "setCreatorFee(uint256 _creatorFee)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 194,
            "requires": [
              {
                "name": "require(..., \"Total fee must be less than 100%.\")",
                "lineNumber": 196
              },
              {
                "name": "require(..., \"Total fee must be nonzero.\")",
                "lineNumber": 197
              }
            ],
            "events": [
              "CreatorFeeUpdated"
            ]
          },
          {
            "name": "setRefundFee",
            "signature": "setRefundFee(uint256 _refundFee)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 202,
            "requires": [
              {
                "name": "require(..., \"Refund fee must be no greater than 100%.\")",
                "lineNumber": 203
              }
            ],
            "events": [
              "RefundFeeUpdated"
            ]
          },
          {
            "name": "setCreatorCapitalRequirement",
            "signature": "setCreatorCapitalRequirement(uint256 _creatorCapitalRequirement)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 208,
            "requires": [],
            "events": [
              "CreatorCapitalRequirementUpdated"
            ]
          },
          {
            "name": "setCreatorSkewLimit",
            "signature": "setCreatorSkewLimit(uint256 _creatorSkewLimit)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 213,
            "requires": [
              {
                "name": "require(..., \"Creator skew limit must be no greater than 1.\")",
                "lineNumber": 214
              }
            ],
            "events": [
              "CreatorSkewLimitUpdated"
            ]
          },
          {
            "name": "incrementTotalDeposited",
            "signature": "incrementTotalDeposited(uint256 delta)",
            "returns": "()",
            "modifiers": [
              "onlyActiveMarkets",
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 221,
            "requires": [],
            "events": []
          },
          {
            "name": "decrementTotalDeposited",
            "signature": "decrementTotalDeposited(uint256 delta)",
            "returns": "()",
            "modifiers": [
              "onlyKnownMarkets",
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 226,
            "requires": [],
            "events": []
          },
          {
            "name": "createMarket",
            "signature": "createMarket(bytes32 oracleKey, uint256 strikePrice, bool refundsEnabled, uint256[2] times, uint256[2] bids)",
            "returns": "(contract IBinaryOptionMarket)",
            "modifiers": [
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 236,
            "requires": [
              {
                "name": "require(..., \"Market creation is disabled\")",
                "lineNumber": 250
              },
              {
                "name": "require(..., \"Invalid key\")",
                "lineNumber": 251
              },
              {
                "name": "require(..., \"Maturity too far in the future\")",
                "lineNumber": 254
              },
              {
                "name": "require(..., \"End of bidding has passed\")",
                "lineNumber": 258
              },
              {
                "name": "require(..., \"Maturity predates end of bidding\")",
                "lineNumber": 259
              }
            ],
            "events": [
              "MarketCreated"
            ]
          },
          {
            "name": "resolveMarket",
            "signature": "resolveMarket(address market)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 287,
            "requires": [
              {
                "name": "require(..., \"Not an active market\")",
                "lineNumber": 288
              }
            ],
            "events": []
          },
          {
            "name": "cancelMarket",
            "signature": "cancelMarket(address market)",
            "returns": "()",
            "modifiers": [
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 294,
            "requires": [
              {
                "name": "require(..., \"Not an active market\")",
                "lineNumber": 295
              },
              {
                "name": "require(..., \"Sender not market creator\")",
                "lineNumber": 297
              }
            ],
            "events": [
              "MarketCancelled"
            ]
          },
          {
            "name": "expireMarkets",
            "signature": "expireMarkets(address[] markets)",
            "returns": "()",
            "modifiers": [
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 303,
            "requires": [],
            "events": []
          },
          {
            "name": "rebuildMarketCaches",
            "signature": "rebuildMarketCaches(contract BinaryOptionMarket[] marketsToSync)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 318,
            "requires": [],
            "events": []
          },
          {
            "name": "setMarketCreationEnabled",
            "signature": "setMarketCreationEnabled(bool enabled)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 338,
            "requires": [],
            "events": []
          },
          {
            "name": "setMigratingManager",
            "signature": "setMigratingManager(contract BinaryOptionMarketManager manager)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 345,
            "requires": [],
            "events": []
          },
          {
            "name": "migrateMarkets",
            "signature": "migrateMarkets(contract BinaryOptionMarketManager receivingManager, bool active, contract BinaryOptionMarket[] marketsToMigrate)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 349,
            "requires": [],
            "events": [
              "MarketsMigrated"
            ]
          },
          {
            "name": "receiveMarkets",
            "signature": "receiveMarkets(bool active, contract BinaryOptionMarket[] marketsToReceive)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 380,
            "requires": [
              {
                "name": "require(..., \"Only permitted for migrating manager.\")",
                "lineNumber": 381
              }
            ],
            "events": [
              "MarketsReceived"
            ]
          }
        ],
        "events": [
          {
            "name": "MarketCreated",
            "parameters": "(address market, address creator, bytes32 oracleKey, uint256 strikePrice, uint256 biddingEndDate, uint256 maturityDate, uint256 expiryDate)",
            "lineNumber": 417
          },
          {
            "name": "MarketExpired",
            "parameters": "(address market)",
            "lineNumber": 426
          },
          {
            "name": "MarketCancelled",
            "parameters": "(address market)",
            "lineNumber": 427
          },
          {
            "name": "MarketsMigrated",
            "parameters": "(contract BinaryOptionMarketManager receivingManager, contract BinaryOptionMarket[] markets)",
            "lineNumber": 428
          },
          {
            "name": "MarketsReceived",
            "parameters": "(contract BinaryOptionMarketManager migratingManager, contract BinaryOptionMarket[] markets)",
            "lineNumber": 429
          },
          {
            "name": "MarketCreationEnabledUpdated",
            "parameters": "(bool enabled)",
            "lineNumber": 430
          },
          {
            "name": "MaxOraclePriceAgeUpdated",
            "parameters": "(uint256 duration)",
            "lineNumber": 431
          },
          {
            "name": "ExerciseDurationUpdated",
            "parameters": "(uint256 duration)",
            "lineNumber": 432
          },
          {
            "name": "ExpiryDurationUpdated",
            "parameters": "(uint256 duration)",
            "lineNumber": 433
          },
          {
            "name": "MaxTimeToMaturityUpdated",
            "parameters": "(uint256 duration)",
            "lineNumber": 434
          },
          {
            "name": "CreatorCapitalRequirementUpdated",
            "parameters": "(uint256 value)",
            "lineNumber": 435
          },
          {
            "name": "CreatorSkewLimitUpdated",
            "parameters": "(uint256 value)",
            "lineNumber": 436
          },
          {
            "name": "PoolFeeUpdated",
            "parameters": "(uint256 fee)",
            "lineNumber": 437
          },
          {
            "name": "CreatorFeeUpdated",
            "parameters": "(uint256 fee)",
            "lineNumber": 438
          },
          {
            "name": "RefundFeeUpdated",
            "parameters": "(uint256 fee)",
            "lineNumber": 439
          }
        ],
        "variables": [
          {
            "name": "fees",
            "type": "struct BinaryOptionMarketManager.Fees",
            "visibility": "public",
            "lineNumber": 49
          },
          {
            "name": "durations",
            "type": "struct BinaryOptionMarketManager.Durations",
            "visibility": "public",
            "lineNumber": 50
          },
          {
            "name": "creatorLimits",
            "type": "struct BinaryOptionMarketManager.CreatorLimits",
            "visibility": "public",
            "lineNumber": 51
          },
          {
            "name": "marketCreationEnabled",
            "type": "bool",
            "visibility": "public",
            "lineNumber": 53
          },
          {
            "name": "totalDeposited",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 54
          },
          {
            "name": "_activeMarkets",
            "type": "struct AddressSetLib.AddressSet",
            "visibility": "internal",
            "lineNumber": 56
          },
          {
            "name": "_maturedMarkets",
            "type": "struct AddressSetLib.AddressSet",
            "visibility": "internal",
            "lineNumber": 57
          },
          {
            "name": "_migratingManager",
            "type": "contract BinaryOptionMarketManager",
            "visibility": "internal",
            "lineNumber": 59
          },
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 63
          },
          {
            "name": "CONTRACT_PYNTHPUSD",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 64
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 65
          },
          {
            "name": "CONTRACT_BINARYOPTIONMARKETFACTORY",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 66
          }
        ],
        "modifiers": [
          {
            "name": "onlyActiveMarkets",
            "signature": "onlyActiveMarkets()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 405
          },
          {
            "name": "onlyKnownMarkets",
            "signature": "onlyKnownMarkets()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 410
          }
        ],
        "structs": [
          {
            "name": "Fees",
            "members": [
              {
                "name": "poolFee",
                "type": "uint256"
              },
              {
                "name": "creatorFee",
                "type": "uint256"
              },
              {
                "name": "refundFee",
                "type": "uint256"
              }
            ],
            "lineNumber": 30
          },
          {
            "name": "Durations",
            "members": [
              {
                "name": "maxOraclePriceAge",
                "type": "uint256"
              },
              {
                "name": "expiryDuration",
                "type": "uint256"
              },
              {
                "name": "maxTimeToMaturity",
                "type": "uint256"
              }
            ],
            "lineNumber": 36
          },
          {
            "name": "CreatorLimits",
            "members": [
              {
                "name": "capitalRequirement",
                "type": "uint256"
              },
              {
                "name": "skewLimit",
                "type": "uint256"
              }
            ],
            "lineNumber": 42
          }
        ],
        "inherits": [
          "Owned",
          "Pausable",
          "MixinResolver",
          "IBinaryOptionMarketManager"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/Bytes32SetLib.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {
      "Bytes32SetLib": {
        "functions": [
          {
            "name": "contains",
            "signature": "contains(struct Bytes32SetLib.Bytes32Set set, bytes32 candidate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "getPage",
            "signature": "getPage(struct Bytes32SetLib.Bytes32Set set, uint256 index, uint256 pageSize) view",
            "returns": "(bytes32[])",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "add",
            "signature": "add(struct Bytes32SetLib.Bytes32Set set, bytes32 element)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "remove",
            "signature": "remove(struct Bytes32SetLib.Bytes32Set set, bytes32 element)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 50,
            "requires": [
              {
                "name": "require(..., \"Element not in set.\")",
                "lineNumber": 51
              }
            ],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [
          {
            "name": "Bytes32Set",
            "members": [
              {
                "name": "elements",
                "type": "bytes32[]"
              },
              {
                "name": "indices",
                "type": "mapping(bytes32 => uint256)"
              }
            ],
            "lineNumber": 5
          }
        ],
        "inherits": []
      }
    },
    "interfaces": {}
  },
  "contracts/Collateral.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinSystemSettings.sol",
      "./interfaces/ICollateralLoan.sol",
      "./SafeDecimalMath.sol",
      "./CollateralState.sol",
      "./interfaces/ICollateralManager.sol",
      "./interfaces/ISystemStatus.sol",
      "./interfaces/IFeePool.sol",
      "./interfaces/IPynth.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IExchangeRates.sol",
      "./interfaces/IExchanger.sol",
      "./interfaces/IShortingRewards.sol"
    ],
    "contracts": {
      "Collateral": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(contract CollateralState _state, address _owner, address _manager, address _resolver, bytes32 _collateralKey, uint256 _minCratio, uint256 _minCollateral)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 82,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 100,
            "requires": [],
            "events": []
          },
          {
            "name": "_systemStatus",
            "signature": "_systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 116,
            "requires": [],
            "events": []
          },
          {
            "name": "_pynth",
            "signature": "_pynth(bytes32 pynthName) view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 120,
            "requires": [],
            "events": []
          },
          {
            "name": "_pynthpUSD",
            "signature": "_pynthpUSD() view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 124,
            "requires": [],
            "events": []
          },
          {
            "name": "_exchangeRates",
            "signature": "_exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 128,
            "requires": [],
            "events": []
          },
          {
            "name": "_exchanger",
            "signature": "_exchanger() view",
            "returns": "(contract IExchanger)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 132,
            "requires": [],
            "events": []
          },
          {
            "name": "_feePool",
            "signature": "_feePool() view",
            "returns": "(contract IFeePool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 136,
            "requires": [],
            "events": []
          },
          {
            "name": "_manager",
            "signature": "_manager() view",
            "returns": "(contract ICollateralManager)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 140,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralRatio",
            "signature": "collateralRatio(struct ICollateralLoan.Loan loan) view",
            "returns": "(uint256 cratio)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 146,
            "requires": [],
            "events": []
          },
          {
            "name": "maxLoan",
            "signature": "maxLoan(uint256 amount, bytes32 currency) view",
            "returns": "(uint256 max)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 153,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationAmount",
            "signature": "liquidationAmount(struct ICollateralLoan.Loan loan) view",
            "returns": "(uint256 amount)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 166,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralRedeemed",
            "signature": "collateralRedeemed(bytes32 currency, uint256 amount) view",
            "returns": "(uint256 collateral)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 181,
            "requires": [],
            "events": []
          },
          {
            "name": "arePynthsAndCurrenciesSet",
            "signature": "arePynthsAndCurrenciesSet(bytes32[] _pynthNamesInResolver, bytes32[] _pynthKeys) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 188,
            "requires": [],
            "events": []
          },
          {
            "name": "_checkPynthBalance",
            "signature": "_checkPynthBalance(address payer, bytes32 key, uint256 amount) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 213,
            "requires": [
              {
                "name": "require(..., \"Not enough pynth balance\")",
                "lineNumber": 218
              }
            ],
            "events": []
          },
          {
            "name": "_checkLoanAvailable",
            "signature": "_checkLoanAvailable(struct ICollateralLoan.Loan _loan) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 222,
            "requires": [
              {
                "name": "require(..., \"Loan does not exist\")",
                "lineNumber": 223
              },
              {
                "name": "require(..., \"Loan recently interacted with\")",
                "lineNumber": 224
              }
            ],
            "events": []
          },
          {
            "name": "issuanceRatio",
            "signature": "issuanceRatio() view",
            "returns": "(uint256 ratio)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 227,
            "requires": [],
            "events": []
          },
          {
            "name": "addPynths",
            "signature": "addPynths(bytes32[] _pynthNamesInResolver, bytes32[] _pynthKeys)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 235,
            "requires": [
              {
                "name": "require(..., \"Input array length mismatch\")",
                "lineNumber": 236
              }
            ],
            "events": []
          },
          {
            "name": "addRewardsContracts",
            "signature": "addRewardsContracts(address rewardsContract, bytes32 pynth)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 250,
            "requires": [],
            "events": []
          },
          {
            "name": "setMinCratio",
            "signature": "setMinCratio(uint256 _minCratio)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 256,
            "requires": [
              {
                "name": "require(..., \"Must be greater than 1\")",
                "lineNumber": 257
              }
            ],
            "events": [
              "MinCratioRatioUpdated"
            ]
          },
          {
            "name": "setIssueFeeRate",
            "signature": "setIssueFeeRate(uint256 _issueFeeRate)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 262,
            "requires": [],
            "events": [
              "IssueFeeRateUpdated"
            ]
          },
          {
            "name": "setInteractionDelay",
            "signature": "setInteractionDelay(uint256 _interactionDelay)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 267,
            "requires": [
              {
                "name": "require(..., \"Max 1 hour\")",
                "lineNumber": 268
              }
            ],
            "events": [
              "InteractionDelayUpdated"
            ]
          },
          {
            "name": "setManager",
            "signature": "setManager(address _newManager)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 273,
            "requires": [],
            "events": [
              "ManagerUpdated"
            ]
          },
          {
            "name": "setCanOpenLoans",
            "signature": "setCanOpenLoans(bool _canOpenLoans)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 278,
            "requires": [],
            "events": [
              "CanOpenLoansUpdated"
            ]
          },
          {
            "name": "openInternal",
            "signature": "openInternal(uint256 collateral, uint256 amount, bytes32 currency, bool short)",
            "returns": "(uint256 id)",
            "modifiers": [
              "rateIsValid"
            ],
            "visibility": "internal",
            "lineNumber": 285,
            "requires": [
              {
                "name": "require(..., \"Opening is disabled\")",
                "lineNumber": 294
              },
              {
                "name": "require(..., \"Not allowed to issue this pynth\")",
                "lineNumber": 297
              },
              {
                "name": "require(..., \"Currency rate is invalid\")",
                "lineNumber": 300
              },
              {
                "name": "require(..., \"Not enough collateral to open\")",
                "lineNumber": 303
              },
              {
                "name": "require(..., \"Max loans exceeded\")",
                "lineNumber": 306
              },
              {
                "name": "require(..., \"Debt limit or invalid rate\")",
                "lineNumber": 311
              },
              {
                "name": "require(..., \"Exceeds max borrowing power\")",
                "lineNumber": 314
              }
            ],
            "events": [
              "LoanCreated"
            ]
          },
          {
            "name": "closeInternal",
            "signature": "closeInternal(address borrower, uint256 id)",
            "returns": "(uint256 collateral)",
            "modifiers": [
              "rateIsValid"
            ],
            "visibility": "internal",
            "lineNumber": 365,
            "requires": [
              {
                "name": "require(..., \"Waiting secs or settlement owing\")",
                "lineNumber": 385
              }
            ],
            "events": [
              "LoanClosed"
            ]
          },
          {
            "name": "closeByLiquidationInternal",
            "signature": "closeByLiquidationInternal(address borrower, address liquidator, struct ICollateralLoan.Loan loan)",
            "returns": "(uint256 collateral)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 420,
            "requires": [
              {
                "name": "require(..., \"Waiting or settlement owing\")",
                "lineNumber": 435
              }
            ],
            "events": [
              "LoanClosedByLiquidation"
            ]
          },
          {
            "name": "depositInternal",
            "signature": "depositInternal(address account, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "rateIsValid"
            ],
            "visibility": "internal",
            "lineNumber": 464,
            "requires": [
              {
                "name": "require(..., \"Deposit must be greater than 0\")",
                "lineNumber": 473
              }
            ],
            "events": [
              "CollateralDeposited"
            ]
          },
          {
            "name": "withdrawInternal",
            "signature": "withdrawInternal(uint256 id, uint256 amount)",
            "returns": "(uint256 withdraw)",
            "modifiers": [
              "rateIsValid"
            ],
            "visibility": "internal",
            "lineNumber": 497,
            "requires": [
              {
                "name": "require(..., \"Cratio too low\")",
                "lineNumber": 517
              }
            ],
            "events": [
              "CollateralWithdrawn"
            ]
          },
          {
            "name": "liquidateInternal",
            "signature": "liquidateInternal(address borrower, uint256 id, uint256 payment)",
            "returns": "(uint256 collateralLiquidated)",
            "modifiers": [
              "rateIsValid"
            ],
            "visibility": "internal",
            "lineNumber": 529,
            "requires": [
              {
                "name": "require(..., \"Payment must be greater than 0\")",
                "lineNumber": 538
              },
              {
                "name": "require(..., \"Cratio above liquidation ratio\")",
                "lineNumber": 553
              },
              {
                "name": "require(..., \"Waiting or settlement owing\")",
                "lineNumber": 580
              }
            ],
            "events": [
              "LoanPartiallyLiquidated"
            ]
          },
          {
            "name": "repayInternal",
            "signature": "repayInternal(address borrower, address repayer, uint256 id, uint256 payment)",
            "returns": "()",
            "modifiers": [
              "rateIsValid"
            ],
            "visibility": "internal",
            "lineNumber": 590,
            "requires": [
              {
                "name": "require(..., \"Payment must be greater than 0\")",
                "lineNumber": 600
              },
              {
                "name": "require(..., \"Waiting or settlement owing\")",
                "lineNumber": 621
              }
            ],
            "events": [
              "LoanRepaymentMade"
            ]
          },
          {
            "name": "drawInternal",
            "signature": "drawInternal(uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "rateIsValid"
            ],
            "visibility": "internal",
            "lineNumber": 631,
            "requires": [
              {
                "name": "require(..., \"Cannot draw this much\")",
                "lineNumber": 648
              }
            ],
            "events": [
              "LoanDrawnDown"
            ]
          },
          {
            "name": "accrueInterest",
            "signature": "accrueInterest(struct ICollateralLoan.Loan loan)",
            "returns": "(struct ICollateralLoan.Loan loanAfter)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 683,
            "requires": [
              {
                "name": "require(..., \"Rates are invalid\")",
                "lineNumber": 696
              }
            ],
            "events": []
          },
          {
            "name": "_processPayment",
            "signature": "_processPayment(struct ICollateralLoan.Loan loanBefore, uint256 payment)",
            "returns": "(struct ICollateralLoan.Loan loanAfter)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 719,
            "requires": [],
            "events": []
          },
          {
            "name": "_payFees",
            "signature": "_payFees(uint256 amount, bytes32 pynth)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 748,
            "requires": [],
            "events": []
          },
          {
            "name": "_requireRateIsValid",
            "signature": "_requireRateIsValid() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 765,
            "requires": [
              {
                "name": "require(..., \"Collateral rate is invalid\")",
                "lineNumber": 766
              }
            ],
            "events": []
          }
        ],
        "events": [
          {
            "name": "MinCratioRatioUpdated",
            "parameters": "(uint256 minCratio)",
            "lineNumber": 771
          },
          {
            "name": "MinCollateralUpdated",
            "parameters": "(uint256 minCollateral)",
            "lineNumber": 772
          },
          {
            "name": "IssueFeeRateUpdated",
            "parameters": "(uint256 issueFeeRate)",
            "lineNumber": 773
          },
          {
            "name": "MaxLoansPerAccountUpdated",
            "parameters": "(uint256 maxLoansPerAccount)",
            "lineNumber": 774
          },
          {
            "name": "InteractionDelayUpdated",
            "parameters": "(uint256 interactionDelay)",
            "lineNumber": 775
          },
          {
            "name": "ManagerUpdated",
            "parameters": "(address manager)",
            "lineNumber": 776
          },
          {
            "name": "CanOpenLoansUpdated",
            "parameters": "(bool canOpenLoans)",
            "lineNumber": 777
          },
          {
            "name": "LoanCreated",
            "parameters": "(address account, uint256 id, uint256 amount, uint256 collateral, bytes32 currency, uint256 issuanceFee)",
            "lineNumber": 780
          },
          {
            "name": "LoanClosed",
            "parameters": "(address account, uint256 id)",
            "lineNumber": 781
          },
          {
            "name": "CollateralDeposited",
            "parameters": "(address account, uint256 id, uint256 amountDeposited, uint256 collateralAfter)",
            "lineNumber": 782
          },
          {
            "name": "CollateralWithdrawn",
            "parameters": "(address account, uint256 id, uint256 amountWithdrawn, uint256 collateralAfter)",
            "lineNumber": 783
          },
          {
            "name": "LoanRepaymentMade",
            "parameters": "(address account, address repayer, uint256 id, uint256 amountRepaid, uint256 amountAfter)",
            "lineNumber": 784
          },
          {
            "name": "LoanDrawnDown",
            "parameters": "(address account, uint256 id, uint256 amount)",
            "lineNumber": 785
          },
          {
            "name": "LoanPartiallyLiquidated",
            "parameters": "(address account, uint256 id, address liquidator, uint256 amountLiquidated, uint256 collateralLiquidated)",
            "lineNumber": 786
          },
          {
            "name": "LoanClosedByLiquidation",
            "parameters": "(address account, uint256 id, address liquidator, uint256 amountLiquidated, uint256 collateralLiquidated)",
            "lineNumber": 793
          }
        ],
        "variables": [
          {
            "name": "pUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 31
          },
          {
            "name": "collateralKey",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 36
          },
          {
            "name": "state",
            "type": "contract CollateralState",
            "visibility": "public",
            "lineNumber": 39
          },
          {
            "name": "manager",
            "type": "address",
            "visibility": "public",
            "lineNumber": 41
          },
          {
            "name": "pynths",
            "type": "bytes32[]",
            "visibility": "public",
            "lineNumber": 44
          },
          {
            "name": "pynthsByKey",
            "type": "mapping(bytes32 => bytes32)",
            "visibility": "public",
            "lineNumber": 47
          },
          {
            "name": "shortingRewards",
            "type": "mapping(bytes32 => address)",
            "visibility": "public",
            "lineNumber": 50
          },
          {
            "name": "minCratio",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 55
          },
          {
            "name": "minCollateral",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 58
          },
          {
            "name": "issueFeeRate",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 61
          },
          {
            "name": "maxLoansPerAccount",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 64
          },
          {
            "name": "interactionDelay",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 68
          },
          {
            "name": "canOpenLoans",
            "type": "bool",
            "visibility": "public",
            "lineNumber": 70
          },
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 74
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 75
          },
          {
            "name": "CONTRACT_EXCHANGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 76
          },
          {
            "name": "CONTRACT_FEEPOOL",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 77
          },
          {
            "name": "CONTRACT_PYNTHPUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 78
          }
        ],
        "modifiers": [
          {
            "name": "rateIsValid",
            "signature": "rateIsValid()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 760
          }
        ],
        "structs": [],
        "inherits": [
          "ICollateralLoan",
          "Owned",
          "MixinSystemSettings"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/CollateralErc20.sol": {
    "imports": [
      "./Collateral.sol",
      "./interfaces/ICollateralErc20.sol",
      "./CollateralState.sol",
      "./interfaces/IERC20.sol"
    ],
    "contracts": {
      "CollateralErc20": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(contract CollateralState _state, address _owner, address _manager, address _resolver, bytes32 _collateralKey, uint256 _minCratio, uint256 _minCollateral, address _underlyingContract, uint256 _underlyingDecimals)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "open",
            "signature": "open(uint256 collateral, uint256 amount, bytes32 currency)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 37,
            "requires": [
              {
                "name": "require(..., \"Allowance not high enough\")",
                "lineNumber": 42
              }
            ],
            "events": []
          },
          {
            "name": "close",
            "signature": "close(uint256 id)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 53,
            "requires": [],
            "events": []
          },
          {
            "name": "deposit",
            "signature": "deposit(address borrower, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 62,
            "requires": [
              {
                "name": "require(..., \"Allowance not high enough\")",
                "lineNumber": 67
              }
            ],
            "events": []
          },
          {
            "name": "withdraw",
            "signature": "withdraw(uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 77,
            "requires": [],
            "events": []
          },
          {
            "name": "repay",
            "signature": "repay(address borrower, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 89,
            "requires": [],
            "events": []
          },
          {
            "name": "draw",
            "signature": "draw(uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 97,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidate",
            "signature": "liquidate(address borrower, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 101,
            "requires": [],
            "events": []
          },
          {
            "name": "scaleUpCollateral",
            "signature": "scaleUpCollateral(uint256 collateral) view",
            "returns": "(uint256 scaledUp)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 114,
            "requires": [],
            "events": []
          },
          {
            "name": "scaleDownCollateral",
            "signature": "scaleDownCollateral(uint256 collateral) view",
            "returns": "(uint256 scaledDown)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 120,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "underlyingContract",
            "type": "address",
            "visibility": "public",
            "lineNumber": 17
          },
          {
            "name": "underlyingContractDecimals",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 19
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "ICollateralErc20",
          "Collateral"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/CollateralEth.sol": {
    "imports": [
      "./Collateral.sol",
      "openzeppelin-solidity-2.3.0/contracts/utils/ReentrancyGuard.sol",
      "./interfaces/ICollateralEth.sol",
      "./CollateralState.sol"
    ],
    "contracts": {
      "CollateralEth": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(contract CollateralState _state, address _owner, address _manager, address _resolver, bytes32 _collateralKey, uint256 _minCratio, uint256 _minCollateral)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "open",
            "signature": "open(uint256 amount, bytes32 currency) payable",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 28,
            "requires": [],
            "events": []
          },
          {
            "name": "close",
            "signature": "close(uint256 id)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 32,
            "requires": [],
            "events": []
          },
          {
            "name": "deposit",
            "signature": "deposit(address borrower, uint256 id) payable",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "withdraw",
            "signature": "withdraw(uint256 id, uint256 withdrawAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "repay",
            "signature": "repay(address account, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 48,
            "requires": [],
            "events": []
          },
          {
            "name": "draw",
            "signature": "draw(uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 56,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidate",
            "signature": "liquidate(address borrower, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 60,
            "requires": [],
            "events": []
          },
          {
            "name": "claim",
            "signature": "claim(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "nonReentrant"
            ],
            "visibility": "external",
            "lineNumber": 70,
            "requires": [
              {
                "name": "require(..., \"Transfer failed\")",
                "lineNumber": 75
              }
            ],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "pendingWithdrawals",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 16
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Collateral",
          "ICollateralEth",
          "ReentrancyGuard"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/CollateralManager.sol": {
    "imports": [
      "./Owned.sol",
      "./Pausable.sol",
      "./MixinResolver.sol",
      "./interfaces/ICollateralManager.sol",
      "./AddressSetLib.sol",
      "./Bytes32SetLib.sol",
      "./SafeDecimalMath.sol",
      "./CollateralManagerState.sol",
      "./interfaces/IIssuer.sol",
      "./interfaces/IExchangeRates.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IPynth.sol"
    ],
    "contracts": {
      "CollateralManager": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(contract CollateralManagerState _state, address _owner, address _resolver, uint256 _maxDebt, uint256 _baseBorrowRate, uint256 _baseShortRate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 77,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 97,
            "requires": [],
            "events": []
          },
          {
            "name": "isPynthManaged",
            "signature": "isPynthManaged(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 125,
            "requires": [],
            "events": []
          },
          {
            "name": "_issuer",
            "signature": "_issuer() view",
            "returns": "(contract IIssuer)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 131,
            "requires": [],
            "events": []
          },
          {
            "name": "_exchangeRates",
            "signature": "_exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 135,
            "requires": [],
            "events": []
          },
          {
            "name": "_pynth",
            "signature": "_pynth(bytes32 pynthName) view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 139,
            "requires": [],
            "events": []
          },
          {
            "name": "hasCollateral",
            "signature": "hasCollateral(address collateral) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 145,
            "requires": [],
            "events": []
          },
          {
            "name": "hasAllCollaterals",
            "signature": "hasAllCollaterals(address[] collaterals) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 149,
            "requires": [],
            "events": []
          },
          {
            "name": "long",
            "signature": "long(bytes32 pynth) view",
            "returns": "(uint256 amount)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 160,
            "requires": [],
            "events": []
          },
          {
            "name": "short",
            "signature": "short(bytes32 pynth) view",
            "returns": "(uint256 amount)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 164,
            "requires": [],
            "events": []
          },
          {
            "name": "totalLong",
            "signature": "totalLong() view",
            "returns": "(uint256 pusdValue, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 168,
            "requires": [],
            "events": []
          },
          {
            "name": "totalShort",
            "signature": "totalShort() view",
            "returns": "(uint256 pusdValue, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 188,
            "requires": [],
            "events": []
          },
          {
            "name": "getBorrowRate",
            "signature": "getBorrowRate() view",
            "returns": "(uint256 borrowRate, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 204,
            "requires": [],
            "events": []
          },
          {
            "name": "getShortRate",
            "signature": "getShortRate(bytes32 pynth) view",
            "returns": "(uint256 shortRate, bool rateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 226,
            "requires": [],
            "events": []
          },
          {
            "name": "getRatesAndTime",
            "signature": "getRatesAndTime(uint256 index) view",
            "returns": "(uint256 entryRate, uint256 lastRate, uint256 lastUpdated, uint256 newIndex)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 252,
            "requires": [],
            "events": []
          },
          {
            "name": "getShortRatesAndTime",
            "signature": "getShortRatesAndTime(bytes32 currency, uint256 index) view",
            "returns": "(uint256 entryRate, uint256 lastRate, uint256 lastUpdated, uint256 newIndex)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 265,
            "requires": [],
            "events": []
          },
          {
            "name": "exceedsDebtLimit",
            "signature": "exceedsDebtLimit(uint256 amount, bytes32 currency) view",
            "returns": "(bool canIssue, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 278,
            "requires": [],
            "events": []
          },
          {
            "name": "setUtilisationMultiplier",
            "signature": "setUtilisationMultiplier(uint256 _utilisationMultiplier)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 293,
            "requires": [
              {
                "name": "require(..., \"Must be greater than 0\")",
                "lineNumber": 294
              }
            ],
            "events": []
          },
          {
            "name": "setMaxDebt",
            "signature": "setMaxDebt(uint256 _maxDebt)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 298,
            "requires": [
              {
                "name": "require(..., \"Must be greater than 0\")",
                "lineNumber": 299
              }
            ],
            "events": [
              "MaxDebtUpdated"
            ]
          },
          {
            "name": "setBaseBorrowRate",
            "signature": "setBaseBorrowRate(uint256 _baseBorrowRate)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 304,
            "requires": [],
            "events": [
              "BaseBorrowRateUpdated"
            ]
          },
          {
            "name": "setBaseShortRate",
            "signature": "setBaseShortRate(uint256 _baseShortRate)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "public",
            "lineNumber": 309,
            "requires": [],
            "events": [
              "BaseShortRateUpdated"
            ]
          },
          {
            "name": "getNewLoanId",
            "signature": "getNewLoanId()",
            "returns": "(uint256 id)",
            "modifiers": [
              "onlyCollateral"
            ],
            "visibility": "external",
            "lineNumber": 316,
            "requires": [],
            "events": []
          },
          {
            "name": "addCollaterals",
            "signature": "addCollaterals(address[] collaterals)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 322,
            "requires": [],
            "events": []
          },
          {
            "name": "removeCollaterals",
            "signature": "removeCollaterals(address[] collaterals)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 331,
            "requires": [],
            "events": []
          },
          {
            "name": "addPynths",
            "signature": "addPynths(bytes32[] pynthNamesInResolver, bytes32[] pynthKeys)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 340,
            "requires": [],
            "events": []
          },
          {
            "name": "arePynthsAndCurrenciesSet",
            "signature": "arePynthsAndCurrenciesSet(bytes32[] requiredPynthNamesInResolver, bytes32[] pynthKeys) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 351,
            "requires": [],
            "events": []
          },
          {
            "name": "removePynths",
            "signature": "removePynths(bytes32[] pynths, bytes32[] pynthKeys)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 372,
            "requires": [],
            "events": []
          },
          {
            "name": "addShortablePynths",
            "signature": "addShortablePynths(bytes32[2][] requiredPynthAndInverseNamesInResolver, bytes32[] pynthKeys)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 386,
            "requires": [
              {
                "name": "require(..., \"Input array length mismatch\")",
                "lineNumber": 390
              }
            ],
            "events": []
          },
          {
            "name": "areShortablePynthsSet",
            "signature": "areShortablePynthsSet(bytes32[] requiredPynthNamesInResolver, bytes32[] pynthKeys) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 415,
            "requires": [
              {
                "name": "require(..., \"Input array length mismatch\")",
                "lineNumber": 420
              }
            ],
            "events": []
          },
          {
            "name": "removeShortablePynths",
            "signature": "removeShortablePynths(bytes32[] pynths)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 444,
            "requires": [],
            "events": []
          },
          {
            "name": "updateBorrowRates",
            "signature": "updateBorrowRates(uint256 rate)",
            "returns": "()",
            "modifiers": [
              "onlyCollateral"
            ],
            "visibility": "external",
            "lineNumber": 464,
            "requires": [],
            "events": []
          },
          {
            "name": "updateShortRates",
            "signature": "updateShortRates(bytes32 currency, uint256 rate)",
            "returns": "()",
            "modifiers": [
              "onlyCollateral"
            ],
            "visibility": "external",
            "lineNumber": 468,
            "requires": [],
            "events": []
          },
          {
            "name": "incrementLongs",
            "signature": "incrementLongs(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyCollateral"
            ],
            "visibility": "external",
            "lineNumber": 472,
            "requires": [],
            "events": []
          },
          {
            "name": "decrementLongs",
            "signature": "decrementLongs(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyCollateral"
            ],
            "visibility": "external",
            "lineNumber": 476,
            "requires": [],
            "events": []
          },
          {
            "name": "incrementShorts",
            "signature": "incrementShorts(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyCollateral"
            ],
            "visibility": "external",
            "lineNumber": 480,
            "requires": [],
            "events": []
          },
          {
            "name": "decrementShorts",
            "signature": "decrementShorts(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyCollateral"
            ],
            "visibility": "external",
            "lineNumber": 484,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "MaxDebtUpdated",
            "parameters": "(uint256 maxDebt)",
            "lineNumber": 498
          },
          {
            "name": "LiquidationPenaltyUpdated",
            "parameters": "(uint256 liquidationPenalty)",
            "lineNumber": 499
          },
          {
            "name": "BaseBorrowRateUpdated",
            "parameters": "(uint256 baseBorrowRate)",
            "lineNumber": 500
          },
          {
            "name": "BaseShortRateUpdated",
            "parameters": "(uint256 baseShortRate)",
            "lineNumber": 501
          },
          {
            "name": "CollateralAdded",
            "parameters": "(address collateral)",
            "lineNumber": 503
          },
          {
            "name": "CollateralRemoved",
            "parameters": "(address collateral)",
            "lineNumber": 504
          },
          {
            "name": "PynthAdded",
            "parameters": "(bytes32 pynth)",
            "lineNumber": 506
          },
          {
            "name": "PynthRemoved",
            "parameters": "(bytes32 pynth)",
            "lineNumber": 507
          },
          {
            "name": "ShortablePynthAdded",
            "parameters": "(bytes32 pynth)",
            "lineNumber": 509
          },
          {
            "name": "ShortablePynthRemoved",
            "parameters": "(bytes32 pynth)",
            "lineNumber": 510
          }
        ],
        "variables": [
          {
            "name": "pUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 30
          },
          {
            "name": "SECONDS_IN_A_YEAR",
            "type": "uint256",
            "visibility": "private",
            "lineNumber": 32
          },
          {
            "name": "CONTRACT_NAME",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 35
          },
          {
            "name": "COLLATERAL_PYNTHS",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 36
          },
          {
            "name": "state",
            "type": "contract CollateralManagerState",
            "visibility": "public",
            "lineNumber": 41
          },
          {
            "name": "_collaterals",
            "type": "struct AddressSetLib.AddressSet",
            "visibility": "internal",
            "lineNumber": 44
          },
          {
            "name": "_pynths",
            "type": "struct Bytes32SetLib.Bytes32Set",
            "visibility": "internal",
            "lineNumber": 47
          },
          {
            "name": "pynthsByKey",
            "type": "mapping(bytes32 => bytes32)",
            "visibility": "public",
            "lineNumber": 50
          },
          {
            "name": "_shortablePynths",
            "type": "struct Bytes32SetLib.Bytes32Set",
            "visibility": "internal",
            "lineNumber": 53
          },
          {
            "name": "pynthToInversePynth",
            "type": "mapping(bytes32 => bytes32)",
            "visibility": "public",
            "lineNumber": 55
          },
          {
            "name": "utilisationMultiplier",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 58
          },
          {
            "name": "maxDebt",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 61
          },
          {
            "name": "baseBorrowRate",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 64
          },
          {
            "name": "baseShortRate",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 67
          },
          {
            "name": "CONTRACT_ISSUER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 71
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 72
          },
          {
            "name": "addressesToCache",
            "type": "bytes32[24]",
            "visibility": "private",
            "lineNumber": 74
          }
        ],
        "modifiers": [
          {
            "name": "onlyCollateral",
            "signature": "onlyCollateral()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 490
          }
        ],
        "structs": [],
        "inherits": [
          "ICollateralManager",
          "Owned",
          "Pausable",
          "MixinResolver"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/CollateralManagerState.sol": {
    "imports": [
      "./Owned.sol",
      "./State.sol",
      "./SafeDecimalMath.sol"
    ],
    "contracts": {
      "CollateralManagerState": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _associatedContract)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 32,
            "requires": [],
            "events": []
          },
          {
            "name": "incrementTotalLoans",
            "signature": "incrementTotalLoans()",
            "returns": "(uint256)",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 37,
            "requires": [],
            "events": []
          },
          {
            "name": "long",
            "signature": "long(bytes32 pynth) view",
            "returns": "(uint256)",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "short",
            "signature": "short(bytes32 pynth) view",
            "returns": "(uint256)",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "incrementLongs",
            "signature": "incrementLongs(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 50,
            "requires": [],
            "events": []
          },
          {
            "name": "decrementLongs",
            "signature": "decrementLongs(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 54,
            "requires": [],
            "events": []
          },
          {
            "name": "incrementShorts",
            "signature": "incrementShorts(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 58,
            "requires": [],
            "events": []
          },
          {
            "name": "decrementShorts",
            "signature": "decrementShorts(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 62,
            "requires": [],
            "events": []
          },
          {
            "name": "getRateAt",
            "signature": "getRateAt(uint256 index) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 68,
            "requires": [],
            "events": []
          },
          {
            "name": "getRatesLength",
            "signature": "getRatesLength() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 72,
            "requires": [],
            "events": []
          },
          {
            "name": "updateBorrowRates",
            "signature": "updateBorrowRates(uint256 rate)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 76,
            "requires": [],
            "events": []
          },
          {
            "name": "ratesLastUpdated",
            "signature": "ratesLastUpdated() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 81,
            "requires": [],
            "events": []
          },
          {
            "name": "getRatesAndTime",
            "signature": "getRatesAndTime(uint256 index) view",
            "returns": "(uint256 entryRate, uint256 lastRate, uint256 lastUpdated, uint256 newIndex)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 85,
            "requires": [],
            "events": []
          },
          {
            "name": "addShortCurrency",
            "signature": "addShortCurrency(bytes32 currency)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 103,
            "requires": [],
            "events": []
          },
          {
            "name": "removeShortCurrency",
            "signature": "removeShortCurrency(bytes32 currency)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 110,
            "requires": [],
            "events": []
          },
          {
            "name": "getShortRateAt",
            "signature": "getShortRateAt(bytes32 currency, uint256 index) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 114,
            "requires": [],
            "events": []
          },
          {
            "name": "getShortRatesLength",
            "signature": "getShortRatesLength(bytes32 currency) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 118,
            "requires": [],
            "events": []
          },
          {
            "name": "updateShortRates",
            "signature": "updateShortRates(bytes32 currency, uint256 rate)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 122,
            "requires": [],
            "events": []
          },
          {
            "name": "shortRateLastUpdated",
            "signature": "shortRateLastUpdated(bytes32 currency) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 127,
            "requires": [],
            "events": []
          },
          {
            "name": "getShortRatesAndTime",
            "signature": "getShortRatesAndTime(bytes32 currency, uint256 index) view",
            "returns": "(uint256 entryRate, uint256 lastRate, uint256 lastUpdated, uint256 newIndex)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 131,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "totalLoans",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 21
          },
          {
            "name": "borrowRates",
            "type": "uint256[]",
            "visibility": "public",
            "lineNumber": 23
          },
          {
            "name": "borrowRatesLastUpdated",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 24
          },
          {
            "name": "shortRates",
            "type": "mapping(bytes32 => uint256[])",
            "visibility": "public",
            "lineNumber": 26
          },
          {
            "name": "shortRatesLastUpdated",
            "type": "mapping(bytes32 => uint256)",
            "visibility": "public",
            "lineNumber": 27
          },
          {
            "name": "totalIssuedPynths",
            "type": "mapping(bytes32 => struct CollateralManagerState.Balance)",
            "visibility": "public",
            "lineNumber": 30
          }
        ],
        "modifiers": [],
        "structs": [
          {
            "name": "Balance",
            "members": [
              {
                "name": "long",
                "type": "uint256"
              },
              {
                "name": "short",
                "type": "uint256"
              }
            ],
            "lineNumber": 16
          }
        ],
        "inherits": [
          "Owned",
          "State"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/CollateralShort.sol": {
    "imports": [
      "./Collateral.sol",
      "./CollateralState.sol"
    ],
    "contracts": {
      "CollateralShort": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(contract CollateralState _state, address _owner, address _manager, address _resolver, bytes32 _collateralKey, uint256 _minCratio, uint256 _minCollateral)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "open",
            "signature": "open(uint256 collateral, uint256 amount, bytes32 currency)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 23,
            "requires": [
              {
                "name": "require(..., \"Allowance not high enough\")",
                "lineNumber": 28
              }
            ],
            "events": []
          },
          {
            "name": "close",
            "signature": "close(uint256 id)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "deposit",
            "signature": "deposit(address borrower, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 44,
            "requires": [
              {
                "name": "require(..., \"Allowance not high enough\")",
                "lineNumber": 49
              }
            ],
            "events": []
          },
          {
            "name": "withdraw",
            "signature": "withdraw(uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 56,
            "requires": [],
            "events": []
          },
          {
            "name": "repay",
            "signature": "repay(address borrower, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 62,
            "requires": [],
            "events": []
          },
          {
            "name": "draw",
            "signature": "draw(uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 70,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidate",
            "signature": "liquidate(address borrower, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 74,
            "requires": [],
            "events": []
          },
          {
            "name": "getReward",
            "signature": "getReward(bytes32 currency, address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 84,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Collateral"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/CollateralState.sol": {
    "imports": [
      "./Owned.sol",
      "./State.sol",
      "./interfaces/ICollateralLoan.sol",
      "./SafeDecimalMath.sol"
    ],
    "contracts": {
      "CollateralState": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _associatedContract)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "getLoan",
            "signature": "getLoan(address account, uint256 loanID) view",
            "returns": "(struct ICollateralLoan.Loan)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          },
          {
            "name": "getNumLoans",
            "signature": "getNumLoans(address account) view",
            "returns": "(uint256 numLoans)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 33,
            "requires": [],
            "events": []
          },
          {
            "name": "createLoan",
            "signature": "createLoan(struct ICollateralLoan.Loan loan)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "public",
            "lineNumber": 39,
            "requires": [],
            "events": []
          },
          {
            "name": "updateLoan",
            "signature": "updateLoan(struct ICollateralLoan.Loan loan)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "public",
            "lineNumber": 43,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "loans",
            "type": "mapping(address => struct ICollateralLoan.Loan[])",
            "visibility": "public",
            "lineNumber": 18
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "State",
          "ICollateralLoan"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/ContractStorage.sol": {
    "imports": [
      "./interfaces/IAddressResolver.sol"
    ],
    "contracts": {
      "ContractStorage": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "_memoizeHash",
            "signature": "_memoizeHash(bytes32 contractName)",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "migrateContractKey",
            "signature": "migrateContractKey(bytes32 fromContractName, bytes32 toContractName, bool removeAccessFromPreviousContract)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 33,
            "requires": [
              {
                "name": "require(..., \"Cannot migrate empty contract\")",
                "lineNumber": 38
              }
            ],
            "events": [
              "KeyMigrated"
            ]
          }
        ],
        "events": [
          {
            "name": "KeyMigrated",
            "parameters": "(bytes32 fromContractName, bytes32 toContractName, bool removeAccessFromPreviousContract)",
            "lineNumber": 60
          }
        ],
        "variables": [
          {
            "name": "resolverProxy",
            "type": "contract IAddressResolver",
            "visibility": "public",
            "lineNumber": 8
          },
          {
            "name": "hashes",
            "type": "mapping(bytes32 => bytes32)",
            "visibility": "public",
            "lineNumber": 10
          }
        ],
        "modifiers": [
          {
            "name": "onlyContract",
            "signature": "onlyContract(bytes32 contractName)",
            "visibility": "internal",
            "parameters": "(bytes32 contractName)",
            "lineNumber": 51
          }
        ],
        "structs": [],
        "inherits": []
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/DappMaintenance.sol": {
    "imports": [
      "./Owned.sol"
    ],
    "contracts": {
      "DappMaintenance": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 20,
            "requires": [
              {
                "name": "require(..., \"Owner address cannot be 0\")",
                "lineNumber": 21
              }
            ],
            "events": [
              "OwnerChanged"
            ]
          },
          {
            "name": "setMaintenanceModeAll",
            "signature": "setMaintenanceModeAll(bool isPaused)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 26,
            "requires": [],
            "events": [
              "StakingMaintenance",
              "SXMaintenance"
            ]
          },
          {
            "name": "setMaintenanceModeStaking",
            "signature": "setMaintenanceModeStaking(bool isPaused)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 33,
            "requires": [],
            "events": [
              "StakingMaintenance"
            ]
          },
          {
            "name": "setMaintenanceModeSX",
            "signature": "setMaintenanceModeSX(bool isPaused)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 38,
            "requires": [],
            "events": [
              "SXMaintenance"
            ]
          }
        ],
        "events": [
          {
            "name": "StakingMaintenance",
            "parameters": "(bool isPaused)",
            "lineNumber": 43
          },
          {
            "name": "SXMaintenance",
            "parameters": "(bool isPaused)",
            "lineNumber": 44
          }
        ],
        "variables": [
          {
            "name": "isPausedStaking",
            "type": "bool",
            "visibility": "public",
            "lineNumber": 14
          },
          {
            "name": "isPausedSX",
            "type": "bool",
            "visibility": "public",
            "lineNumber": 15
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/DebtCache.sol": {
    "imports": [
      "./BaseDebtCache.sol"
    ],
    "contracts": {
      "DebtCache": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "purgeCachedPynthDebt",
            "signature": "purgeCachedPynthDebt(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [
              {
                "name": "require(..., \"Pynth exists\")",
                "lineNumber": 14
              }
            ],
            "events": []
          },
          {
            "name": "takeDebtSnapshot",
            "signature": "takeDebtSnapshot()",
            "returns": "()",
            "modifiers": [
              "requireSystemActiveIfNotOwner"
            ],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": [
              "DebtCacheUpdated",
              "DebtCacheSnapshotTaken"
            ]
          },
          {
            "name": "updateCachedPynthDebts",
            "signature": "updateCachedPynthDebts(bytes32[] currencyKeys)",
            "returns": "()",
            "modifiers": [
              "requireSystemActiveIfNotOwner"
            ],
            "visibility": "external",
            "lineNumber": 41,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebtWithRate",
            "signature": "updateCachedPynthDebtWithRate(bytes32 currencyKey, uint256 currencyRate)",
            "returns": "()",
            "modifiers": [
              "onlyIssuer"
            ],
            "visibility": "external",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebtsWithRates",
            "signature": "updateCachedPynthDebtsWithRates(bytes32[] currencyKeys, uint256[] currencyRates)",
            "returns": "()",
            "modifiers": [
              "onlyIssuerOrExchanger"
            ],
            "visibility": "external",
            "lineNumber": 54,
            "requires": [],
            "events": []
          },
          {
            "name": "updateDebtCacheValidity",
            "signature": "updateDebtCacheValidity(bool currentlyInvalid)",
            "returns": "()",
            "modifiers": [
              "onlyIssuer"
            ],
            "visibility": "external",
            "lineNumber": 61,
            "requires": [],
            "events": []
          },
          {
            "name": "_updateDebtCacheValidity",
            "signature": "_updateDebtCacheValidity(bool currentlyInvalid)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 67,
            "requires": [],
            "events": []
          },
          {
            "name": "_updateCachedPynthDebtsWithRates",
            "signature": "_updateCachedPynthDebtsWithRates(bytes32[] currencyKeys, uint256[] currentRates, bool anyRateIsInvalid)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 74,
            "requires": [
              {
                "name": "require(..., \"Input array lengths differ\")",
                "lineNumber": 80
              }
            ],
            "events": []
          }
        ],
        "events": [
          {
            "name": "DebtCacheUpdated",
            "parameters": "(uint256 cachedDebt)",
            "lineNumber": 114
          },
          {
            "name": "DebtCacheSnapshotTaken",
            "parameters": "(uint256 timestamp)",
            "lineNumber": 115
          },
          {
            "name": "DebtCacheValidityChanged",
            "parameters": "(bool isInvalid)",
            "lineNumber": 116
          }
        ],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "BaseDebtCache"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/DelegateApprovals.sol": {
    "imports": [
      "./Owned.sol",
      "./interfaces/IDelegateApprovals.sol",
      "./EternalStorage.sol"
    ],
    "contracts": {
      "DelegateApprovals": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, contract EternalStorage _eternalStorage)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "_getKey",
            "signature": "_getKey(bytes32 _action, address _authoriser, address _delegate) pure",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "canBurnFor",
            "signature": "canBurnFor(address authoriser, address delegate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 47,
            "requires": [],
            "events": []
          },
          {
            "name": "canIssueFor",
            "signature": "canIssueFor(address authoriser, address delegate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 51,
            "requires": [],
            "events": []
          },
          {
            "name": "canClaimFor",
            "signature": "canClaimFor(address authoriser, address delegate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 55,
            "requires": [],
            "events": []
          },
          {
            "name": "canExchangeFor",
            "signature": "canExchangeFor(address authoriser, address delegate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 59,
            "requires": [],
            "events": []
          },
          {
            "name": "approvedAll",
            "signature": "approvedAll(address authoriser, address delegate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 63,
            "requires": [],
            "events": []
          },
          {
            "name": "_checkApproval",
            "signature": "_checkApproval(bytes32 action, address authoriser, address delegate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 70,
            "requires": [],
            "events": []
          },
          {
            "name": "approveAllDelegatePowers",
            "signature": "approveAllDelegatePowers(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 83,
            "requires": [],
            "events": []
          },
          {
            "name": "removeAllDelegatePowers",
            "signature": "removeAllDelegatePowers(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 88,
            "requires": [],
            "events": []
          },
          {
            "name": "approveBurnOnBehalf",
            "signature": "approveBurnOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 95,
            "requires": [],
            "events": []
          },
          {
            "name": "removeBurnOnBehalf",
            "signature": "removeBurnOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 99,
            "requires": [],
            "events": []
          },
          {
            "name": "approveIssueOnBehalf",
            "signature": "approveIssueOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 104,
            "requires": [],
            "events": []
          },
          {
            "name": "removeIssueOnBehalf",
            "signature": "removeIssueOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 108,
            "requires": [],
            "events": []
          },
          {
            "name": "approveClaimOnBehalf",
            "signature": "approveClaimOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 113,
            "requires": [],
            "events": []
          },
          {
            "name": "removeClaimOnBehalf",
            "signature": "removeClaimOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 117,
            "requires": [],
            "events": []
          },
          {
            "name": "approveExchangeOnBehalf",
            "signature": "approveExchangeOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 122,
            "requires": [],
            "events": []
          },
          {
            "name": "removeExchangeOnBehalf",
            "signature": "removeExchangeOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 126,
            "requires": [],
            "events": []
          },
          {
            "name": "_setApproval",
            "signature": "_setApproval(bytes32 action, address authoriser, address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 130,
            "requires": [
              {
                "name": "require(..., \"Can't delegate to address(0)\")",
                "lineNumber": 135
              }
            ],
            "events": [
              "Approval"
            ]
          },
          {
            "name": "_withdrawApproval",
            "signature": "_withdrawApproval(bytes32 action, address authoriser, address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 140,
            "requires": [],
            "events": []
          },
          {
            "name": "setEternalStorage",
            "signature": "setEternalStorage(contract EternalStorage _eternalStorage)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 152,
            "requires": [
              {
                "name": "require(..., \"Can't set eternalStorage to address(0)\")",
                "lineNumber": 153
              }
            ],
            "events": [
              "EternalStorageUpdated"
            ]
          }
        ],
        "events": [
          {
            "name": "Approval",
            "parameters": "(address authoriser, address delegate, bytes32 action)",
            "lineNumber": 159
          },
          {
            "name": "WithdrawApproval",
            "parameters": "(address authoriser, address delegate, bytes32 action)",
            "lineNumber": 160
          },
          {
            "name": "EternalStorageUpdated",
            "parameters": "(address newEternalStorage)",
            "lineNumber": 161
          }
        ],
        "variables": [
          {
            "name": "BURN_FOR_ADDRESS",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 12
          },
          {
            "name": "ISSUE_FOR_ADDRESS",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 13
          },
          {
            "name": "CLAIM_FOR_ADDRESS",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 14
          },
          {
            "name": "EXCHANGE_FOR_ADDRESS",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 15
          },
          {
            "name": "APPROVE_ALL",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 16
          },
          {
            "name": "_delegatableFunctions",
            "type": "bytes32[5]",
            "visibility": "private",
            "lineNumber": 18
          },
          {
            "name": "eternalStorage",
            "type": "contract EternalStorage",
            "visibility": "public",
            "lineNumber": 27
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "IDelegateApprovals"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/Depot.sol": {
    "imports": [
      "./Owned.sol",
      "./Pausable.sol",
      "openzeppelin-solidity-2.3.0/contracts/utils/ReentrancyGuard.sol",
      "./MixinResolver.sol",
      "./interfaces/IDepot.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IExchangeRates.sol"
    ],
    "contracts": {
      "Depot": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address payable _fundsWallet, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 81,
            "requires": [],
            "events": []
          },
          {
            "name": "setMaxEthPurchase",
            "signature": "setMaxEthPurchase(uint256 _maxEthPurchase)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 91,
            "requires": [],
            "events": [
              "MaxEthPurchaseUpdated"
            ]
          },
          {
            "name": "setFundsWallet",
            "signature": "setFundsWallet(address payable _fundsWallet)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 100,
            "requires": [],
            "events": [
              "FundsWalletUpdated"
            ]
          },
          {
            "name": "setMinimumDepositAmount",
            "signature": "setMinimumDepositAmount(uint256 _amount)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 109,
            "requires": [
              {
                "name": "require(..., \"Minimum deposit amount must be greater than UNIT\")",
                "lineNumber": 111
              }
            ],
            "events": [
              "MinimumDepositAmountUpdated"
            ]
          },
          {
            "name": "constructor",
            "signature": "constructor() payable",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 121,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeEtherForPynths",
            "signature": "exchangeEtherForPynths() payable",
            "returns": "(uint256)",
            "modifiers": [
              "nonReentrant",
              "rateNotInvalid",
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 129,
            "requires": [],
            "events": []
          },
          {
            "name": "_exchangeEtherForPynths",
            "signature": "_exchangeEtherForPynths()",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 142,
            "requires": [
              {
                "name": "require(..., \"ETH amount above maxEthPurchase limit\")",
                "lineNumber": 143
              }
            ],
            "events": []
          },
          {
            "name": "exchangeEtherForPynthsAtRate",
            "signature": "exchangeEtherForPynthsAtRate(uint256 guaranteedRate) payable",
            "returns": "(uint256)",
            "modifiers": [
              "rateNotInvalid",
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 260,
            "requires": [
              {
                "name": "require(..., \"Guaranteed rate would not be received\")",
                "lineNumber": 269
              }
            ],
            "events": []
          },
          {
            "name": "_exchangeEtherForPERI",
            "signature": "_exchangeEtherForPERI()",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 274,
            "requires": [],
            "events": [
              "Exchange"
            ]
          },
          {
            "name": "exchangeEtherForPERI",
            "signature": "exchangeEtherForPERI() payable",
            "returns": "(uint256)",
            "modifiers": [
              "rateNotInvalid",
              "rateNotInvalid",
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 292,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeEtherForPERIAtRate",
            "signature": "exchangeEtherForPERIAtRate(uint256 guaranteedEtherRate, uint256 guaranteedPeriFinanceRate) payable",
            "returns": "(uint256)",
            "modifiers": [
              "rateNotInvalid",
              "rateNotInvalid",
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 311,
            "requires": [
              {
                "name": "require(..., \"Guaranteed ether rate would not be received\")",
                "lineNumber": 321
              },
              {
                "name": "require(..., \"Guaranteed peri finance rate would not be received\")",
                "lineNumber": 322
              }
            ],
            "events": []
          },
          {
            "name": "_exchangePynthsForPERI",
            "signature": "_exchangePynthsForPERI(uint256 pynthAmount)",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 330,
            "requires": [],
            "events": [
              "Exchange"
            ]
          },
          {
            "name": "exchangePynthsForPERI",
            "signature": "exchangePynthsForPERI(uint256 pynthAmount)",
            "returns": "(uint256)",
            "modifiers": [
              "rateNotInvalid",
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 351,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangePynthsForPERIAtRate",
            "signature": "exchangePynthsForPERIAtRate(uint256 pynthAmount, uint256 guaranteedRate)",
            "returns": "(uint256)",
            "modifiers": [
              "rateNotInvalid",
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 368,
            "requires": [
              {
                "name": "require(..., \"Guaranteed rate would not be received\")",
                "lineNumber": 376
              }
            ],
            "events": []
          },
          {
            "name": "withdrawPeriFinance",
            "signature": "withdrawPeriFinance(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 385,
            "requires": [],
            "events": []
          },
          {
            "name": "withdrawMyDepositedPynths",
            "signature": "withdrawMyDepositedPynths()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 401,
            "requires": [
              {
                "name": "require(..., \"You have no deposits to withdraw.\")",
                "lineNumber": 426
              }
            ],
            "events": [
              "PynthWithdrawal"
            ]
          },
          {
            "name": "depositPynths",
            "signature": "depositPynths(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 438,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 465,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceReceivedForPynths",
            "signature": "periFinanceReceivedForPynths(uint256 amount) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 477,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceReceivedForEther",
            "signature": "periFinanceReceivedForEther(uint256 amount) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 487,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthsReceivedForEther",
            "signature": "pynthsReceivedForEther(uint256 amount) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 500,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthpUSD",
            "signature": "pynthpUSD() view",
            "returns": "(contract IERC20)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 507,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinance",
            "signature": "periFinance() view",
            "returns": "(contract IERC20)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 511,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeRates",
            "signature": "exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 515,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "MaxEthPurchaseUpdated",
            "parameters": "(uint256 amount)",
            "lineNumber": 528
          },
          {
            "name": "FundsWalletUpdated",
            "parameters": "(address newFundsWallet)",
            "lineNumber": 529
          },
          {
            "name": "Exchange",
            "parameters": "(string fromCurrency, uint256 fromAmount, string toCurrency, uint256 toAmount)",
            "lineNumber": 530
          },
          {
            "name": "PynthWithdrawal",
            "parameters": "(address user, uint256 amount)",
            "lineNumber": 531
          },
          {
            "name": "PynthDeposit",
            "parameters": "(address user, uint256 amount, uint256 depositIndex)",
            "lineNumber": 532
          },
          {
            "name": "PynthDepositRemoved",
            "parameters": "(address user, uint256 amount, uint256 depositIndex)",
            "lineNumber": 533
          },
          {
            "name": "PynthDepositNotAccepted",
            "parameters": "(address user, uint256 amount, uint256 minimum)",
            "lineNumber": 534
          },
          {
            "name": "MinimumDepositAmountUpdated",
            "parameters": "(uint256 amount)",
            "lineNumber": 535
          },
          {
            "name": "NonPayableContract",
            "parameters": "(address receiver, uint256 amount)",
            "lineNumber": 536
          },
          {
            "name": "ClearedDeposit",
            "parameters": "(address fromAddress, address toAddress, uint256 fromETHAmount, uint256 toAmount, uint256 depositIndex)",
            "lineNumber": 537
          }
        ],
        "variables": [
          {
            "name": "PERI",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 22
          },
          {
            "name": "ETH",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 23
          },
          {
            "name": "fundsWallet",
            "type": "address payable",
            "visibility": "public",
            "lineNumber": 30
          },
          {
            "name": "deposits",
            "type": "mapping(uint256 => struct Depot.PynthDepositEntry)",
            "visibility": "public",
            "lineNumber": 51
          },
          {
            "name": "depositStartIndex",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 53
          },
          {
            "name": "depositEndIndex",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 55
          },
          {
            "name": "totalSellableDeposits",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 60
          },
          {
            "name": "minimumDepositAmount",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 63
          },
          {
            "name": "maxEthPurchase",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 66
          },
          {
            "name": "smallDeposits",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 71
          },
          {
            "name": "CONTRACT_PYNTHPUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 75
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 76
          },
          {
            "name": "CONTRACT_PERIFINANCE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 77
          }
        ],
        "modifiers": [
          {
            "name": "rateNotInvalid",
            "signature": "rateNotInvalid(bytes32 currencyKey)",
            "visibility": "internal",
            "parameters": "(bytes32 currencyKey)",
            "lineNumber": 521
          }
        ],
        "structs": [
          {
            "name": "PynthDepositEntry",
            "members": [
              {
                "name": "user",
                "type": "address payable"
              },
              {
                "name": "amount",
                "type": "uint256"
              }
            ],
            "lineNumber": 33
          }
        ],
        "inherits": [
          "Owned",
          "Pausable",
          "ReentrancyGuard",
          "MixinResolver",
          "IDepot"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/EmptyCollateralManager.sol": {
    "imports": [
      "./interfaces/ICollateralManager.sol"
    ],
    "contracts": {
      "EmptyCollateralManager": {
        "functions": [
          {
            "name": "hasCollateral",
            "signature": "hasCollateral(address) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "isPynthManaged",
            "signature": "isPynthManaged(bytes32) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "long",
            "signature": "long(bytes32) view",
            "returns": "(uint256 amount)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "short",
            "signature": "short(bytes32) view",
            "returns": "(uint256 amount)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "totalLong",
            "signature": "totalLong() view",
            "returns": "(uint256 pusdValue, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 25,
            "requires": [],
            "events": []
          },
          {
            "name": "totalShort",
            "signature": "totalShort() view",
            "returns": "(uint256 pusdValue, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "getBorrowRate",
            "signature": "getBorrowRate() view",
            "returns": "(uint256 borrowRate, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 33,
            "requires": [],
            "events": []
          },
          {
            "name": "getShortRate",
            "signature": "getShortRate(bytes32) view",
            "returns": "(uint256 shortRate, bool rateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 37,
            "requires": [],
            "events": []
          },
          {
            "name": "getRatesAndTime",
            "signature": "getRatesAndTime(uint256) view",
            "returns": "(uint256 entryRate, uint256 lastRate, uint256 lastUpdated, uint256 newIndex)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 41,
            "requires": [],
            "events": []
          },
          {
            "name": "getShortRatesAndTime",
            "signature": "getShortRatesAndTime(bytes32, uint256) view",
            "returns": "(uint256 entryRate, uint256 lastRate, uint256 lastUpdated, uint256 newIndex)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 54,
            "requires": [],
            "events": []
          },
          {
            "name": "exceedsDebtLimit",
            "signature": "exceedsDebtLimit(uint256, bytes32) view",
            "returns": "(bool canIssue, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 67,
            "requires": [],
            "events": []
          },
          {
            "name": "arePynthsAndCurrenciesSet",
            "signature": "arePynthsAndCurrenciesSet(bytes32[], bytes32[]) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 71,
            "requires": [],
            "events": []
          },
          {
            "name": "areShortablePynthsSet",
            "signature": "areShortablePynthsSet(bytes32[], bytes32[]) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 75,
            "requires": [],
            "events": []
          },
          {
            "name": "getNewLoanId",
            "signature": "getNewLoanId()",
            "returns": "(uint256 id)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 80,
            "requires": [],
            "events": []
          },
          {
            "name": "addCollaterals",
            "signature": "addCollaterals(address[])",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 85,
            "requires": [],
            "events": []
          },
          {
            "name": "removeCollaterals",
            "signature": "removeCollaterals(address[])",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 87,
            "requires": [],
            "events": []
          },
          {
            "name": "addPynths",
            "signature": "addPynths(bytes32[], bytes32[])",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 89,
            "requires": [],
            "events": []
          },
          {
            "name": "removePynths",
            "signature": "removePynths(bytes32[], bytes32[])",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 91,
            "requires": [],
            "events": []
          },
          {
            "name": "addShortablePynths",
            "signature": "addShortablePynths(bytes32[2][], bytes32[])",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 93,
            "requires": [],
            "events": []
          },
          {
            "name": "removeShortablePynths",
            "signature": "removeShortablePynths(bytes32[])",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 95,
            "requires": [],
            "events": []
          },
          {
            "name": "updateBorrowRates",
            "signature": "updateBorrowRates(uint256)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 98,
            "requires": [],
            "events": []
          },
          {
            "name": "updateShortRates",
            "signature": "updateShortRates(bytes32, uint256)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 100,
            "requires": [],
            "events": []
          },
          {
            "name": "incrementLongs",
            "signature": "incrementLongs(bytes32, uint256)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 102,
            "requires": [],
            "events": []
          },
          {
            "name": "decrementLongs",
            "signature": "decrementLongs(bytes32, uint256)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 104,
            "requires": [],
            "events": []
          },
          {
            "name": "incrementShorts",
            "signature": "incrementShorts(bytes32, uint256)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 106,
            "requires": [],
            "events": []
          },
          {
            "name": "decrementShorts",
            "signature": "decrementShorts(bytes32, uint256)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 108,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "ICollateralManager"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/EmptyEtherCollateral.sol": {
    "imports": [],
    "contracts": {
      "EmptyEtherCollateral": {
        "functions": [
          {
            "name": "totalIssuedPynths",
            "signature": "totalIssuedPynths() pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/EscrowChecker.sol": {
    "imports": [],
    "contracts": {
      "EscrowChecker": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(contract IPeriFinanceEscrow _esc)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "checkAccountSchedule",
            "signature": "checkAccountSchedule(address account) view",
            "returns": "(uint256[16])",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 17,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "periFinance_escrow",
            "type": "contract IPeriFinanceEscrow",
            "visibility": "public",
            "lineNumber": 11
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    },
    "libraries": {},
    "interfaces": {
      "IPeriFinanceEscrow": {
        "functions": [
          {
            "name": "numVestingEntries",
            "signature": "numVestingEntries(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 4,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingScheduleEntry",
            "signature": "getVestingScheduleEntry(address account, uint256 index) view",
            "returns": "(uint256[2])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/EternalStorage.sol": {
    "imports": [
      "./Owned.sol",
      "./State.sol"
    ],
    "contracts": {
      "EternalStorage": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _associatedContract)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "getUIntValue",
            "signature": "getUIntValue(bytes32 record) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 28,
            "requires": [],
            "events": []
          },
          {
            "name": "setUIntValue",
            "signature": "setUIntValue(bytes32 record, uint256 value)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 32,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteUIntValue",
            "signature": "deleteUIntValue(bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 36,
            "requires": [],
            "events": []
          },
          {
            "name": "getStringValue",
            "signature": "getStringValue(bytes32 record) view",
            "returns": "(string)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 41,
            "requires": [],
            "events": []
          },
          {
            "name": "setStringValue",
            "signature": "setStringValue(bytes32 record, string value)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 45,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteStringValue",
            "signature": "deleteStringValue(bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 49,
            "requires": [],
            "events": []
          },
          {
            "name": "getAddressValue",
            "signature": "getAddressValue(bytes32 record) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 54,
            "requires": [],
            "events": []
          },
          {
            "name": "setAddressValue",
            "signature": "setAddressValue(bytes32 record, address value)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 58,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteAddressValue",
            "signature": "deleteAddressValue(bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 62,
            "requires": [],
            "events": []
          },
          {
            "name": "getBytesValue",
            "signature": "getBytesValue(bytes32 record) view",
            "returns": "(bytes)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 67,
            "requires": [],
            "events": []
          },
          {
            "name": "setBytesValue",
            "signature": "setBytesValue(bytes32 record, bytes value)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 71,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteBytesValue",
            "signature": "deleteBytesValue(bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 75,
            "requires": [],
            "events": []
          },
          {
            "name": "getBytes32Value",
            "signature": "getBytes32Value(bytes32 record) view",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 80,
            "requires": [],
            "events": []
          },
          {
            "name": "setBytes32Value",
            "signature": "setBytes32Value(bytes32 record, bytes32 value)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 84,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteBytes32Value",
            "signature": "deleteBytes32Value(bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 88,
            "requires": [],
            "events": []
          },
          {
            "name": "getBooleanValue",
            "signature": "getBooleanValue(bytes32 record) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 93,
            "requires": [],
            "events": []
          },
          {
            "name": "setBooleanValue",
            "signature": "setBooleanValue(bytes32 record, bool value)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 97,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteBooleanValue",
            "signature": "deleteBooleanValue(bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 101,
            "requires": [],
            "events": []
          },
          {
            "name": "getIntValue",
            "signature": "getIntValue(bytes32 record) view",
            "returns": "(int256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 106,
            "requires": [],
            "events": []
          },
          {
            "name": "setIntValue",
            "signature": "setIntValue(bytes32 record, int256 value)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 110,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteIntValue",
            "signature": "deleteIntValue(bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 114,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "UIntStorage",
            "type": "mapping(bytes32 => uint256)",
            "visibility": "internal",
            "lineNumber": 19
          },
          {
            "name": "StringStorage",
            "type": "mapping(bytes32 => string)",
            "visibility": "internal",
            "lineNumber": 20
          },
          {
            "name": "AddressStorage",
            "type": "mapping(bytes32 => address)",
            "visibility": "internal",
            "lineNumber": 21
          },
          {
            "name": "BytesStorage",
            "type": "mapping(bytes32 => bytes)",
            "visibility": "internal",
            "lineNumber": 22
          },
          {
            "name": "Bytes32Storage",
            "type": "mapping(bytes32 => bytes32)",
            "visibility": "internal",
            "lineNumber": 23
          },
          {
            "name": "BooleanStorage",
            "type": "mapping(bytes32 => bool)",
            "visibility": "internal",
            "lineNumber": 24
          },
          {
            "name": "IntStorage",
            "type": "mapping(bytes32 => int256)",
            "visibility": "internal",
            "lineNumber": 25
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "State"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/EtherCollateral.sol": {
    "imports": [
      "./Owned.sol",
      "./Pausable.sol",
      "openzeppelin-solidity-2.3.0/contracts/utils/ReentrancyGuard.sol",
      "./MixinResolver.sol",
      "./interfaces/IEtherCollateral.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/ISystemStatus.sol",
      "./interfaces/IFeePool.sol",
      "./interfaces/IPynth.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IDepot.sol",
      "./interfaces/IExchangeRates.sol"
    ],
    "contracts": {
      "EtherCollateral": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 104,
            "requires": [],
            "events": []
          },
          {
            "name": "setCollateralizationRatio",
            "signature": "setCollateralizationRatio(uint256 ratio)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 110,
            "requires": [
              {
                "name": "require(..., \"Too high\")",
                "lineNumber": 111
              },
              {
                "name": "require(..., \"Too low\")",
                "lineNumber": 112
              }
            ],
            "events": [
              "CollateralizationRatioUpdated"
            ]
          },
          {
            "name": "setInterestRate",
            "signature": "setInterestRate(uint256 _interestRate)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 117,
            "requires": [
              {
                "name": "require(..., \"Interest rate cannot be less that the SECONDS_IN_A_YEAR\")",
                "lineNumber": 118
              },
              {
                "name": "require(..., \"Interest cannot be more than 100% APR\")",
                "lineNumber": 119
              }
            ],
            "events": [
              "InterestRateUpdated"
            ]
          },
          {
            "name": "setIssueFeeRate",
            "signature": "setIssueFeeRate(uint256 _issueFeeRate)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 125,
            "requires": [],
            "events": [
              "IssueFeeRateUpdated"
            ]
          },
          {
            "name": "setIssueLimit",
            "signature": "setIssueLimit(uint256 _issueLimit)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 130,
            "requires": [],
            "events": [
              "IssueLimitUpdated"
            ]
          },
          {
            "name": "setMinLoanSize",
            "signature": "setMinLoanSize(uint256 _minLoanSize)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 135,
            "requires": [],
            "events": [
              "MinLoanSizeUpdated"
            ]
          },
          {
            "name": "setAccountLoanLimit",
            "signature": "setAccountLoanLimit(uint256 _loanLimit)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 140,
            "requires": [
              {
                "name": "require(..., \"Owner cannot set higher than HARD_CAP\")",
                "lineNumber": 142
              }
            ],
            "events": [
              "AccountLoanLimitUpdated"
            ]
          },
          {
            "name": "setLoanLiquidationOpen",
            "signature": "setLoanLiquidationOpen(bool _loanLiquidationOpen)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 147,
            "requires": [
              {
                "name": "require(..., \"Before liquidation deadline\")",
                "lineNumber": 148
              }
            ],
            "events": [
              "LoanLiquidationOpenUpdated"
            ]
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 155,
            "requires": [],
            "events": []
          },
          {
            "name": "getContractInfo",
            "signature": "getContractInfo() view",
            "returns": "(uint256 _collateralizationRatio, uint256 _issuanceRatio, uint256 _interestRate, uint256 _interestPerSecond, uint256 _issueFeeRate, uint256 _issueLimit, uint256 _minLoanSize, uint256 _totalIssuedPynths, uint256 _totalLoansCreated, uint256 _totalOpenLoanCount, uint256 _ethBalance, uint256 _liquidationDeadline, bool _loanLiquidationOpen)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 164,
            "requires": [],
            "events": []
          },
          {
            "name": "issuanceRatio",
            "signature": "issuanceRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 201,
            "requires": [],
            "events": []
          },
          {
            "name": "loanAmountFromCollateral",
            "signature": "loanAmountFromCollateral(uint256 collateralAmount) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 207,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralAmountForLoan",
            "signature": "collateralAmountForLoan(uint256 loanAmount) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 211,
            "requires": [],
            "events": []
          },
          {
            "name": "currentInterestOnLoan",
            "signature": "currentInterestOnLoan(address _account, uint256 _loanID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 215,
            "requires": [],
            "events": []
          },
          {
            "name": "accruedInterestOnLoan",
            "signature": "accruedInterestOnLoan(uint256 _loanAmount, uint256 _seconds) view",
            "returns": "(uint256 interestAmount)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 222,
            "requires": [],
            "events": []
          },
          {
            "name": "calculateMintingFee",
            "signature": "calculateMintingFee(address _account, uint256 _loanID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 228,
            "requires": [],
            "events": []
          },
          {
            "name": "openLoanIDsByAccount",
            "signature": "openLoanIDsByAccount(address _account) view",
            "returns": "(uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 234,
            "requires": [],
            "events": []
          },
          {
            "name": "getLoan",
            "signature": "getLoan(address _account, uint256 _loanID) view",
            "returns": "(address account, uint256 collateralAmount, uint256 loanAmount, uint256 timeCreated, uint256 loanID, uint256 timeClosed, uint256 interest, uint256 totalFees)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 257,
            "requires": [],
            "events": []
          },
          {
            "name": "loanLifeSpan",
            "signature": "loanLifeSpan(address _account, uint256 _loanID) view",
            "returns": "(uint256 loanLifeSpanResult)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 282,
            "requires": [],
            "events": []
          },
          {
            "name": "openLoan",
            "signature": "openLoan() payable",
            "returns": "(uint256 loanID)",
            "modifiers": [
              "notPaused",
              "nonReentrant",
              "pETHRateNotInvalid"
            ],
            "visibility": "external",
            "lineNumber": 289,
            "requires": [
              {
                "name": "require(..., \"Not enough ETH to create this loan. Please see the minLoanSize\")",
                "lineNumber": 293
              },
              {
                "name": "require(..., \"Loans are now being liquidated\")",
                "lineNumber": 296
              },
              {
                "name": "require(..., \"Each account is limted to 50 loans\")",
                "lineNumber": 299
              },
              {
                "name": "require(..., \"Loan Amount exceeds the supply cap.\")",
                "lineNumber": 305
              }
            ],
            "events": [
              "LoanCreated"
            ]
          },
          {
            "name": "closeLoan",
            "signature": "closeLoan(uint256 loanID)",
            "returns": "()",
            "modifiers": [
              "nonReentrant",
              "pETHRateNotInvalid"
            ],
            "visibility": "external",
            "lineNumber": 334,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidateUnclosedLoan",
            "signature": "liquidateUnclosedLoan(address _loanCreatorsAddress, uint256 _loanID)",
            "returns": "()",
            "modifiers": [
              "nonReentrant",
              "pETHRateNotInvalid"
            ],
            "visibility": "external",
            "lineNumber": 339,
            "requires": [
              {
                "name": "require(..., \"Liquidation is not open\")",
                "lineNumber": 340
              }
            ],
            "events": [
              "LoanLiquidated"
            ]
          },
          {
            "name": "_closeLoan",
            "signature": "_closeLoan(address account, uint256 loanID)",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 349,
            "requires": [
              {
                "name": "require(..., \"Loan does not exist\")",
                "lineNumber": 355
              },
              {
                "name": "require(..., \"Loan already closed\")",
                "lineNumber": 356
              },
              {
                "name": "require(..., \"You do not have the required Pynth balance to close this loan.\")",
                "lineNumber": 357
              },
              {
                "name": "require(..., \"The pUSD Depot does not have enough pUSD to buy for fees\")",
                "lineNumber": 377
              }
            ],
            "events": [
              "LoanClosed"
            ]
          },
          {
            "name": "_getLoanFromStorage",
            "signature": "_getLoanFromStorage(address account, uint256 loanID) view",
            "returns": "(struct EtherCollateral.PynthLoanStruct)",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 393,
            "requires": [],
            "events": []
          },
          {
            "name": "_recordLoanClosure",
            "signature": "_recordLoanClosure(struct EtherCollateral.PynthLoanStruct pynthLoan)",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 402,
            "requires": [],
            "events": []
          },
          {
            "name": "_incrementTotalLoansCounter",
            "signature": "_incrementTotalLoansCounter()",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 416,
            "requires": [],
            "events": []
          },
          {
            "name": "_calculateMintingFee",
            "signature": "_calculateMintingFee(struct EtherCollateral.PynthLoanStruct pynthLoan) view",
            "returns": "(uint256 mintingFee)",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 425,
            "requires": [],
            "events": []
          },
          {
            "name": "_loanLifeSpan",
            "signature": "_loanLifeSpan(struct EtherCollateral.PynthLoanStruct pynthLoan) view",
            "returns": "(uint256 loanLifeSpanResult)",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 429,
            "requires": [],
            "events": []
          },
          {
            "name": "systemStatus",
            "signature": "systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 438,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthpETH",
            "signature": "pynthpETH() view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 442,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthpUSD",
            "signature": "pynthpUSD() view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 446,
            "requires": [],
            "events": []
          },
          {
            "name": "depot",
            "signature": "depot() view",
            "returns": "(contract IDepot)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 450,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeRates",
            "signature": "exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 454,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "CollateralizationRatioUpdated",
            "parameters": "(uint256 ratio)",
            "lineNumber": 467
          },
          {
            "name": "InterestRateUpdated",
            "parameters": "(uint256 interestRate)",
            "lineNumber": 468
          },
          {
            "name": "IssueFeeRateUpdated",
            "parameters": "(uint256 issueFeeRate)",
            "lineNumber": 469
          },
          {
            "name": "IssueLimitUpdated",
            "parameters": "(uint256 issueLimit)",
            "lineNumber": 470
          },
          {
            "name": "MinLoanSizeUpdated",
            "parameters": "(uint256 minLoanSize)",
            "lineNumber": 471
          },
          {
            "name": "AccountLoanLimitUpdated",
            "parameters": "(uint256 loanLimit)",
            "lineNumber": 472
          },
          {
            "name": "LoanLiquidationOpenUpdated",
            "parameters": "(bool loanLiquidationOpen)",
            "lineNumber": 473
          },
          {
            "name": "LoanCreated",
            "parameters": "(address account, uint256 loanID, uint256 amount)",
            "lineNumber": 474
          },
          {
            "name": "LoanClosed",
            "parameters": "(address account, uint256 loanID, uint256 feesPaid)",
            "lineNumber": 475
          },
          {
            "name": "LoanLiquidated",
            "parameters": "(address account, uint256 loanID, address liquidator)",
            "lineNumber": 476
          }
        ],
        "variables": [
          {
            "name": "ONE_THOUSAND",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 27
          },
          {
            "name": "ONE_HUNDRED",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 28
          },
          {
            "name": "SECONDS_IN_A_YEAR",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 30
          },
          {
            "name": "FEE_ADDRESS",
            "type": "address",
            "visibility": "internal",
            "lineNumber": 33
          },
          {
            "name": "collateralizationRatio",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 38
          },
          {
            "name": "interestRate",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 41
          },
          {
            "name": "interestPerSecond",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 42
          },
          {
            "name": "issueFeeRate",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 45
          },
          {
            "name": "issueLimit",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 48
          },
          {
            "name": "minLoanSize",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 51
          },
          {
            "name": "accountLoanLimit",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 54
          },
          {
            "name": "loanLiquidationOpen",
            "type": "bool",
            "visibility": "public",
            "lineNumber": 57
          },
          {
            "name": "liquidationDeadline",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 60
          },
          {
            "name": "totalIssuedPynths",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 65
          },
          {
            "name": "totalLoansCreated",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 68
          },
          {
            "name": "totalOpenLoanCount",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 71
          },
          {
            "name": "accountsPynthLoans",
            "type": "mapping(address => struct EtherCollateral.PynthLoanStruct[])",
            "visibility": "public",
            "lineNumber": 90
          },
          {
            "name": "accountOpenLoanCounter",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 93
          },
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 97
          },
          {
            "name": "CONTRACT_PYNTHPETH",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 98
          },
          {
            "name": "CONTRACT_PYNTHPUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 99
          },
          {
            "name": "CONTRACT_DEPOT",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 100
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 101
          }
        ],
        "modifiers": [
          {
            "name": "pETHRateNotInvalid",
            "signature": "pETHRateNotInvalid()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 460
          }
        ],
        "structs": [
          {
            "name": "PynthLoanStruct",
            "members": [
              {
                "name": "account",
                "type": "address"
              },
              {
                "name": "collateralAmount",
                "type": "uint256"
              },
              {
                "name": "loanAmount",
                "type": "uint256"
              },
              {
                "name": "timeCreated",
                "type": "uint256"
              },
              {
                "name": "loanID",
                "type": "uint256"
              },
              {
                "name": "timeClosed",
                "type": "uint256"
              }
            ],
            "lineNumber": 74
          }
        ],
        "inherits": [
          "Owned",
          "Pausable",
          "ReentrancyGuard",
          "MixinResolver",
          "IEtherCollateral"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/EtherCollateralpUSD.sol": {
    "imports": [
      "./Owned.sol",
      "./Pausable.sol",
      "openzeppelin-solidity-2.3.0/contracts/utils/ReentrancyGuard.sol",
      "./MixinResolver.sol",
      "./interfaces/IEtherCollateralpUSD.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/ISystemStatus.sol",
      "./interfaces/IFeePool.sol",
      "./interfaces/IPynth.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IExchangeRates.sol"
    ],
    "contracts": {
      "EtherCollateralpUSD": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 123,
            "requires": [],
            "events": []
          },
          {
            "name": "setCollateralizationRatio",
            "signature": "setCollateralizationRatio(uint256 ratio)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 129,
            "requires": [
              {
                "name": "require(..., \"Too high\")",
                "lineNumber": 130
              },
              {
                "name": "require(..., \"Too low\")",
                "lineNumber": 131
              }
            ],
            "events": [
              "CollateralizationRatioUpdated"
            ]
          },
          {
            "name": "setInterestRate",
            "signature": "setInterestRate(uint256 _interestRate)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 136,
            "requires": [
              {
                "name": "require(..., \"Interest rate cannot be less that the SECONDS_IN_A_YEAR\")",
                "lineNumber": 137
              },
              {
                "name": "require(..., \"Interest cannot be more than 100% APR\")",
                "lineNumber": 138
              }
            ],
            "events": [
              "InterestRateUpdated"
            ]
          },
          {
            "name": "setIssueFeeRate",
            "signature": "setIssueFeeRate(uint256 _issueFeeRate)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 144,
            "requires": [],
            "events": [
              "IssueFeeRateUpdated"
            ]
          },
          {
            "name": "setIssueLimit",
            "signature": "setIssueLimit(uint256 _issueLimit)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 149,
            "requires": [],
            "events": [
              "IssueLimitUpdated"
            ]
          },
          {
            "name": "setMinLoanCollateralSize",
            "signature": "setMinLoanCollateralSize(uint256 _minLoanCollateralSize)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 154,
            "requires": [],
            "events": [
              "MinLoanCollateralSizeUpdated"
            ]
          },
          {
            "name": "setAccountLoanLimit",
            "signature": "setAccountLoanLimit(uint256 _loanLimit)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 159,
            "requires": [
              {
                "name": "require(..., \"Owner cannot set higher than ACCOUNT_LOAN_LIMIT_CAP\")",
                "lineNumber": 160
              }
            ],
            "events": [
              "AccountLoanLimitUpdated"
            ]
          },
          {
            "name": "setLoanLiquidationOpen",
            "signature": "setLoanLiquidationOpen(bool _loanLiquidationOpen)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 165,
            "requires": [
              {
                "name": "require(..., \"Before liquidation deadline\")",
                "lineNumber": 166
              }
            ],
            "events": [
              "LoanLiquidationOpenUpdated"
            ]
          },
          {
            "name": "setLiquidationRatio",
            "signature": "setLiquidationRatio(uint256 _liquidationRatio)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 171,
            "requires": [
              {
                "name": "require(..., \"Ratio less than 100%\")",
                "lineNumber": 172
              }
            ],
            "events": [
              "LiquidationRatioUpdated"
            ]
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 178,
            "requires": [],
            "events": []
          },
          {
            "name": "getContractInfo",
            "signature": "getContractInfo() view",
            "returns": "(uint256 _collateralizationRatio, uint256 _issuanceRatio, uint256 _interestRate, uint256 _interestPerSecond, uint256 _issueFeeRate, uint256 _issueLimit, uint256 _minLoanCollateralSize, uint256 _totalIssuedPynths, uint256 _totalLoansCreated, uint256 _totalOpenLoanCount, uint256 _ethBalance, uint256 _liquidationDeadline, bool _loanLiquidationOpen)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 186,
            "requires": [],
            "events": []
          },
          {
            "name": "issuanceRatio",
            "signature": "issuanceRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 222,
            "requires": [],
            "events": []
          },
          {
            "name": "loanAmountFromCollateral",
            "signature": "loanAmountFromCollateral(uint256 collateralAmount) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 227,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralAmountForLoan",
            "signature": "collateralAmountForLoan(uint256 loanAmount) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 232,
            "requires": [],
            "events": []
          },
          {
            "name": "currentInterestOnLoan",
            "signature": "currentInterestOnLoan(address _account, uint256 _loanID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 240,
            "requires": [],
            "events": []
          },
          {
            "name": "accruedInterestOnLoan",
            "signature": "accruedInterestOnLoan(uint256 _loanAmount, uint256 _seconds) view",
            "returns": "(uint256 interestAmount)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 248,
            "requires": [],
            "events": []
          },
          {
            "name": "totalFeesOnLoan",
            "signature": "totalFeesOnLoan(address _account, uint256 _loanID) view",
            "returns": "(uint256 interestAmount, uint256 mintingFee)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 254,
            "requires": [],
            "events": []
          },
          {
            "name": "getMintingFee",
            "signature": "getMintingFee(address _account, uint256 _loanID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 267,
            "requires": [],
            "events": []
          },
          {
            "name": "calculateAmountToLiquidate",
            "signature": "calculateAmountToLiquidate(uint256 debtBalance, uint256 collateral) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 280,
            "requires": [],
            "events": []
          },
          {
            "name": "openLoanIDsByAccount",
            "signature": "openLoanIDsByAccount(address _account) view",
            "returns": "(uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 290,
            "requires": [],
            "events": []
          },
          {
            "name": "getLoan",
            "signature": "getLoan(address _account, uint256 _loanID) view",
            "returns": "(address account, uint256 collateralAmount, uint256 loanAmount, uint256 timeCreated, uint256 loanID, uint256 timeClosed, uint256 accruedInterest, uint256 totalFees)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 313,
            "requires": [],
            "events": []
          },
          {
            "name": "getLoanCollateralRatio",
            "signature": "getLoanCollateralRatio(address _account, uint256 _loanID) view",
            "returns": "(uint256 loanCollateralRatio)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 340,
            "requires": [],
            "events": []
          },
          {
            "name": "_loanCollateralRatio",
            "signature": "_loanCollateralRatio(struct EtherCollateralpUSD.PynthLoanStruct _loan) view",
            "returns": "(uint256 loanCollateralRatio, uint256 collateralValue, uint256 interestAmount)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 347,
            "requires": [],
            "events": []
          },
          {
            "name": "timeSinceInterestAccrualOnLoan",
            "signature": "timeSinceInterestAccrualOnLoan(address _account, uint256 _loanID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 366,
            "requires": [],
            "events": []
          },
          {
            "name": "openLoan",
            "signature": "openLoan(uint256 _loanAmount) payable",
            "returns": "(uint256 loanID)",
            "modifiers": [
              "notPaused",
              "nonReentrant",
              "ETHRateNotInvalid"
            ],
            "visibility": "external",
            "lineNumber": 375,
            "requires": [
              {
                "name": "require(..., \"Not enough ETH to create this loan. Please see the minLoanCollateralSize\")",
                "lineNumber": 386
              },
              {
                "name": "require(..., \"Loans are now being liquidated\")",
                "lineNumber": 392
              },
              {
                "name": "require(..., \"Each account is limited to 50 loans\")",
                "lineNumber": 395
              },
              {
                "name": "require(..., \"Loan amount exceeds max borrowing power\")",
                "lineNumber": 402
              },
              {
                "name": "require(..., \"Loan Amount exceeds the supply cap.\")",
                "lineNumber": 408
              }
            ],
            "events": [
              "LoanCreated"
            ]
          },
          {
            "name": "closeLoan",
            "signature": "closeLoan(uint256 loanID)",
            "returns": "()",
            "modifiers": [
              "nonReentrant",
              "ETHRateNotInvalid"
            ],
            "visibility": "external",
            "lineNumber": 447,
            "requires": [],
            "events": []
          },
          {
            "name": "depositCollateral",
            "signature": "depositCollateral(address account, uint256 loanID) payable",
            "returns": "()",
            "modifiers": [
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 452,
            "requires": [
              {
                "name": "require(..., \"Deposit amount must be greater than 0\")",
                "lineNumber": 453
              },
              {
                "name": "require(..., \"Loans are now being liquidated\")",
                "lineNumber": 458
              }
            ],
            "events": [
              "CollateralDeposited"
            ]
          },
          {
            "name": "withdrawCollateral",
            "signature": "withdrawCollateral(uint256 loanID, uint256 withdrawAmount)",
            "returns": "()",
            "modifiers": [
              "notPaused",
              "nonReentrant",
              "ETHRateNotInvalid"
            ],
            "visibility": "external",
            "lineNumber": 475,
            "requires": [
              {
                "name": "require(..., \"Amount to withdraw must be greater than 0\")",
                "lineNumber": 476
              },
              {
                "name": "require(..., \"Loans are now being liquidated\")",
                "lineNumber": 481
              },
              {
                "name": "require(..., \"Collateral ratio below liquidation after withdraw\")",
                "lineNumber": 496
              }
            ],
            "events": [
              "CollateralWithdrawn"
            ]
          },
          {
            "name": "repayLoan",
            "signature": "repayLoan(address _loanCreatorsAddress, uint256 _loanID, uint256 _repayAmount)",
            "returns": "()",
            "modifiers": [
              "ETHRateNotInvalid"
            ],
            "visibility": "external",
            "lineNumber": 505,
            "requires": [
              {
                "name": "require(..., \"Not enough pUSD balance\")",
                "lineNumber": 513
              }
            ],
            "events": [
              "LoanRepaid"
            ]
          },
          {
            "name": "liquidateLoan",
            "signature": "liquidateLoan(address _loanCreatorsAddress, uint256 _loanID, uint256 _debtToCover)",
            "returns": "()",
            "modifiers": [
              "nonReentrant",
              "ETHRateNotInvalid"
            ],
            "visibility": "external",
            "lineNumber": 544,
            "requires": [
              {
                "name": "require(..., \"Not enough pUSD balance\")",
                "lineNumber": 552
              },
              {
                "name": "require(..., \"Collateral ratio above liquidation ratio\")",
                "lineNumber": 561
              }
            ],
            "events": [
              "LoanPartiallyLiquidated"
            ]
          },
          {
            "name": "_splitInterestLoanPayment",
            "signature": "_splitInterestLoanPayment(uint256 _paymentAmount, uint256 _accruedInterest, uint256 _loanAmount) pure",
            "returns": "(uint256 interestPaid, uint256 loanAmountPaid, uint256 accruedInterestAfter, uint256 loanAmountAfter)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 612,
            "requires": [],
            "events": []
          },
          {
            "name": "_processInterestAndLoanPayment",
            "signature": "_processInterestAndLoanPayment(uint256 interestPaid, uint256 loanAmountPaid)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 645,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidateUnclosedLoan",
            "signature": "liquidateUnclosedLoan(address _loanCreatorsAddress, uint256 _loanID)",
            "returns": "()",
            "modifiers": [
              "nonReentrant",
              "ETHRateNotInvalid"
            ],
            "visibility": "external",
            "lineNumber": 659,
            "requires": [
              {
                "name": "require(..., \"Liquidation is not open\")",
                "lineNumber": 660
              }
            ],
            "events": [
              "LoanLiquidated"
            ]
          },
          {
            "name": "_closeLoan",
            "signature": "_closeLoan(address account, uint256 loanID, bool liquidation)",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 669,
            "requires": [
              {
                "name": "require(..., \"You do not have the required Pynth balance to close this loan.\")",
                "lineNumber": 690
              }
            ],
            "events": [
              "LoanClosed"
            ]
          },
          {
            "name": "_getLoanFromStorage",
            "signature": "_getLoanFromStorage(address account, uint256 loanID) view",
            "returns": "(struct EtherCollateralpUSD.PynthLoanStruct)",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 734,
            "requires": [],
            "events": []
          },
          {
            "name": "_updateLoan",
            "signature": "_updateLoan(struct EtherCollateralpUSD.PynthLoanStruct _pynthLoan, uint256 _newLoanAmount, uint256 _newAccruedInterest, uint256 _lastInterestAccrued)",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 743,
            "requires": [],
            "events": []
          },
          {
            "name": "_updateLoanCollateral",
            "signature": "_updateLoanCollateral(struct EtherCollateralpUSD.PynthLoanStruct _pynthLoan, uint256 _newCollateralAmount)",
            "returns": "(struct EtherCollateralpUSD.PynthLoanStruct)",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 760,
            "requires": [],
            "events": []
          },
          {
            "name": "_recordLoanClosure",
            "signature": "_recordLoanClosure(struct EtherCollateralpUSD.PynthLoanStruct pynthLoan)",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 774,
            "requires": [],
            "events": []
          },
          {
            "name": "_incrementTotalLoansCounter",
            "signature": "_incrementTotalLoansCounter()",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 788,
            "requires": [],
            "events": []
          },
          {
            "name": "_calculateMintingFee",
            "signature": "_calculateMintingFee(uint256 _loanAmount) view",
            "returns": "(uint256 mintingFee)",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 797,
            "requires": [],
            "events": []
          },
          {
            "name": "_timeSinceInterestAccrual",
            "signature": "_timeSinceInterestAccrual(struct EtherCollateralpUSD.PynthLoanStruct _pynthLoan) view",
            "returns": "(uint256 timeSinceAccrual)",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 801,
            "requires": [],
            "events": []
          },
          {
            "name": "_checkLoanIsOpen",
            "signature": "_checkLoanIsOpen(struct EtherCollateralpUSD.PynthLoanStruct _pynthLoan) pure",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 814,
            "requires": [
              {
                "name": "require(..., \"Loan does not exist\")",
                "lineNumber": 815
              },
              {
                "name": "require(..., \"Loan already closed\")",
                "lineNumber": 816
              }
            ],
            "events": []
          },
          {
            "name": "systemStatus",
            "signature": "systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 821,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthpUSD",
            "signature": "pynthpUSD() view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 825,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeRates",
            "signature": "exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 829,
            "requires": [],
            "events": []
          },
          {
            "name": "feePool",
            "signature": "feePool() view",
            "returns": "(contract IFeePool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 833,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "CollateralizationRatioUpdated",
            "parameters": "(uint256 ratio)",
            "lineNumber": 846
          },
          {
            "name": "LiquidationRatioUpdated",
            "parameters": "(uint256 ratio)",
            "lineNumber": 847
          },
          {
            "name": "InterestRateUpdated",
            "parameters": "(uint256 interestRate)",
            "lineNumber": 848
          },
          {
            "name": "IssueFeeRateUpdated",
            "parameters": "(uint256 issueFeeRate)",
            "lineNumber": 849
          },
          {
            "name": "IssueLimitUpdated",
            "parameters": "(uint256 issueLimit)",
            "lineNumber": 850
          },
          {
            "name": "MinLoanCollateralSizeUpdated",
            "parameters": "(uint256 minLoanCollateralSize)",
            "lineNumber": 851
          },
          {
            "name": "AccountLoanLimitUpdated",
            "parameters": "(uint256 loanLimit)",
            "lineNumber": 852
          },
          {
            "name": "LoanLiquidationOpenUpdated",
            "parameters": "(bool loanLiquidationOpen)",
            "lineNumber": 853
          },
          {
            "name": "LoanCreated",
            "parameters": "(address account, uint256 loanID, uint256 amount)",
            "lineNumber": 854
          },
          {
            "name": "LoanClosed",
            "parameters": "(address account, uint256 loanID, uint256 feesPaid)",
            "lineNumber": 855
          },
          {
            "name": "LoanLiquidated",
            "parameters": "(address account, uint256 loanID, address liquidator)",
            "lineNumber": 856
          },
          {
            "name": "LoanPartiallyLiquidated",
            "parameters": "(address account, uint256 loanID, address liquidator, uint256 liquidatedAmount, uint256 liquidatedCollateral)",
            "lineNumber": 857
          },
          {
            "name": "CollateralDeposited",
            "parameters": "(address account, uint256 loanID, uint256 collateralAmount, uint256 collateralAfter)",
            "lineNumber": 864
          },
          {
            "name": "CollateralWithdrawn",
            "parameters": "(address account, uint256 loanID, uint256 amountWithdrawn, uint256 collateralAfter)",
            "lineNumber": 865
          },
          {
            "name": "LoanRepaid",
            "parameters": "(address account, uint256 loanID, uint256 repaidAmount, uint256 newLoanAmount)",
            "lineNumber": 866
          }
        ],
        "variables": [
          {
            "name": "ETH",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 26
          },
          {
            "name": "ONE_THOUSAND",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 29
          },
          {
            "name": "ONE_HUNDRED",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 30
          },
          {
            "name": "SECONDS_IN_A_YEAR",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 32
          },
          {
            "name": "FEE_ADDRESS",
            "type": "address",
            "visibility": "internal",
            "lineNumber": 35
          },
          {
            "name": "ACCOUNT_LOAN_LIMIT_CAP",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 37
          },
          {
            "name": "pUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 38
          },
          {
            "name": "COLLATERAL",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 39
          },
          {
            "name": "collateralizationRatio",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 44
          },
          {
            "name": "interestRate",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 47
          },
          {
            "name": "interestPerSecond",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 48
          },
          {
            "name": "issueFeeRate",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 51
          },
          {
            "name": "issueLimit",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 54
          },
          {
            "name": "minLoanCollateralSize",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 57
          },
          {
            "name": "accountLoanLimit",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 60
          },
          {
            "name": "loanLiquidationOpen",
            "type": "bool",
            "visibility": "public",
            "lineNumber": 63
          },
          {
            "name": "liquidationDeadline",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 66
          },
          {
            "name": "liquidationRatio",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 69
          },
          {
            "name": "liquidationPenalty",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 72
          },
          {
            "name": "totalIssuedPynths",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 77
          },
          {
            "name": "totalLoansCreated",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 80
          },
          {
            "name": "totalOpenLoanCount",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 83
          },
          {
            "name": "accountsPynthLoans",
            "type": "mapping(address => struct EtherCollateralpUSD.PynthLoanStruct[])",
            "visibility": "public",
            "lineNumber": 110
          },
          {
            "name": "accountOpenLoanCounter",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 113
          },
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 117
          },
          {
            "name": "CONTRACT_PYNTHPUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 118
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 119
          },
          {
            "name": "CONTRACT_FEEPOOL",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 120
          }
        ],
        "modifiers": [
          {
            "name": "ETHRateNotInvalid",
            "signature": "ETHRateNotInvalid()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 839
          }
        ],
        "structs": [
          {
            "name": "PynthLoanStruct",
            "members": [
              {
                "name": "account",
                "type": "address payable"
              },
              {
                "name": "collateralAmount",
                "type": "uint256"
              },
              {
                "name": "loanAmount",
                "type": "uint256"
              },
              {
                "name": "mintingFee",
                "type": "uint256"
              },
              {
                "name": "timeCreated",
                "type": "uint256"
              },
              {
                "name": "loanID",
                "type": "uint256"
              },
              {
                "name": "timeClosed",
                "type": "uint256"
              },
              {
                "name": "loanInterestRate",
                "type": "uint256"
              },
              {
                "name": "accruedInterest",
                "type": "uint256"
              },
              {
                "name": "lastInterestAccrued",
                "type": "uint40"
              }
            ],
            "lineNumber": 86
          }
        ],
        "inherits": [
          "Owned",
          "Pausable",
          "ReentrancyGuard",
          "MixinResolver",
          "IEtherCollateralpUSD"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/ExchangeRates.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinResolver.sol",
      "./MixinSystemSettings.sol",
      "./interfaces/IExchangeRates.sol",
      "./SafeDecimalMath.sol",
      "@chainlink/contracts-0.0.10/src/v0.5/interfaces/AggregatorV2V3Interface.sol",
      "@chainlink/contracts-0.0.10/src/v0.5/interfaces/FlagsInterface.sol",
      "./interfaces/IExchanger.sol"
    ],
    "contracts": {
      "ExchangeRates": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _oracle, address _resolver, bytes32[] _currencyKeys, uint256[] _newRates)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 62,
            "requires": [
              {
                "name": "require(..., \"Currency key length and rate length must match.\")",
                "lineNumber": 69
              }
            ],
            "events": []
          },
          {
            "name": "setOracle",
            "signature": "setOracle(address _oracle)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 81,
            "requires": [],
            "events": [
              "OracleUpdated"
            ]
          },
          {
            "name": "setOracleKovan",
            "signature": "setOracleKovan(address _oracle)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 86,
            "requires": [],
            "events": []
          },
          {
            "name": "updateRates",
            "signature": "updateRates(bytes32[] currencyKeys, uint256[] newRates, uint256 timeSent)",
            "returns": "(bool)",
            "modifiers": [
              "onlyOracle"
            ],
            "visibility": "external",
            "lineNumber": 92,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteRate",
            "signature": "deleteRate(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [
              "onlyOracle"
            ],
            "visibility": "external",
            "lineNumber": 100,
            "requires": [
              {
                "name": "require(..., \"Rate is zero\")",
                "lineNumber": 101
              }
            ],
            "events": [
              "RateDeleted"
            ]
          },
          {
            "name": "setInversePricing",
            "signature": "setInversePricing(bytes32 currencyKey, uint256 entryPoint, uint256 upperLimit, uint256 lowerLimit, bool freezeAtUpperLimit, bool freezeAtLowerLimit)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 110,
            "requires": [
              {
                "name": "require(..., \"lowerLimit must be above 0\")",
                "lineNumber": 119
              },
              {
                "name": "require(..., \"upperLimit must be above the entryPoint\")",
                "lineNumber": 120
              },
              {
                "name": "require(..., \"upperLimit must be less than double entryPoint\")",
                "lineNumber": 121
              },
              {
                "name": "require(..., \"lowerLimit must be below the entryPoint\")",
                "lineNumber": 122
              },
              {
                "name": "require(..., \"Cannot freeze at both limits\")",
                "lineNumber": 124
              }
            ],
            "events": [
              "InversePriceConfigured"
            ]
          },
          {
            "name": "removeInversePricing",
            "signature": "removeInversePricing(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 162,
            "requires": [
              {
                "name": "require(..., \"No inverted price exists\")",
                "lineNumber": 163
              }
            ],
            "events": []
          },
          {
            "name": "addAggregator",
            "signature": "addAggregator(bytes32 currencyKey, address aggregatorAddress)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 175,
            "requires": [
              {
                "name": "require(..., \"Given Aggregator is invalid\")",
                "lineNumber": 180
              },
              {
                "name": "require(..., \"Aggregator decimals should be lower or equal to 18\")",
                "lineNumber": 182
              }
            ],
            "events": [
              "AggregatorAdded"
            ]
          },
          {
            "name": "removeAggregator",
            "signature": "removeAggregator(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 191,
            "requires": [
              {
                "name": "require(..., \"No aggregator exists for key\")",
                "lineNumber": 193
              }
            ],
            "events": []
          },
          {
            "name": "freezeRate",
            "signature": "freezeRate(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 205,
            "requires": [
              {
                "name": "require(..., \"Cannot freeze non-inverse rate\")",
                "lineNumber": 207
              },
              {
                "name": "require(..., \"The rate is already frozen\")",
                "lineNumber": 208
              }
            ],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 225,
            "requires": [],
            "events": []
          },
          {
            "name": "canFreezeRate",
            "signature": "canFreezeRate(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 233,
            "requires": [],
            "events": []
          },
          {
            "name": "currenciesUsingAggregator",
            "signature": "currenciesUsingAggregator(address aggregator) view",
            "returns": "(bytes32[] currencies)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 243,
            "requires": [],
            "events": []
          },
          {
            "name": "rateStalePeriod",
            "signature": "rateStalePeriod() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 254,
            "requires": [],
            "events": []
          },
          {
            "name": "aggregatorWarningFlags",
            "signature": "aggregatorWarningFlags() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 258,
            "requires": [],
            "events": []
          },
          {
            "name": "rateAndUpdatedTime",
            "signature": "rateAndUpdatedTime(bytes32 currencyKey) view",
            "returns": "(uint256 rate, uint256 time)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 262,
            "requires": [],
            "events": []
          },
          {
            "name": "getLastRoundIdBeforeElapsedSecs",
            "signature": "getLastRoundIdBeforeElapsedSecs(bytes32 currencyKey, uint256 startingRoundId, uint256 startingTimestamp, uint256 timediff) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 267,
            "requires": [],
            "events": []
          },
          {
            "name": "getCurrentRoundId",
            "signature": "getCurrentRoundId(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 286,
            "requires": [],
            "events": []
          },
          {
            "name": "effectiveValueAtRound",
            "signature": "effectiveValueAtRound(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, uint256 roundIdForSrc, uint256 roundIdForDest) view",
            "returns": "(uint256 value)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 290,
            "requires": [],
            "events": []
          },
          {
            "name": "rateAndTimestampAtRound",
            "signature": "rateAndTimestampAtRound(bytes32 currencyKey, uint256 roundId) view",
            "returns": "(uint256 rate, uint256 time)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 311,
            "requires": [],
            "events": []
          },
          {
            "name": "lastRateUpdateTimes",
            "signature": "lastRateUpdateTimes(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 315,
            "requires": [],
            "events": []
          },
          {
            "name": "lastRateUpdateTimesForCurrencies",
            "signature": "lastRateUpdateTimesForCurrencies(bytes32[] currencyKeys) view",
            "returns": "(uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 319,
            "requires": [],
            "events": []
          },
          {
            "name": "effectiveValue",
            "signature": "effectiveValue(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey) view",
            "returns": "(uint256 value)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 329,
            "requires": [],
            "events": []
          },
          {
            "name": "effectiveValueAndRates",
            "signature": "effectiveValueAndRates(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey) view",
            "returns": "(uint256 value, uint256 sourceRate, uint256 destinationRate)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 337,
            "requires": [],
            "events": []
          },
          {
            "name": "rateForCurrency",
            "signature": "rateForCurrency(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 353,
            "requires": [],
            "events": []
          },
          {
            "name": "ratesAndUpdatedTimeForCurrencyLastNRounds",
            "signature": "ratesAndUpdatedTimeForCurrencyLastNRounds(bytes32 currencyKey, uint256 numRounds) view",
            "returns": "(uint256[] rates, uint256[] times)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 357,
            "requires": [],
            "events": []
          },
          {
            "name": "ratesForCurrencies",
            "signature": "ratesForCurrencies(bytes32[] currencyKeys) view",
            "returns": "(uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 380,
            "requires": [],
            "events": []
          },
          {
            "name": "rateAndInvalid",
            "signature": "rateAndInvalid(bytes32 currencyKey) view",
            "returns": "(uint256 rate, bool isInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 390,
            "requires": [],
            "events": []
          },
          {
            "name": "ratesAndInvalidForCurrencies",
            "signature": "ratesAndInvalidForCurrencies(bytes32[] currencyKeys) view",
            "returns": "(uint256[] rates, bool anyRateInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 403,
            "requires": [],
            "events": []
          },
          {
            "name": "rateIsStale",
            "signature": "rateIsStale(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 425,
            "requires": [],
            "events": []
          },
          {
            "name": "rateIsFrozen",
            "signature": "rateIsFrozen(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 429,
            "requires": [],
            "events": []
          },
          {
            "name": "rateIsInvalid",
            "signature": "rateIsInvalid(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 433,
            "requires": [],
            "events": []
          },
          {
            "name": "rateIsFlagged",
            "signature": "rateIsFlagged(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 439,
            "requires": [],
            "events": []
          },
          {
            "name": "anyRateIsInvalid",
            "signature": "anyRateIsInvalid(bytes32[] currencyKeys) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 443,
            "requires": [],
            "events": []
          },
          {
            "name": "exchanger",
            "signature": "exchanger() view",
            "returns": "(contract IExchanger)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 460,
            "requires": [],
            "events": []
          },
          {
            "name": "getFlagsForRates",
            "signature": "getFlagsForRates(bytes32[] currencyKeys) view",
            "returns": "(bool[] flagList)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 464,
            "requires": [],
            "events": []
          },
          {
            "name": "_setRate",
            "signature": "_setRate(bytes32 currencyKey, uint256 rate, uint256 time)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 481,
            "requires": [],
            "events": []
          },
          {
            "name": "internalUpdateRates",
            "signature": "internalUpdateRates(bytes32[] currencyKeys, uint256[] newRates, uint256 timeSent)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 495,
            "requires": [
              {
                "name": "require(..., \"Currency key array length must match rates array length.\")",
                "lineNumber": 500
              },
              {
                "name": "require(..., \"Time is too far into the future\")",
                "lineNumber": 501
              }
            ],
            "events": [
              "RatesUpdated"
            ]
          },
          {
            "name": "removeFromArray",
            "signature": "removeFromArray(bytes32 entry, bytes32[] array)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 527,
            "requires": [],
            "events": []
          },
          {
            "name": "_rateOrInverted",
            "signature": "_rateOrInverted(bytes32 currencyKey, uint256 rate, uint256 roundId) view",
            "returns": "(uint256 newRate)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 546,
            "requires": [],
            "events": []
          },
          {
            "name": "_formatAggregatorAnswer",
            "signature": "_formatAggregatorAnswer(bytes32 currencyKey, int256 rate) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 591,
            "requires": [
              {
                "name": "require(..., \"Negative rate not supported\")",
                "lineNumber": 592
              }
            ],
            "events": []
          },
          {
            "name": "_getRateAndUpdatedTime",
            "signature": "_getRateAndUpdatedTime(bytes32 currencyKey) view",
            "returns": "(struct IExchangeRates.RateAndUpdatedTime)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 600,
            "requires": [],
            "events": []
          },
          {
            "name": "_getCurrentRoundId",
            "signature": "_getCurrentRoundId(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 642,
            "requires": [],
            "events": []
          },
          {
            "name": "_getRateAndTimestampAtRound",
            "signature": "_getRateAndTimestampAtRound(bytes32 currencyKey, uint256 roundId) view",
            "returns": "(uint256 rate, uint256 time)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 652,
            "requires": [],
            "events": []
          },
          {
            "name": "_getRate",
            "signature": "_getRate(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 673,
            "requires": [],
            "events": []
          },
          {
            "name": "_getUpdatedTime",
            "signature": "_getUpdatedTime(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 677,
            "requires": [],
            "events": []
          },
          {
            "name": "_effectiveValueAndRates",
            "signature": "_effectiveValueAndRates(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey) view",
            "returns": "(uint256 value, uint256 sourceRate, uint256 destinationRate)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 681,
            "requires": [],
            "events": []
          },
          {
            "name": "_rateIsStale",
            "signature": "_rateIsStale(bytes32 currencyKey, uint256 _rateStalePeriod) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 709,
            "requires": [],
            "events": []
          },
          {
            "name": "_rateIsStaleWithTime",
            "signature": "_rateIsStaleWithTime(uint256 _rateStalePeriod, uint256 _time) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 716,
            "requires": [],
            "events": []
          },
          {
            "name": "_rateIsFrozen",
            "signature": "_rateIsFrozen(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 720,
            "requires": [],
            "events": []
          },
          {
            "name": "_rateIsFlagged",
            "signature": "_rateIsFlagged(bytes32 currencyKey, contract FlagsInterface flags) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 725,
            "requires": [],
            "events": []
          },
          {
            "name": "_onlyOracle",
            "signature": "_onlyOracle() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 743,
            "requires": [
              {
                "name": "require(..., \"Only the oracle can perform this action\")",
                "lineNumber": 744
              }
            ],
            "events": []
          }
        ],
        "events": [
          {
            "name": "OracleUpdated",
            "parameters": "(address newOracle)",
            "lineNumber": 749
          },
          {
            "name": "RatesUpdated",
            "parameters": "(bytes32[] currencyKeys, uint256[] newRates)",
            "lineNumber": 750
          },
          {
            "name": "RateDeleted",
            "parameters": "(bytes32 currencyKey)",
            "lineNumber": 751
          },
          {
            "name": "InversePriceConfigured",
            "parameters": "(bytes32 currencyKey, uint256 entryPoint, uint256 upperLimit, uint256 lowerLimit)",
            "lineNumber": 752
          },
          {
            "name": "InversePriceFrozen",
            "parameters": "(bytes32 currencyKey, uint256 rate, uint256 roundId, address initiator)",
            "lineNumber": 753
          },
          {
            "name": "AggregatorAdded",
            "parameters": "(bytes32 currencyKey, address aggregator)",
            "lineNumber": 754
          },
          {
            "name": "AggregatorRemoved",
            "parameters": "(bytes32 currencyKey, address aggregator)",
            "lineNumber": 755
          }
        ],
        "variables": [
          {
            "name": "_rates",
            "type": "mapping(bytes32 => mapping(uint256 => struct IExchangeRates.RateAndUpdatedTime))",
            "visibility": "private",
            "lineNumber": 29
          },
          {
            "name": "oracle",
            "type": "address",
            "visibility": "public",
            "lineNumber": 32
          },
          {
            "name": "oracle_kovan",
            "type": "address",
            "visibility": "public",
            "lineNumber": 35
          },
          {
            "name": "aggregators",
            "type": "mapping(bytes32 => contract AggregatorV2V3Interface)",
            "visibility": "public",
            "lineNumber": 38
          },
          {
            "name": "currencyKeyDecimals",
            "type": "mapping(bytes32 => uint8)",
            "visibility": "public",
            "lineNumber": 40
          },
          {
            "name": "aggregatorKeys",
            "type": "bytes32[]",
            "visibility": "public",
            "lineNumber": 43
          },
          {
            "name": "ORACLE_FUTURE_LIMIT",
            "type": "uint256",
            "visibility": "private",
            "lineNumber": 46
          },
          {
            "name": "inversePricing",
            "type": "mapping(bytes32 => struct IExchangeRates.InversePricing)",
            "visibility": "public",
            "lineNumber": 48
          },
          {
            "name": "invertedKeys",
            "type": "bytes32[]",
            "visibility": "public",
            "lineNumber": 50
          },
          {
            "name": "currentRoundForRate",
            "type": "mapping(bytes32 => uint256)",
            "visibility": "public",
            "lineNumber": 52
          },
          {
            "name": "roundFrozen",
            "type": "mapping(bytes32 => uint256)",
            "visibility": "public",
            "lineNumber": 54
          },
          {
            "name": "CONTRACT_EXCHANGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 57
          }
        ],
        "modifiers": [
          {
            "name": "onlyOracle",
            "signature": "onlyOracle()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 738
          }
        ],
        "structs": [],
        "inherits": [
          "Owned",
          "MixinSystemSettings",
          "IExchangeRates"
        ]
      }
    },
    "libraries": {},
    "interfaces": {
      "TempExchangeRateStorage": {
        "functions": [
          {
            "name": "getRate",
            "signature": "getRate(bytes32 _currencyKey) view",
            "returns": "(uint216, uint40)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/ExchangeRatesWithoutInvPricing.sol": {
    "imports": [
      "./ExchangeRates.sol"
    ],
    "contracts": {
      "ExchangeRatesWithoutInvPricing": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _oracle, address _resolver, bytes32[] _currencyKeys, uint256[] _newRates)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "setInversePricing",
            "signature": "setInversePricing(bytes32, uint256, uint256, uint256, bool, bool)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "removeInversePricing",
            "signature": "removeInversePricing(bytes32)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 27,
            "requires": [],
            "events": []
          },
          {
            "name": "freezeRate",
            "signature": "freezeRate(bytes32)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 31,
            "requires": [],
            "events": []
          },
          {
            "name": "canFreezeRate",
            "signature": "canFreezeRate(bytes32) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 35,
            "requires": [],
            "events": []
          },
          {
            "name": "rateIsFrozen",
            "signature": "rateIsFrozen(bytes32) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 39,
            "requires": [],
            "events": []
          },
          {
            "name": "_rateIsFrozen",
            "signature": "_rateIsFrozen(bytes32) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 43,
            "requires": [],
            "events": []
          },
          {
            "name": "_notImplemented",
            "signature": "_notImplemented() pure",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 47,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "ExchangeRates"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/ExchangeState.sol": {
    "imports": [
      "./Owned.sol",
      "./State.sol",
      "./interfaces/IExchangeState.sol"
    ],
    "contracts": {
      "ExchangeState": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _associatedContract)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "setMaxEntriesInQueue",
            "signature": "setMaxEntriesInQueue(uint256 _maxEntriesInQueue)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "appendExchangeEntry",
            "signature": "appendExchangeEntry(address account, bytes32 src, uint256 amount, bytes32 dest, uint256 amountReceived, uint256 exchangeFeeRate, uint256 timestamp, uint256 roundIdForSrc, uint256 roundIdForDest)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [
              {
                "name": "require(..., \"Max queue length reached\")",
                "lineNumber": 35
              }
            ],
            "events": []
          },
          {
            "name": "removeEntries",
            "signature": "removeEntries(address account, bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 51,
            "requires": [],
            "events": []
          },
          {
            "name": "getLengthOfEntries",
            "signature": "getLengthOfEntries(address account, bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 57,
            "requires": [],
            "events": []
          },
          {
            "name": "getEntryAt",
            "signature": "getEntryAt(address account, bytes32 currencyKey, uint256 index) view",
            "returns": "(bytes32 src, uint256 amount, bytes32 dest, uint256 amountReceived, uint256 exchangeFeeRate, uint256 timestamp, uint256 roundIdForSrc, uint256 roundIdForDest)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 61,
            "requires": [],
            "events": []
          },
          {
            "name": "getMaxTimestamp",
            "signature": "getMaxTimestamp(address account, bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 92,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "exchanges",
            "type": "mapping(address => mapping(bytes32 => struct IExchangeState.ExchangeEntry[]))",
            "visibility": "public",
            "lineNumber": 10
          },
          {
            "name": "maxEntriesInQueue",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 12
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "State",
          "IExchangeState"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/Exchanger.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinResolver.sol",
      "./MixinSystemSettings.sol",
      "./interfaces/IExchanger.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/ISystemStatus.sol",
      "./interfaces/IExchangeState.sol",
      "./interfaces/IExchangeRates.sol",
      "./interfaces/IPeriFinance.sol",
      "./interfaces/IFeePool.sol",
      "./interfaces/IDelegateApprovals.sol",
      "./interfaces/IIssuer.sol",
      "./interfaces/ITradingRewards.sol",
      "./interfaces/IVirtualPynth.sol",
      "./Proxyable.sol",
      "openzeppelin-solidity-2.3.0/contracts/token/ERC20/IERC20.sol"
    ],
    "contracts": {
      "Exchanger": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 99,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 103,
            "requires": [],
            "events": []
          },
          {
            "name": "systemStatus",
            "signature": "systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 118,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeState",
            "signature": "exchangeState() view",
            "returns": "(contract IExchangeState)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 122,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeRates",
            "signature": "exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 126,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinance",
            "signature": "periFinance() view",
            "returns": "(contract IPeriFinance)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 130,
            "requires": [],
            "events": []
          },
          {
            "name": "feePool",
            "signature": "feePool() view",
            "returns": "(contract IFeePool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 134,
            "requires": [],
            "events": []
          },
          {
            "name": "tradingRewards",
            "signature": "tradingRewards() view",
            "returns": "(contract ITradingRewards)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 138,
            "requires": [],
            "events": []
          },
          {
            "name": "delegateApprovals",
            "signature": "delegateApprovals() view",
            "returns": "(contract IDelegateApprovals)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 142,
            "requires": [],
            "events": []
          },
          {
            "name": "issuer",
            "signature": "issuer() view",
            "returns": "(contract IIssuer)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 146,
            "requires": [],
            "events": []
          },
          {
            "name": "debtCache",
            "signature": "debtCache() view",
            "returns": "(contract IExchangerInternalDebtCache)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 150,
            "requires": [],
            "events": []
          },
          {
            "name": "maxSecsLeftInWaitingPeriod",
            "signature": "maxSecsLeftInWaitingPeriod(address account, bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 154,
            "requires": [],
            "events": []
          },
          {
            "name": "waitingPeriodSecs",
            "signature": "waitingPeriodSecs() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 158,
            "requires": [],
            "events": []
          },
          {
            "name": "tradingRewardsEnabled",
            "signature": "tradingRewardsEnabled() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 162,
            "requires": [],
            "events": []
          },
          {
            "name": "priceDeviationThresholdFactor",
            "signature": "priceDeviationThresholdFactor() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 166,
            "requires": [],
            "events": []
          },
          {
            "name": "settlementOwing",
            "signature": "settlementOwing(address account, bytes32 currencyKey) view",
            "returns": "(uint256 reclaimAmount, uint256 rebateAmount, uint256 numEntries)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 170,
            "requires": [],
            "events": []
          },
          {
            "name": "_settlementOwing",
            "signature": "_settlementOwing(address account, bytes32 currencyKey) view",
            "returns": "(uint256 reclaimAmount, uint256 rebateAmount, uint256 numEntries, struct Exchanger.ExchangeEntrySettlement[])",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 183,
            "requires": [],
            "events": []
          },
          {
            "name": "_getExchangeEntry",
            "signature": "_getExchangeEntry(address account, bytes32 currencyKey, uint256 index) view",
            "returns": "(struct IExchangeState.ExchangeEntry)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 249,
            "requires": [],
            "events": []
          },
          {
            "name": "hasWaitingPeriodOrSettlementOwing",
            "signature": "hasWaitingPeriodOrSettlementOwing(address account, bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 278,
            "requires": [],
            "events": []
          },
          {
            "name": "calculateAmountAfterSettlement",
            "signature": "calculateAmountAfterSettlement(address from, bytes32 currencyKey, uint256 amount, uint256 refunded) view",
            "returns": "(uint256 amountAfterSettlement)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 290,
            "requires": [],
            "events": []
          },
          {
            "name": "isPynthRateInvalid",
            "signature": "isPynthRateInvalid(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 312,
            "requires": [],
            "events": []
          },
          {
            "name": "exchange",
            "signature": "exchange(address from, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address destinationAddress)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [
              "onlyPeriFinanceorPynth"
            ],
            "visibility": "external",
            "lineNumber": 317,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeOnBehalf",
            "signature": "exchangeOnBehalf(address exchangeForAddress, address from, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [
              "onlyPeriFinanceorPynth"
            ],
            "visibility": "external",
            "lineNumber": 337,
            "requires": [
              {
                "name": "require(..., \"Not approved to act on behalf\")",
                "lineNumber": 344
              }
            ],
            "events": []
          },
          {
            "name": "exchangeWithTracking",
            "signature": "exchangeWithTracking(address from, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address destinationAddress, address originator, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [
              "onlyPeriFinanceorPynth"
            ],
            "visibility": "external",
            "lineNumber": 359,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeOnBehalfWithTracking",
            "signature": "exchangeOnBehalfWithTracking(address exchangeForAddress, address from, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address originator, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [
              "onlyPeriFinanceorPynth"
            ],
            "visibility": "external",
            "lineNumber": 383,
            "requires": [
              {
                "name": "require(..., \"Not approved to act on behalf\")",
                "lineNumber": 392
              }
            ],
            "events": []
          },
          {
            "name": "exchangeWithVirtual",
            "signature": "exchangeWithVirtual(address from, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address destinationAddress, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived, contract IVirtualPynth vPynth)",
            "modifiers": [
              "onlyPeriFinanceorPynth"
            ],
            "visibility": "external",
            "lineNumber": 409,
            "requires": [],
            "events": []
          },
          {
            "name": "_emitTrackingEvent",
            "signature": "_emitTrackingEvent(bytes32 trackingCode, bytes32 toCurrencyKey, uint256 toAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 434,
            "requires": [],
            "events": []
          },
          {
            "name": "_processTradingRewards",
            "signature": "_processTradingRewards(uint256 fee, address originator)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 442,
            "requires": [],
            "events": []
          },
          {
            "name": "_suspendIfRateInvalid",
            "signature": "_suspendIfRateInvalid(bytes32 currencyKey, uint256 rate)",
            "returns": "(bool circuitBroken)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 448,
            "requires": [],
            "events": []
          },
          {
            "name": "_updatePERIIssuedDebtOnExchange",
            "signature": "_updatePERIIssuedDebtOnExchange(bytes32[2] currencyKeys, uint256[2] currencyRates)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 457,
            "requires": [],
            "events": []
          },
          {
            "name": "_settleAndCalcSourceAmountRemaining",
            "signature": "_settleAndCalcSourceAmountRemaining(uint256 sourceAmount, address from, bytes32 sourceCurrencyKey)",
            "returns": "(uint256 sourceAmountAfterSettlement)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 479,
            "requires": [],
            "events": []
          },
          {
            "name": "_exchange",
            "signature": "_exchange(address from, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address destinationAddress, bool virtualPynth)",
            "returns": "(uint256 amountReceived, uint256 fee, contract IVirtualPynth vPynth)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 495,
            "requires": [],
            "events": []
          },
          {
            "name": "_convert",
            "signature": "_convert(bytes32 sourceCurrencyKey, address from, uint256 sourceAmountAfterSettlement, bytes32 destinationCurrencyKey, uint256 amountReceived, address recipient, bool virtualPynth)",
            "returns": "(contract IVirtualPynth vPynth)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 601,
            "requires": [],
            "events": []
          },
          {
            "name": "_createVirtualPynth",
            "signature": "_createVirtualPynth(contract IERC20, address, uint256, bytes32)",
            "returns": "(contract IVirtualPynth)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 625,
            "requires": [],
            "events": []
          },
          {
            "name": "settle",
            "signature": "settle(address from, bytes32 currencyKey)",
            "returns": "(uint256 reclaimed, uint256 refunded, uint256 numEntriesSettled)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 635,
            "requires": [],
            "events": []
          },
          {
            "name": "suspendPynthWithInvalidRate",
            "signature": "suspendPynthWithInvalidRate(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 647,
            "requires": [
              {
                "name": "require(..., \"No such pynth\")",
                "lineNumber": 649
              },
              {
                "name": "require(..., \"Pynth price is valid\")",
                "lineNumber": 650
              }
            ],
            "events": []
          },
          {
            "name": "setLastExchangeRateForPynth",
            "signature": "setLastExchangeRateForPynth(bytes32 currencyKey, uint256 rate)",
            "returns": "()",
            "modifiers": [
              "onlyExchangeRates"
            ],
            "visibility": "external",
            "lineNumber": 655,
            "requires": [
              {
                "name": "require(..., \"Rate must be above 0\")",
                "lineNumber": 656
              }
            ],
            "events": []
          },
          {
            "name": "_ensureCanExchange",
            "signature": "_ensureCanExchange(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 662,
            "requires": [
              {
                "name": "require(..., \"Can't be same pynth\")",
                "lineNumber": 667
              },
              {
                "name": "require(..., \"Zero amount\")",
                "lineNumber": 668
              },
              {
                "name": "require(..., \"Src/dest rate invalid or not found\")",
                "lineNumber": 673
              }
            ],
            "events": []
          },
          {
            "name": "_isPynthRateInvalid",
            "signature": "_isPynthRateInvalid(bytes32 currencyKey, uint256 currentRate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 676,
            "requires": [],
            "events": []
          },
          {
            "name": "_isDeviationAboveThreshold",
            "signature": "_isDeviationAboveThreshold(uint256 base, uint256 comparison) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 701,
            "requires": [],
            "events": []
          },
          {
            "name": "_internalSettle",
            "signature": "_internalSettle(address from, bytes32 currencyKey, bool updateCache)",
            "returns": "(uint256 reclaimed, uint256 refunded, uint256 numEntriesSettled)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 716,
            "requires": [
              {
                "name": "require(..., \"Cannot settle during waiting period\")",
                "lineNumber": 728
              }
            ],
            "events": []
          },
          {
            "name": "reclaim",
            "signature": "reclaim(address from, bytes32 currencyKey, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 768,
            "requires": [],
            "events": []
          },
          {
            "name": "refund",
            "signature": "refund(address from, bytes32 currencyKey, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 778,
            "requires": [],
            "events": []
          },
          {
            "name": "secsLeftInWaitingPeriodForExchange",
            "signature": "secsLeftInWaitingPeriodForExchange(uint256 timestamp) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 788,
            "requires": [],
            "events": []
          },
          {
            "name": "feeRateForExchange",
            "signature": "feeRateForExchange(bytes32 sourceCurrencyKey, bytes32 destinationCurrencyKey) view",
            "returns": "(uint256 exchangeFeeRate)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 797,
            "requires": [],
            "events": []
          },
          {
            "name": "_feeRateForExchange",
            "signature": "_feeRateForExchange(bytes32 sourceCurrencyKey, bytes32 destinationCurrencyKey) view",
            "returns": "(uint256 exchangeFeeRate)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 805,
            "requires": [],
            "events": []
          },
          {
            "name": "getAmountsForExchange",
            "signature": "getAmountsForExchange(uint256 sourceAmount, bytes32 sourceCurrencyKey, bytes32 destinationCurrencyKey) view",
            "returns": "(uint256 amountReceived, uint256 fee, uint256 exchangeFeeRate)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 829,
            "requires": [],
            "events": []
          },
          {
            "name": "_getAmountsForExchangeMinusFees",
            "signature": "_getAmountsForExchangeMinusFees(uint256 sourceAmount, bytes32 sourceCurrencyKey, bytes32 destinationCurrencyKey) view",
            "returns": "(uint256 amountReceived, uint256 fee, uint256 exchangeFeeRate, uint256 sourceRate, uint256 destinationRate)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 849,
            "requires": [],
            "events": []
          },
          {
            "name": "_getAmountReceivedForExchange",
            "signature": "_getAmountReceivedForExchange(uint256 destinationAmount, uint256 exchangeFeeRate) pure",
            "returns": "(uint256 amountReceived)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 875,
            "requires": [],
            "events": []
          },
          {
            "name": "appendExchange",
            "signature": "appendExchange(address account, bytes32 src, uint256 amount, bytes32 dest, uint256 amountReceived, uint256 exchangeFeeRate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 883,
            "requires": [],
            "events": [
              "ExchangeEntryAppended"
            ]
          },
          {
            "name": "getRoundIdsAtPeriodEnd",
            "signature": "getRoundIdsAtPeriodEnd(struct IExchangeState.ExchangeEntry exchangeEntry) view",
            "returns": "(uint256 srcRoundIdAtPeriodEnd, uint256 destRoundIdAtPeriodEnd)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 918,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "ExchangeEntryAppended",
            "parameters": "(address account, bytes32 src, uint256 amount, bytes32 dest, uint256 amountReceived, uint256 exchangeFeeRate, uint256 roundIdForSrc, uint256 roundIdForDest)",
            "lineNumber": 958
          },
          {
            "name": "ExchangeEntrySettled",
            "parameters": "(address from, bytes32 src, uint256 amount, bytes32 dest, uint256 reclaim, uint256 rebate, uint256 srcRoundIdAtPeriodEnd, uint256 destRoundIdAtPeriodEnd, uint256 exchangeTimestamp)",
            "lineNumber": 969
          }
        ],
        "variables": [
          {
            "name": "pUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 80
          },
          {
            "name": "CIRCUIT_BREAKER_SUSPENSION_REASON",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 83
          },
          {
            "name": "lastExchangeRate",
            "type": "mapping(bytes32 => uint256)",
            "visibility": "public",
            "lineNumber": 85
          },
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 89
          },
          {
            "name": "CONTRACT_EXCHANGESTATE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 90
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 91
          },
          {
            "name": "CONTRACT_PERIFINANCE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 92
          },
          {
            "name": "CONTRACT_FEEPOOL",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 93
          },
          {
            "name": "CONTRACT_TRADING_REWARDS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 94
          },
          {
            "name": "CONTRACT_DELEGATEAPPROVALS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 95
          },
          {
            "name": "CONTRACT_ISSUER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 96
          },
          {
            "name": "CONTRACT_DEBTCACHE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 97
          }
        ],
        "modifiers": [
          {
            "name": "onlyPeriFinanceorPynth",
            "signature": "onlyPeriFinanceorPynth()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 942
          },
          {
            "name": "onlyExchangeRates",
            "signature": "onlyExchangeRates()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 951
          }
        ],
        "structs": [
          {
            "name": "ExchangeEntrySettlement",
            "members": [
              {
                "name": "src",
                "type": "bytes32"
              },
              {
                "name": "amount",
                "type": "uint256"
              },
              {
                "name": "dest",
                "type": "bytes32"
              },
              {
                "name": "reclaim",
                "type": "uint256"
              },
              {
                "name": "rebate",
                "type": "uint256"
              },
              {
                "name": "srcRoundIdAtPeriodEnd",
                "type": "uint256"
              },
              {
                "name": "destRoundIdAtPeriodEnd",
                "type": "uint256"
              },
              {
                "name": "timestamp",
                "type": "uint256"
              }
            ],
            "lineNumber": 69
          }
        ],
        "inherits": [
          "Owned",
          "MixinSystemSettings",
          "IExchanger"
        ]
      }
    },
    "libraries": {},
    "interfaces": {
      "IPeriFinanceInternal": {
        "functions": [
          {
            "name": "emitExchangeTracking",
            "signature": "emitExchangeTracking(bytes32 trackingCode, bytes32 toCurrencyKey, uint256 toAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 30,
            "requires": [],
            "events": []
          },
          {
            "name": "emitPynthExchange",
            "signature": "emitPynthExchange(address account, bytes32 fromCurrencyKey, uint256 fromAmount, bytes32 toCurrencyKey, uint256 toAmount, address toAddress)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 36,
            "requires": [],
            "events": []
          },
          {
            "name": "emitExchangeReclaim",
            "signature": "emitExchangeReclaim(address account, bytes32 currencyKey, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 45,
            "requires": [],
            "events": []
          },
          {
            "name": "emitExchangeRebate",
            "signature": "emitExchangeRebate(address account, bytes32 currencyKey, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 51,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      },
      "IExchangerInternalDebtCache": {
        "functions": [
          {
            "name": "updateCachedPynthDebtsWithRates",
            "signature": "updateCachedPynthDebtsWithRates(bytes32[] currencyKeys, uint256[] currencyRates)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 59,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebts",
            "signature": "updateCachedPynthDebts(bytes32[] currencyKeys)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 61,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/ExchangerWithVirtualPynth.sol": {
    "imports": [
      "./Exchanger.sol",
      "./interfaces/IVirtualPynth.sol",
      "./VirtualPynth.sol"
    ],
    "contracts": {
      "ExchangerWithVirtualPynth": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "_createVirtualPynth",
            "signature": "_createVirtualPynth(contract IERC20 pynth, address recipient, uint256 amount, bytes32 currencyKey)",
            "returns": "(contract IVirtualPynth vPynth)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 14,
            "requires": [
              {
                "name": "require(..., \"Cannot virtualize this pynth\")",
                "lineNumber": 21
              }
            ],
            "events": [
              "VirtualPynthCreated"
            ]
          }
        ],
        "events": [
          {
            "name": "VirtualPynthCreated",
            "parameters": "(address pynth, address recipient, address vPynth, bytes32 currencyKey, uint256 amount)",
            "lineNumber": 27
          }
        ],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Exchanger"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/ExternStateToken.sol": {
    "imports": [
      "./Owned.sol",
      "./Proxyable.sol",
      "./SafeDecimalMath.sol",
      "./TokenState.sol"
    ],
    "contracts": {
      "ExternStateToken": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address payable _proxy, contract TokenState _tokenState, string _name, string _symbol, uint256 _totalSupply, uint8 _decimals, address _owner)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "allowance",
            "signature": "allowance(address owner, address spender) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 53,
            "requires": [],
            "events": []
          },
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 60,
            "requires": [],
            "events": []
          },
          {
            "name": "setTokenState",
            "signature": "setTokenState(contract TokenState _tokenState)",
            "returns": "()",
            "modifiers": [
              "optionalProxy_onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 71,
            "requires": [],
            "events": []
          },
          {
            "name": "_internalTransfer",
            "signature": "_internalTransfer(address from, address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 76,
            "requires": [
              {
                "name": "require(..., \"Cannot transfer to this address\")",
                "lineNumber": 82
              }
            ],
            "events": []
          },
          {
            "name": "_transferByProxy",
            "signature": "_transferByProxy(address from, address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 98,
            "requires": [],
            "events": []
          },
          {
            "name": "_transferFromByProxy",
            "signature": "_transferFromByProxy(address sender, address from, address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 110,
            "requires": [],
            "events": []
          },
          {
            "name": "approve",
            "signature": "approve(address spender, uint256 value)",
            "returns": "(bool)",
            "modifiers": [
              "optionalProxy"
            ],
            "visibility": "public",
            "lineNumber": 124,
            "requires": [],
            "events": []
          },
          {
            "name": "addressToBytes32",
            "signature": "addressToBytes32(address input) pure",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 133,
            "requires": [],
            "events": []
          },
          {
            "name": "emitTransfer",
            "signature": "emitTransfer(address from, address to, uint256 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 140,
            "requires": [],
            "events": []
          },
          {
            "name": "emitApproval",
            "signature": "emitApproval(address owner, address spender, uint256 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 151,
            "requires": [],
            "events": []
          },
          {
            "name": "emitTokenStateUpdated",
            "signature": "emitTokenStateUpdated(address newTokenState)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 162,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "Transfer",
            "parameters": "(address from, address to, uint256 value)",
            "lineNumber": 137
          },
          {
            "name": "Approval",
            "parameters": "(address owner, address spender, uint256 value)",
            "lineNumber": 148
          },
          {
            "name": "TokenStateUpdated",
            "parameters": "(address newTokenState)",
            "lineNumber": 159
          }
        ],
        "variables": [
          {
            "name": "tokenState",
            "type": "contract TokenState",
            "visibility": "public",
            "lineNumber": 21
          },
          {
            "name": "name",
            "type": "string",
            "visibility": "public",
            "lineNumber": 24
          },
          {
            "name": "symbol",
            "type": "string",
            "visibility": "public",
            "lineNumber": 25
          },
          {
            "name": "totalSupply",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 26
          },
          {
            "name": "decimals",
            "type": "uint8",
            "visibility": "public",
            "lineNumber": 27
          },
          {
            "name": "TRANSFER_SIG",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 138
          },
          {
            "name": "APPROVAL_SIG",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 149
          },
          {
            "name": "TOKENSTATEUPDATED_SIG",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 160
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "Proxyable"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/FeePool.sol": {
    "imports": [
      "./Owned.sol",
      "./Proxyable.sol",
      "./LimitedSetup.sol",
      "./MixinResolver.sol",
      "./MixinSystemSettings.sol",
      "./interfaces/IFeePool.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IPynth.sol",
      "./interfaces/ISystemStatus.sol",
      "./interfaces/IPeriFinance.sol",
      "./FeePoolState.sol",
      "./FeePoolEternalStorage.sol",
      "./interfaces/IExchanger.sol",
      "./interfaces/IIssuer.sol",
      "./interfaces/IPeriFinanceState.sol",
      "./interfaces/IRewardEscrowV2.sol",
      "./interfaces/IDelegateApprovals.sol",
      "./interfaces/IRewardsDistribution.sol",
      "./interfaces/IEtherCollateralpUSD.sol",
      "./interfaces/ICollateralManager.sol"
    ],
    "contracts": {
      "FeePool": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address payable _proxy, address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 81,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 92,
            "requires": [],
            "events": []
          },
          {
            "name": "systemStatus",
            "signature": "systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 110,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinance",
            "signature": "periFinance() view",
            "returns": "(contract IPeriFinance)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 114,
            "requires": [],
            "events": []
          },
          {
            "name": "feePoolState",
            "signature": "feePoolState() view",
            "returns": "(contract FeePoolState)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 118,
            "requires": [],
            "events": []
          },
          {
            "name": "feePoolEternalStorage",
            "signature": "feePoolEternalStorage() view",
            "returns": "(contract FeePoolEternalStorage)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 122,
            "requires": [],
            "events": []
          },
          {
            "name": "exchanger",
            "signature": "exchanger() view",
            "returns": "(contract IExchanger)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 126,
            "requires": [],
            "events": []
          },
          {
            "name": "etherCollateralpUSD",
            "signature": "etherCollateralpUSD() view",
            "returns": "(contract IEtherCollateralpUSD)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 130,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralManager",
            "signature": "collateralManager() view",
            "returns": "(contract ICollateralManager)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 134,
            "requires": [],
            "events": []
          },
          {
            "name": "issuer",
            "signature": "issuer() view",
            "returns": "(contract IIssuer)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 138,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceState",
            "signature": "periFinanceState() view",
            "returns": "(contract IPeriFinanceState)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 142,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardEscrowV2",
            "signature": "rewardEscrowV2() view",
            "returns": "(contract IRewardEscrowV2)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 146,
            "requires": [],
            "events": []
          },
          {
            "name": "delegateApprovals",
            "signature": "delegateApprovals() view",
            "returns": "(contract IDelegateApprovals)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 150,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardsDistribution",
            "signature": "rewardsDistribution() view",
            "returns": "(contract IRewardsDistribution)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 154,
            "requires": [],
            "events": []
          },
          {
            "name": "issuanceRatio",
            "signature": "issuanceRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 158,
            "requires": [],
            "events": []
          },
          {
            "name": "feePeriodDuration",
            "signature": "feePeriodDuration() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 162,
            "requires": [],
            "events": []
          },
          {
            "name": "targetThreshold",
            "signature": "targetThreshold() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 166,
            "requires": [],
            "events": []
          },
          {
            "name": "recentFeePeriods",
            "signature": "recentFeePeriods(uint256 index) view",
            "returns": "(uint64 feePeriodId, uint64 startingDebtIndex, uint64 startTime, uint256 feesToDistribute, uint256 feesClaimed, uint256 rewardsToDistribute, uint256 rewardsClaimed)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 170,
            "requires": [],
            "events": []
          },
          {
            "name": "_recentFeePeriodsStorage",
            "signature": "_recentFeePeriodsStorage(uint256 index) view",
            "returns": "(struct FeePool.FeePeriod)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 195,
            "requires": [],
            "events": []
          },
          {
            "name": "appendAccountIssuanceRecord",
            "signature": "appendAccountIssuanceRecord(address account, uint256 debtRatio, uint256 debtEntryIndex)",
            "returns": "()",
            "modifiers": [
              "onlyIssuerAndPeriFinanceState"
            ],
            "visibility": "external",
            "lineNumber": 209,
            "requires": [],
            "events": []
          },
          {
            "name": "recordFeePaid",
            "signature": "recordFeePaid(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyInternalContracts"
            ],
            "visibility": "external",
            "lineNumber": 228,
            "requires": [],
            "events": []
          },
          {
            "name": "setRewardsToDistribute",
            "signature": "setRewardsToDistribute(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 236,
            "requires": [
              {
                "name": "require(..., \"Caller is not rewardsAuthority\")",
                "lineNumber": 238
              }
            ],
            "events": []
          },
          {
            "name": "closeCurrentFeePeriod",
            "signature": "closeCurrentFeePeriod()",
            "returns": "()",
            "modifiers": [
              "issuanceActive"
            ],
            "visibility": "external",
            "lineNumber": 246,
            "requires": [
              {
                "name": "require(..., \"Fee Period Duration not set\")",
                "lineNumber": 247
              },
              {
                "name": "require(..., \"Too early to close fee period\")",
                "lineNumber": 248
              }
            ],
            "events": []
          },
          {
            "name": "claimFees",
            "signature": "claimFees()",
            "returns": "(bool)",
            "modifiers": [
              "issuanceActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 286,
            "requires": [],
            "events": []
          },
          {
            "name": "claimOnBehalf",
            "signature": "claimOnBehalf(address claimingForAddress)",
            "returns": "(bool)",
            "modifiers": [
              "issuanceActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 296,
            "requires": [
              {
                "name": "require(..., \"Not approved to claim on behalf\")",
                "lineNumber": 297
              }
            ],
            "events": []
          },
          {
            "name": "_claimFees",
            "signature": "_claimFees(address claimingAddress)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 302,
            "requires": [
              {
                "name": "require(..., \"C-Ratio below penalty threshold\")",
                "lineNumber": 312
              },
              {
                "name": "require(..., \"A pynth or PERI rate is invalid\")",
                "lineNumber": 314
              },
              {
                "name": "require(..., \"No fees or rewards available for period, or fees already claimed\")",
                "lineNumber": 319
              }
            ],
            "events": []
          },
          {
            "name": "importFeePeriod",
            "signature": "importFeePeriod(uint256 feePeriodIndex, uint256 feePeriodId, uint256 startingDebtIndex, uint256 startTime, uint256 feesToDistribute, uint256 feesClaimed, uint256 rewardsToDistribute, uint256 rewardsClaimed)",
            "returns": "()",
            "modifiers": [
              "optionalProxy_onlyOwner",
              "onlyDuringSetup"
            ],
            "visibility": "public",
            "lineNumber": 351,
            "requires": [
              {
                "name": "require(..., \"Cannot import bad data\")",
                "lineNumber": 361
              }
            ],
            "events": []
          },
          {
            "name": "_recordFeePayment",
            "signature": "_recordFeePayment(uint256 pUSDAmount)",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 378,
            "requires": [],
            "events": []
          },
          {
            "name": "_recordRewardPayment",
            "signature": "_recordRewardPayment(uint256 periAmount)",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 416,
            "requires": [],
            "events": []
          },
          {
            "name": "_payFees",
            "signature": "_payFees(address account, uint256 pUSDAmount)",
            "returns": "()",
            "modifiers": [
              "notFeeAddress"
            ],
            "visibility": "internal",
            "lineNumber": 456,
            "requires": [],
            "events": []
          },
          {
            "name": "_payRewards",
            "signature": "_payRewards(address account, uint256 periAmount)",
            "returns": "()",
            "modifiers": [
              "notFeeAddress"
            ],
            "visibility": "internal",
            "lineNumber": 476,
            "requires": [],
            "events": []
          },
          {
            "name": "totalFeesAvailable",
            "signature": "totalFeesAvailable() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 488,
            "requires": [],
            "events": []
          },
          {
            "name": "totalRewardsAvailable",
            "signature": "totalRewardsAvailable() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 503,
            "requires": [],
            "events": []
          },
          {
            "name": "feesAvailable",
            "signature": "feesAvailable(address account) view",
            "returns": "(uint256, uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 519,
            "requires": [],
            "events": []
          },
          {
            "name": "_isFeesClaimableAndAnyRatesInvalid",
            "signature": "_isFeesClaimableAndAnyRatesInvalid(address account) view",
            "returns": "(bool, bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 537,
            "requires": [],
            "events": []
          },
          {
            "name": "isFeesClaimable",
            "signature": "isFeesClaimable(address account) view",
            "returns": "(bool feesClaimable)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 568,
            "requires": [],
            "events": []
          },
          {
            "name": "feesByPeriod",
            "signature": "feesByPeriod(address account) view",
            "returns": "(uint256[2][2] results)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 576,
            "requires": [],
            "events": []
          },
          {
            "name": "_feesAndRewardsFromPeriod",
            "signature": "_feesAndRewardsFromPeriod(uint256 period, uint256 ownershipPercentage, uint256 debtEntryIndex) view",
            "returns": "(uint256, uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 638,
            "requires": [],
            "events": []
          },
          {
            "name": "_effectiveDebtRatioForPeriod",
            "signature": "_effectiveDebtRatioForPeriod(uint256 closingDebtIndex, uint256 ownershipPercentage, uint256 debtEntryIndex) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 664,
            "requires": [],
            "events": []
          },
          {
            "name": "effectiveDebtRatioForPeriod",
            "signature": "effectiveDebtRatioForPeriod(address account, uint256 period) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 681,
            "requires": [
              {
                "name": "require(..., \"Current period is not closed yet\")",
                "lineNumber": 682
              },
              {
                "name": "require(..., \"Exceeds the FEE_PERIOD_LENGTH\")",
                "lineNumber": 683
              }
            ],
            "events": []
          },
          {
            "name": "getLastFeeWithdrawal",
            "signature": "getLastFeeWithdrawal(address _claimingAddress) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 703,
            "requires": [],
            "events": []
          },
          {
            "name": "getPenaltyThresholdRatio",
            "signature": "getPenaltyThresholdRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 710,
            "requires": [],
            "events": []
          },
          {
            "name": "_setLastFeeWithdrawal",
            "signature": "_setLastFeeWithdrawal(address _claimingAddress, uint256 _feePeriodID)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 719,
            "requires": [],
            "events": []
          },
          {
            "name": "emitIssuanceDebtRatioEntry",
            "signature": "emitIssuanceDebtRatioEntry(address account, uint256 debtRatio, uint256 debtEntryIndex, uint256 feePeriodStartingDebtIndex)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 765,
            "requires": [],
            "events": []
          },
          {
            "name": "emitFeePeriodClosed",
            "signature": "emitFeePeriodClosed(uint256 feePeriodId)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 784,
            "requires": [],
            "events": []
          },
          {
            "name": "emitFeesClaimed",
            "signature": "emitFeesClaimed(address account, uint256 pUSDAmount, uint256 periRewards)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 791,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "IssuanceDebtRatioEntry",
            "parameters": "(address account, uint256 debtRatio, uint256 debtEntryIndex, uint256 feePeriodStartingDebtIndex)",
            "lineNumber": 756
          },
          {
            "name": "FeePeriodClosed",
            "parameters": "(uint256 feePeriodId)",
            "lineNumber": 781
          },
          {
            "name": "FeesClaimed",
            "parameters": "(address account, uint256 pUSDAmount, uint256 periRewards)",
            "lineNumber": 788
          }
        ],
        "variables": [
          {
            "name": "FEE_ADDRESS",
            "type": "address",
            "visibility": "public",
            "lineNumber": 36
          },
          {
            "name": "pUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 39
          },
          {
            "name": "FEE_PERIOD_LENGTH",
            "type": "uint8",
            "visibility": "public",
            "lineNumber": 57
          },
          {
            "name": "_recentFeePeriods",
            "type": "struct FeePool.FeePeriod[2]",
            "visibility": "private",
            "lineNumber": 59
          },
          {
            "name": "_currentFeePeriod",
            "type": "uint256",
            "visibility": "private",
            "lineNumber": 60
          },
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 64
          },
          {
            "name": "CONTRACT_PERIFINANCE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 65
          },
          {
            "name": "CONTRACT_FEEPOOLSTATE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 66
          },
          {
            "name": "CONTRACT_FEEPOOLETERNALSTORAGE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 67
          },
          {
            "name": "CONTRACT_EXCHANGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 68
          },
          {
            "name": "CONTRACT_ISSUER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 69
          },
          {
            "name": "CONTRACT_PERIFINANCESTATE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 70
          },
          {
            "name": "CONTRACT_REWARDESCROW_V2",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 71
          },
          {
            "name": "CONTRACT_DELEGATEAPPROVALS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 72
          },
          {
            "name": "CONTRACT_ETH_COLLATERAL_PUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 73
          },
          {
            "name": "CONTRACT_COLLATERALMANAGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 74
          },
          {
            "name": "CONTRACT_REWARDSDISTRIBUTION",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 75
          },
          {
            "name": "LAST_FEE_WITHDRAWAL",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 79
          },
          {
            "name": "ISSUANCEDEBTRATIOENTRY_SIG",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 762
          },
          {
            "name": "FEEPERIODCLOSED_SIG",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 782
          },
          {
            "name": "FEESCLAIMED_SIG",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 789
          }
        ],
        "modifiers": [
          {
            "name": "onlyInternalContracts",
            "signature": "onlyInternalContracts()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 727
          },
          {
            "name": "onlyIssuerAndPeriFinanceState",
            "signature": "onlyIssuerAndPeriFinanceState()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 737
          },
          {
            "name": "notFeeAddress",
            "signature": "notFeeAddress(address account)",
            "visibility": "internal",
            "parameters": "(address account)",
            "lineNumber": 744
          },
          {
            "name": "issuanceActive",
            "signature": "issuanceActive()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 749
          }
        ],
        "structs": [
          {
            "name": "FeePeriod",
            "members": [
              {
                "name": "feePeriodId",
                "type": "uint64"
              },
              {
                "name": "startingDebtIndex",
                "type": "uint64"
              },
              {
                "name": "startTime",
                "type": "uint64"
              },
              {
                "name": "feesToDistribute",
                "type": "uint256"
              },
              {
                "name": "feesClaimed",
                "type": "uint256"
              },
              {
                "name": "rewardsToDistribute",
                "type": "uint256"
              },
              {
                "name": "rewardsClaimed",
                "type": "uint256"
              }
            ],
            "lineNumber": 42
          }
        ],
        "inherits": [
          "Owned",
          "Proxyable",
          "LimitedSetup",
          "MixinSystemSettings",
          "IFeePool"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/FeePoolEternalStorage.sol": {
    "imports": [
      "./EternalStorage.sol",
      "./LimitedSetup.sol"
    ],
    "contracts": {
      "FeePoolEternalStorage": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _feePool)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 11,
            "requires": [],
            "events": []
          },
          {
            "name": "importFeeWithdrawalData",
            "signature": "importFeeWithdrawalData(address[] accounts, uint256[] feePeriodIDs)",
            "returns": "()",
            "modifiers": [
              "onlyOwner",
              "onlyDuringSetup"
            ],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [
              {
                "name": "require(..., \"Length mismatch\")",
                "lineNumber": 18
              }
            ],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "LAST_FEE_WITHDRAWAL",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 9
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "EternalStorage",
          "LimitedSetup"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/FeePoolState.sol": {
    "imports": [
      "./Owned.sol",
      "./LimitedSetup.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IFeePool.sol"
    ],
    "contracts": {
      "FeePoolState": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, contract IFeePool _feePool)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 33,
            "requires": [],
            "events": []
          },
          {
            "name": "setFeePool",
            "signature": "setFeePool(contract IFeePool _feePool)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 44,
            "requires": [],
            "events": []
          },
          {
            "name": "getAccountsDebtEntry",
            "signature": "getAccountsDebtEntry(address account, uint256 index) view",
            "returns": "(uint256 debtPercentage, uint256 debtEntryIndex)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 55,
            "requires": [
              {
                "name": "require(..., \"index exceeds the FEE_PERIOD_LENGTH\")",
                "lineNumber": 60
              }
            ],
            "events": []
          },
          {
            "name": "applicableIssuanceData",
            "signature": "applicableIssuanceData(address account, uint256 closingDebtIndex) view",
            "returns": "(uint256, uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 71,
            "requires": [],
            "events": []
          },
          {
            "name": "appendAccountIssuanceRecord",
            "signature": "appendAccountIssuanceRecord(address account, uint256 debtRatio, uint256 debtEntryIndex, uint256 currentPeriodStartDebtIndex)",
            "returns": "()",
            "modifiers": [
              "onlyFeePool"
            ],
            "visibility": "external",
            "lineNumber": 96,
            "requires": [],
            "events": []
          },
          {
            "name": "issuanceDataIndexOrder",
            "signature": "issuanceDataIndexOrder(address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 116,
            "requires": [],
            "events": []
          },
          {
            "name": "importIssuerData",
            "signature": "importIssuerData(address[] accounts, uint256[] ratios, uint256 periodToInsert, uint256 feePeriodCloseIndex)",
            "returns": "()",
            "modifiers": [
              "onlyOwner",
              "onlyDuringSetup"
            ],
            "visibility": "external",
            "lineNumber": 135,
            "requires": [
              {
                "name": "require(..., \"Length mismatch\")",
                "lineNumber": 141
              }
            ],
            "events": []
          }
        ],
        "events": [
          {
            "name": "IssuanceDebtRatioEntry",
            "parameters": "(address account, uint256 debtRatio, uint256 feePeriodCloseIndex)",
            "lineNumber": 158
          }
        ],
        "variables": [
          {
            "name": "FEE_PERIOD_LENGTH",
            "type": "uint8",
            "visibility": "public",
            "lineNumber": 20
          },
          {
            "name": "feePool",
            "type": "address",
            "visibility": "public",
            "lineNumber": 22
          },
          {
            "name": "accountIssuanceLedger",
            "type": "mapping(address => struct FeePoolState.IssuanceData[6])",
            "visibility": "public",
            "lineNumber": 31
          }
        ],
        "modifiers": [
          {
            "name": "onlyFeePool",
            "signature": "onlyFeePool()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 152
          }
        ],
        "structs": [
          {
            "name": "IssuanceData",
            "members": [
              {
                "name": "debtPercentage",
                "type": "uint256"
              },
              {
                "name": "debtEntryIndex",
                "type": "uint256"
              }
            ],
            "lineNumber": 25
          }
        ],
        "inherits": [
          "Owned",
          "LimitedSetup"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/FlexibleStorage.sol": {
    "imports": [
      "./ContractStorage.sol",
      "./interfaces/IFlexibleStorage.sol",
      "./interfaces/IAddressResolver.sol"
    ],
    "contracts": {
      "FlexibleStorage": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "_setUIntValue",
            "signature": "_setUIntValue(bytes32 contractName, bytes32 record, uint256 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 22,
            "requires": [],
            "events": [
              "ValueSetUInt"
            ]
          },
          {
            "name": "_setIntValue",
            "signature": "_setIntValue(bytes32 contractName, bytes32 record, int256 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 31,
            "requires": [],
            "events": [
              "ValueSetInt"
            ]
          },
          {
            "name": "_setAddressValue",
            "signature": "_setAddressValue(bytes32 contractName, bytes32 record, address value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 40,
            "requires": [],
            "events": [
              "ValueSetAddress"
            ]
          },
          {
            "name": "_setBoolValue",
            "signature": "_setBoolValue(bytes32 contractName, bytes32 record, bool value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 49,
            "requires": [],
            "events": [
              "ValueSetBool"
            ]
          },
          {
            "name": "_setBytes32Value",
            "signature": "_setBytes32Value(bytes32 contractName, bytes32 record, bytes32 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 58,
            "requires": [],
            "events": [
              "ValueSetBytes32"
            ]
          },
          {
            "name": "getUIntValue",
            "signature": "getUIntValue(bytes32 contractName, bytes32 record) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 69,
            "requires": [],
            "events": []
          },
          {
            "name": "getUIntValues",
            "signature": "getUIntValues(bytes32 contractName, bytes32[] records) view",
            "returns": "(uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 73,
            "requires": [],
            "events": []
          },
          {
            "name": "getIntValue",
            "signature": "getIntValue(bytes32 contractName, bytes32 record) view",
            "returns": "(int256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 83,
            "requires": [],
            "events": []
          },
          {
            "name": "getIntValues",
            "signature": "getIntValues(bytes32 contractName, bytes32[] records) view",
            "returns": "(int256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 87,
            "requires": [],
            "events": []
          },
          {
            "name": "getAddressValue",
            "signature": "getAddressValue(bytes32 contractName, bytes32 record) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 97,
            "requires": [],
            "events": []
          },
          {
            "name": "getAddressValues",
            "signature": "getAddressValues(bytes32 contractName, bytes32[] records) view",
            "returns": "(address[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 101,
            "requires": [],
            "events": []
          },
          {
            "name": "getBoolValue",
            "signature": "getBoolValue(bytes32 contractName, bytes32 record) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 111,
            "requires": [],
            "events": []
          },
          {
            "name": "getBoolValues",
            "signature": "getBoolValues(bytes32 contractName, bytes32[] records) view",
            "returns": "(bool[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 115,
            "requires": [],
            "events": []
          },
          {
            "name": "getBytes32Value",
            "signature": "getBytes32Value(bytes32 contractName, bytes32 record) view",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 125,
            "requires": [],
            "events": []
          },
          {
            "name": "getBytes32Values",
            "signature": "getBytes32Values(bytes32 contractName, bytes32[] records) view",
            "returns": "(bytes32[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 129,
            "requires": [],
            "events": []
          },
          {
            "name": "setUIntValue",
            "signature": "setUIntValue(bytes32 contractName, bytes32 record, uint256 value)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 140,
            "requires": [],
            "events": []
          },
          {
            "name": "setUIntValues",
            "signature": "setUIntValues(bytes32 contractName, bytes32[] records, uint256[] values)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 148,
            "requires": [
              {
                "name": "require(..., \"Input lengths must match\")",
                "lineNumber": 153
              }
            ],
            "events": []
          },
          {
            "name": "deleteUIntValue",
            "signature": "deleteUIntValue(bytes32 contractName, bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 160,
            "requires": [],
            "events": [
              "ValueDeletedUInt"
            ]
          },
          {
            "name": "setIntValue",
            "signature": "setIntValue(bytes32 contractName, bytes32 record, int256 value)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 166,
            "requires": [],
            "events": []
          },
          {
            "name": "setIntValues",
            "signature": "setIntValues(bytes32 contractName, bytes32[] records, int256[] values)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 174,
            "requires": [
              {
                "name": "require(..., \"Input lengths must match\")",
                "lineNumber": 179
              }
            ],
            "events": []
          },
          {
            "name": "deleteIntValue",
            "signature": "deleteIntValue(bytes32 contractName, bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 186,
            "requires": [],
            "events": [
              "ValueDeletedInt"
            ]
          },
          {
            "name": "setAddressValue",
            "signature": "setAddressValue(bytes32 contractName, bytes32 record, address value)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 192,
            "requires": [],
            "events": []
          },
          {
            "name": "setAddressValues",
            "signature": "setAddressValues(bytes32 contractName, bytes32[] records, address[] values)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 200,
            "requires": [
              {
                "name": "require(..., \"Input lengths must match\")",
                "lineNumber": 205
              }
            ],
            "events": []
          },
          {
            "name": "deleteAddressValue",
            "signature": "deleteAddressValue(bytes32 contractName, bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 212,
            "requires": [],
            "events": [
              "ValueDeletedAddress"
            ]
          },
          {
            "name": "setBoolValue",
            "signature": "setBoolValue(bytes32 contractName, bytes32 record, bool value)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 218,
            "requires": [],
            "events": []
          },
          {
            "name": "setBoolValues",
            "signature": "setBoolValues(bytes32 contractName, bytes32[] records, bool[] values)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 226,
            "requires": [
              {
                "name": "require(..., \"Input lengths must match\")",
                "lineNumber": 231
              }
            ],
            "events": []
          },
          {
            "name": "deleteBoolValue",
            "signature": "deleteBoolValue(bytes32 contractName, bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 238,
            "requires": [],
            "events": [
              "ValueDeletedBool"
            ]
          },
          {
            "name": "setBytes32Value",
            "signature": "setBytes32Value(bytes32 contractName, bytes32 record, bytes32 value)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 244,
            "requires": [],
            "events": []
          },
          {
            "name": "setBytes32Values",
            "signature": "setBytes32Values(bytes32 contractName, bytes32[] records, bytes32[] values)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 252,
            "requires": [
              {
                "name": "require(..., \"Input lengths must match\")",
                "lineNumber": 257
              }
            ],
            "events": []
          },
          {
            "name": "deleteBytes32Value",
            "signature": "deleteBytes32Value(bytes32 contractName, bytes32 record)",
            "returns": "()",
            "modifiers": [
              "onlyContract"
            ],
            "visibility": "external",
            "lineNumber": 264,
            "requires": [],
            "events": [
              "ValueDeletedBytes32"
            ]
          }
        ],
        "events": [
          {
            "name": "ValueSetUInt",
            "parameters": "(bytes32 contractName, bytes32 record, uint256 value)",
            "lineNumber": 272
          },
          {
            "name": "ValueDeletedUInt",
            "parameters": "(bytes32 contractName, bytes32 record, uint256 value)",
            "lineNumber": 273
          },
          {
            "name": "ValueSetInt",
            "parameters": "(bytes32 contractName, bytes32 record, int256 value)",
            "lineNumber": 275
          },
          {
            "name": "ValueDeletedInt",
            "parameters": "(bytes32 contractName, bytes32 record, int256 value)",
            "lineNumber": 276
          },
          {
            "name": "ValueSetAddress",
            "parameters": "(bytes32 contractName, bytes32 record, address value)",
            "lineNumber": 278
          },
          {
            "name": "ValueDeletedAddress",
            "parameters": "(bytes32 contractName, bytes32 record, address value)",
            "lineNumber": 279
          },
          {
            "name": "ValueSetBool",
            "parameters": "(bytes32 contractName, bytes32 record, bool value)",
            "lineNumber": 281
          },
          {
            "name": "ValueDeletedBool",
            "parameters": "(bytes32 contractName, bytes32 record, bool value)",
            "lineNumber": 282
          },
          {
            "name": "ValueSetBytes32",
            "parameters": "(bytes32 contractName, bytes32 record, bytes32 value)",
            "lineNumber": 284
          },
          {
            "name": "ValueDeletedBytes32",
            "parameters": "(bytes32 contractName, bytes32 record, bytes32 value)",
            "lineNumber": 285
          }
        ],
        "variables": [
          {
            "name": "uintStorage",
            "type": "mapping(bytes32 => mapping(bytes32 => uint256))",
            "visibility": "internal",
            "lineNumber": 12
          },
          {
            "name": "intStorage",
            "type": "mapping(bytes32 => mapping(bytes32 => int256))",
            "visibility": "internal",
            "lineNumber": 13
          },
          {
            "name": "addressStorage",
            "type": "mapping(bytes32 => mapping(bytes32 => address))",
            "visibility": "internal",
            "lineNumber": 14
          },
          {
            "name": "boolStorage",
            "type": "mapping(bytes32 => mapping(bytes32 => bool))",
            "visibility": "internal",
            "lineNumber": 15
          },
          {
            "name": "bytes32Storage",
            "type": "mapping(bytes32 => mapping(bytes32 => bytes32))",
            "visibility": "internal",
            "lineNumber": 16
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "ContractStorage",
          "IFlexibleStorage"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/ImportableRewardEscrowV2.sol": {
    "imports": [
      "./BaseRewardEscrowV2.sol"
    ],
    "contracts": {
      "ImportableRewardEscrowV2": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceBridgeToBase",
            "signature": "periFinanceBridgeToBase() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 25,
            "requires": [],
            "events": []
          },
          {
            "name": "importVestingEntries",
            "signature": "importVestingEntries(address account, uint256 escrowedAmount, struct VestingEntries.VestingEntry[] vestingEntries)",
            "returns": "()",
            "modifiers": [
              "onlyPeriFinanceBridge"
            ],
            "visibility": "external",
            "lineNumber": 31,
            "requires": [
              {
                "name": "require(..., \"Insufficient balance in the contract to provide for escrowed balance\")",
                "lineNumber": 38
              }
            ],
            "events": []
          },
          {
            "name": "_importVestingEntry",
            "signature": "_importVestingEntry(address account, struct VestingEntries.VestingEntry entry)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 51,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "CONTRACT_PERIFINANCE_BRIDGE_BASE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 10
          }
        ],
        "modifiers": [
          {
            "name": "onlyPeriFinanceBridge",
            "signature": "onlyPeriFinanceBridge()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 62
          }
        ],
        "structs": [],
        "inherits": [
          "BaseRewardEscrowV2"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/Issuer.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinResolver.sol",
      "./MixinSystemSettings.sol",
      "./interfaces/IIssuer.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IPynth.sol",
      "./interfaces/IPeriFinance.sol",
      "./interfaces/IFeePool.sol",
      "./interfaces/IPeriFinanceState.sol",
      "./interfaces/IExchanger.sol",
      "./interfaces/IDelegateApprovals.sol",
      "./interfaces/IExchangeRates.sol",
      "./interfaces/IEtherCollateral.sol",
      "./interfaces/IEtherCollateralpUSD.sol",
      "./interfaces/IHasBalance.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/ILiquidations.sol",
      "./interfaces/ICollateralManager.sol",
      "./interfaces/IStakingStateUSDC.sol"
    ],
    "contracts": {
      "Issuer": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 91,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 94,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinance",
            "signature": "periFinance() view",
            "returns": "(contract IPeriFinance)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 115,
            "requires": [],
            "events": []
          },
          {
            "name": "stakingStateUSDC",
            "signature": "stakingStateUSDC() view",
            "returns": "(contract IStakingStateUSDC)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 119,
            "requires": [],
            "events": []
          },
          {
            "name": "usdc",
            "signature": "usdc() view",
            "returns": "(contract IERC20)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 123,
            "requires": [],
            "events": []
          },
          {
            "name": "exchanger",
            "signature": "exchanger() view",
            "returns": "(contract IExchanger)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 127,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeRates",
            "signature": "exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 131,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceState",
            "signature": "periFinanceState() view",
            "returns": "(contract IPeriFinanceState)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 135,
            "requires": [],
            "events": []
          },
          {
            "name": "feePool",
            "signature": "feePool() view",
            "returns": "(contract IFeePool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 139,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidations",
            "signature": "liquidations() view",
            "returns": "(contract ILiquidations)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 143,
            "requires": [],
            "events": []
          },
          {
            "name": "delegateApprovals",
            "signature": "delegateApprovals() view",
            "returns": "(contract IDelegateApprovals)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 147,
            "requires": [],
            "events": []
          },
          {
            "name": "etherCollateral",
            "signature": "etherCollateral() view",
            "returns": "(contract IEtherCollateral)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 151,
            "requires": [],
            "events": []
          },
          {
            "name": "etherCollateralpUSD",
            "signature": "etherCollateralpUSD() view",
            "returns": "(contract IEtherCollateralpUSD)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 155,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralManager",
            "signature": "collateralManager() view",
            "returns": "(contract ICollateralManager)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 159,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardEscrowV2",
            "signature": "rewardEscrowV2() view",
            "returns": "(contract IRewardEscrowV2)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 163,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceEscrow",
            "signature": "periFinanceEscrow() view",
            "returns": "(contract IHasBalance)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 167,
            "requires": [],
            "events": []
          },
          {
            "name": "debtCache",
            "signature": "debtCache() view",
            "returns": "(contract IIssuerInternalDebtCache)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 171,
            "requires": [],
            "events": []
          },
          {
            "name": "issuanceRatio",
            "signature": "issuanceRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 175,
            "requires": [],
            "events": []
          },
          {
            "name": "_availableCurrencyKeysWithOptionalPERI",
            "signature": "_availableCurrencyKeysWithOptionalPERI(bool withPERI) view",
            "returns": "(bytes32[])",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 179,
            "requires": [],
            "events": []
          },
          {
            "name": "_totalIssuedPynths",
            "signature": "_totalIssuedPynths(bytes32 currencyKey, bool excludeCollateral) view",
            "returns": "(uint256 totalIssued, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 193,
            "requires": [],
            "events": []
          },
          {
            "name": "_debtBalanceOfAndTotalDebt",
            "signature": "_debtBalanceOfAndTotalDebt(address _issuer, bytes32 currencyKey) view",
            "returns": "(uint256 debtBalance, uint256 totalSystemValue, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 228,
            "requires": [],
            "events": []
          },
          {
            "name": "_canBurnPynths",
            "signature": "_canBurnPynths(address account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 276,
            "requires": [],
            "events": []
          },
          {
            "name": "_currentUSDCDebtQuota",
            "signature": "_currentUSDCDebtQuota(address _account) view",
            "returns": "(uint256, bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 280,
            "requires": [],
            "events": []
          },
          {
            "name": "_availableUSDCStakeAmount",
            "signature": "_availableUSDCStakeAmount(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 298,
            "requires": [
              {
                "name": "_requireRatesNotInvalid",
                "lineNumber": 309
              }
            ],
            "events": []
          },
          {
            "name": "_lastIssueEvent",
            "signature": "_lastIssueEvent(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 318,
            "requires": [],
            "events": []
          },
          {
            "name": "_remainingIssuablePynths",
            "signature": "_remainingIssuablePynths(address _issuer) view",
            "returns": "(uint256 maxIssuable, uint256 alreadyIssued, uint256 totalSystemDebt, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 323,
            "requires": [],
            "events": []
          },
          {
            "name": "_periToUSD",
            "signature": "_periToUSD(uint256 amount, uint256 periRate) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 345,
            "requires": [],
            "events": []
          },
          {
            "name": "_usdToPeri",
            "signature": "_usdToPeri(uint256 amount, uint256 periRate) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 349,
            "requires": [],
            "events": []
          },
          {
            "name": "_usdcToUSD",
            "signature": "_usdcToUSD(uint256 _amount, uint256 _usdcRate) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 353,
            "requires": [],
            "events": []
          },
          {
            "name": "_usdToUSDC",
            "signature": "_usdToUSDC(uint256 _amount, uint256 _usdcRate) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 361,
            "requires": [],
            "events": []
          },
          {
            "name": "_maxIssuablePynths",
            "signature": "_maxIssuablePynths(address _issuer) view",
            "returns": "(uint256, bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 369,
            "requires": [],
            "events": []
          },
          {
            "name": "_collateralisationRatio",
            "signature": "_collateralisationRatio(address _issuer) view",
            "returns": "(uint256, bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 388,
            "requires": [],
            "events": []
          },
          {
            "name": "_collateral",
            "signature": "_collateral(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 414,
            "requires": [],
            "events": []
          },
          {
            "name": "_amountsToFitClaimable",
            "signature": "_amountsToFitClaimable(uint256 _currentDebt, uint256 _stakedUSDCAmount, uint256 _periCollateral) view",
            "returns": "(uint256 burnAmount, uint256 usdcAmountToUnstake)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 428,
            "requires": [],
            "events": []
          },
          {
            "name": "minimumStakeTime",
            "signature": "minimumStakeTime() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 463,
            "requires": [],
            "events": []
          },
          {
            "name": "canBurnPynths",
            "signature": "canBurnPynths(address account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 467,
            "requires": [],
            "events": []
          },
          {
            "name": "availableCurrencyKeys",
            "signature": "availableCurrencyKeys() view",
            "returns": "(bytes32[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 471,
            "requires": [],
            "events": []
          },
          {
            "name": "availablePynthCount",
            "signature": "availablePynthCount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 475,
            "requires": [],
            "events": []
          },
          {
            "name": "anyPynthOrPERIRateIsInvalid",
            "signature": "anyPynthOrPERIRateIsInvalid() view",
            "returns": "(bool anyRateInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 479,
            "requires": [],
            "events": []
          },
          {
            "name": "totalIssuedPynths",
            "signature": "totalIssuedPynths(bytes32 currencyKey, bool excludeEtherCollateral) view",
            "returns": "(uint256 totalIssued)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 483,
            "requires": [],
            "events": []
          },
          {
            "name": "lastIssueEvent",
            "signature": "lastIssueEvent(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 487,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralisationRatio",
            "signature": "collateralisationRatio(address _issuer) view",
            "returns": "(uint256 cratio)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 491,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralisationRatioAndAnyRatesInvalid",
            "signature": "collateralisationRatioAndAnyRatesInvalid(address _issuer) view",
            "returns": "(uint256 cratio, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 495,
            "requires": [],
            "events": []
          },
          {
            "name": "collateral",
            "signature": "collateral(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 503,
            "requires": [],
            "events": []
          },
          {
            "name": "debtBalanceOf",
            "signature": "debtBalanceOf(address _issuer, bytes32 currencyKey) view",
            "returns": "(uint256 debtBalance)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 507,
            "requires": [],
            "events": []
          },
          {
            "name": "remainingIssuablePynths",
            "signature": "remainingIssuablePynths(address _issuer) view",
            "returns": "(uint256 maxIssuable, uint256 alreadyIssued, uint256 totalSystemDebt)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 519,
            "requires": [],
            "events": []
          },
          {
            "name": "maxIssuablePynths",
            "signature": "maxIssuablePynths(address _issuer) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 531,
            "requires": [],
            "events": []
          },
          {
            "name": "transferablePeriFinanceAndAnyRateIsInvalid",
            "signature": "transferablePeriFinanceAndAnyRateIsInvalid(address account, uint256 balance) view",
            "returns": "(uint256 transferable, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 536,
            "requires": [],
            "events": []
          },
          {
            "name": "getPynths",
            "signature": "getPynths(bytes32[] currencyKeys) view",
            "returns": "(contract IPynth[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 586,
            "requires": [],
            "events": []
          },
          {
            "name": "currentUSDCDebtQuota",
            "signature": "currentUSDCDebtQuota(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 597,
            "requires": [
              {
                "name": "_requireRatesNotInvalid",
                "lineNumber": 602
              }
            ],
            "events": []
          },
          {
            "name": "availableUSDCStakeAmount",
            "signature": "availableUSDCStakeAmount(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 607,
            "requires": [],
            "events": []
          },
          {
            "name": "_addPynth",
            "signature": "_addPynth(contract IPynth pynth)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 615,
            "requires": [
              {
                "name": "require(..., \"Pynth exists\")",
                "lineNumber": 617
              },
              {
                "name": "require(..., \"Pynth address already exists\")",
                "lineNumber": 618
              }
            ],
            "events": [
              "PynthAdded"
            ]
          },
          {
            "name": "addPynth",
            "signature": "addPynth(contract IPynth pynth)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 627,
            "requires": [],
            "events": []
          },
          {
            "name": "addPynths",
            "signature": "addPynths(contract IPynth[] pynthsToAdd)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 635,
            "requires": [],
            "events": []
          },
          {
            "name": "_removePynth",
            "signature": "_removePynth(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 645,
            "requires": [
              {
                "name": "require(..., \"Pynth does not exist\")",
                "lineNumber": 647
              },
              {
                "name": "require(..., \"Pynth supply exists\")",
                "lineNumber": 648
              },
              {
                "name": "require(..., \"Cannot remove pynth\")",
                "lineNumber": 649
              }
            ],
            "events": [
              "PynthRemoved"
            ]
          },
          {
            "name": "removePynth",
            "signature": "removePynth(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 675,
            "requires": [],
            "events": []
          },
          {
            "name": "removePynths",
            "signature": "removePynths(bytes32[] currencyKeys)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 685,
            "requires": [],
            "events": []
          },
          {
            "name": "issuePynthsAndStakeUSDC",
            "signature": "issuePynthsAndStakeUSDC(address _issuer, uint256 _issueAmount, uint256 _usdcStakeAmount)",
            "returns": "()",
            "modifiers": [
              "onlyPeriFinance"
            ],
            "visibility": "external",
            "lineNumber": 700,
            "requires": [],
            "events": []
          },
          {
            "name": "issuePynthsAndStakeMaxUSDC",
            "signature": "issuePynthsAndStakeMaxUSDC(address _issuer, uint256 _issueAmount)",
            "returns": "()",
            "modifiers": [
              "onlyPeriFinance"
            ],
            "visibility": "external",
            "lineNumber": 714,
            "requires": [],
            "events": []
          },
          {
            "name": "issueMaxPynths",
            "signature": "issueMaxPynths(address _issuer)",
            "returns": "()",
            "modifiers": [
              "onlyPeriFinance"
            ],
            "visibility": "external",
            "lineNumber": 725,
            "requires": [],
            "events": []
          },
          {
            "name": "burnPynthsAndUnstakeUSDC",
            "signature": "burnPynthsAndUnstakeUSDC(address _from, uint256 _burnAmount, uint256 _unstakeAmount)",
            "returns": "()",
            "modifiers": [
              "onlyPeriFinance"
            ],
            "visibility": "external",
            "lineNumber": 731,
            "requires": [],
            "events": []
          },
          {
            "name": "burnPynthsAndUnstakeUSDCToTarget",
            "signature": "burnPynthsAndUnstakeUSDCToTarget(address _from)",
            "returns": "()",
            "modifiers": [
              "onlyPeriFinance"
            ],
            "visibility": "external",
            "lineNumber": 740,
            "requires": [
              {
                "name": "_requireRatesNotInvalid",
                "lineNumber": 751
              }
            ],
            "events": []
          },
          {
            "name": "liquidateDelinquentAccount",
            "signature": "liquidateDelinquentAccount(address account, uint256 pusdAmount, address liquidator)",
            "returns": "(uint256 totalRedeemed, uint256 amountToLiquidate)",
            "modifiers": [
              "onlyPeriFinance"
            ],
            "visibility": "external",
            "lineNumber": 758,
            "requires": [
              {
                "name": "require(..., \"pUSD needs to be settled\")",
                "lineNumber": 764
              },
              {
                "name": "require(..., \"Account not open for liquidation\")",
                "lineNumber": 767
              },
              {
                "name": "require(..., \"Not enough pUSD\")",
                "lineNumber": 770
              },
              {
                "name": "_requireRatesNotInvalid",
                "lineNumber": 777
              }
            ],
            "events": []
          },
          {
            "name": "_requireRatesNotInvalid",
            "signature": "_requireRatesNotInvalid(bool anyRateIsInvalid) pure",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 817,
            "requires": [
              {
                "name": "require(..., \"A pynth or PERI rate is invalid\")",
                "lineNumber": 818
              }
            ],
            "events": []
          },
          {
            "name": "_requireCanIssueOnBehalf",
            "signature": "_requireCanIssueOnBehalf(address issueForAddress, address from) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 821,
            "requires": [
              {
                "name": "require(..., \"Not approved to act on behalf\")",
                "lineNumber": 822
              }
            ],
            "events": []
          },
          {
            "name": "_requireCanBurnOnBehalf",
            "signature": "_requireCanBurnOnBehalf(address burnForAddress, address from) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 825,
            "requires": [
              {
                "name": "require(..., \"Not approved to act on behalf\")",
                "lineNumber": 826
              }
            ],
            "events": []
          },
          {
            "name": "_issuePynths",
            "signature": "_issuePynths(address from, uint256 amount, bool issueMax)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 829,
            "requires": [
              {
                "name": "_requireRatesNotInvalid",
                "lineNumber": 835
              }
            ],
            "events": []
          },
          {
            "name": "_issuePynthsAndStakeUSDC",
            "signature": "_issuePynthsAndStakeUSDC(address _issuer, uint256 _issueAmount, uint256 _usdcStakeAmount, bool _stakeMax)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 859,
            "requires": [],
            "events": []
          },
          {
            "name": "_transferAndStakeUSDC",
            "signature": "_transferAndStakeUSDC(address _account, uint256 _amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 895,
            "requires": [
              {
                "name": "require(..., \"transferring USDC has been failed\")",
                "lineNumber": 897
              }
            ],
            "events": []
          },
          {
            "name": "_unstakeAndRefundUSDC",
            "signature": "_unstakeAndRefundUSDC(address _account, uint256 _amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 906,
            "requires": [
              {
                "name": "require(..., \"refunding USDC has been failed\")",
                "lineNumber": 910
              }
            ],
            "events": []
          },
          {
            "name": "_burnPynths",
            "signature": "_burnPynths(address debtAccount, address burnAccount, uint256 amount, uint256 existingDebt, uint256 totalDebtIssued)",
            "returns": "(uint256 amountBurnt)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 914,
            "requires": [],
            "events": []
          },
          {
            "name": "_voluntaryBurnPynths",
            "signature": "_voluntaryBurnPynths(address from, uint256 amount, bool burnToTarget)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 955,
            "requires": [
              {
                "name": "_requireRatesNotInvalid",
                "lineNumber": 972
              },
              {
                "name": "require(..., \"No debt to forgive\")",
                "lineNumber": 973
              }
            ],
            "events": []
          },
          {
            "name": "_burnPynthsAndUnstakeUSDC",
            "signature": "_burnPynthsAndUnstakeUSDC(address _from, uint256 _burnAmount, uint256 _unstakeAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 994,
            "requires": [
              {
                "name": "require(..., \"USDC staked exceeds quota\")",
                "lineNumber": 1016
              }
            ],
            "events": []
          },
          {
            "name": "_setLastIssueEvent",
            "signature": "_setLastIssueEvent(address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 1020,
            "requires": [],
            "events": []
          },
          {
            "name": "_appendAccountIssuanceRecord",
            "signature": "_appendAccountIssuanceRecord(address from)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 1029,
            "requires": [],
            "events": []
          },
          {
            "name": "_addToDebtRegister",
            "signature": "_addToDebtRegister(address from, uint256 amount, uint256 existingDebt, uint256 totalDebtIssued)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 1036,
            "requires": [],
            "events": []
          },
          {
            "name": "_removeFromDebtRegister",
            "signature": "_removeFromDebtRegister(address from, uint256 debtToRemove, uint256 existingDebt, uint256 totalDebtIssued)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 1076,
            "requires": [],
            "events": []
          },
          {
            "name": "_onlyPeriFinance",
            "signature": "_onlyPeriFinance() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 1120,
            "requires": [
              {
                "name": "require(..., \"Issuer: Only the periFinance contract can perform this action\")",
                "lineNumber": 1121
              }
            ],
            "events": []
          }
        ],
        "events": [
          {
            "name": "PynthAdded",
            "parameters": "(bytes32 currencyKey, address pynth)",
            "lineNumber": 1131
          },
          {
            "name": "PynthRemoved",
            "parameters": "(bytes32 currencyKey, address pynth)",
            "lineNumber": 1132
          }
        ],
        "variables": [
          {
            "name": "availablePynths",
            "type": "contract IPynth[]",
            "visibility": "public",
            "lineNumber": 57
          },
          {
            "name": "pynths",
            "type": "mapping(bytes32 => contract IPynth)",
            "visibility": "public",
            "lineNumber": 58
          },
          {
            "name": "pynthsByAddress",
            "type": "mapping(address => bytes32)",
            "visibility": "public",
            "lineNumber": 59
          },
          {
            "name": "pUSD",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 63
          },
          {
            "name": "pETH",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 64
          },
          {
            "name": "PERI",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 65
          },
          {
            "name": "USDC",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 66
          },
          {
            "name": "CONTRACT_NAME",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 70
          },
          {
            "name": "LAST_ISSUE_EVENT",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 71
          },
          {
            "name": "CONTRACT_PERIFINANCE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 75
          },
          {
            "name": "CONTRACT_EXCHANGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 76
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 77
          },
          {
            "name": "CONTRACT_PERIFINANCESTATE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 78
          },
          {
            "name": "CONTRACT_FEEPOOL",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 79
          },
          {
            "name": "CONTRACT_DELEGATEAPPROVALS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 80
          },
          {
            "name": "CONTRACT_ETHERCOLLATERAL",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 81
          },
          {
            "name": "CONTRACT_ETHERCOLLATERAL_PUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 82
          },
          {
            "name": "CONTRACT_COLLATERALMANAGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 83
          },
          {
            "name": "CONTRACT_REWARDESCROW_V2",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 84
          },
          {
            "name": "CONTRACT_PERIFINANCEESCROW",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 85
          },
          {
            "name": "CONTRACT_LIQUIDATIONS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 86
          },
          {
            "name": "CONTRACT_DEBTCACHE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 87
          },
          {
            "name": "CONTRACT_USDC",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 88
          },
          {
            "name": "CONTRACT_STAKINGSTATE_USDC",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 89
          }
        ],
        "modifiers": [
          {
            "name": "onlyPeriFinance",
            "signature": "onlyPeriFinance()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 1124
          }
        ],
        "structs": [],
        "inherits": [
          "Owned",
          "MixinSystemSettings",
          "IIssuer"
        ]
      }
    },
    "libraries": {},
    "interfaces": {
      "IRewardEscrowV2": {
        "functions": [
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 30,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      },
      "IIssuerInternalDebtCache": {
        "functions": [
          {
            "name": "updateCachedPynthDebtWithRate",
            "signature": "updateCachedPynthDebtWithRate(bytes32 currencyKey, uint256 currencyRate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 34,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebtsWithRates",
            "signature": "updateCachedPynthDebtsWithRates(bytes32[] currencyKeys, uint256[] currencyRates)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 36,
            "requires": [],
            "events": []
          },
          {
            "name": "updateDebtCacheValidity",
            "signature": "updateDebtCacheValidity(bool currentlyInvalid)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheInfo",
            "signature": "cacheInfo() view",
            "returns": "(uint256 cachedDebt, uint256 timestamp, bool isInvalid, bool isStale)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 40,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/IssuerWithoutLiquidations.sol": {
    "imports": [
      "./Issuer.sol"
    ],
    "contracts": {
      "IssuerWithoutLiquidations": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidateDelinquentAccount",
            "signature": "liquidateDelinquentAccount(address account, uint256 pusdAmount, address liquidator)",
            "returns": "(uint256 totalRedeemed, uint256 amountToLiquidate)",
            "modifiers": [
              "onlyPeriFinance"
            ],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Issuer"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/LimitedSetup.sol": {
    "imports": [],
    "contracts": {
      "LimitedSetup": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(uint256 setupDuration)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 11,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "setupExpiryTime",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 5
          }
        ],
        "modifiers": [
          {
            "name": "onlyDuringSetup",
            "signature": "onlyDuringSetup()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 15
          }
        ],
        "structs": [],
        "inherits": []
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/Liquidations.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinResolver.sol",
      "./MixinSystemSettings.sol",
      "./interfaces/ILiquidations.sol",
      "./SafeDecimalMath.sol",
      "./EternalStorage.sol",
      "./interfaces/IPeriFinance.sol",
      "./interfaces/IExchangeRates.sol",
      "./interfaces/IIssuer.sol",
      "./interfaces/ISystemStatus.sol"
    ],
    "contracts": {
      "Liquidations": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 43,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinance",
            "signature": "periFinance() view",
            "returns": "(contract IPeriFinance)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 57,
            "requires": [],
            "events": []
          },
          {
            "name": "systemStatus",
            "signature": "systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 61,
            "requires": [],
            "events": []
          },
          {
            "name": "issuer",
            "signature": "issuer() view",
            "returns": "(contract IIssuer)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 65,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeRates",
            "signature": "exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 69,
            "requires": [],
            "events": []
          },
          {
            "name": "eternalStorageLiquidations",
            "signature": "eternalStorageLiquidations() view",
            "returns": "(contract EternalStorage)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 74,
            "requires": [],
            "events": []
          },
          {
            "name": "issuanceRatio",
            "signature": "issuanceRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 78,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationDelay",
            "signature": "liquidationDelay() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 82,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationRatio",
            "signature": "liquidationRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 86,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationPenalty",
            "signature": "liquidationPenalty() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 90,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationCollateralRatio",
            "signature": "liquidationCollateralRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 94,
            "requires": [],
            "events": []
          },
          {
            "name": "getLiquidationDeadlineForAccount",
            "signature": "getLiquidationDeadlineForAccount(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 98,
            "requires": [],
            "events": []
          },
          {
            "name": "isOpenForLiquidation",
            "signature": "isOpenForLiquidation(address account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 103,
            "requires": [],
            "events": []
          },
          {
            "name": "isLiquidationDeadlinePassed",
            "signature": "isLiquidationDeadlinePassed(address account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 121,
            "requires": [],
            "events": []
          },
          {
            "name": "_deadlinePassed",
            "signature": "_deadlinePassed(uint256 deadline) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 126,
            "requires": [],
            "events": []
          },
          {
            "name": "calculateAmountToFixCollateral",
            "signature": "calculateAmountToFixCollateral(uint256 debtBalance, uint256 collateral) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 139,
            "requires": [],
            "events": []
          },
          {
            "name": "_getLiquidationEntryForAccount",
            "signature": "_getLiquidationEntryForAccount(address account) view",
            "returns": "(struct Liquidations.LiquidationEntry _liquidation)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 151,
            "requires": [],
            "events": []
          },
          {
            "name": "_getKey",
            "signature": "_getKey(bytes32 _scope, address _account) pure",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 158,
            "requires": [],
            "events": []
          },
          {
            "name": "flagAccountForLiquidation",
            "signature": "flagAccountForLiquidation(address account)",
            "returns": "()",
            "modifiers": [
              "rateNotInvalid"
            ],
            "visibility": "external",
            "lineNumber": 166,
            "requires": [
              {
                "name": "require(..., \"Liquidation ratio not set\")",
                "lineNumber": 169
              },
              {
                "name": "require(..., \"Liquidation delay not set\")",
                "lineNumber": 170
              },
              {
                "name": "require(..., \"Account already flagged for liquidation\")",
                "lineNumber": 173
              },
              {
                "name": "require(..., \"Account issuance ratio is less than liquidation ratio\")",
                "lineNumber": 178
              }
            ],
            "events": [
              "AccountFlaggedForLiquidation"
            ]
          },
          {
            "name": "removeAccountInLiquidation",
            "signature": "removeAccountInLiquidation(address account)",
            "returns": "()",
            "modifiers": [
              "onlyIssuer"
            ],
            "visibility": "external",
            "lineNumber": 192,
            "requires": [],
            "events": []
          },
          {
            "name": "checkAndRemoveAccountInLiquidation",
            "signature": "checkAndRemoveAccountInLiquidation(address account)",
            "returns": "()",
            "modifiers": [
              "rateNotInvalid"
            ],
            "visibility": "external",
            "lineNumber": 202,
            "requires": [
              {
                "name": "require(..., \"Account has no liquidation set\")",
                "lineNumber": 207
              }
            ],
            "events": []
          },
          {
            "name": "_storeLiquidationEntry",
            "signature": "_storeLiquidationEntry(address _account, uint256 _deadline, address _caller)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 217,
            "requires": [],
            "events": []
          },
          {
            "name": "_removeLiquidationEntry",
            "signature": "_removeLiquidationEntry(address _account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 227,
            "requires": [],
            "events": [
              "AccountRemovedFromLiquidation"
            ]
          }
        ],
        "events": [
          {
            "name": "AccountFlaggedForLiquidation",
            "parameters": "(address account, uint256 deadline)",
            "lineNumber": 249
          },
          {
            "name": "AccountRemovedFromLiquidation",
            "parameters": "(address account, uint256 time)",
            "lineNumber": 250
          }
        ],
        "variables": [
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 31
          },
          {
            "name": "CONTRACT_PERIFINANCE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 32
          },
          {
            "name": "CONTRACT_ETERNALSTORAGE_LIQUIDATIONS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 33
          },
          {
            "name": "CONTRACT_ISSUER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 34
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 35
          },
          {
            "name": "LIQUIDATION_DEADLINE",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 40
          },
          {
            "name": "LIQUIDATION_CALLER",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 41
          }
        ],
        "modifiers": [
          {
            "name": "onlyIssuer",
            "signature": "onlyIssuer()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 237
          },
          {
            "name": "rateNotInvalid",
            "signature": "rateNotInvalid(bytes32 currencyKey)",
            "visibility": "internal",
            "parameters": "(bytes32 currencyKey)",
            "lineNumber": 242
          }
        ],
        "structs": [
          {
            "name": "LiquidationEntry",
            "members": [
              {
                "name": "deadline",
                "type": "uint256"
              },
              {
                "name": "caller",
                "type": "address"
              }
            ],
            "lineNumber": 24
          }
        ],
        "inherits": [
          "Owned",
          "MixinSystemSettings",
          "ILiquidations"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/Math.sol": {
    "imports": [
      "./SafeDecimalMath.sol"
    ],
    "contracts": {},
    "libraries": {
      "Math": {
        "functions": [
          {
            "name": "powDecimal",
            "signature": "powDecimal(uint256 x, uint256 n) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 17,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    },
    "interfaces": {}
  },
  "contracts/MintablePeriFinance.sol": {
    "imports": [
      "./BasePeriFinance.sol"
    ],
    "contracts": {
      "MintablePeriFinance": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address payable _proxy, contract TokenState _tokenState, address _owner, uint256 _totalSupply, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "_mintSecondary",
            "signature": "_mintSecondary(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "onlyAllowFromBridge",
            "signature": "onlyAllowFromBridge() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 26,
            "requires": [
              {
                "name": "require(..., \"Can only be invoked by bridge\")",
                "lineNumber": 27
              }
            ],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceBridge",
            "signature": "periFinanceBridge() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 45,
            "requires": [],
            "events": []
          },
          {
            "name": "mintSecondary",
            "signature": "mintSecondary(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyBridge"
            ],
            "visibility": "external",
            "lineNumber": 51,
            "requires": [],
            "events": []
          },
          {
            "name": "mintSecondaryRewards",
            "signature": "mintSecondaryRewards(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyBridge"
            ],
            "visibility": "external",
            "lineNumber": 55,
            "requires": [],
            "events": []
          },
          {
            "name": "burnSecondary",
            "signature": "burnSecondary(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyBridge",
              "systemActive"
            ],
            "visibility": "external",
            "lineNumber": 61,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "CONTRACT_PERIFINANCE_BRIDGE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 8
          }
        ],
        "modifiers": [
          {
            "name": "onlyBridge",
            "signature": "onlyBridge()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 32
          }
        ],
        "structs": [],
        "inherits": [
          "BasePeriFinance"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/MixinResolver.sol": {
    "imports": [
      "./Owned.sol",
      "./AddressResolver.sol",
      "./ReadProxy.sol"
    ],
    "contracts": {
      "MixinResolver": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "combineArrays",
            "signature": "combineArrays(bytes32[] first, bytes32[] second) pure",
            "returns": "(bytes32[] combination)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 41,
            "requires": [],
            "events": []
          },
          {
            "name": "rebuildCache",
            "signature": "rebuildCache()",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 43,
            "requires": [],
            "events": []
          },
          {
            "name": "isResolverCached",
            "signature": "isResolverCached() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 58,
            "requires": [],
            "events": []
          },
          {
            "name": "requireAndGetAddress",
            "signature": "requireAndGetAddress(bytes32 name) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 73,
            "requires": [
              {
                "name": "require(..., \"string memory\")",
                "lineNumber": 75
              }
            ],
            "events": []
          }
        ],
        "events": [
          {
            "name": "CacheUpdated",
            "parameters": "(bytes32 name, address destination)",
            "lineNumber": 81
          }
        ],
        "variables": [
          {
            "name": "resolver",
            "type": "contract AddressResolver",
            "visibility": "public",
            "lineNumber": 12
          },
          {
            "name": "addressCache",
            "type": "mapping(bytes32 => address)",
            "visibility": "private",
            "lineNumber": 14
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/MixinSystemSettings.sol": {
    "imports": [
      "./MixinResolver.sol",
      "./interfaces/IFlexibleStorage.sol"
    ],
    "contracts": {
      "MixinSystemSettings": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 36,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "flexibleStorage",
            "signature": "flexibleStorage() view",
            "returns": "(contract IFlexibleStorage)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 43,
            "requires": [],
            "events": []
          },
          {
            "name": "_getGasLimitSetting",
            "signature": "_getGasLimitSetting(enum MixinSystemSettings.CrossDomainMessageGasLimits gasLimitType) pure",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 47,
            "requires": [],
            "events": []
          },
          {
            "name": "getCrossDomainMessageGasLimit",
            "signature": "getCrossDomainMessageGasLimit(enum MixinSystemSettings.CrossDomainMessageGasLimits gasLimitType) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 61,
            "requires": [],
            "events": []
          },
          {
            "name": "getTradingRewardsEnabled",
            "signature": "getTradingRewardsEnabled() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 65,
            "requires": [],
            "events": []
          },
          {
            "name": "getWaitingPeriodSecs",
            "signature": "getWaitingPeriodSecs() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 69,
            "requires": [],
            "events": []
          },
          {
            "name": "getPriceDeviationThresholdFactor",
            "signature": "getPriceDeviationThresholdFactor() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 73,
            "requires": [],
            "events": []
          },
          {
            "name": "getIssuanceRatio",
            "signature": "getIssuanceRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 77,
            "requires": [],
            "events": []
          },
          {
            "name": "getFeePeriodDuration",
            "signature": "getFeePeriodDuration() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 82,
            "requires": [],
            "events": []
          },
          {
            "name": "getTargetThreshold",
            "signature": "getTargetThreshold() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 87,
            "requires": [],
            "events": []
          },
          {
            "name": "getLiquidationDelay",
            "signature": "getLiquidationDelay() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 92,
            "requires": [],
            "events": []
          },
          {
            "name": "getLiquidationRatio",
            "signature": "getLiquidationRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 96,
            "requires": [],
            "events": []
          },
          {
            "name": "getLiquidationPenalty",
            "signature": "getLiquidationPenalty() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 100,
            "requires": [],
            "events": []
          },
          {
            "name": "getRateStalePeriod",
            "signature": "getRateStalePeriod() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 104,
            "requires": [],
            "events": []
          },
          {
            "name": "getExchangeFeeRate",
            "signature": "getExchangeFeeRate(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 108,
            "requires": [],
            "events": []
          },
          {
            "name": "getMinimumStakeTime",
            "signature": "getMinimumStakeTime() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 116,
            "requires": [],
            "events": []
          },
          {
            "name": "getAggregatorWarningFlags",
            "signature": "getAggregatorWarningFlags() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 120,
            "requires": [],
            "events": []
          },
          {
            "name": "getDebtSnapshotStaleTime",
            "signature": "getDebtSnapshotStaleTime() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 124,
            "requires": [],
            "events": []
          },
          {
            "name": "getUSDCQuota",
            "signature": "getUSDCQuota() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 128,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "SETTING_CONTRACT_NAME",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 10
          },
          {
            "name": "SETTING_WAITING_PERIOD_SECS",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 12
          },
          {
            "name": "SETTING_PRICE_DEVIATION_THRESHOLD_FACTOR",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 13
          },
          {
            "name": "SETTING_ISSUANCE_RATIO",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 14
          },
          {
            "name": "SETTING_FEE_PERIOD_DURATION",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 15
          },
          {
            "name": "SETTING_TARGET_THRESHOLD",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 16
          },
          {
            "name": "SETTING_LIQUIDATION_DELAY",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 17
          },
          {
            "name": "SETTING_LIQUIDATION_RATIO",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 18
          },
          {
            "name": "SETTING_LIQUIDATION_PENALTY",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 19
          },
          {
            "name": "SETTING_RATE_STALE_PERIOD",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 20
          },
          {
            "name": "SETTING_EXCHANGE_FEE_RATE",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 21
          },
          {
            "name": "SETTING_MINIMUM_STAKE_TIME",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 22
          },
          {
            "name": "SETTING_AGGREGATOR_WARNING_FLAGS",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 23
          },
          {
            "name": "SETTING_TRADING_REWARDS_ENABLED",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 24
          },
          {
            "name": "SETTING_DEBT_SNAPSHOT_STALE_TIME",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 25
          },
          {
            "name": "SETTING_CROSS_DOMAIN_DEPOSIT_GAS_LIMIT",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 26
          },
          {
            "name": "SETTING_CROSS_DOMAIN_ESCROW_GAS_LIMIT",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 27
          },
          {
            "name": "SETTING_CROSS_DOMAIN_REWARD_GAS_LIMIT",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 28
          },
          {
            "name": "SETTING_CROSS_DOMAIN_WITHDRAWAL_GAS_LIMIT",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 29
          },
          {
            "name": "SETTING_USDC_QUOTA",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 30
          },
          {
            "name": "CONTRACT_FLEXIBLESTORAGE",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 32
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "MixinResolver"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/MultiCollateralPynth.sol": {
    "imports": [
      "./Pynth.sol",
      "./interfaces/ICollateralManager.sol",
      "./interfaces/IEtherCollateralpUSD.sol",
      "./interfaces/IEtherCollateral.sol"
    ],
    "contracts": {
      "MultiCollateralPynth": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address payable _proxy, contract TokenState _tokenState, string _tokenName, string _tokenSymbol, address _owner, bytes32 _currencyKey, uint256 _totalSupply, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralManager",
            "signature": "collateralManager() view",
            "returns": "(contract ICollateralManager)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 34,
            "requires": [],
            "events": []
          },
          {
            "name": "etherCollateral",
            "signature": "etherCollateral() view",
            "returns": "(contract IEtherCollateral)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "etherCollateralpUSD",
            "signature": "etherCollateralpUSD() view",
            "returns": "(contract IEtherCollateralpUSD)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "issue",
            "signature": "issue(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyInternalContracts"
            ],
            "visibility": "external",
            "lineNumber": 62,
            "requires": [],
            "events": []
          },
          {
            "name": "burn",
            "signature": "burn(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyInternalContracts"
            ],
            "visibility": "external",
            "lineNumber": 71,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "CONTRACT_COLLATERALMANAGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 15
          },
          {
            "name": "CONTRACT_ETH_COLLATERAL",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 16
          },
          {
            "name": "CONTRACT_ETH_COLLATERAL_PUSD",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 17
          }
        ],
        "modifiers": [
          {
            "name": "onlyInternalContracts",
            "signature": "onlyInternalContracts()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 78
          }
        ],
        "structs": [],
        "inherits": [
          "Pynth"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/Owned.sol": {
    "imports": [],
    "contracts": {
      "Owned": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 8,
            "requires": [
              {
                "name": "require(..., \"Owner address cannot be 0\")",
                "lineNumber": 9
              }
            ],
            "events": [
              "OwnerChanged"
            ]
          },
          {
            "name": "nominateNewOwner",
            "signature": "nominateNewOwner(address _owner)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": [
              "OwnerNominated"
            ]
          },
          {
            "name": "acceptOwnership",
            "signature": "acceptOwnership()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [
              {
                "name": "require(..., \"You must be nominated before you can accept ownership\")",
                "lineNumber": 20
              }
            ],
            "events": [
              "OwnerChanged"
            ]
          },
          {
            "name": "_onlyOwner",
            "signature": "_onlyOwner() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 31,
            "requires": [
              {
                "name": "require(..., \"Only the contract owner may perform this action\")",
                "lineNumber": 32
              }
            ],
            "events": []
          }
        ],
        "events": [
          {
            "name": "OwnerNominated",
            "parameters": "(address newOwner)",
            "lineNumber": 35
          },
          {
            "name": "OwnerChanged",
            "parameters": "(address oldOwner, address newOwner)",
            "lineNumber": 36
          }
        ],
        "variables": [
          {
            "name": "owner",
            "type": "address",
            "visibility": "public",
            "lineNumber": 5
          },
          {
            "name": "nominatedOwner",
            "type": "address",
            "visibility": "public",
            "lineNumber": 6
          }
        ],
        "modifiers": [
          {
            "name": "onlyOwner",
            "signature": "onlyOwner()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 26
          }
        ],
        "structs": [],
        "inherits": []
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/Pausable.sol": {
    "imports": [
      "./Owned.sol"
    ],
    "contracts": {
      "Pausable": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor()",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 11,
            "requires": [
              {
                "name": "require(..., \"Owner must be set\")",
                "lineNumber": 13
              }
            ],
            "events": []
          },
          {
            "name": "setPaused",
            "signature": "setPaused(bool _paused)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": [
              "PauseChanged"
            ]
          }
        ],
        "events": [
          {
            "name": "PauseChanged",
            "parameters": "(bool isPaused)",
            "lineNumber": 39
          }
        ],
        "variables": [
          {
            "name": "lastPauseTime",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 8
          },
          {
            "name": "paused",
            "type": "bool",
            "visibility": "public",
            "lineNumber": 9
          }
        ],
        "modifiers": [
          {
            "name": "notPaused",
            "signature": "notPaused()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 41
          }
        ],
        "structs": [],
        "inherits": [
          "Owned"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/PeriFinance.sol": {
    "imports": [
      "./BasePeriFinance.sol",
      "./interfaces/IRewardEscrow.sol",
      "./interfaces/IRewardEscrowV2.sol",
      "./interfaces/ISupplySchedule.sol"
    ],
    "contracts": {
      "PeriFinance": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address payable _proxy, contract TokenState _tokenState, address _owner, uint256 _totalSupply, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 28,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardEscrow",
            "signature": "rewardEscrow() view",
            "returns": "(contract IRewardEscrow)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 39,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardEscrowV2",
            "signature": "rewardEscrowV2() view",
            "returns": "(contract IRewardEscrowV2)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 43,
            "requires": [],
            "events": []
          },
          {
            "name": "supplySchedule",
            "signature": "supplySchedule() view",
            "returns": "(contract ISupplySchedule)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 47,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeWithVirtual",
            "signature": "exchangeWithVirtual(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived, contract IVirtualPynth vPynth)",
            "modifiers": [
              "exchangeActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 53,
            "requires": [],
            "events": []
          },
          {
            "name": "settle",
            "signature": "settle(bytes32 currencyKey)",
            "returns": "(uint256 reclaimed, uint256 refunded, uint256 numEntriesSettled)",
            "modifiers": [
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 76,
            "requires": [],
            "events": []
          },
          {
            "name": "mint",
            "signature": "mint()",
            "returns": "(bool)",
            "modifiers": [
              "issuanceActive"
            ],
            "visibility": "external",
            "lineNumber": 89,
            "requires": [
              {
                "name": "require(..., \"RewardsDistribution not set\")",
                "lineNumber": 90
              },
              {
                "name": "require(..., \"No supply is mintable\")",
                "lineNumber": 96
              }
            ],
            "events": []
          },
          {
            "name": "liquidateDelinquentAccount",
            "signature": "liquidateDelinquentAccount(address account, uint256 pusdAmount)",
            "returns": "(bool)",
            "modifiers": [
              "systemActive",
              "optionalProxy"
            ],
            "visibility": "external",
            "lineNumber": 126,
            "requires": [],
            "events": []
          },
          {
            "name": "migrateEscrowBalanceToRewardEscrowV2",
            "signature": "migrateEscrowBalanceToRewardEscrowV2()",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 145,
            "requires": [],
            "events": []
          },
          {
            "name": "emitAccountLiquidated",
            "signature": "emitAccountLiquidated(address account, uint256 periRedeemed, uint256 amountLiquidated, address liquidator)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 158,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "AccountLiquidated",
            "parameters": "(address account, uint256 periRedeemed, uint256 amountLiquidated, address liquidator)",
            "lineNumber": 155
          }
        ],
        "variables": [
          {
            "name": "CONTRACT_REWARD_ESCROW",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 14
          },
          {
            "name": "CONTRACT_REWARDESCROW_V2",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 15
          },
          {
            "name": "CONTRACT_SUPPLYSCHEDULE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 16
          },
          {
            "name": "ACCOUNTLIQUIDATED_SIG",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 156
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "BasePeriFinance"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/PeriFinanceBridgeToBase.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinResolver.sol",
      "./MixinSystemSettings.sol",
      "./interfaces/IPeriFinanceBridgeToBase.sol",
      "./interfaces/IPeriFinance.sol",
      "./interfaces/IRewardEscrowV2.sol",
      "./interfaces/IPeriFinanceBridgeToOptimism.sol",
      "@eth-optimism/contracts/build/contracts/iOVM/bridge/iOVM_BaseCrossDomainMessenger.sol"
    ],
    "contracts": {
      "PeriFinanceBridgeToBase": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 27,
            "requires": [],
            "events": []
          },
          {
            "name": "messenger",
            "signature": "messenger() view",
            "returns": "(contract iOVM_BaseCrossDomainMessenger)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 32,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinance",
            "signature": "periFinance() view",
            "returns": "(contract IPeriFinance)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 36,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardEscrowV2",
            "signature": "rewardEscrowV2() view",
            "returns": "(contract IRewardEscrowV2)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 40,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceBridgeToOptimism",
            "signature": "periFinanceBridgeToOptimism() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 44,
            "requires": [],
            "events": []
          },
          {
            "name": "onlyAllowFromOptimism",
            "signature": "onlyAllowFromOptimism() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 48,
            "requires": [
              {
                "name": "require(..., \"Only the relayer can call this\")",
                "lineNumber": 51
              },
              {
                "name": "require(..., \"Only the L1 bridge can invoke\")",
                "lineNumber": 52
              }
            ],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 62,
            "requires": [],
            "events": []
          },
          {
            "name": "initiateWithdrawal",
            "signature": "initiateWithdrawal(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 75,
            "requires": [
              {
                "name": "require(..., \"Not enough transferable PERI\")",
                "lineNumber": 76
              }
            ],
            "events": [
              "WithdrawalInitiated"
            ]
          },
          {
            "name": "completeEscrowMigration",
            "signature": "completeEscrowMigration(address account, uint256 escrowedAmount, struct VestingEntries.VestingEntry[] vestingEntries)",
            "returns": "()",
            "modifiers": [
              "onlyOptimismBridge"
            ],
            "visibility": "external",
            "lineNumber": 97,
            "requires": [],
            "events": [
              "ImportedVestingEntries"
            ]
          },
          {
            "name": "completeDeposit",
            "signature": "completeDeposit(address account, uint256 depositAmount)",
            "returns": "()",
            "modifiers": [
              "onlyOptimismBridge"
            ],
            "visibility": "external",
            "lineNumber": 110,
            "requires": [],
            "events": [
              "MintedSecondary"
            ]
          },
          {
            "name": "completeRewardDeposit",
            "signature": "completeRewardDeposit(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyOptimismBridge"
            ],
            "visibility": "external",
            "lineNumber": 117,
            "requires": [],
            "events": [
              "MintedSecondaryRewards"
            ]
          }
        ],
        "events": [
          {
            "name": "ImportedVestingEntries",
            "parameters": "(address account, uint256 escrowedAmount, struct VestingEntries.VestingEntry[] vestingEntries)",
            "lineNumber": 124
          },
          {
            "name": "MintedSecondary",
            "parameters": "(address account, uint256 amount)",
            "lineNumber": 129
          },
          {
            "name": "MintedSecondaryRewards",
            "parameters": "(uint256 amount)",
            "lineNumber": 130
          },
          {
            "name": "WithdrawalInitiated",
            "parameters": "(address account, uint256 amount)",
            "lineNumber": 131
          }
        ],
        "variables": [
          {
            "name": "CONTRACT_EXT_MESSENGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 20
          },
          {
            "name": "CONTRACT_PERIFINANCE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 21
          },
          {
            "name": "CONTRACT_REWARDESCROW",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 22
          },
          {
            "name": "CONTRACT_BASE_PERIFINANCEBRIDGETOOPTIMISM",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 23
          }
        ],
        "modifiers": [
          {
            "name": "onlyOptimismBridge",
            "signature": "onlyOptimismBridge()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 55
          }
        ],
        "structs": [],
        "inherits": [
          "Owned",
          "MixinSystemSettings",
          "IPeriFinanceBridgeToBase"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/PeriFinanceBridgeToOptimism.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinResolver.sol",
      "./MixinSystemSettings.sol",
      "./interfaces/IPeriFinanceBridgeToOptimism.sol",
      "./interfaces/IPeriFinance.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IIssuer.sol",
      "./interfaces/IRewardEscrowV2.sol",
      "./interfaces/IPeriFinanceBridgeToBase.sol",
      "@eth-optimism/contracts/build/contracts/iOVM/bridge/iOVM_BaseCrossDomainMessenger.sol"
    ],
    "contracts": {
      "PeriFinanceBridgeToOptimism": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 35,
            "requires": [],
            "events": []
          },
          {
            "name": "messenger",
            "signature": "messenger() view",
            "returns": "(contract iOVM_BaseCrossDomainMessenger)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinance",
            "signature": "periFinance() view",
            "returns": "(contract IPeriFinance)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceERC20",
            "signature": "periFinanceERC20() view",
            "returns": "(contract IERC20)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 50,
            "requires": [],
            "events": []
          },
          {
            "name": "issuer",
            "signature": "issuer() view",
            "returns": "(contract IIssuer)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 54,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardsDistribution",
            "signature": "rewardsDistribution() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 58,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardEscrowV2",
            "signature": "rewardEscrowV2() view",
            "returns": "(contract IRewardEscrowV2)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 62,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceBridgeToBase",
            "signature": "periFinanceBridgeToBase() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 66,
            "requires": [],
            "events": []
          },
          {
            "name": "isActive",
            "signature": "isActive() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 70,
            "requires": [
              {
                "name": "require(..., \"Function deactivated\")",
                "lineNumber": 71
              }
            ],
            "events": []
          },
          {
            "name": "hasZeroDebt",
            "signature": "hasZeroDebt() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 74,
            "requires": [
              {
                "name": "require(..., \"Cannot deposit or migrate with debt\")",
                "lineNumber": 75
              }
            ],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 80,
            "requires": [],
            "events": []
          },
          {
            "name": "initiateDeposit",
            "signature": "initiateDeposit(uint256 depositAmount)",
            "returns": "()",
            "modifiers": [
              "requireActive",
              "requireZeroDebt"
            ],
            "visibility": "external",
            "lineNumber": 106,
            "requires": [],
            "events": []
          },
          {
            "name": "initiateEscrowMigration",
            "signature": "initiateEscrowMigration(uint256[][] entryIDs)",
            "returns": "()",
            "modifiers": [
              "requireActive",
              "requireZeroDebt"
            ],
            "visibility": "public",
            "lineNumber": 110,
            "requires": [],
            "events": []
          },
          {
            "name": "initiateRewardDeposit",
            "signature": "initiateRewardDeposit(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "requireActive"
            ],
            "visibility": "external",
            "lineNumber": 115,
            "requires": [],
            "events": []
          },
          {
            "name": "completeWithdrawal",
            "signature": "completeWithdrawal(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "requireActive"
            ],
            "visibility": "external",
            "lineNumber": 125,
            "requires": [
              {
                "name": "require(..., \"Only the relayer can call this\")",
                "lineNumber": 127
              },
              {
                "name": "require(..., \"Only the L2 bridge can invoke\")",
                "lineNumber": 128
              }
            ],
            "events": [
              "WithdrawalCompleted"
            ]
          },
          {
            "name": "migrateBridge",
            "signature": "migrateBridge(address newBridge)",
            "returns": "()",
            "modifiers": [
              "onlyOwner",
              "requireActive"
            ],
            "visibility": "external",
            "lineNumber": 138,
            "requires": [
              {
                "name": "require(..., \"Cannot migrate to address 0\")",
                "lineNumber": 139
              }
            ],
            "events": [
              "BridgeMigrated"
            ]
          },
          {
            "name": "notifyRewardAmount",
            "signature": "notifyRewardAmount(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "requireActive"
            ],
            "visibility": "external",
            "lineNumber": 151,
            "requires": [
              {
                "name": "require(..., \"Caller is not RewardsDistribution contract\")",
                "lineNumber": 152
              }
            ],
            "events": []
          },
          {
            "name": "depositAndMigrateEscrow",
            "signature": "depositAndMigrateEscrow(uint256 depositAmount, uint256[][] entryIDs)",
            "returns": "()",
            "modifiers": [
              "requireActive",
              "requireZeroDebt"
            ],
            "visibility": "public",
            "lineNumber": 158,
            "requires": [],
            "events": []
          },
          {
            "name": "_initiateRewardDeposit",
            "signature": "_initiateRewardDeposit(uint256 _amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 174,
            "requires": [],
            "events": [
              "RewardDeposit"
            ]
          },
          {
            "name": "_initiateDeposit",
            "signature": "_initiateDeposit(uint256 _depositAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 189,
            "requires": [],
            "events": [
              "Deposit"
            ]
          },
          {
            "name": "_initiateEscrowMigration",
            "signature": "_initiateEscrowMigration(uint256[][] _entryIDs)",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 206,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "BridgeMigrated",
            "parameters": "(address oldBridge, address newBridge, uint256 amount)",
            "lineNumber": 240
          },
          {
            "name": "Deposit",
            "parameters": "(address account, uint256 amount)",
            "lineNumber": 241
          },
          {
            "name": "ExportedVestingEntries",
            "parameters": "(address account, uint256 escrowedAccountBalance, struct VestingEntries.VestingEntry[] vestingEntries)",
            "lineNumber": 242
          },
          {
            "name": "RewardDeposit",
            "parameters": "(address account, uint256 amount)",
            "lineNumber": 247
          },
          {
            "name": "WithdrawalCompleted",
            "parameters": "(address account, uint256 amount)",
            "lineNumber": 248
          }
        ],
        "variables": [
          {
            "name": "CONTRACT_EXT_MESSENGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 22
          },
          {
            "name": "CONTRACT_PERIFINANCE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 23
          },
          {
            "name": "CONTRACT_ISSUER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 24
          },
          {
            "name": "CONTRACT_REWARDSDISTRIBUTION",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 25
          },
          {
            "name": "CONTRACT_REWARDESCROW",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 26
          },
          {
            "name": "CONTRACT_OVM_PERIFINANCEBRIDGETOBASE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 27
          },
          {
            "name": "MAX_ENTRIES_MIGRATED_PER_MESSAGE",
            "type": "uint8",
            "visibility": "private",
            "lineNumber": 29
          },
          {
            "name": "activated",
            "type": "bool",
            "visibility": "public",
            "lineNumber": 31
          }
        ],
        "modifiers": [
          {
            "name": "requireActive",
            "signature": "requireActive()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 94
          },
          {
            "name": "requireZeroDebt",
            "signature": "requireZeroDebt()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 99
          }
        ],
        "structs": [],
        "inherits": [
          "Owned",
          "MixinSystemSettings",
          "IPeriFinanceBridgeToOptimism"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/PeriFinanceEscrow.sol": {
    "imports": [
      "./Owned.sol",
      "./LimitedSetup.sol",
      "./interfaces/IHasBalance.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IPeriFinance.sol"
    ],
    "contracts": {
      "PeriFinanceEscrow": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, contract IPeriFinance _periFinance)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 40,
            "requires": [],
            "events": []
          },
          {
            "name": "setPeriFinance",
            "signature": "setPeriFinance(contract IPeriFinance _periFinance)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 46,
            "requires": [],
            "events": [
              "PeriFinanceUpdated"
            ]
          },
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 56,
            "requires": [],
            "events": []
          },
          {
            "name": "numVestingEntries",
            "signature": "numVestingEntries(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 63,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingScheduleEntry",
            "signature": "getVestingScheduleEntry(address account, uint256 index) view",
            "returns": "(uint256[2])",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 71,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingTime",
            "signature": "getVestingTime(address account, uint256 index) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 78,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingQuantity",
            "signature": "getVestingQuantity(address account, uint256 index) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 85,
            "requires": [],
            "events": []
          },
          {
            "name": "getNextVestingIndex",
            "signature": "getNextVestingIndex(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 92,
            "requires": [],
            "events": []
          },
          {
            "name": "getNextVestingEntry",
            "signature": "getNextVestingEntry(address account) view",
            "returns": "(uint256[2])",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 105,
            "requires": [],
            "events": []
          },
          {
            "name": "getNextVestingTime",
            "signature": "getNextVestingTime(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 116,
            "requires": [],
            "events": []
          },
          {
            "name": "getNextVestingQuantity",
            "signature": "getNextVestingQuantity(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 123,
            "requires": [],
            "events": []
          },
          {
            "name": "purgeAccount",
            "signature": "purgeAccount(address account)",
            "returns": "()",
            "modifiers": [
              "onlyOwner",
              "onlyDuringSetup"
            ],
            "visibility": "external",
            "lineNumber": 132,
            "requires": [],
            "events": []
          },
          {
            "name": "appendVestingEntry",
            "signature": "appendVestingEntry(address account, uint256 time, uint256 quantity)",
            "returns": "()",
            "modifiers": [
              "onlyOwner",
              "onlyDuringSetup"
            ],
            "visibility": "public",
            "lineNumber": 151,
            "requires": [
              {
                "name": "require(..., \"Time must be in the future\")",
                "lineNumber": 157
              },
              {
                "name": "require(..., \"Quantity cannot be zero\")",
                "lineNumber": 158
              },
              {
                "name": "require(..., \"Must be enough balance in the contract to provide for the vesting entry\")",
                "lineNumber": 162
              },
              {
                "name": "require(..., \"Vesting schedule is too long\")",
                "lineNumber": 169
              }
            ],
            "events": []
          },
          {
            "name": "addVestingSchedule",
            "signature": "addVestingSchedule(address account, uint256[] times, uint256[] quantities)",
            "returns": "()",
            "modifiers": [
              "onlyOwner",
              "onlyDuringSetup"
            ],
            "visibility": "external",
            "lineNumber": 193,
            "requires": [],
            "events": []
          },
          {
            "name": "vest",
            "signature": "vest()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 206,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "PeriFinanceUpdated",
            "parameters": "(address newPeriFinance)",
            "lineNumber": 232
          },
          {
            "name": "Vested",
            "parameters": "(address beneficiary, uint256 time, uint256 value)",
            "lineNumber": 234
          }
        ],
        "variables": [
          {
            "name": "periFinance",
            "type": "contract IPeriFinance",
            "visibility": "public",
            "lineNumber": 20
          },
          {
            "name": "vestingSchedules",
            "type": "mapping(address => uint256[2][])",
            "visibility": "public",
            "lineNumber": 24
          },
          {
            "name": "totalVestedAccountBalance",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 27
          },
          {
            "name": "totalVestedBalance",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 30
          },
          {
            "name": "TIME_INDEX",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 32
          },
          {
            "name": "QUANTITY_INDEX",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 33
          },
          {
            "name": "MAX_VESTING_ENTRIES",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 36
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "LimitedSetup",
          "IHasBalance"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/PeriFinanceState.sol": {
    "imports": [
      "./Owned.sol",
      "./State.sol",
      "./interfaces/IPeriFinanceState.sol",
      "./SafeDecimalMath.sol"
    ],
    "contracts": {
      "PeriFinanceState": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _associatedContract)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 39,
            "requires": [],
            "events": []
          },
          {
            "name": "setCurrentIssuanceData",
            "signature": "setCurrentIssuanceData(address account, uint256 initialDebtOwnership)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 49,
            "requires": [],
            "events": []
          },
          {
            "name": "clearIssuanceData",
            "signature": "clearIssuanceData(address account)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 59,
            "requires": [],
            "events": []
          },
          {
            "name": "incrementTotalIssuerCount",
            "signature": "incrementTotalIssuerCount()",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 67,
            "requires": [],
            "events": []
          },
          {
            "name": "decrementTotalIssuerCount",
            "signature": "decrementTotalIssuerCount()",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 75,
            "requires": [],
            "events": []
          },
          {
            "name": "appendDebtLedgerValue",
            "signature": "appendDebtLedgerValue(uint256 value)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 84,
            "requires": [],
            "events": []
          },
          {
            "name": "debtLedgerLength",
            "signature": "debtLedgerLength() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 93,
            "requires": [],
            "events": []
          },
          {
            "name": "lastDebtLedgerEntry",
            "signature": "lastDebtLedgerEntry() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 100,
            "requires": [],
            "events": []
          },
          {
            "name": "hasIssued",
            "signature": "hasIssued(address account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 112,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "issuanceData",
            "type": "mapping(address => struct PeriFinanceState.IssuanceData)",
            "visibility": "public",
            "lineNumber": 31
          },
          {
            "name": "totalIssuerCount",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 34
          },
          {
            "name": "debtLedger",
            "type": "uint256[]",
            "visibility": "public",
            "lineNumber": 37
          }
        ],
        "modifiers": [],
        "structs": [
          {
            "name": "IssuanceData",
            "members": [
              {
                "name": "initialDebtOwnership",
                "type": "uint256"
              },
              {
                "name": "debtEntryIndex",
                "type": "uint256"
              }
            ],
            "lineNumber": 17
          }
        ],
        "inherits": [
          "Owned",
          "State",
          "IPeriFinanceState"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/PeriFinanceStateWithLimitedSetup.sol": {
    "imports": [
      "./LimitedSetup.sol",
      "./PeriFinanceState.sol",
      "./interfaces/IFeePool.sol"
    ],
    "contracts": {
      "PeriFinanceStateWithLimitedSetup": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _associatedContract)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "setFeePool",
            "signature": "setFeePool(contract IFeePool _feePool)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 29,
            "requires": [],
            "events": [
              "FeePoolUpdated"
            ]
          },
          {
            "name": "importIssuerData",
            "signature": "importIssuerData(address[] accounts, uint256[] pUSDAmounts)",
            "returns": "()",
            "modifiers": [
              "onlyOwner",
              "onlyDuringSetup"
            ],
            "visibility": "external",
            "lineNumber": 38,
            "requires": [
              {
                "name": "require(..., \"Length mismatch\")",
                "lineNumber": 39
              }
            ],
            "events": []
          },
          {
            "name": "_addToDebtRegister",
            "signature": "_addToDebtRegister(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 50,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "FeePoolUpdated",
            "parameters": "(address newFeePool)",
            "lineNumber": 98
          }
        ],
        "variables": [
          {
            "name": "feePool",
            "type": "contract IFeePool",
            "visibility": "public",
            "lineNumber": 12
          },
          {
            "name": "importedDebtAmount",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 15
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "PeriFinanceState",
          "LimitedSetup"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/Proxy.sol": {
    "imports": [
      "./Owned.sol",
      "./Proxyable.sol"
    ],
    "contracts": {
      "Proxy": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "setTarget",
            "signature": "setTarget(contract Proxyable _target)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": [
              "TargetUpdated"
            ]
          },
          {
            "name": "_emit",
            "signature": "_emit(bytes callData, uint256 numTopics, bytes32 topic1, bytes32 topic2, bytes32 topic3, bytes32 topic4)",
            "returns": "()",
            "modifiers": [
              "onlyTarget"
            ],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "constructor",
            "signature": "constructor() payable",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 57,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "TargetUpdated",
            "parameters": "(contract Proxyable newTarget)",
            "lineNumber": 81
          }
        ],
        "variables": [
          {
            "name": "target",
            "type": "contract Proxyable",
            "visibility": "public",
            "lineNumber": 11
          }
        ],
        "modifiers": [
          {
            "name": "onlyTarget",
            "signature": "onlyTarget()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 76
          }
        ],
        "structs": [],
        "inherits": [
          "Owned"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/ProxyERC20.sol": {
    "imports": [
      "./Proxy.sol",
      "./interfaces/IERC20.sol"
    ],
    "contracts": {
      "ProxyERC20": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 9,
            "requires": [],
            "events": []
          },
          {
            "name": "name",
            "signature": "name() view",
            "returns": "(string)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "symbol",
            "signature": "symbol() view",
            "returns": "(string)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "decimals",
            "signature": "decimals() view",
            "returns": "(uint8)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 23,
            "requires": [],
            "events": []
          },
          {
            "name": "totalSupply",
            "signature": "totalSupply() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 33,
            "requires": [],
            "events": []
          },
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 43,
            "requires": [],
            "events": []
          },
          {
            "name": "allowance",
            "signature": "allowance(address owner, address spender) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 54,
            "requires": [],
            "events": []
          },
          {
            "name": "transfer",
            "signature": "transfer(address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 64,
            "requires": [],
            "events": []
          },
          {
            "name": "approve",
            "signature": "approve(address spender, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 84,
            "requires": [],
            "events": []
          },
          {
            "name": "transferFrom",
            "signature": "transferFrom(address from, address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 101,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Proxy",
          "IERC20"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/Proxyable.sol": {
    "imports": [
      "./Owned.sol",
      "./Proxy.sol"
    ],
    "contracts": {
      "Proxyable": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address payable _proxy)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 22,
            "requires": [
              {
                "name": "require(..., \"Owner must be set\")",
                "lineNumber": 24
              }
            ],
            "events": [
              "ProxyUpdated"
            ]
          },
          {
            "name": "setProxy",
            "signature": "setProxy(address payable _proxy)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 30,
            "requires": [],
            "events": [
              "ProxyUpdated"
            ]
          },
          {
            "name": "setIntegrationProxy",
            "signature": "setIntegrationProxy(address payable _integrationProxy)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 35,
            "requires": [],
            "events": []
          },
          {
            "name": "setMessageSender",
            "signature": "setMessageSender(address sender)",
            "returns": "()",
            "modifiers": [
              "onlyProxy"
            ],
            "visibility": "external",
            "lineNumber": 39,
            "requires": [],
            "events": []
          },
          {
            "name": "_onlyProxy",
            "signature": "_onlyProxy() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 48,
            "requires": [
              {
                "name": "require(..., \"Only the proxy can call\")",
                "lineNumber": 49
              }
            ],
            "events": []
          },
          {
            "name": "_optionalProxy",
            "signature": "_optionalProxy()",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 57,
            "requires": [],
            "events": []
          },
          {
            "name": "_optionalProxy_onlyOwner",
            "signature": "_optionalProxy_onlyOwner()",
            "returns": "()",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 69,
            "requires": [
              {
                "name": "require(..., \"Owner only function\")",
                "lineNumber": 73
              }
            ],
            "events": []
          }
        ],
        "events": [
          {
            "name": "ProxyUpdated",
            "parameters": "(address proxyAddress)",
            "lineNumber": 76
          }
        ],
        "variables": [
          {
            "name": "proxy",
            "type": "contract Proxy",
            "visibility": "public",
            "lineNumber": 14
          },
          {
            "name": "integrationProxy",
            "type": "contract Proxy",
            "visibility": "public",
            "lineNumber": 15
          },
          {
            "name": "messageSender",
            "type": "address",
            "visibility": "public",
            "lineNumber": 20
          }
        ],
        "modifiers": [
          {
            "name": "onlyProxy",
            "signature": "onlyProxy()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 43
          },
          {
            "name": "optionalProxy",
            "signature": "optionalProxy()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 52
          },
          {
            "name": "optionalProxy_onlyOwner",
            "signature": "optionalProxy_onlyOwner()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 63
          }
        ],
        "structs": [],
        "inherits": [
          "Owned"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/PurgeablePynth.sol": {
    "imports": [
      "./Pynth.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IExchangeRates.sol"
    ],
    "contracts": {
      "PurgeablePynth": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address payable _proxy, contract TokenState _tokenState, string _tokenName, string _tokenSymbol, address payable _owner, bytes32 _currencyKey, uint256 _totalSupply, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 23,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 35,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeRates",
            "signature": "exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "purge",
            "signature": "purge(address[] addresses)",
            "returns": "()",
            "modifiers": [
              "optionalProxy_onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 48,
            "requires": [
              {
                "name": "require(..., \"Cannot purge as total supply is above threshold and rate is not frozen.\")",
                "lineNumber": 54
              }
            ],
            "events": []
          },
          {
            "name": "emitPurged",
            "signature": "emitPurged(address account, uint256 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 75,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "Purged",
            "parameters": "(address account, uint256 value)",
            "lineNumber": 72
          }
        ],
        "variables": [
          {
            "name": "maxSupplyToPurgeInUSD",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 17
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 19
          },
          {
            "name": "PURGED_SIG",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 73
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Pynth"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/Pynth.sol": {
    "imports": [
      "./Owned.sol",
      "./ExternStateToken.sol",
      "./MixinResolver.sol",
      "./interfaces/IPynth.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/ISystemStatus.sol",
      "./interfaces/IFeePool.sol",
      "./interfaces/IExchanger.sol",
      "./interfaces/IIssuer.sol"
    ],
    "contracts": {
      "Pynth": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address payable _proxy, contract TokenState _tokenState, string _tokenName, string _tokenSymbol, address _owner, bytes32 _currencyKey, uint256 _totalSupply, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 37,
            "requires": [
              {
                "name": "require(..., \"_proxy cannot be 0\")",
                "lineNumber": 51
              },
              {
                "name": "require(..., \"_owner cannot be 0\")",
                "lineNumber": 52
              }
            ],
            "events": []
          },
          {
            "name": "transfer",
            "signature": "transfer(address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [
              "optionalProxy"
            ],
            "visibility": "public",
            "lineNumber": 59,
            "requires": [],
            "events": []
          },
          {
            "name": "transferAndSettle",
            "signature": "transferAndSettle(address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [
              "optionalProxy"
            ],
            "visibility": "public",
            "lineNumber": 75,
            "requires": [],
            "events": []
          },
          {
            "name": "transferFrom",
            "signature": "transferFrom(address from, address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [
              "optionalProxy"
            ],
            "visibility": "public",
            "lineNumber": 92,
            "requires": [],
            "events": []
          },
          {
            "name": "transferFromAndSettle",
            "signature": "transferFromAndSettle(address from, address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [
              "optionalProxy"
            ],
            "visibility": "public",
            "lineNumber": 102,
            "requires": [],
            "events": []
          },
          {
            "name": "_transferToFeeAddress",
            "signature": "_transferToFeeAddress(address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 127,
            "requires": [],
            "events": []
          },
          {
            "name": "issue",
            "signature": "issue(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyInternalContracts"
            ],
            "visibility": "external",
            "lineNumber": 145,
            "requires": [],
            "events": []
          },
          {
            "name": "burn",
            "signature": "burn(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyInternalContracts"
            ],
            "visibility": "external",
            "lineNumber": 149,
            "requires": [],
            "events": []
          },
          {
            "name": "_internalIssue",
            "signature": "_internalIssue(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 153,
            "requires": [],
            "events": []
          },
          {
            "name": "_internalBurn",
            "signature": "_internalBurn(address account, uint256 amount)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 160,
            "requires": [],
            "events": []
          },
          {
            "name": "setTotalSupply",
            "signature": "setTotalSupply(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "optionalProxy_onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 170,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 177,
            "requires": [],
            "events": []
          },
          {
            "name": "systemStatus",
            "signature": "systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 185,
            "requires": [],
            "events": []
          },
          {
            "name": "feePool",
            "signature": "feePool() view",
            "returns": "(contract IFeePool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 189,
            "requires": [],
            "events": []
          },
          {
            "name": "exchanger",
            "signature": "exchanger() view",
            "returns": "(contract IExchanger)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 193,
            "requires": [],
            "events": []
          },
          {
            "name": "issuer",
            "signature": "issuer() view",
            "returns": "(contract IIssuer)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 197,
            "requires": [],
            "events": []
          },
          {
            "name": "_ensureCanTransfer",
            "signature": "_ensureCanTransfer(address from, uint256 value) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 201,
            "requires": [
              {
                "name": "require(..., \"Cannot transfer during waiting period\")",
                "lineNumber": 202
              },
              {
                "name": "require(..., \"Insufficient balance after any settlement owing\")",
                "lineNumber": 203
              }
            ],
            "events": []
          },
          {
            "name": "transferablePynths",
            "signature": "transferablePynths(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 207,
            "requires": [],
            "events": []
          },
          {
            "name": "_internalTransferFrom",
            "signature": "_internalTransferFrom(address from, address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 224,
            "requires": [],
            "events": []
          },
          {
            "name": "emitIssued",
            "signature": "emitIssued(address account, uint256 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 254,
            "requires": [],
            "events": []
          },
          {
            "name": "emitBurned",
            "signature": "emitBurned(address account, uint256 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 261,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "Issued",
            "parameters": "(address account, uint256 value)",
            "lineNumber": 251
          },
          {
            "name": "Burned",
            "parameters": "(address account, uint256 value)",
            "lineNumber": 258
          }
        ],
        "variables": [
          {
            "name": "currencyKey",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 21
          },
          {
            "name": "DECIMALS",
            "type": "uint8",
            "visibility": "public",
            "lineNumber": 23
          },
          {
            "name": "FEE_ADDRESS",
            "type": "address",
            "visibility": "public",
            "lineNumber": 26
          },
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 30
          },
          {
            "name": "CONTRACT_EXCHANGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 31
          },
          {
            "name": "CONTRACT_ISSUER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 32
          },
          {
            "name": "CONTRACT_FEEPOOL",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 33
          },
          {
            "name": "ISSUED_SIG",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 252
          },
          {
            "name": "BURNED_SIG",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 259
          }
        ],
        "modifiers": [
          {
            "name": "onlyInternalContracts",
            "signature": "onlyInternalContracts()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 241
          }
        ],
        "structs": [],
        "inherits": [
          "Owned",
          "IERC20",
          "ExternStateToken",
          "MixinResolver",
          "IPynth"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/PynthUtil.sol": {
    "imports": [
      "./interfaces/IPynth.sol",
      "./interfaces/IPeriFinance.sol",
      "./interfaces/IExchangeRates.sol",
      "./interfaces/IAddressResolver.sol",
      "./interfaces/IERC20.sol"
    ],
    "contracts": {
      "PynthUtil": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "_periFinance",
            "signature": "_periFinance() view",
            "returns": "(contract IPeriFinance)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "_exchangeRates",
            "signature": "_exchangeRates() view",
            "returns": "(contract IExchangeRates)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 26,
            "requires": [],
            "events": []
          },
          {
            "name": "totalPynthsInKey",
            "signature": "totalPynthsInKey(address account, bytes32 currencyKey) view",
            "returns": "(uint256 total)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 30,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthsBalances",
            "signature": "pynthsBalances(address account) view",
            "returns": "(bytes32[], uint256[], uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 45,
            "requires": [],
            "events": []
          },
          {
            "name": "frozenPynths",
            "signature": "frozenPynths() view",
            "returns": "(bytes32[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 69,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthsRates",
            "signature": "pynthsRates() view",
            "returns": "(bytes32[], uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 83,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthsTotalSupplies",
            "signature": "pynthsTotalSupplies() view",
            "returns": "(bytes32[], uint256[], uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 88,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "addressResolverProxy",
            "type": "contract IAddressResolver",
            "visibility": "public",
            "lineNumber": 12
          },
          {
            "name": "CONTRACT_PERIFINANCE",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 14
          },
          {
            "name": "CONTRACT_EXRATES",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 15
          },
          {
            "name": "PUSD",
            "type": "bytes32",
            "visibility": "internal",
            "lineNumber": 16
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/ReadProxy.sol": {
    "imports": [
      "./Owned.sol"
    ],
    "contracts": {
      "ReadProxy": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 11,
            "requires": [],
            "events": []
          },
          {
            "name": "setTarget",
            "signature": "setTarget(address _target)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": [
              "TargetUpdated"
            ]
          },
          {
            "name": "constructor",
            "signature": "constructor()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "TargetUpdated",
            "parameters": "(address newTarget)",
            "lineNumber": 35
          }
        ],
        "variables": [
          {
            "name": "target",
            "type": "address",
            "visibility": "public",
            "lineNumber": 9
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/RealtimeDebtCache.sol": {
    "imports": [
      "./BaseDebtCache.sol"
    ],
    "contracts": {
      "RealtimeDebtCache": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "debtSnapshotStaleTime",
            "signature": "debtSnapshotStaleTime() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "cachedDebt",
            "signature": "cachedDebt() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "cachedPynthDebt",
            "signature": "cachedPynthDebt(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheTimestamp",
            "signature": "cacheTimestamp() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 28,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheStale",
            "signature": "cacheStale() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 32,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheInvalid",
            "signature": "cacheInvalid() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 36,
            "requires": [],
            "events": []
          },
          {
            "name": "cachedPynthDebts",
            "signature": "cachedPynthDebts(bytes32[] currencyKeys) view",
            "returns": "(uint256[] debtValues)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 41,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheInfo",
            "signature": "cacheInfo() view",
            "returns": "(uint256 debt, uint256 timestamp, bool isInvalid, bool isStale)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "purgeCachedPynthDebt",
            "signature": "purgeCachedPynthDebt(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 63,
            "requires": [],
            "events": []
          },
          {
            "name": "takeDebtSnapshot",
            "signature": "takeDebtSnapshot()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 65,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebts",
            "signature": "updateCachedPynthDebts(bytes32[] currencyKeys)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 67,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebtWithRate",
            "signature": "updateCachedPynthDebtWithRate(bytes32 currencyKey, uint256 currencyRate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 69,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebtsWithRates",
            "signature": "updateCachedPynthDebtsWithRates(bytes32[] currencyKeys, uint256[] currencyRates)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 71,
            "requires": [],
            "events": []
          },
          {
            "name": "updateDebtCacheValidity",
            "signature": "updateDebtCacheValidity(bool currentlyInvalid)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 73,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "BaseDebtCache"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/RewardEscrow.sol": {
    "imports": [
      "./Owned.sol",
      "./interfaces/IRewardEscrow.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IFeePool.sol",
      "./interfaces/IPeriFinance.sol"
    ],
    "contracts": {
      "RewardEscrow": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, contract IPeriFinance _periFinance, contract IFeePool _feePool)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "setPeriFinance",
            "signature": "setPeriFinance(contract IPeriFinance _periFinance)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 60,
            "requires": [],
            "events": [
              "PeriFinanceUpdated"
            ]
          },
          {
            "name": "setFeePool",
            "signature": "setFeePool(contract IFeePool _feePool)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 69,
            "requires": [],
            "events": [
              "FeePoolUpdated"
            ]
          },
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 79,
            "requires": [],
            "events": []
          },
          {
            "name": "_numVestingEntries",
            "signature": "_numVestingEntries(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 83,
            "requires": [],
            "events": []
          },
          {
            "name": "numVestingEntries",
            "signature": "numVestingEntries(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 90,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingScheduleEntry",
            "signature": "getVestingScheduleEntry(address account, uint256 index) view",
            "returns": "(uint256[2])",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 98,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingTime",
            "signature": "getVestingTime(address account, uint256 index) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 105,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingQuantity",
            "signature": "getVestingQuantity(address account, uint256 index) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 112,
            "requires": [],
            "events": []
          },
          {
            "name": "getNextVestingIndex",
            "signature": "getNextVestingIndex(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 119,
            "requires": [],
            "events": []
          },
          {
            "name": "getNextVestingEntry",
            "signature": "getNextVestingEntry(address account) view",
            "returns": "(uint256[2])",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 132,
            "requires": [],
            "events": []
          },
          {
            "name": "getNextVestingTime",
            "signature": "getNextVestingTime(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 143,
            "requires": [],
            "events": []
          },
          {
            "name": "getNextVestingQuantity",
            "signature": "getNextVestingQuantity(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 150,
            "requires": [],
            "events": []
          },
          {
            "name": "checkAccountSchedule",
            "signature": "checkAccountSchedule(address account) view",
            "returns": "(uint256[520])",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 160,
            "requires": [],
            "events": []
          },
          {
            "name": "_appendVestingEntry",
            "signature": "_appendVestingEntry(address account, uint256 quantity)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 173,
            "requires": [
              {
                "name": "require(..., \"Quantity cannot be zero\")",
                "lineNumber": 175
              },
              {
                "name": "require(..., \"Must be enough balance in the contract to provide for the vesting entry\")",
                "lineNumber": 179
              },
              {
                "name": "require(..., \"Vesting schedule is too long\")",
                "lineNumber": 186
              }
            ],
            "events": [
              "VestingEntryCreated"
            ]
          },
          {
            "name": "appendVestingEntry",
            "signature": "appendVestingEntry(address account, uint256 quantity)",
            "returns": "()",
            "modifiers": [
              "onlyFeePool"
            ],
            "visibility": "external",
            "lineNumber": 217,
            "requires": [],
            "events": []
          },
          {
            "name": "vest",
            "signature": "vest()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 224,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "PeriFinanceUpdated",
            "parameters": "(address newPeriFinance)",
            "lineNumber": 260
          },
          {
            "name": "FeePoolUpdated",
            "parameters": "(address newFeePool)",
            "lineNumber": 262
          },
          {
            "name": "Vested",
            "parameters": "(address beneficiary, uint256 time, uint256 value)",
            "lineNumber": 264
          },
          {
            "name": "VestingEntryCreated",
            "parameters": "(address beneficiary, uint256 time, uint256 value)",
            "lineNumber": 266
          }
        ],
        "variables": [
          {
            "name": "periFinance",
            "type": "contract IPeriFinance",
            "visibility": "public",
            "lineNumber": 20
          },
          {
            "name": "feePool",
            "type": "contract IFeePool",
            "visibility": "public",
            "lineNumber": 22
          },
          {
            "name": "vestingSchedules",
            "type": "mapping(address => uint256[2][])",
            "visibility": "public",
            "lineNumber": 26
          },
          {
            "name": "totalEscrowedAccountBalance",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 29
          },
          {
            "name": "totalVestedAccountBalance",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 32
          },
          {
            "name": "totalEscrowedBalance",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 35
          },
          {
            "name": "TIME_INDEX",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 37
          },
          {
            "name": "QUANTITY_INDEX",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 38
          },
          {
            "name": "MAX_VESTING_ENTRIES",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 42
          }
        ],
        "modifiers": [
          {
            "name": "onlyFeePool",
            "signature": "onlyFeePool()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 251
          }
        ],
        "structs": [],
        "inherits": [
          "Owned",
          "IRewardEscrow"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/RewardEscrowV2.sol": {
    "imports": [
      "./BaseRewardEscrowV2.sol",
      "./interfaces/IRewardEscrow.sol",
      "./interfaces/ISystemStatus.sol"
    ],
    "contracts": {
      "RewardEscrowV2": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 25,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceBridgeToOptimism",
            "signature": "periFinanceBridgeToOptimism() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "oldRewardEscrow",
            "signature": "oldRewardEscrow() view",
            "returns": "(contract IRewardEscrow)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "systemStatus",
            "signature": "systemStatus() view",
            "returns": "(contract ISystemStatus)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "setMigrateEntriesThresholdAmount",
            "signature": "setMigrateEntriesThresholdAmount(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 58,
            "requires": [],
            "events": [
              "MigrateEntriesThresholdAmountUpdated"
            ]
          },
          {
            "name": "migrateVestingSchedule",
            "signature": "migrateVestingSchedule(address addressToMigrate)",
            "returns": "()",
            "modifiers": [
              "systemActive"
            ],
            "visibility": "external",
            "lineNumber": 64,
            "requires": [
              {
                "name": "require(..., \"No escrow migration pending\")",
                "lineNumber": 67
              },
              {
                "name": "require(..., \"Address escrow balance is 0\")",
                "lineNumber": 68
              }
            ],
            "events": []
          },
          {
            "name": "importVestingSchedule",
            "signature": "importVestingSchedule(address[] accounts, uint256[] escrowAmounts)",
            "returns": "()",
            "modifiers": [
              "onlyDuringSetup",
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 116,
            "requires": [
              {
                "name": "require(..., \"Account and escrowAmounts Length mismatch\")",
                "lineNumber": 121
              }
            ],
            "events": []
          },
          {
            "name": "migrateAccountEscrowBalances",
            "signature": "migrateAccountEscrowBalances(address[] accounts, uint256[] escrowBalances, uint256[] vestedBalances)",
            "returns": "()",
            "modifiers": [
              "onlyDuringSetup",
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 150,
            "requires": [
              {
                "name": "require(..., \"Number of accounts and balances don't match\")",
                "lineNumber": 155
              },
              {
                "name": "require(..., \"Number of accounts and vestedBalances don't match\")",
                "lineNumber": 156
              }
            ],
            "events": []
          },
          {
            "name": "_importVestingEntry",
            "signature": "_importVestingEntry(address account, struct VestingEntries.VestingEntry entry)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 181,
            "requires": [],
            "events": [
              "ImportedVestingEntry"
            ]
          },
          {
            "name": "burnForMigration",
            "signature": "burnForMigration(address account, uint256[] entryIDs)",
            "returns": "(uint256 escrowedAccountBalance, struct VestingEntries.VestingEntry[] vestingEntries)",
            "modifiers": [
              "onlyPeriFinanceBridge"
            ],
            "visibility": "external",
            "lineNumber": 190,
            "requires": [
              {
                "name": "require(..., \"Entry IDs required\")",
                "lineNumber": 195
              }
            ],
            "events": [
              "BurnedForMigrationToL2"
            ]
          }
        ],
        "events": [
          {
            "name": "MigratedAccountEscrow",
            "parameters": "(address account, uint256 escrowedAmount, uint256 vestedAmount, uint256 time)",
            "lineNumber": 240
          },
          {
            "name": "ImportedVestingSchedule",
            "parameters": "(address account, uint256 time, uint256 escrowAmount)",
            "lineNumber": 241
          },
          {
            "name": "BurnedForMigrationToL2",
            "parameters": "(address account, uint256[] entryIDs, uint256 escrowedAmountMigrated, uint256 time)",
            "lineNumber": 242
          },
          {
            "name": "ImportedVestingEntry",
            "parameters": "(address account, uint256 entryID, uint256 escrowAmount, uint256 endTime)",
            "lineNumber": 243
          },
          {
            "name": "MigrateEntriesThresholdAmountUpdated",
            "parameters": "(uint256 newAmount)",
            "lineNumber": 244
          }
        ],
        "variables": [
          {
            "name": "totalBalancePendingMigration",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 13
          },
          {
            "name": "migrateEntriesThresholdAmount",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 15
          },
          {
            "name": "CONTRACT_PERIFINANCE_BRIDGE_OPTIMISM",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 19
          },
          {
            "name": "CONTRACT_REWARD_ESCROW",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 20
          },
          {
            "name": "CONTRACT_SYSTEMSTATUS",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 21
          },
          {
            "name": "TIME_INDEX",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 52
          },
          {
            "name": "QUANTITY_INDEX",
            "type": "uint256",
            "visibility": "internal",
            "lineNumber": 53
          }
        ],
        "modifiers": [
          {
            "name": "onlyPeriFinanceBridge",
            "signature": "onlyPeriFinanceBridge()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 229
          },
          {
            "name": "systemActive",
            "signature": "systemActive()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 234
          }
        ],
        "structs": [],
        "inherits": [
          "BaseRewardEscrowV2"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/RewardsDistribution.sol": {
    "imports": [
      "./Owned.sol",
      "./interfaces/IRewardsDistribution.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IERC20.sol",
      "./interfaces/IFeePool.sol",
      "./interfaces/IRewardsDistribution.sol"
    ],
    "contracts": {
      "RewardsDistribution": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _authority, address _periFinanceProxy, address _rewardEscrow, address _feePoolProxy)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 49,
            "requires": [],
            "events": []
          },
          {
            "name": "setPeriFinanceProxy",
            "signature": "setPeriFinanceProxy(address _periFinanceProxy)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 64,
            "requires": [],
            "events": []
          },
          {
            "name": "setRewardEscrow",
            "signature": "setRewardEscrow(address _rewardEscrow)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 68,
            "requires": [],
            "events": []
          },
          {
            "name": "setFeePoolProxy",
            "signature": "setFeePoolProxy(address _feePoolProxy)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 72,
            "requires": [],
            "events": []
          },
          {
            "name": "setAuthority",
            "signature": "setAuthority(address _authority)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 80,
            "requires": [],
            "events": []
          },
          {
            "name": "addRewardDistribution",
            "signature": "addRewardDistribution(address destination, uint256 amount)",
            "returns": "(bool)",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 94,
            "requires": [
              {
                "name": "require(..., \"Cant add a zero address\")",
                "lineNumber": 95
              },
              {
                "name": "require(..., \"Cant add a zero amount\")",
                "lineNumber": 96
              }
            ],
            "events": [
              "RewardDistributionAdded"
            ]
          },
          {
            "name": "removeRewardDistribution",
            "signature": "removeRewardDistribution(uint256 index)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 110,
            "requires": [
              {
                "name": "require(..., \"index out of bounds\")",
                "lineNumber": 111
              }
            ],
            "events": []
          },
          {
            "name": "editRewardDistribution",
            "signature": "editRewardDistribution(uint256 index, address destination, uint256 amount)",
            "returns": "(bool)",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 131,
            "requires": [
              {
                "name": "require(..., \"index out of bounds\")",
                "lineNumber": 136
              }
            ],
            "events": []
          },
          {
            "name": "distributeRewards",
            "signature": "distributeRewards(uint256 amount)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 144,
            "requires": [
              {
                "name": "require(..., \"Nothing to distribute\")",
                "lineNumber": 145
              },
              {
                "name": "require(..., \"Caller is not authorised\")",
                "lineNumber": 146
              },
              {
                "name": "require(..., \"RewardEscrow is not set\")",
                "lineNumber": 147
              },
              {
                "name": "require(..., \"PeriFinanceProxy is not set\")",
                "lineNumber": 148
              },
              {
                "name": "require(..., \"FeePoolProxy is not set\")",
                "lineNumber": 149
              },
              {
                "name": "require(..., \"RewardsDistribution contract does not have enough tokens to distribute\")",
                "lineNumber": 150
              }
            ],
            "events": [
              "RewardsDistributed"
            ]
          },
          {
            "name": "distributionsLength",
            "signature": "distributionsLength() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 192,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "RewardDistributionAdded",
            "parameters": "(uint256 index, address destination, uint256 amount)",
            "lineNumber": 198
          },
          {
            "name": "RewardsDistributed",
            "parameters": "(uint256 amount)",
            "lineNumber": 199
          }
        ],
        "variables": [
          {
            "name": "authority",
            "type": "address",
            "visibility": "public",
            "lineNumber": 23
          },
          {
            "name": "periFinanceProxy",
            "type": "address",
            "visibility": "public",
            "lineNumber": 28
          },
          {
            "name": "rewardEscrow",
            "type": "address",
            "visibility": "public",
            "lineNumber": 33
          },
          {
            "name": "feePoolProxy",
            "type": "address",
            "visibility": "public",
            "lineNumber": 38
          },
          {
            "name": "distributions",
            "type": "struct IRewardsDistribution.DistributionData[]",
            "visibility": "public",
            "lineNumber": 43
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "IRewardsDistribution"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/RewardsDistributionRecipient.sol": {
    "imports": [
      "./Owned.sol"
    ],
    "contracts": {
      "RewardsDistributionRecipient": {
        "functions": [
          {
            "name": "notifyRewardAmount",
            "signature": "notifyRewardAmount(uint256 reward)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "setRewardsDistribution",
            "signature": "setRewardsDistribution(address _rewardsDistribution)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "rewardsDistribution",
            "type": "address",
            "visibility": "public",
            "lineNumber": 8
          }
        ],
        "modifiers": [
          {
            "name": "onlyRewardsDistribution",
            "signature": "onlyRewardsDistribution()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 12
          }
        ],
        "structs": [],
        "inherits": [
          "Owned"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/SafeDecimalMath.sol": {
    "imports": [
      "openzeppelin-solidity-2.3.0/contracts/math/SafeMath.sol"
    ],
    "contracts": {},
    "libraries": {
      "SafeDecimalMath": {
        "functions": [
          {
            "name": "unit",
            "signature": "unit() pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          },
          {
            "name": "preciseUnit",
            "signature": "preciseUnit() pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 31,
            "requires": [],
            "events": []
          },
          {
            "name": "multiplyDecimal",
            "signature": "multiplyDecimal(uint256 x, uint256 y) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 44,
            "requires": [],
            "events": []
          },
          {
            "name": "_multiplyDecimalRound",
            "signature": "_multiplyDecimalRound(uint256 x, uint256 y, uint256 precisionUnit) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 61,
            "requires": [],
            "events": []
          },
          {
            "name": "multiplyDecimalRoundPrecise",
            "signature": "multiplyDecimalRoundPrecise(uint256 x, uint256 y) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 88,
            "requires": [],
            "events": []
          },
          {
            "name": "multiplyDecimalRound",
            "signature": "multiplyDecimalRound(uint256 x, uint256 y) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 104,
            "requires": [],
            "events": []
          },
          {
            "name": "divideDecimal",
            "signature": "divideDecimal(uint256 x, uint256 y) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 117,
            "requires": [],
            "events": []
          },
          {
            "name": "_divideDecimalRound",
            "signature": "_divideDecimalRound(uint256 x, uint256 y, uint256 precisionUnit) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "private",
            "lineNumber": 130,
            "requires": [],
            "events": []
          },
          {
            "name": "divideDecimalRound",
            "signature": "divideDecimalRound(uint256 x, uint256 y) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 152,
            "requires": [],
            "events": []
          },
          {
            "name": "divideDecimalRoundPrecise",
            "signature": "divideDecimalRoundPrecise(uint256 x, uint256 y) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 164,
            "requires": [],
            "events": []
          },
          {
            "name": "decimalToPreciseDecimal",
            "signature": "decimalToPreciseDecimal(uint256 i) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 171,
            "requires": [],
            "events": []
          },
          {
            "name": "preciseDecimalToDecimal",
            "signature": "preciseDecimalToDecimal(uint256 i) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 178,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "decimals",
            "type": "uint8",
            "visibility": "public",
            "lineNumber": 11
          },
          {
            "name": "highPrecisionDecimals",
            "type": "uint8",
            "visibility": "public",
            "lineNumber": 12
          },
          {
            "name": "UNIT",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 15
          },
          {
            "name": "PRECISE_UNIT",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 18
          },
          {
            "name": "UNIT_TO_HIGH_PRECISION_CONVERSION_FACTOR",
            "type": "uint256",
            "visibility": "private",
            "lineNumber": 19
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    },
    "interfaces": {}
  },
  "contracts/ShortingRewards.sol": {
    "imports": [
      "openzeppelin-solidity-2.3.0/contracts/math/Math.sol",
      "openzeppelin-solidity-2.3.0/contracts/math/SafeMath.sol",
      "openzeppelin-solidity-2.3.0/contracts/token/ERC20/ERC20Detailed.sol",
      "openzeppelin-solidity-2.3.0/contracts/token/ERC20/SafeERC20.sol",
      "openzeppelin-solidity-2.3.0/contracts/utils/ReentrancyGuard.sol",
      "./interfaces/IShortingRewards.sol",
      "./RewardsDistributionRecipient.sol",
      "./Pausable.sol",
      "./MixinResolver.sol",
      "./interfaces/ICollateralErc20.sol"
    ],
    "contracts": {
      "ShortingRewards": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver, address _rewardsDistribution, address _rewardsToken)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 45,
            "requires": [],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 55,
            "requires": [],
            "events": []
          },
          {
            "name": "_short",
            "signature": "_short() view",
            "returns": "(contract ICollateralErc20)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 60,
            "requires": [],
            "events": []
          },
          {
            "name": "totalSupply",
            "signature": "totalSupply() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 66,
            "requires": [],
            "events": []
          },
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 70,
            "requires": [],
            "events": []
          },
          {
            "name": "lastTimeRewardApplicable",
            "signature": "lastTimeRewardApplicable() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 74,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardPerToken",
            "signature": "rewardPerToken() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 78,
            "requires": [],
            "events": []
          },
          {
            "name": "earned",
            "signature": "earned(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 88,
            "requires": [],
            "events": []
          },
          {
            "name": "getRewardForDuration",
            "signature": "getRewardForDuration() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 92,
            "requires": [],
            "events": []
          },
          {
            "name": "enrol",
            "signature": "enrol(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyShortContract",
              "nonReentrant",
              "notPaused",
              "updateReward"
            ],
            "visibility": "external",
            "lineNumber": 99,
            "requires": [
              {
                "name": "require(..., \"Cannot stake 0\")",
                "lineNumber": 100
              }
            ],
            "events": [
              "Enrol"
            ]
          },
          {
            "name": "withdraw",
            "signature": "withdraw(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyShortContract",
              "nonReentrant",
              "updateReward"
            ],
            "visibility": "external",
            "lineNumber": 107,
            "requires": [
              {
                "name": "require(..., \"Cannot withdraw 0\")",
                "lineNumber": 108
              }
            ],
            "events": [
              "Withdrawn"
            ]
          },
          {
            "name": "getReward",
            "signature": "getReward(address account)",
            "returns": "()",
            "modifiers": [
              "onlyShortContract",
              "nonReentrant",
              "updateReward"
            ],
            "visibility": "external",
            "lineNumber": 115,
            "requires": [],
            "events": []
          },
          {
            "name": "notifyRewardAmount",
            "signature": "notifyRewardAmount(uint256 reward)",
            "returns": "()",
            "modifiers": [
              "onlyRewardsDistribution",
              "updateReward"
            ],
            "visibility": "external",
            "lineNumber": 126,
            "requires": [
              {
                "name": "require(..., \"Provided reward too high\")",
                "lineNumber": 140
              }
            ],
            "events": [
              "RewardAdded"
            ]
          },
          {
            "name": "setRewardsDuration",
            "signature": "setRewardsDuration(uint256 _rewardsDuration)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 147,
            "requires": [
              {
                "name": "require(..., \"Previous rewards period must be complete before changing the duration for the new period\")",
                "lineNumber": 148
              }
            ],
            "events": [
              "RewardsDurationUpdated"
            ]
          }
        ],
        "events": [
          {
            "name": "RewardAdded",
            "parameters": "(uint256 reward)",
            "lineNumber": 176
          },
          {
            "name": "Enrol",
            "parameters": "(address user, uint256 amount)",
            "lineNumber": 177
          },
          {
            "name": "Withdrawn",
            "parameters": "(address user, uint256 amount)",
            "lineNumber": 178
          },
          {
            "name": "RewardPaid",
            "parameters": "(address user, uint256 reward)",
            "lineNumber": 179
          },
          {
            "name": "RewardsDurationUpdated",
            "parameters": "(uint256 newDuration)",
            "lineNumber": 180
          }
        ],
        "variables": [
          {
            "name": "rewardsToken",
            "type": "contract IERC20",
            "visibility": "public",
            "lineNumber": 26
          },
          {
            "name": "periodFinish",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 27
          },
          {
            "name": "rewardRate",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 28
          },
          {
            "name": "rewardsDuration",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 29
          },
          {
            "name": "lastUpdateTime",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 30
          },
          {
            "name": "rewardPerTokenStored",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 31
          },
          {
            "name": "userRewardPerTokenPaid",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 33
          },
          {
            "name": "rewards",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 34
          },
          {
            "name": "_totalSupply",
            "type": "uint256",
            "visibility": "private",
            "lineNumber": 36
          },
          {
            "name": "_balances",
            "type": "mapping(address => uint256)",
            "visibility": "private",
            "lineNumber": 37
          },
          {
            "name": "CONTRACT_SHORT",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 41
          }
        ],
        "modifiers": [
          {
            "name": "updateReward",
            "signature": "updateReward(address account)",
            "visibility": "internal",
            "parameters": "(address account)",
            "lineNumber": 158
          },
          {
            "name": "onlyShortContract",
            "signature": "onlyShortContract()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 168
          }
        ],
        "structs": [],
        "inherits": [
          "IShortingRewards",
          "RewardsDistributionRecipient",
          "ReentrancyGuard",
          "Pausable",
          "MixinResolver"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/StakingRewards.sol": {
    "imports": [
      "openzeppelin-solidity-2.3.0/contracts/math/Math.sol",
      "openzeppelin-solidity-2.3.0/contracts/math/SafeMath.sol",
      "openzeppelin-solidity-2.3.0/contracts/token/ERC20/ERC20Detailed.sol",
      "openzeppelin-solidity-2.3.0/contracts/token/ERC20/SafeERC20.sol",
      "openzeppelin-solidity-2.3.0/contracts/utils/ReentrancyGuard.sol",
      "./interfaces/IStakingRewards.sol",
      "./RewardsDistributionRecipient.sol",
      "./Pausable.sol"
    ],
    "contracts": {
      "StakingRewards": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _rewardsDistribution, address _rewardsToken, address _stakingToken)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 37,
            "requires": [],
            "events": []
          },
          {
            "name": "totalSupply",
            "signature": "totalSupply() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 50,
            "requires": [],
            "events": []
          },
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 54,
            "requires": [],
            "events": []
          },
          {
            "name": "lastTimeRewardApplicable",
            "signature": "lastTimeRewardApplicable() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 58,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardPerToken",
            "signature": "rewardPerToken() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 62,
            "requires": [],
            "events": []
          },
          {
            "name": "earned",
            "signature": "earned(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 72,
            "requires": [],
            "events": []
          },
          {
            "name": "getRewardForDuration",
            "signature": "getRewardForDuration() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 76,
            "requires": [],
            "events": []
          },
          {
            "name": "stake",
            "signature": "stake(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "nonReentrant",
              "notPaused",
              "updateReward"
            ],
            "visibility": "external",
            "lineNumber": 82,
            "requires": [
              {
                "name": "require(..., \"Cannot stake 0\")",
                "lineNumber": 83
              }
            ],
            "events": [
              "Staked"
            ]
          },
          {
            "name": "withdraw",
            "signature": "withdraw(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "nonReentrant",
              "updateReward"
            ],
            "visibility": "public",
            "lineNumber": 90,
            "requires": [
              {
                "name": "require(..., \"Cannot withdraw 0\")",
                "lineNumber": 91
              }
            ],
            "events": [
              "Withdrawn"
            ]
          },
          {
            "name": "getReward",
            "signature": "getReward()",
            "returns": "()",
            "modifiers": [
              "nonReentrant",
              "updateReward"
            ],
            "visibility": "public",
            "lineNumber": 98,
            "requires": [],
            "events": []
          },
          {
            "name": "exit",
            "signature": "exit()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 107,
            "requires": [],
            "events": []
          },
          {
            "name": "notifyRewardAmount",
            "signature": "notifyRewardAmount(uint256 reward)",
            "returns": "()",
            "modifiers": [
              "onlyRewardsDistribution",
              "updateReward"
            ],
            "visibility": "external",
            "lineNumber": 114,
            "requires": [
              {
                "name": "require(..., \"Provided reward too high\")",
                "lineNumber": 128
              }
            ],
            "events": [
              "RewardAdded"
            ]
          },
          {
            "name": "updatePeriodFinish",
            "signature": "updatePeriodFinish(uint256 timestamp)",
            "returns": "()",
            "modifiers": [
              "onlyOwner",
              "updateReward"
            ],
            "visibility": "external",
            "lineNumber": 136,
            "requires": [],
            "events": []
          },
          {
            "name": "recoverERC20",
            "signature": "recoverERC20(address tokenAddress, uint256 tokenAmount)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 141,
            "requires": [
              {
                "name": "require(..., \"Cannot withdraw the staking token\")",
                "lineNumber": 142
              }
            ],
            "events": [
              "Recovered"
            ]
          },
          {
            "name": "setRewardsDuration",
            "signature": "setRewardsDuration(uint256 _rewardsDuration)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 147,
            "requires": [
              {
                "name": "require(..., \"Previous rewards period must be complete before changing the duration for the new period\")",
                "lineNumber": 148
              }
            ],
            "events": [
              "RewardsDurationUpdated"
            ]
          }
        ],
        "events": [
          {
            "name": "RewardAdded",
            "parameters": "(uint256 reward)",
            "lineNumber": 170
          },
          {
            "name": "Staked",
            "parameters": "(address user, uint256 amount)",
            "lineNumber": 171
          },
          {
            "name": "Withdrawn",
            "parameters": "(address user, uint256 amount)",
            "lineNumber": 172
          },
          {
            "name": "RewardPaid",
            "parameters": "(address user, uint256 reward)",
            "lineNumber": 173
          },
          {
            "name": "RewardsDurationUpdated",
            "parameters": "(uint256 newDuration)",
            "lineNumber": 174
          },
          {
            "name": "Recovered",
            "parameters": "(address token, uint256 amount)",
            "lineNumber": 175
          }
        ],
        "variables": [
          {
            "name": "rewardsToken",
            "type": "contract IERC20",
            "visibility": "public",
            "lineNumber": 21
          },
          {
            "name": "stakingToken",
            "type": "contract IERC20",
            "visibility": "public",
            "lineNumber": 22
          },
          {
            "name": "periodFinish",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 23
          },
          {
            "name": "rewardRate",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 24
          },
          {
            "name": "rewardsDuration",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 25
          },
          {
            "name": "lastUpdateTime",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 26
          },
          {
            "name": "rewardPerTokenStored",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 27
          },
          {
            "name": "userRewardPerTokenPaid",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 29
          },
          {
            "name": "rewards",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 30
          },
          {
            "name": "_totalSupply",
            "type": "uint256",
            "visibility": "private",
            "lineNumber": 32
          },
          {
            "name": "_balances",
            "type": "mapping(address => uint256)",
            "visibility": "private",
            "lineNumber": 33
          }
        ],
        "modifiers": [
          {
            "name": "updateReward",
            "signature": "updateReward(address account)",
            "visibility": "internal",
            "parameters": "(address account)",
            "lineNumber": 158
          }
        ],
        "structs": [],
        "inherits": [
          "IStakingRewards",
          "RewardsDistributionRecipient",
          "ReentrancyGuard",
          "Pausable"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/StakingStateUSDC.sol": {
    "imports": [
      "./SafeDecimalMath.sol",
      "./State.sol",
      "./Owned.sol",
      "./interfaces/IERC20.sol"
    ],
    "contracts": {
      "StakingStateUSDC": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _associatedContract, address _usdcAddress)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "userStakingShare",
            "signature": "userStakingShare(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 35,
            "requires": [],
            "events": []
          },
          {
            "name": "decimals",
            "signature": "decimals() pure",
            "returns": "(uint8)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 44,
            "requires": [],
            "events": []
          },
          {
            "name": "hasStaked",
            "signature": "hasStaked(address _account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 50,
            "requires": [],
            "events": []
          },
          {
            "name": "usdc",
            "signature": "usdc() view",
            "returns": "(contract IERC20)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 56,
            "requires": [
              {
                "name": "require(..., \"USDC address is empty\")",
                "lineNumber": 59
              }
            ],
            "events": []
          },
          {
            "name": "usdcAddress",
            "signature": "usdcAddress() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 65,
            "requires": [],
            "events": []
          },
          {
            "name": "setUSDCAddress",
            "signature": "setUSDCAddress(address _usdcAddress)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 74,
            "requires": [
              {
                "name": "require(..., \"Address should not be empty\")",
                "lineNumber": 77
              }
            ],
            "events": []
          },
          {
            "name": "stake",
            "signature": "stake(address _account, uint256 _amount)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 83,
            "requires": [],
            "events": [
              "Staking"
            ]
          },
          {
            "name": "unstake",
            "signature": "unstake(address _account, uint256 _amount)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 96,
            "requires": [
              {
                "name": "require(..., \"User doesn't have enough staked amount\")",
                "lineNumber": 99
              },
              {
                "name": "require(..., \"Not enough staked amount to withdraw\")",
                "lineNumber": 101
              }
            ],
            "events": [
              "Unstaking"
            ]
          },
          {
            "name": "refund",
            "signature": "refund(address _account, uint256 _amount)",
            "returns": "(bool)",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 114,
            "requires": [],
            "events": []
          },
          {
            "name": "_incrementTotalStaker",
            "signature": "_incrementTotalStaker()",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 124,
            "requires": [],
            "events": []
          },
          {
            "name": "_decrementTotalStaker",
            "signature": "_decrementTotalStaker()",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 129,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "Staking",
            "parameters": "(address account, uint256 amount, uint256 percentage)",
            "lineNumber": 137
          },
          {
            "name": "Unstaking",
            "parameters": "(address account, uint256 amount, uint256 percentage)",
            "lineNumber": 138
          }
        ],
        "variables": [
          {
            "name": "USDC_ADDRESS",
            "type": "address",
            "visibility": "private",
            "lineNumber": 13
          },
          {
            "name": "stakedAmountOf",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 15
          },
          {
            "name": "totalStakerCount",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 17
          },
          {
            "name": "totalStakedAmount",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 19
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "State"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/State.sol": {
    "imports": [
      "./Owned.sol"
    ],
    "contracts": {
      "State": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _associatedContract)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 12,
            "requires": [
              {
                "name": "require(..., \"Owner must be set\")",
                "lineNumber": 14
              }
            ],
            "events": [
              "AssociatedContractUpdated"
            ]
          },
          {
            "name": "setAssociatedContract",
            "signature": "setAssociatedContract(address _associatedContract)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 23,
            "requires": [],
            "events": [
              "AssociatedContractUpdated"
            ]
          }
        ],
        "events": [
          {
            "name": "AssociatedContractUpdated",
            "parameters": "(address associatedContract)",
            "lineNumber": 37
          }
        ],
        "variables": [
          {
            "name": "associatedContract",
            "type": "address",
            "visibility": "public",
            "lineNumber": 10
          }
        ],
        "modifiers": [
          {
            "name": "onlyAssociatedContract",
            "signature": "onlyAssociatedContract()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 30
          }
        ],
        "structs": [],
        "inherits": [
          "Owned"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/SupplySchedule.sol": {
    "imports": [
      "./Owned.sol",
      "./interfaces/ISupplySchedule.sol",
      "./SafeDecimalMath.sol",
      "./Math.sol",
      "./Proxy.sol",
      "./interfaces/IPeriFinance.sol",
      "./interfaces/IERC20.sol"
    ],
    "contracts": {
      "SupplySchedule": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, uint256 _lastMintEvent, uint256 _currentWeek)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 56,
            "requires": [],
            "events": []
          },
          {
            "name": "mintableSupply",
            "signature": "mintableSupply() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 69,
            "requires": [],
            "events": []
          },
          {
            "name": "tokenDecaySupplyForWeek",
            "signature": "tokenDecaySupplyForWeek(uint256 counter) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 114,
            "requires": [],
            "events": []
          },
          {
            "name": "terminalInflationSupply",
            "signature": "terminalInflationSupply(uint256 totalSupply, uint256 numOfWeeks) pure",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 127,
            "requires": [],
            "events": []
          },
          {
            "name": "weeksSinceLastIssuance",
            "signature": "weeksSinceLastIssuance() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 139,
            "requires": [],
            "events": []
          },
          {
            "name": "isMintable",
            "signature": "isMintable() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 150,
            "requires": [],
            "events": []
          },
          {
            "name": "recordMintEvent",
            "signature": "recordMintEvent(uint256 supplyMinted)",
            "returns": "(bool)",
            "modifiers": [
              "onlyPeriFinance"
            ],
            "visibility": "external",
            "lineNumber": 165,
            "requires": [],
            "events": [
              "SupplyMinted"
            ]
          },
          {
            "name": "setMinterReward",
            "signature": "setMinterReward(uint256 amount)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 186,
            "requires": [
              {
                "name": "require(..., \"Reward cannot exceed max minter reward\")",
                "lineNumber": 187
              }
            ],
            "events": [
              "MinterRewardUpdated"
            ]
          },
          {
            "name": "setPeriFinanceProxy",
            "signature": "setPeriFinanceProxy(contract IPeriFinance _periFinanceProxy)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 199,
            "requires": [
              {
                "name": "require(..., \"Address cannot be 0\")",
                "lineNumber": 200
              }
            ],
            "events": [
              "PeriFinanceProxyUpdated"
            ]
          }
        ],
        "events": [
          {
            "name": "SupplyMinted",
            "parameters": "(uint256 supplyMinted, uint256 numberOfWeeksIssued, uint256 lastMintEvent, uint256 timestamp)",
            "lineNumber": 222
          },
          {
            "name": "MinterRewardUpdated",
            "parameters": "(uint256 newRewardAmount)",
            "lineNumber": 227
          },
          {
            "name": "PeriFinanceProxyUpdated",
            "parameters": "(address newAddress)",
            "lineNumber": 232
          }
        ],
        "variables": [
          {
            "name": "lastMintEvent",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 23
          },
          {
            "name": "weekCounter",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 26
          },
          {
            "name": "minterReward",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 29
          },
          {
            "name": "INITIAL_WEEKLY_SUPPLY",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 33
          },
          {
            "name": "periFinanceProxy",
            "type": "address payable",
            "visibility": "public",
            "lineNumber": 36
          },
          {
            "name": "MAX_MINTER_REWARD",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 39
          },
          {
            "name": "MINT_PERIOD_DURATION",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 42
          },
          {
            "name": "INFLATION_START_DATE",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 44
          },
          {
            "name": "MINT_BUFFER",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 45
          },
          {
            "name": "SUPPLY_DECAY_START",
            "type": "uint8",
            "visibility": "public",
            "lineNumber": 46
          },
          {
            "name": "SUPPLY_DECAY_END",
            "type": "uint8",
            "visibility": "public",
            "lineNumber": 47
          },
          {
            "name": "DECAY_RATE",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 50
          },
          {
            "name": "TERMINAL_SUPPLY_RATE_ANNUAL",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 53
          }
        ],
        "modifiers": [
          {
            "name": "onlyPeriFinance",
            "signature": "onlyPeriFinance()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 210
          }
        ],
        "structs": [],
        "inherits": [
          "Owned",
          "ISupplySchedule"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/SystemSettings.sol": {
    "imports": [
      "./Owned.sol",
      "./MixinResolver.sol",
      "./MixinSystemSettings.sol",
      "./interfaces/ISystemSettings.sol",
      "./SafeDecimalMath.sol"
    ],
    "contracts": {
      "SystemSettings": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "waitingPeriodSecs",
            "signature": "waitingPeriodSecs() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 53,
            "requires": [],
            "events": []
          },
          {
            "name": "priceDeviationThresholdFactor",
            "signature": "priceDeviationThresholdFactor() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 60,
            "requires": [],
            "events": []
          },
          {
            "name": "issuanceRatio",
            "signature": "issuanceRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 66,
            "requires": [],
            "events": []
          },
          {
            "name": "feePeriodDuration",
            "signature": "feePeriodDuration() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 74,
            "requires": [],
            "events": []
          },
          {
            "name": "targetThreshold",
            "signature": "targetThreshold() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 79,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationDelay",
            "signature": "liquidationDelay() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 85,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationRatio",
            "signature": "liquidationRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 92,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationPenalty",
            "signature": "liquidationPenalty() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 98,
            "requires": [],
            "events": []
          },
          {
            "name": "rateStalePeriod",
            "signature": "rateStalePeriod() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 103,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeFeeRate",
            "signature": "exchangeFeeRate(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 107,
            "requires": [],
            "events": []
          },
          {
            "name": "minimumStakeTime",
            "signature": "minimumStakeTime() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 111,
            "requires": [],
            "events": []
          },
          {
            "name": "debtSnapshotStaleTime",
            "signature": "debtSnapshotStaleTime() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 115,
            "requires": [],
            "events": []
          },
          {
            "name": "aggregatorWarningFlags",
            "signature": "aggregatorWarningFlags() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 119,
            "requires": [],
            "events": []
          },
          {
            "name": "tradingRewardsEnabled",
            "signature": "tradingRewardsEnabled() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 125,
            "requires": [],
            "events": []
          },
          {
            "name": "crossDomainMessageGasLimit",
            "signature": "crossDomainMessageGasLimit(enum MixinSystemSettings.CrossDomainMessageGasLimits gasLimitType) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 129,
            "requires": [],
            "events": []
          },
          {
            "name": "usdcQuota",
            "signature": "usdcQuota() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 133,
            "requires": [],
            "events": []
          },
          {
            "name": "setCrossDomainMessageGasLimit",
            "signature": "setCrossDomainMessageGasLimit(enum MixinSystemSettings.CrossDomainMessageGasLimits _gasLimitType, uint256 _crossDomainMessageGasLimit)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 141,
            "requires": [
              {
                "name": "require(..., \"Out of range xDomain gasLimit\")",
                "lineNumber": 145
              }
            ],
            "events": [
              "CrossDomainMessageGasLimitChanged"
            ]
          },
          {
            "name": "setTradingRewardsEnabled",
            "signature": "setTradingRewardsEnabled(bool _tradingRewardsEnabled)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 158,
            "requires": [],
            "events": [
              "TradingRewardsEnabled"
            ]
          },
          {
            "name": "setWaitingPeriodSecs",
            "signature": "setWaitingPeriodSecs(uint256 _waitingPeriodSecs)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 163,
            "requires": [],
            "events": [
              "WaitingPeriodSecsUpdated"
            ]
          },
          {
            "name": "setPriceDeviationThresholdFactor",
            "signature": "setPriceDeviationThresholdFactor(uint256 _priceDeviationThresholdFactor)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 168,
            "requires": [],
            "events": [
              "PriceDeviationThresholdUpdated"
            ]
          },
          {
            "name": "setIssuanceRatio",
            "signature": "setIssuanceRatio(uint256 _issuanceRatio)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 177,
            "requires": [
              {
                "name": "require(..., \"New issuance ratio cannot exceed MAX_ISSUANCE_RATIO\")",
                "lineNumber": 178
              }
            ],
            "events": [
              "IssuanceRatioUpdated"
            ]
          },
          {
            "name": "setFeePeriodDuration",
            "signature": "setFeePeriodDuration(uint256 _feePeriodDuration)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 183,
            "requires": [
              {
                "name": "require(..., \"value < MIN_FEE_PERIOD_DURATION\")",
                "lineNumber": 184
              },
              {
                "name": "require(..., \"value > MAX_FEE_PERIOD_DURATION\")",
                "lineNumber": 185
              }
            ],
            "events": [
              "FeePeriodDurationUpdated"
            ]
          },
          {
            "name": "setTargetThreshold",
            "signature": "setTargetThreshold(uint256 _percent)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 192,
            "requires": [
              {
                "name": "require(..., \"Threshold too high\")",
                "lineNumber": 193
              }
            ],
            "events": [
              "TargetThresholdUpdated"
            ]
          },
          {
            "name": "setLiquidationDelay",
            "signature": "setLiquidationDelay(uint256 time)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 202,
            "requires": [
              {
                "name": "require(..., \"Must be less than 30 days\")",
                "lineNumber": 203
              },
              {
                "name": "require(..., \"Must be greater than 1 day\")",
                "lineNumber": 204
              }
            ],
            "events": [
              "LiquidationDelayUpdated"
            ]
          },
          {
            "name": "setLiquidationRatio",
            "signature": "setLiquidationRatio(uint256 _liquidationRatio)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 213,
            "requires": [
              {
                "name": "require(..., \"liquidationRatio > MAX_LIQUIDATION_RATIO / (1 + penalty)\")",
                "lineNumber": 214
              },
              {
                "name": "require(..., \"liquidationRatio < MIN_LIQUIDATION_RATIO\")",
                "lineNumber": 222
              }
            ],
            "events": [
              "LiquidationRatioUpdated"
            ]
          },
          {
            "name": "setLiquidationPenalty",
            "signature": "setLiquidationPenalty(uint256 penalty)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 229,
            "requires": [
              {
                "name": "require(..., \"penalty > MAX_LIQUIDATION_PENALTY\")",
                "lineNumber": 230
              }
            ],
            "events": [
              "LiquidationPenaltyUpdated"
            ]
          },
          {
            "name": "setRateStalePeriod",
            "signature": "setRateStalePeriod(uint256 period)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 237,
            "requires": [],
            "events": [
              "RateStalePeriodUpdated"
            ]
          },
          {
            "name": "setExchangeFeeRateForPynths",
            "signature": "setExchangeFeeRateForPynths(bytes32[] pynthKeys, uint256[] exchangeFeeRates)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 243,
            "requires": [
              {
                "name": "require(..., \"Array lengths dont match\")",
                "lineNumber": 247
              }
            ],
            "events": []
          },
          {
            "name": "setMinimumStakeTime",
            "signature": "setMinimumStakeTime(uint256 _seconds)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 259,
            "requires": [
              {
                "name": "require(..., \"stake time exceed maximum 1 week\")",
                "lineNumber": 260
              }
            ],
            "events": [
              "MinimumStakeTimeUpdated"
            ]
          },
          {
            "name": "setDebtSnapshotStaleTime",
            "signature": "setDebtSnapshotStaleTime(uint256 _seconds)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 265,
            "requires": [],
            "events": [
              "DebtSnapshotStaleTimeUpdated"
            ]
          },
          {
            "name": "setAggregatorWarningFlags",
            "signature": "setAggregatorWarningFlags(address _flags)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 270,
            "requires": [
              {
                "name": "require(..., \"Valid address must be given\")",
                "lineNumber": 271
              }
            ],
            "events": [
              "AggregatorWarningFlagsUpdated"
            ]
          },
          {
            "name": "setUSDCQuota",
            "signature": "setUSDCQuota(uint256 _newQuota)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 276,
            "requires": [
              {
                "name": "require(..., \"new quota exceeds maximum 100 percentage\")",
                "lineNumber": 279
              }
            ],
            "events": [
              "USDCQuotaChanged"
            ]
          }
        ],
        "events": [
          {
            "name": "CrossDomainMessageGasLimitChanged",
            "parameters": "(enum MixinSystemSettings.CrossDomainMessageGasLimits gasLimitType, uint256 newLimit)",
            "lineNumber": 288
          },
          {
            "name": "TradingRewardsEnabled",
            "parameters": "(bool enabled)",
            "lineNumber": 289
          },
          {
            "name": "WaitingPeriodSecsUpdated",
            "parameters": "(uint256 waitingPeriodSecs)",
            "lineNumber": 290
          },
          {
            "name": "PriceDeviationThresholdUpdated",
            "parameters": "(uint256 threshold)",
            "lineNumber": 291
          },
          {
            "name": "IssuanceRatioUpdated",
            "parameters": "(uint256 newRatio)",
            "lineNumber": 292
          },
          {
            "name": "FeePeriodDurationUpdated",
            "parameters": "(uint256 newFeePeriodDuration)",
            "lineNumber": 293
          },
          {
            "name": "TargetThresholdUpdated",
            "parameters": "(uint256 newTargetThreshold)",
            "lineNumber": 294
          },
          {
            "name": "LiquidationDelayUpdated",
            "parameters": "(uint256 newDelay)",
            "lineNumber": 295
          },
          {
            "name": "LiquidationRatioUpdated",
            "parameters": "(uint256 newRatio)",
            "lineNumber": 296
          },
          {
            "name": "LiquidationPenaltyUpdated",
            "parameters": "(uint256 newPenalty)",
            "lineNumber": 297
          },
          {
            "name": "RateStalePeriodUpdated",
            "parameters": "(uint256 rateStalePeriod)",
            "lineNumber": 298
          },
          {
            "name": "ExchangeFeeUpdated",
            "parameters": "(bytes32 pynthKey, uint256 newExchangeFeeRate)",
            "lineNumber": 299
          },
          {
            "name": "MinimumStakeTimeUpdated",
            "parameters": "(uint256 minimumStakeTime)",
            "lineNumber": 300
          },
          {
            "name": "DebtSnapshotStaleTimeUpdated",
            "parameters": "(uint256 debtSnapshotStaleTime)",
            "lineNumber": 301
          },
          {
            "name": "AggregatorWarningFlagsUpdated",
            "parameters": "(address flags)",
            "lineNumber": 302
          },
          {
            "name": "USDCQuotaChanged",
            "parameters": "(uint256 quota)",
            "lineNumber": 303
          }
        ],
        "variables": [
          {
            "name": "MAX_ISSUANCE_RATIO",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 18
          },
          {
            "name": "MIN_FEE_PERIOD_DURATION",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 21
          },
          {
            "name": "MAX_FEE_PERIOD_DURATION",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 22
          },
          {
            "name": "MAX_TARGET_THRESHOLD",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 24
          },
          {
            "name": "MAX_LIQUIDATION_RATIO",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 26
          },
          {
            "name": "MAX_LIQUIDATION_PENALTY",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 28
          },
          {
            "name": "RATIO_FROM_TARGET_BUFFER",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 30
          },
          {
            "name": "MAX_LIQUIDATION_DELAY",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 32
          },
          {
            "name": "MIN_LIQUIDATION_DELAY",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 33
          },
          {
            "name": "MAX_EXCHANGE_FEE_RATE",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 36
          },
          {
            "name": "MAX_MINIMUM_STAKE_TIME",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 39
          },
          {
            "name": "MAX_CROSS_DOMAIN_GAS_LIMIT",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 41
          },
          {
            "name": "MIN_CROSS_DOMAIN_GAS_LIMIT",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 42
          },
          {
            "name": "MAX_USDC_QUOTA",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 44
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "MixinSystemSettings",
          "ISystemSettings"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/SystemStatus.sol": {
    "imports": [
      "./Owned.sol",
      "./interfaces/ISystemStatus.sol"
    ],
    "contracts": {
      "SystemStatus": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "requireSystemActive",
            "signature": "requireSystemActive() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 32,
            "requires": [
              {
                "name": "_internalRequireSystemActive",
                "lineNumber": 33
              }
            ],
            "events": []
          },
          {
            "name": "requireIssuanceActive",
            "signature": "requireIssuanceActive() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 36,
            "requires": [
              {
                "name": "_internalRequireSystemActive",
                "lineNumber": 38
              },
              {
                "name": "_internalRequireIssuanceActive",
                "lineNumber": 41
              }
            ],
            "events": []
          },
          {
            "name": "requireExchangeActive",
            "signature": "requireExchangeActive() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 44,
            "requires": [
              {
                "name": "_internalRequireSystemActive",
                "lineNumber": 46
              },
              {
                "name": "_internalRequireExchangeActive",
                "lineNumber": 49
              }
            ],
            "events": []
          },
          {
            "name": "requirePynthExchangeActive",
            "signature": "requirePynthExchangeActive(bytes32 currencyKey) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 52,
            "requires": [
              {
                "name": "_internalRequireSystemActive",
                "lineNumber": 54
              },
              {
                "name": "_internalRequirePynthExchangeActive",
                "lineNumber": 55
              }
            ],
            "events": []
          },
          {
            "name": "requirePynthActive",
            "signature": "requirePynthActive(bytes32 currencyKey) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 58,
            "requires": [
              {
                "name": "_internalRequireSystemActive",
                "lineNumber": 60
              },
              {
                "name": "_internalRequirePynthActive",
                "lineNumber": 61
              }
            ],
            "events": []
          },
          {
            "name": "requirePynthsActive",
            "signature": "requirePynthsActive(bytes32 sourceCurrencyKey, bytes32 destinationCurrencyKey) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 64,
            "requires": [
              {
                "name": "_internalRequireSystemActive",
                "lineNumber": 66
              },
              {
                "name": "_internalRequirePynthActive",
                "lineNumber": 67
              },
              {
                "name": "_internalRequirePynthActive",
                "lineNumber": 68
              }
            ],
            "events": []
          },
          {
            "name": "requireExchangeBetweenPynthsAllowed",
            "signature": "requireExchangeBetweenPynthsAllowed(bytes32 sourceCurrencyKey, bytes32 destinationCurrencyKey) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 71,
            "requires": [
              {
                "name": "_internalRequireSystemActive",
                "lineNumber": 73
              },
              {
                "name": "_internalRequireExchangeActive",
                "lineNumber": 76
              },
              {
                "name": "_internalRequirePynthExchangeActive",
                "lineNumber": 79
              },
              {
                "name": "_internalRequirePynthExchangeActive",
                "lineNumber": 80
              },
              {
                "name": "_internalRequirePynthActive",
                "lineNumber": 83
              },
              {
                "name": "_internalRequirePynthActive",
                "lineNumber": 84
              }
            ],
            "events": []
          },
          {
            "name": "isSystemUpgrading",
            "signature": "isSystemUpgrading() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 87,
            "requires": [],
            "events": []
          },
          {
            "name": "getPynthExchangeSuspensions",
            "signature": "getPynthExchangeSuspensions(bytes32[] pynths) view",
            "returns": "(bool[] exchangeSuspensions, uint256[] reasons)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 91,
            "requires": [],
            "events": []
          },
          {
            "name": "getPynthSuspensions",
            "signature": "getPynthSuspensions(bytes32[] pynths) view",
            "returns": "(bool[] suspensions, uint256[] reasons)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 105,
            "requires": [],
            "events": []
          },
          {
            "name": "updateAccessControl",
            "signature": "updateAccessControl(bytes32 section, address account, bool canSuspend, bool canResume)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 120,
            "requires": [],
            "events": []
          },
          {
            "name": "updateAccessControls",
            "signature": "updateAccessControls(bytes32[] sections, address[] accounts, bool[] canSuspends, bool[] canResumes)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 129,
            "requires": [
              {
                "name": "require(..., \"Input array lengths must match\")",
                "lineNumber": 135
              }
            ],
            "events": []
          },
          {
            "name": "suspendSystem",
            "signature": "suspendSystem(uint256 reason)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 146,
            "requires": [
              {
                "name": "_requireAccessToSuspend",
                "lineNumber": 147
              }
            ],
            "events": [
              "SystemSuspended"
            ]
          },
          {
            "name": "resumeSystem",
            "signature": "resumeSystem()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 153,
            "requires": [
              {
                "name": "_requireAccessToResume",
                "lineNumber": 154
              }
            ],
            "events": [
              "SystemResumed"
            ]
          },
          {
            "name": "suspendIssuance",
            "signature": "suspendIssuance(uint256 reason)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 160,
            "requires": [
              {
                "name": "_requireAccessToSuspend",
                "lineNumber": 161
              }
            ],
            "events": [
              "IssuanceSuspended"
            ]
          },
          {
            "name": "resumeIssuance",
            "signature": "resumeIssuance()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 167,
            "requires": [
              {
                "name": "_requireAccessToResume",
                "lineNumber": 168
              }
            ],
            "events": [
              "IssuanceResumed"
            ]
          },
          {
            "name": "suspendExchange",
            "signature": "suspendExchange(uint256 reason)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 174,
            "requires": [
              {
                "name": "_requireAccessToSuspend",
                "lineNumber": 175
              }
            ],
            "events": [
              "ExchangeSuspended"
            ]
          },
          {
            "name": "resumeExchange",
            "signature": "resumeExchange()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 181,
            "requires": [
              {
                "name": "_requireAccessToResume",
                "lineNumber": 182
              }
            ],
            "events": [
              "ExchangeResumed"
            ]
          },
          {
            "name": "suspendPynthExchange",
            "signature": "suspendPynthExchange(bytes32 currencyKey, uint256 reason)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 188,
            "requires": [],
            "events": []
          },
          {
            "name": "suspendPynthsExchange",
            "signature": "suspendPynthsExchange(bytes32[] currencyKeys, uint256 reason)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 194,
            "requires": [],
            "events": []
          },
          {
            "name": "resumePynthExchange",
            "signature": "resumePynthExchange(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 198,
            "requires": [],
            "events": []
          },
          {
            "name": "resumePynthsExchange",
            "signature": "resumePynthsExchange(bytes32[] currencyKeys)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 204,
            "requires": [],
            "events": []
          },
          {
            "name": "suspendPynth",
            "signature": "suspendPynth(bytes32 currencyKey, uint256 reason)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 208,
            "requires": [],
            "events": []
          },
          {
            "name": "suspendPynths",
            "signature": "suspendPynths(bytes32[] currencyKeys, uint256 reason)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 214,
            "requires": [],
            "events": []
          },
          {
            "name": "resumePynth",
            "signature": "resumePynth(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 218,
            "requires": [],
            "events": []
          },
          {
            "name": "resumePynths",
            "signature": "resumePynths(bytes32[] currencyKeys)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 224,
            "requires": [],
            "events": []
          },
          {
            "name": "_requireAccessToSuspend",
            "signature": "_requireAccessToSuspend(bytes32 section) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 230,
            "requires": [
              {
                "name": "require(..., \"Restricted to access control list\")",
                "lineNumber": 231
              }
            ],
            "events": []
          },
          {
            "name": "_requireAccessToResume",
            "signature": "_requireAccessToResume(bytes32 section) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 234,
            "requires": [
              {
                "name": "require(..., \"Restricted to access control list\")",
                "lineNumber": 235
              }
            ],
            "events": []
          },
          {
            "name": "_internalRequireSystemActive",
            "signature": "_internalRequireSystemActive() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 238,
            "requires": [
              {
                "name": "require(..., \"string memory\")",
                "lineNumber": 239
              }
            ],
            "events": []
          },
          {
            "name": "_internalRequireIssuanceActive",
            "signature": "_internalRequireIssuanceActive() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 247,
            "requires": [
              {
                "name": "require(..., \"Issuance is suspended. Operation prohibited\")",
                "lineNumber": 248
              }
            ],
            "events": []
          },
          {
            "name": "_internalRequireExchangeActive",
            "signature": "_internalRequireExchangeActive() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 251,
            "requires": [
              {
                "name": "require(..., \"Exchange is suspended. Operation prohibited\")",
                "lineNumber": 252
              }
            ],
            "events": []
          },
          {
            "name": "_internalRequirePynthExchangeActive",
            "signature": "_internalRequirePynthExchangeActive(bytes32 currencyKey) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 255,
            "requires": [
              {
                "name": "require(..., \"Pynth exchange suspended. Operation prohibited\")",
                "lineNumber": 256
              }
            ],
            "events": []
          },
          {
            "name": "_internalRequirePynthActive",
            "signature": "_internalRequirePynthActive(bytes32 currencyKey) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 259,
            "requires": [
              {
                "name": "require(..., \"Pynth is suspended. Operation prohibited\")",
                "lineNumber": 260
              }
            ],
            "events": []
          },
          {
            "name": "_internalSuspendPynths",
            "signature": "_internalSuspendPynths(bytes32[] currencyKeys, uint256 reason)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 263,
            "requires": [
              {
                "name": "_requireAccessToSuspend",
                "lineNumber": 264
              }
            ],
            "events": []
          },
          {
            "name": "_internalResumePynths",
            "signature": "_internalResumePynths(bytes32[] currencyKeys)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 273,
            "requires": [
              {
                "name": "_requireAccessToResume",
                "lineNumber": 274
              }
            ],
            "events": []
          },
          {
            "name": "_internalSuspendPynthExchange",
            "signature": "_internalSuspendPynthExchange(bytes32[] currencyKeys, uint256 reason)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 282,
            "requires": [
              {
                "name": "_requireAccessToSuspend",
                "lineNumber": 283
              }
            ],
            "events": []
          },
          {
            "name": "_internalResumePynthsExchange",
            "signature": "_internalResumePynthsExchange(bytes32[] currencyKeys)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 292,
            "requires": [
              {
                "name": "_requireAccessToResume",
                "lineNumber": 293
              }
            ],
            "events": []
          },
          {
            "name": "_internalUpdateAccessControl",
            "signature": "_internalUpdateAccessControl(bytes32 section, address account, bool canSuspend, bool canResume)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 301,
            "requires": [
              {
                "name": "require(..., \"Invalid section supplied\")",
                "lineNumber": 307
              }
            ],
            "events": [
              "AccessControlUpdated"
            ]
          }
        ],
        "events": [
          {
            "name": "SystemSuspended",
            "parameters": "(uint256 reason)",
            "lineNumber": 322
          },
          {
            "name": "SystemResumed",
            "parameters": "(uint256 reason)",
            "lineNumber": 323
          },
          {
            "name": "IssuanceSuspended",
            "parameters": "(uint256 reason)",
            "lineNumber": 325
          },
          {
            "name": "IssuanceResumed",
            "parameters": "(uint256 reason)",
            "lineNumber": 326
          },
          {
            "name": "ExchangeSuspended",
            "parameters": "(uint256 reason)",
            "lineNumber": 328
          },
          {
            "name": "ExchangeResumed",
            "parameters": "(uint256 reason)",
            "lineNumber": 329
          },
          {
            "name": "PynthExchangeSuspended",
            "parameters": "(bytes32 currencyKey, uint256 reason)",
            "lineNumber": 331
          },
          {
            "name": "PynthExchangeResumed",
            "parameters": "(bytes32 currencyKey, uint256 reason)",
            "lineNumber": 332
          },
          {
            "name": "PynthSuspended",
            "parameters": "(bytes32 currencyKey, uint256 reason)",
            "lineNumber": 334
          },
          {
            "name": "PynthResumed",
            "parameters": "(bytes32 currencyKey, uint256 reason)",
            "lineNumber": 335
          },
          {
            "name": "AccessControlUpdated",
            "parameters": "(bytes32 section, address account, bool canSuspend, bool canResume)",
            "lineNumber": 337
          }
        ],
        "variables": [
          {
            "name": "accessControl",
            "type": "mapping(bytes32 => mapping(address => struct ISystemStatus.Status))",
            "visibility": "public",
            "lineNumber": 9
          },
          {
            "name": "SUSPENSION_REASON_UPGRADE",
            "type": "uint248",
            "visibility": "public",
            "lineNumber": 11
          },
          {
            "name": "SECTION_SYSTEM",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 13
          },
          {
            "name": "SECTION_ISSUANCE",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 14
          },
          {
            "name": "SECTION_EXCHANGE",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 15
          },
          {
            "name": "SECTION_PYNTH_EXCHANGE",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 16
          },
          {
            "name": "SECTION_PYNTH",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 17
          },
          {
            "name": "systemSuspension",
            "type": "struct ISystemStatus.Suspension",
            "visibility": "public",
            "lineNumber": 19
          },
          {
            "name": "issuanceSuspension",
            "type": "struct ISystemStatus.Suspension",
            "visibility": "public",
            "lineNumber": 21
          },
          {
            "name": "exchangeSuspension",
            "type": "struct ISystemStatus.Suspension",
            "visibility": "public",
            "lineNumber": 23
          },
          {
            "name": "pynthExchangeSuspension",
            "type": "mapping(bytes32 => struct ISystemStatus.Suspension)",
            "visibility": "public",
            "lineNumber": 25
          },
          {
            "name": "pynthSuspension",
            "type": "mapping(bytes32 => struct ISystemStatus.Suspension)",
            "visibility": "public",
            "lineNumber": 27
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "ISystemStatus"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/TempExchangeRateStorageKovan.sol": {
    "imports": [
      "./Owned.sol"
    ],
    "contracts": {
      "TempExchangeRateStorageKovan": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "setRate",
            "signature": "setRate(bytes32 _currencyKey, uint216 _rate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "getRate",
            "signature": "getRate(bytes32 _currencyKey) view",
            "returns": "(uint216, uint40)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 20,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "rates",
            "type": "mapping(bytes32 => struct TempExchangeRateStorageKovan.RateAndUpdatedTime)",
            "visibility": "public",
            "lineNumber": 10
          }
        ],
        "modifiers": [],
        "structs": [
          {
            "name": "RateAndUpdatedTime",
            "members": [
              {
                "name": "rate",
                "type": "uint216"
              },
              {
                "name": "time",
                "type": "uint40"
              }
            ],
            "lineNumber": 6
          }
        ],
        "inherits": [
          "Owned"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/TokenState.sol": {
    "imports": [
      "./Owned.sol",
      "./State.sol"
    ],
    "contracts": {
      "TokenState": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address _owner, address _associatedContract)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "setAllowance",
            "signature": "setAllowance(address tokenOwner, address spender, uint256 value)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 25,
            "requires": [],
            "events": []
          },
          {
            "name": "setBalanceOf",
            "signature": "setBalanceOf(address account, uint256 value)",
            "returns": "()",
            "modifiers": [
              "onlyAssociatedContract"
            ],
            "visibility": "external",
            "lineNumber": 39,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [
          {
            "name": "balanceOf",
            "type": "mapping(address => uint256)",
            "visibility": "public",
            "lineNumber": 10
          },
          {
            "name": "allowance",
            "type": "mapping(address => mapping(address => uint256))",
            "visibility": "public",
            "lineNumber": 11
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "Owned",
          "State"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/TradingRewards.sol": {
    "imports": [
      "./Pausable.sol",
      "./MixinResolver.sol",
      "./Owned.sol",
      "openzeppelin-solidity-2.3.0/contracts/token/ERC20/ERC20Detailed.sol",
      "openzeppelin-solidity-2.3.0/contracts/token/ERC20/SafeERC20.sol",
      "openzeppelin-solidity-2.3.0/contracts/utils/ReentrancyGuard.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/ITradingRewards.sol",
      "./interfaces/IExchanger.sol"
    ],
    "contracts": {
      "TradingRewards": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(address owner, address periodController, address resolver)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 49,
            "requires": [
              {
                "name": "require(..., \"Invalid period controller\")",
                "lineNumber": 54
              }
            ],
            "events": []
          },
          {
            "name": "resolverAddressesRequired",
            "signature": "resolverAddressesRequired() view",
            "returns": "(bytes32[] addresses)",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 61,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinance",
            "signature": "periFinance() view",
            "returns": "(contract IERC20)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 67,
            "requires": [],
            "events": []
          },
          {
            "name": "exchanger",
            "signature": "exchanger() view",
            "returns": "(contract IExchanger)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 71,
            "requires": [],
            "events": []
          },
          {
            "name": "getAvailableRewards",
            "signature": "getAvailableRewards() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 75,
            "requires": [],
            "events": []
          },
          {
            "name": "getUnassignedRewards",
            "signature": "getUnassignedRewards() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 79,
            "requires": [],
            "events": []
          },
          {
            "name": "getRewardsToken",
            "signature": "getRewardsToken() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 83,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodController",
            "signature": "getPeriodController() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 87,
            "requires": [],
            "events": []
          },
          {
            "name": "getCurrentPeriod",
            "signature": "getCurrentPeriod() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 91,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodIsClaimable",
            "signature": "getPeriodIsClaimable(uint256 periodID) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 95,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodIsFinalized",
            "signature": "getPeriodIsFinalized(uint256 periodID) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 99,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodRecordedFees",
            "signature": "getPeriodRecordedFees(uint256 periodID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 103,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodTotalRewards",
            "signature": "getPeriodTotalRewards(uint256 periodID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 107,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodAvailableRewards",
            "signature": "getPeriodAvailableRewards(uint256 periodID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 111,
            "requires": [],
            "events": []
          },
          {
            "name": "getUnaccountedFeesForAccountForPeriod",
            "signature": "getUnaccountedFeesForAccountForPeriod(address account, uint256 periodID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 115,
            "requires": [],
            "events": []
          },
          {
            "name": "getAvailableRewardsForAccountForPeriod",
            "signature": "getAvailableRewardsForAccountForPeriod(address account, uint256 periodID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 119,
            "requires": [],
            "events": []
          },
          {
            "name": "getAvailableRewardsForAccountForPeriods",
            "signature": "getAvailableRewardsForAccountForPeriods(address account, uint256[] periodIDs) view",
            "returns": "(uint256 totalRewards)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 123,
            "requires": [],
            "events": []
          },
          {
            "name": "_calculateRewards",
            "signature": "_calculateRewards(address account, uint256 periodID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 135,
            "requires": [],
            "events": []
          },
          {
            "name": "claimRewardsForPeriod",
            "signature": "claimRewardsForPeriod(uint256 periodID)",
            "returns": "()",
            "modifiers": [
              "nonReentrant",
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 152,
            "requires": [],
            "events": []
          },
          {
            "name": "claimRewardsForPeriods",
            "signature": "claimRewardsForPeriods(uint256[] periodIDs)",
            "returns": "()",
            "modifiers": [
              "nonReentrant",
              "notPaused"
            ],
            "visibility": "external",
            "lineNumber": 156,
            "requires": [],
            "events": []
          },
          {
            "name": "_claimRewards",
            "signature": "_claimRewards(address account, uint256 periodID)",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 165,
            "requires": [
              {
                "name": "require(..., \"Period is not finalized\")",
                "lineNumber": 167
              },
              {
                "name": "require(..., \"No rewards available\")",
                "lineNumber": 170
              }
            ],
            "events": [
              "RewardsClaimed"
            ]
          },
          {
            "name": "recordExchangeFeeForAccount",
            "signature": "recordExchangeFeeForAccount(uint256 usdFeeAmount, address account)",
            "returns": "()",
            "modifiers": [
              "onlyExchanger"
            ],
            "visibility": "external",
            "lineNumber": 184,
            "requires": [],
            "events": [
              "ExchangeFeeRecorded"
            ]
          },
          {
            "name": "closeCurrentPeriodWithRewards",
            "signature": "closeCurrentPeriodWithRewards(uint256 rewards)",
            "returns": "()",
            "modifiers": [
              "onlyPeriodController"
            ],
            "visibility": "external",
            "lineNumber": 195,
            "requires": [
              {
                "name": "require(..., \"Insufficient free rewards\")",
                "lineNumber": 198
              }
            ],
            "events": [
              "PeriodFinalizedWithRewards",
              "NewPeriodStarted"
            ]
          },
          {
            "name": "recoverTokens",
            "signature": "recoverTokens(address tokenAddress, address recoverAddress)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 215,
            "requires": [
              {
                "name": "require(..., \"Must use another function\")",
                "lineNumber": 217
              },
              {
                "name": "require(..., \"No tokens to recover\")",
                "lineNumber": 222
              }
            ],
            "events": [
              "TokensRecovered"
            ]
          },
          {
            "name": "recoverUnassignedRewardTokens",
            "signature": "recoverUnassignedRewardTokens(address recoverAddress)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 229,
            "requires": [
              {
                "name": "require(..., \"No tokens to recover\")",
                "lineNumber": 233
              },
              {
                "name": "require(..., \"No tokens to recover\")",
                "lineNumber": 236
              }
            ],
            "events": [
              "UnassignedRewardTokensRecovered"
            ]
          },
          {
            "name": "recoverAssignedRewardTokensAndDestroyPeriod",
            "signature": "recoverAssignedRewardTokensAndDestroyPeriod(address recoverAddress, uint256 periodID)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 243,
            "requires": [
              {
                "name": "require(..., \"Cannot recover from active\")",
                "lineNumber": 245
              },
              {
                "name": "require(..., \"No rewards available to recover\")",
                "lineNumber": 248
              }
            ],
            "events": [
              "AssignedRewardTokensRecovered"
            ]
          },
          {
            "name": "_validateRecoverAddress",
            "signature": "_validateRecoverAddress(address recoverAddress) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 260,
            "requires": [],
            "events": []
          },
          {
            "name": "setPeriodController",
            "signature": "setPeriodController(address newPeriodController)",
            "returns": "()",
            "modifiers": [
              "onlyOwner"
            ],
            "visibility": "external",
            "lineNumber": 266,
            "requires": [
              {
                "name": "require(..., \"Invalid period controller\")",
                "lineNumber": 267
              }
            ],
            "events": [
              "PeriodControllerChanged"
            ]
          }
        ],
        "events": [
          {
            "name": "ExchangeFeeRecorded",
            "parameters": "(address account, uint256 amount, uint256 periodID)",
            "lineNumber": 288
          },
          {
            "name": "RewardsClaimed",
            "parameters": "(address account, uint256 amount, uint256 periodID)",
            "lineNumber": 289
          },
          {
            "name": "NewPeriodStarted",
            "parameters": "(uint256 periodID)",
            "lineNumber": 290
          },
          {
            "name": "PeriodFinalizedWithRewards",
            "parameters": "(uint256 periodID, uint256 rewards)",
            "lineNumber": 291
          },
          {
            "name": "TokensRecovered",
            "parameters": "(address tokenAddress, address recoverAddress, uint256 amount)",
            "lineNumber": 292
          },
          {
            "name": "UnassignedRewardTokensRecovered",
            "parameters": "(address recoverAddress, uint256 amount)",
            "lineNumber": 293
          },
          {
            "name": "AssignedRewardTokensRecovered",
            "parameters": "(address recoverAddress, uint256 amount, uint256 periodID)",
            "lineNumber": 294
          },
          {
            "name": "PeriodControllerChanged",
            "parameters": "(address newPeriodController)",
            "lineNumber": 295
          }
        ],
        "variables": [
          {
            "name": "_currentPeriodID",
            "type": "uint256",
            "visibility": "private",
            "lineNumber": 28
          },
          {
            "name": "_balanceAssignedToRewards",
            "type": "uint256",
            "visibility": "private",
            "lineNumber": 29
          },
          {
            "name": "_periods",
            "type": "mapping(uint256 => struct TradingRewards.Period)",
            "visibility": "private",
            "lineNumber": 30
          },
          {
            "name": "_periodController",
            "type": "address",
            "visibility": "private",
            "lineNumber": 40
          },
          {
            "name": "CONTRACT_EXCHANGER",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 44
          },
          {
            "name": "CONTRACT_PERIFINANCE",
            "type": "bytes32",
            "visibility": "private",
            "lineNumber": 45
          }
        ],
        "modifiers": [
          {
            "name": "onlyPeriodController",
            "signature": "onlyPeriodController()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 276
          },
          {
            "name": "onlyExchanger",
            "signature": "onlyExchanger()",
            "visibility": "internal",
            "parameters": "()",
            "lineNumber": 281
          }
        ],
        "structs": [
          {
            "name": "Period",
            "members": [
              {
                "name": "isFinalized",
                "type": "bool"
              },
              {
                "name": "recordedFees",
                "type": "uint256"
              },
              {
                "name": "totalRewards",
                "type": "uint256"
              },
              {
                "name": "availableRewards",
                "type": "uint256"
              },
              {
                "name": "unaccountedFeesForAccount",
                "type": "mapping(address => uint256)"
              }
            ],
            "lineNumber": 32
          }
        ],
        "inherits": [
          "ITradingRewards",
          "ReentrancyGuard",
          "Owned",
          "Pausable",
          "MixinResolver"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/VirtualPynth.sol": {
    "imports": [
      "openzeppelin-solidity-2.3.0/contracts/token/ERC20/ERC20.sol",
      "./SafeDecimalMath.sol",
      "./interfaces/IPynth.sol",
      "./interfaces/IAddressResolver.sol",
      "./interfaces/IVirtualPynth.sol",
      "./interfaces/IExchanger.sol",
      "openzeppelin-solidity-2.3.0/contracts/token/ERC20/IERC20.sol"
    ],
    "contracts": {
      "VirtualPynth": {
        "functions": [
          {
            "name": "constructor",
            "signature": "constructor(contract IERC20 _pynth, contract IAddressResolver _resolver, address _recipient, uint256 _amount, bytes32 _currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "public",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "exchanger",
            "signature": "exchanger() view",
            "returns": "(contract IExchanger)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 58,
            "requires": [],
            "events": []
          },
          {
            "name": "secsLeft",
            "signature": "secsLeft() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 62,
            "requires": [],
            "events": []
          },
          {
            "name": "calcRate",
            "signature": "calcRate() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 66,
            "requires": [],
            "events": []
          },
          {
            "name": "balanceUnderlying",
            "signature": "balanceUnderlying(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 89,
            "requires": [],
            "events": []
          },
          {
            "name": "settlePynth",
            "signature": "settlePynth()",
            "returns": "()",
            "modifiers": [],
            "visibility": "internal",
            "lineNumber": 95,
            "requires": [],
            "events": [
              "Settled"
            ]
          },
          {
            "name": "name",
            "signature": "name() view",
            "returns": "(string)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 110,
            "requires": [],
            "events": []
          },
          {
            "name": "symbol",
            "signature": "symbol() view",
            "returns": "(string)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 114,
            "requires": [],
            "events": []
          },
          {
            "name": "rate",
            "signature": "rate() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 119,
            "requires": [],
            "events": []
          },
          {
            "name": "balanceOfUnderlying",
            "signature": "balanceOfUnderlying(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 125,
            "requires": [],
            "events": []
          },
          {
            "name": "secsLeftInWaitingPeriod",
            "signature": "secsLeftInWaitingPeriod() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 129,
            "requires": [],
            "events": []
          },
          {
            "name": "readyToSettle",
            "signature": "readyToSettle() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 133,
            "requires": [],
            "events": []
          },
          {
            "name": "settle",
            "signature": "settle(address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 141,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "Settled",
            "parameters": "(uint256 totalSupply, uint256 amountAfterSettled)",
            "lineNumber": 149
          }
        ],
        "variables": [
          {
            "name": "pynth",
            "type": "contract IERC20",
            "visibility": "public",
            "lineNumber": 23
          },
          {
            "name": "resolver",
            "type": "contract IAddressResolver",
            "visibility": "public",
            "lineNumber": 24
          },
          {
            "name": "settled",
            "type": "bool",
            "visibility": "public",
            "lineNumber": 26
          },
          {
            "name": "decimals",
            "type": "uint8",
            "visibility": "public",
            "lineNumber": 28
          },
          {
            "name": "initialSupply",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 31
          },
          {
            "name": "settledAmount",
            "type": "uint256",
            "visibility": "public",
            "lineNumber": 34
          },
          {
            "name": "currencyKey",
            "type": "bytes32",
            "visibility": "public",
            "lineNumber": 36
          }
        ],
        "modifiers": [],
        "structs": [],
        "inherits": [
          "ERC20",
          "IVirtualPynth"
        ]
      }
    },
    "libraries": {},
    "interfaces": {}
  },
  "contracts/interfaces/IAddressResolver.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IAddressResolver": {
        "functions": [
          {
            "name": "getAddress",
            "signature": "getAddress(bytes32 name) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 5,
            "requires": [],
            "events": []
          },
          {
            "name": "getPynth",
            "signature": "getPynth(bytes32 key) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 7,
            "requires": [],
            "events": []
          },
          {
            "name": "requireAndGetAddress",
            "signature": "requireAndGetAddress(bytes32 name, string reason) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 9,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IBinaryOption.sol": {
    "imports": [
      "../interfaces/IBinaryOptionMarket.sol",
      "../interfaces/IERC20.sol"
    ],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IBinaryOption": {
        "functions": [
          {
            "name": "market",
            "signature": "market() view",
            "returns": "(contract IBinaryOptionMarket)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "bidOf",
            "signature": "bidOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "totalBids",
            "signature": "totalBids() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "totalSupply",
            "signature": "totalSupply() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "claimableBalanceOf",
            "signature": "claimableBalanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "totalClaimableSupply",
            "signature": "totalClaimableSupply() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IBinaryOptionMarket.sol": {
    "imports": [
      "../interfaces/IBinaryOptionMarketManager.sol",
      "../interfaces/IBinaryOption.sol"
    ],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IBinaryOptionMarket": {
        "functions": [
          {
            "name": "options",
            "signature": "options() view",
            "returns": "(contract IBinaryOption long, contract IBinaryOption short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "prices",
            "signature": "prices() view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "times",
            "signature": "times() view",
            "returns": "(uint256 biddingEnd, uint256 maturity, uint256 destructino)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "oracleDetails",
            "signature": "oracleDetails() view",
            "returns": "(bytes32 key, uint256 strikePrice, uint256 finalPrice)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 28,
            "requires": [],
            "events": []
          },
          {
            "name": "fees",
            "signature": "fees() view",
            "returns": "(uint256 poolFee, uint256 creatorFee, uint256 refundFee)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 37,
            "requires": [],
            "events": []
          },
          {
            "name": "creatorLimits",
            "signature": "creatorLimits() view",
            "returns": "(uint256 capitalRequirement, uint256 skewLimit)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "deposited",
            "signature": "deposited() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 48,
            "requires": [],
            "events": []
          },
          {
            "name": "creator",
            "signature": "creator() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 50,
            "requires": [],
            "events": []
          },
          {
            "name": "resolved",
            "signature": "resolved() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 52,
            "requires": [],
            "events": []
          },
          {
            "name": "refundsEnabled",
            "signature": "refundsEnabled() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 54,
            "requires": [],
            "events": []
          },
          {
            "name": "phase",
            "signature": "phase() view",
            "returns": "(enum IBinaryOptionMarket.Phase)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 56,
            "requires": [],
            "events": []
          },
          {
            "name": "oraclePriceAndTimestamp",
            "signature": "oraclePriceAndTimestamp() view",
            "returns": "(uint256 price, uint256 updatedAt)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 58,
            "requires": [],
            "events": []
          },
          {
            "name": "canResolve",
            "signature": "canResolve() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 60,
            "requires": [],
            "events": []
          },
          {
            "name": "result",
            "signature": "result() view",
            "returns": "(enum IBinaryOptionMarket.Side)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 62,
            "requires": [],
            "events": []
          },
          {
            "name": "pricesAfterBidOrRefund",
            "signature": "pricesAfterBidOrRefund(enum IBinaryOptionMarket.Side side, uint256 value, bool refund) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 64,
            "requires": [],
            "events": []
          },
          {
            "name": "bidOrRefundForPrice",
            "signature": "bidOrRefundForPrice(enum IBinaryOptionMarket.Side bidSide, enum IBinaryOptionMarket.Side priceSide, uint256 price, bool refund) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 70,
            "requires": [],
            "events": []
          },
          {
            "name": "bidsOf",
            "signature": "bidsOf(address account) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 77,
            "requires": [],
            "events": []
          },
          {
            "name": "totalBids",
            "signature": "totalBids() view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 79,
            "requires": [],
            "events": []
          },
          {
            "name": "claimableBalancesOf",
            "signature": "claimableBalancesOf(address account) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 81,
            "requires": [],
            "events": []
          },
          {
            "name": "totalClaimableSupplies",
            "signature": "totalClaimableSupplies() view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 83,
            "requires": [],
            "events": []
          },
          {
            "name": "balancesOf",
            "signature": "balancesOf(address account) view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 85,
            "requires": [],
            "events": []
          },
          {
            "name": "totalSupplies",
            "signature": "totalSupplies() view",
            "returns": "(uint256 long, uint256 short)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 87,
            "requires": [],
            "events": []
          },
          {
            "name": "exercisableDeposits",
            "signature": "exercisableDeposits() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 89,
            "requires": [],
            "events": []
          },
          {
            "name": "bid",
            "signature": "bid(enum IBinaryOptionMarket.Side side, uint256 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 93,
            "requires": [],
            "events": []
          },
          {
            "name": "refund",
            "signature": "refund(enum IBinaryOptionMarket.Side side, uint256 value)",
            "returns": "(uint256 refundMinusFee)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 95,
            "requires": [],
            "events": []
          },
          {
            "name": "claimOptions",
            "signature": "claimOptions()",
            "returns": "(uint256 longClaimed, uint256 shortClaimed)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 97,
            "requires": [],
            "events": []
          },
          {
            "name": "exerciseOptions",
            "signature": "exerciseOptions()",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 99,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IBinaryOptionMarketManager.sol": {
    "imports": [
      "../interfaces/IBinaryOptionMarket.sol"
    ],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IBinaryOptionMarketManager": {
        "functions": [
          {
            "name": "fees",
            "signature": "fees() view",
            "returns": "(uint256 poolFee, uint256 creatorFee, uint256 refundFee)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 9,
            "requires": [],
            "events": []
          },
          {
            "name": "durations",
            "signature": "durations() view",
            "returns": "(uint256 maxOraclePriceAge, uint256 expiryDuration, uint256 maxTimeToMaturity)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "creatorLimits",
            "signature": "creatorLimits() view",
            "returns": "(uint256 capitalRequirement, uint256 skewLimit)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 27,
            "requires": [],
            "events": []
          },
          {
            "name": "marketCreationEnabled",
            "signature": "marketCreationEnabled() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "totalDeposited",
            "signature": "totalDeposited() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 31,
            "requires": [],
            "events": []
          },
          {
            "name": "numActiveMarkets",
            "signature": "numActiveMarkets() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 33,
            "requires": [],
            "events": []
          },
          {
            "name": "activeMarkets",
            "signature": "activeMarkets(uint256 index, uint256 pageSize) view",
            "returns": "(address[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 35,
            "requires": [],
            "events": []
          },
          {
            "name": "numMaturedMarkets",
            "signature": "numMaturedMarkets() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 37,
            "requires": [],
            "events": []
          },
          {
            "name": "maturedMarkets",
            "signature": "maturedMarkets(uint256 index, uint256 pageSize) view",
            "returns": "(address[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 39,
            "requires": [],
            "events": []
          },
          {
            "name": "createMarket",
            "signature": "createMarket(bytes32 oracleKey, uint256 strikePrice, bool refundsEnabled, uint256[2] times, uint256[2] bids)",
            "returns": "(contract IBinaryOptionMarket)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 43,
            "requires": [],
            "events": []
          },
          {
            "name": "resolveMarket",
            "signature": "resolveMarket(address market)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 51,
            "requires": [],
            "events": []
          },
          {
            "name": "cancelMarket",
            "signature": "cancelMarket(address market)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 53,
            "requires": [],
            "events": []
          },
          {
            "name": "expireMarkets",
            "signature": "expireMarkets(address[] market)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 55,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/ICollateralErc20.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "ICollateralErc20": {
        "functions": [
          {
            "name": "open",
            "signature": "open(uint256 collateral, uint256 amount, bytes32 currency)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 5,
            "requires": [],
            "events": []
          },
          {
            "name": "close",
            "signature": "close(uint256 id)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 11,
            "requires": [],
            "events": []
          },
          {
            "name": "deposit",
            "signature": "deposit(address borrower, uint256 id, uint256 collateral)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "withdraw",
            "signature": "withdraw(uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "repay",
            "signature": "repay(address borrower, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "draw",
            "signature": "draw(uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 27,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidate",
            "signature": "liquidate(address borrower, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 29,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/ICollateralEth.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "ICollateralEth": {
        "functions": [
          {
            "name": "open",
            "signature": "open(uint256 amount, bytes32 currency) payable",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 5,
            "requires": [],
            "events": []
          },
          {
            "name": "close",
            "signature": "close(uint256 id)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 7,
            "requires": [],
            "events": []
          },
          {
            "name": "deposit",
            "signature": "deposit(address borrower, uint256 id) payable",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 9,
            "requires": [],
            "events": []
          },
          {
            "name": "withdraw",
            "signature": "withdraw(uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 11,
            "requires": [],
            "events": []
          },
          {
            "name": "repay",
            "signature": "repay(address borrower, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidate",
            "signature": "liquidate(address borrower, uint256 id, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "claim",
            "signature": "claim(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 25,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/ICollateralLoan.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "ICollateralLoan": {
        "functions": [],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [
          {
            "name": "Loan",
            "members": [
              {
                "name": "id",
                "type": "uint256"
              },
              {
                "name": "account",
                "type": "address payable"
              },
              {
                "name": "collateral",
                "type": "uint256"
              },
              {
                "name": "currency",
                "type": "bytes32"
              },
              {
                "name": "amount",
                "type": "uint256"
              },
              {
                "name": "short",
                "type": "bool"
              },
              {
                "name": "accruedInterest",
                "type": "uint256"
              },
              {
                "name": "interestIndex",
                "type": "uint256"
              },
              {
                "name": "lastInteraction",
                "type": "uint256"
              }
            ],
            "lineNumber": 6
          }
        ],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/ICollateralManager.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "ICollateralManager": {
        "functions": [
          {
            "name": "hasCollateral",
            "signature": "hasCollateral(address collateral) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "isPynthManaged",
            "signature": "isPynthManaged(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "long",
            "signature": "long(bytes32 pynth) view",
            "returns": "(uint256 amount)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 11,
            "requires": [],
            "events": []
          },
          {
            "name": "short",
            "signature": "short(bytes32 pynth) view",
            "returns": "(uint256 amount)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "totalLong",
            "signature": "totalLong() view",
            "returns": "(uint256 pusdValue, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "totalShort",
            "signature": "totalShort() view",
            "returns": "(uint256 pusdValue, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "getBorrowRate",
            "signature": "getBorrowRate() view",
            "returns": "(uint256 borrowRate, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "getShortRate",
            "signature": "getShortRate(bytes32 pynth) view",
            "returns": "(uint256 shortRate, bool rateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "getRatesAndTime",
            "signature": "getRatesAndTime(uint256 index) view",
            "returns": "(uint256 entryRate, uint256 lastRate, uint256 lastUpdated, uint256 newIndex)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 23,
            "requires": [],
            "events": []
          },
          {
            "name": "getShortRatesAndTime",
            "signature": "getShortRatesAndTime(bytes32 currency, uint256 index) view",
            "returns": "(uint256 entryRate, uint256 lastRate, uint256 lastUpdated, uint256 newIndex)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 33,
            "requires": [],
            "events": []
          },
          {
            "name": "exceedsDebtLimit",
            "signature": "exceedsDebtLimit(uint256 amount, bytes32 currency) view",
            "returns": "(bool canIssue, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 43,
            "requires": [],
            "events": []
          },
          {
            "name": "arePynthsAndCurrenciesSet",
            "signature": "arePynthsAndCurrenciesSet(bytes32[] requiredPynthNamesInResolver, bytes32[] pynthKeys) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 45,
            "requires": [],
            "events": []
          },
          {
            "name": "areShortablePynthsSet",
            "signature": "areShortablePynthsSet(bytes32[] requiredPynthNamesInResolver, bytes32[] pynthKeys) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 50,
            "requires": [],
            "events": []
          },
          {
            "name": "getNewLoanId",
            "signature": "getNewLoanId()",
            "returns": "(uint256 id)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 56,
            "requires": [],
            "events": []
          },
          {
            "name": "addCollaterals",
            "signature": "addCollaterals(address[] collaterals)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 59,
            "requires": [],
            "events": []
          },
          {
            "name": "removeCollaterals",
            "signature": "removeCollaterals(address[] collaterals)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 61,
            "requires": [],
            "events": []
          },
          {
            "name": "addPynths",
            "signature": "addPynths(bytes32[] pynthNamesInResolver, bytes32[] pynthKeys)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 63,
            "requires": [],
            "events": []
          },
          {
            "name": "removePynths",
            "signature": "removePynths(bytes32[] pynths, bytes32[] pynthKeys)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 65,
            "requires": [],
            "events": []
          },
          {
            "name": "addShortablePynths",
            "signature": "addShortablePynths(bytes32[2][] requiredPynthAndInverseNamesInResolver, bytes32[] pynthKeys)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 67,
            "requires": [],
            "events": []
          },
          {
            "name": "removeShortablePynths",
            "signature": "removeShortablePynths(bytes32[] pynths)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 70,
            "requires": [],
            "events": []
          },
          {
            "name": "updateBorrowRates",
            "signature": "updateBorrowRates(uint256 rate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 73,
            "requires": [],
            "events": []
          },
          {
            "name": "updateShortRates",
            "signature": "updateShortRates(bytes32 currency, uint256 rate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 75,
            "requires": [],
            "events": []
          },
          {
            "name": "incrementLongs",
            "signature": "incrementLongs(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 77,
            "requires": [],
            "events": []
          },
          {
            "name": "decrementLongs",
            "signature": "decrementLongs(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 79,
            "requires": [],
            "events": []
          },
          {
            "name": "incrementShorts",
            "signature": "incrementShorts(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 81,
            "requires": [],
            "events": []
          },
          {
            "name": "decrementShorts",
            "signature": "decrementShorts(bytes32 pynth, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 83,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IDebtCache.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IDebtCache": {
        "functions": [
          {
            "name": "cachedDebt",
            "signature": "cachedDebt() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 7,
            "requires": [],
            "events": []
          },
          {
            "name": "cachedPynthDebt",
            "signature": "cachedPynthDebt(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 9,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheTimestamp",
            "signature": "cacheTimestamp() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 11,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheInvalid",
            "signature": "cacheInvalid() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheStale",
            "signature": "cacheStale() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "currentPynthDebts",
            "signature": "currentPynthDebts(bytes32[] currencyKeys) view",
            "returns": "(uint256[] debtValues, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "cachedPynthDebts",
            "signature": "cachedPynthDebts(bytes32[] currencyKeys) view",
            "returns": "(uint256[] debtValues)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "currentDebt",
            "signature": "currentDebt() view",
            "returns": "(uint256 debt, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          },
          {
            "name": "cacheInfo",
            "signature": "cacheInfo() view",
            "returns": "(uint256 debt, uint256 timestamp, bool isInvalid, bool isStale)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 26,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebts",
            "signature": "updateCachedPynthDebts(bytes32[] currencyKeys)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebtWithRate",
            "signature": "updateCachedPynthDebtWithRate(bytes32 currencyKey, uint256 currencyRate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 40,
            "requires": [],
            "events": []
          },
          {
            "name": "updateCachedPynthDebtsWithRates",
            "signature": "updateCachedPynthDebtsWithRates(bytes32[] currencyKeys, uint256[] currencyRates)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "updateDebtCacheValidity",
            "signature": "updateDebtCacheValidity(bool currentlyInvalid)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 44,
            "requires": [],
            "events": []
          },
          {
            "name": "purgeCachedPynthDebt",
            "signature": "purgeCachedPynthDebt(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "takeDebtSnapshot",
            "signature": "takeDebtSnapshot()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 48,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IDelegateApprovals.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IDelegateApprovals": {
        "functions": [
          {
            "name": "canBurnFor",
            "signature": "canBurnFor(address authoriser, address delegate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "canIssueFor",
            "signature": "canIssueFor(address authoriser, address delegate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "canClaimFor",
            "signature": "canClaimFor(address authoriser, address delegate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "canExchangeFor",
            "signature": "canExchangeFor(address authoriser, address delegate) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "approveAllDelegatePowers",
            "signature": "approveAllDelegatePowers(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "removeAllDelegatePowers",
            "signature": "removeAllDelegatePowers(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "approveBurnOnBehalf",
            "signature": "approveBurnOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "removeBurnOnBehalf",
            "signature": "removeBurnOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "approveIssueOnBehalf",
            "signature": "approveIssueOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 23,
            "requires": [],
            "events": []
          },
          {
            "name": "removeIssueOnBehalf",
            "signature": "removeIssueOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 25,
            "requires": [],
            "events": []
          },
          {
            "name": "approveClaimOnBehalf",
            "signature": "approveClaimOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 27,
            "requires": [],
            "events": []
          },
          {
            "name": "removeClaimOnBehalf",
            "signature": "removeClaimOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "approveExchangeOnBehalf",
            "signature": "approveExchangeOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 31,
            "requires": [],
            "events": []
          },
          {
            "name": "removeExchangeOnBehalf",
            "signature": "removeExchangeOnBehalf(address delegate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 33,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IDepot.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IDepot": {
        "functions": [
          {
            "name": "fundsWallet",
            "signature": "fundsWallet() view",
            "returns": "(address payable)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "maxEthPurchase",
            "signature": "maxEthPurchase() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "minimumDepositAmount",
            "signature": "minimumDepositAmount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthsReceivedForEther",
            "signature": "pynthsReceivedForEther(uint256 amount) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "totalSellableDeposits",
            "signature": "totalSellableDeposits() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "depositPynths",
            "signature": "depositPynths(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeEtherForPynths",
            "signature": "exchangeEtherForPynths() payable",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeEtherForPynthsAtRate",
            "signature": "exchangeEtherForPynthsAtRate(uint256 guaranteedRate) payable",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "withdrawMyDepositedPynths",
            "signature": "withdrawMyDepositedPynths()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 23,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeEtherForPERI",
            "signature": "exchangeEtherForPERI() payable",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 26,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeEtherForPERIAtRate",
            "signature": "exchangeEtherForPERIAtRate(uint256 guaranteedRate, uint256 guaranteedPeriFinanceRate) payable",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 28,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangePynthsForPERI",
            "signature": "exchangePynthsForPERI(uint256 pynthAmount)",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 30,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceReceivedForEther",
            "signature": "periFinanceReceivedForEther(uint256 amount) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 32,
            "requires": [],
            "events": []
          },
          {
            "name": "periFinanceReceivedForPynths",
            "signature": "periFinanceReceivedForPynths(uint256 amount) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 34,
            "requires": [],
            "events": []
          },
          {
            "name": "withdrawPeriFinance",
            "signature": "withdrawPeriFinance(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 36,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IERC20.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IERC20": {
        "functions": [
          {
            "name": "name",
            "signature": "name() view",
            "returns": "(string)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "symbol",
            "signature": "symbol() view",
            "returns": "(string)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "decimals",
            "signature": "decimals() view",
            "returns": "(uint8)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "totalSupply",
            "signature": "totalSupply() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "balanceOf",
            "signature": "balanceOf(address owner) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "allowance",
            "signature": "allowance(address owner, address spender) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "transfer",
            "signature": "transfer(address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "approve",
            "signature": "approve(address spender, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "transferFrom",
            "signature": "transferFrom(address from, address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          }
        ],
        "events": [
          {
            "name": "Transfer",
            "parameters": "(address from, address to, uint256 value)",
            "lineNumber": 31
          },
          {
            "name": "Approval",
            "parameters": "(address owner, address spender, uint256 value)",
            "lineNumber": 33
          }
        ],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IEtherCollateral.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IEtherCollateral": {
        "functions": [
          {
            "name": "totalIssuedPynths",
            "signature": "totalIssuedPynths() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "totalLoansCreated",
            "signature": "totalLoansCreated() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "totalOpenLoanCount",
            "signature": "totalOpenLoanCount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "openLoan",
            "signature": "openLoan() payable",
            "returns": "(uint256 loanID)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "closeLoan",
            "signature": "closeLoan(uint256 loanID)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidateUnclosedLoan",
            "signature": "liquidateUnclosedLoan(address _loanCreatorsAddress, uint256 _loanID)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IEtherCollateralpUSD.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IEtherCollateralpUSD": {
        "functions": [
          {
            "name": "totalIssuedPynths",
            "signature": "totalIssuedPynths() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "totalLoansCreated",
            "signature": "totalLoansCreated() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "totalOpenLoanCount",
            "signature": "totalOpenLoanCount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "openLoan",
            "signature": "openLoan(uint256 _loanAmount) payable",
            "returns": "(uint256 loanID)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "closeLoan",
            "signature": "closeLoan(uint256 loanID)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidateUnclosedLoan",
            "signature": "liquidateUnclosedLoan(address _loanCreatorsAddress, uint256 _loanID)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "depositCollateral",
            "signature": "depositCollateral(address account, uint256 loanID) payable",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "withdrawCollateral",
            "signature": "withdrawCollateral(uint256 loanID, uint256 withdrawAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "repayLoan",
            "signature": "repayLoan(address _loanCreatorsAddress, uint256 _loanID, uint256 _repayAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 23,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IExchangeRates.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IExchangeRates": {
        "functions": [
          {
            "name": "aggregators",
            "signature": "aggregators(bytes32 currencyKey) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "aggregatorWarningFlags",
            "signature": "aggregatorWarningFlags() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "anyRateIsInvalid",
            "signature": "anyRateIsInvalid(bytes32[] currencyKeys) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          },
          {
            "name": "canFreezeRate",
            "signature": "canFreezeRate(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 26,
            "requires": [],
            "events": []
          },
          {
            "name": "currentRoundForRate",
            "signature": "currentRoundForRate(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 28,
            "requires": [],
            "events": []
          },
          {
            "name": "currenciesUsingAggregator",
            "signature": "currenciesUsingAggregator(address aggregator) view",
            "returns": "(bytes32[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 30,
            "requires": [],
            "events": []
          },
          {
            "name": "effectiveValue",
            "signature": "effectiveValue(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey) view",
            "returns": "(uint256 value)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 32,
            "requires": [],
            "events": []
          },
          {
            "name": "effectiveValueAndRates",
            "signature": "effectiveValueAndRates(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey) view",
            "returns": "(uint256 value, uint256 sourceRate, uint256 destinationRate)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "effectiveValueAtRound",
            "signature": "effectiveValueAtRound(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, uint256 roundIdForSrc, uint256 roundIdForDest) view",
            "returns": "(uint256 value)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 51,
            "requires": [],
            "events": []
          },
          {
            "name": "getCurrentRoundId",
            "signature": "getCurrentRoundId(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 59,
            "requires": [],
            "events": []
          },
          {
            "name": "getLastRoundIdBeforeElapsedSecs",
            "signature": "getLastRoundIdBeforeElapsedSecs(bytes32 currencyKey, uint256 startingRoundId, uint256 startingTimestamp, uint256 timediff) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 61,
            "requires": [],
            "events": []
          },
          {
            "name": "inversePricing",
            "signature": "inversePricing(bytes32 currencyKey) view",
            "returns": "(uint256 entryPoint, uint256 upperLimit, uint256 lowerLimit, bool frozenAtUpperLimit, bool frozenAtLowerLimit)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 68,
            "requires": [],
            "events": []
          },
          {
            "name": "lastRateUpdateTimes",
            "signature": "lastRateUpdateTimes(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 79,
            "requires": [],
            "events": []
          },
          {
            "name": "oracle",
            "signature": "oracle() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 81,
            "requires": [],
            "events": []
          },
          {
            "name": "rateAndTimestampAtRound",
            "signature": "rateAndTimestampAtRound(bytes32 currencyKey, uint256 roundId) view",
            "returns": "(uint256 rate, uint256 time)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 83,
            "requires": [],
            "events": []
          },
          {
            "name": "rateAndUpdatedTime",
            "signature": "rateAndUpdatedTime(bytes32 currencyKey) view",
            "returns": "(uint256 rate, uint256 time)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 85,
            "requires": [],
            "events": []
          },
          {
            "name": "rateAndInvalid",
            "signature": "rateAndInvalid(bytes32 currencyKey) view",
            "returns": "(uint256 rate, bool isInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 87,
            "requires": [],
            "events": []
          },
          {
            "name": "rateForCurrency",
            "signature": "rateForCurrency(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 89,
            "requires": [],
            "events": []
          },
          {
            "name": "rateIsFlagged",
            "signature": "rateIsFlagged(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 91,
            "requires": [],
            "events": []
          },
          {
            "name": "rateIsFrozen",
            "signature": "rateIsFrozen(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 93,
            "requires": [],
            "events": []
          },
          {
            "name": "rateIsInvalid",
            "signature": "rateIsInvalid(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 95,
            "requires": [],
            "events": []
          },
          {
            "name": "rateIsStale",
            "signature": "rateIsStale(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 97,
            "requires": [],
            "events": []
          },
          {
            "name": "rateStalePeriod",
            "signature": "rateStalePeriod() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 99,
            "requires": [],
            "events": []
          },
          {
            "name": "ratesAndUpdatedTimeForCurrencyLastNRounds",
            "signature": "ratesAndUpdatedTimeForCurrencyLastNRounds(bytes32 currencyKey, uint256 numRounds) view",
            "returns": "(uint256[] rates, uint256[] times)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 101,
            "requires": [],
            "events": []
          },
          {
            "name": "ratesAndInvalidForCurrencies",
            "signature": "ratesAndInvalidForCurrencies(bytes32[] currencyKeys) view",
            "returns": "(uint256[] rates, bool anyRateInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 106,
            "requires": [],
            "events": []
          },
          {
            "name": "ratesForCurrencies",
            "signature": "ratesForCurrencies(bytes32[] currencyKeys) view",
            "returns": "(uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 111,
            "requires": [],
            "events": []
          },
          {
            "name": "freezeRate",
            "signature": "freezeRate(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 114,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [
          {
            "name": "RateAndUpdatedTime",
            "members": [
              {
                "name": "rate",
                "type": "uint216"
              },
              {
                "name": "time",
                "type": "uint40"
              }
            ],
            "lineNumber": 6
          },
          {
            "name": "InversePricing",
            "members": [
              {
                "name": "entryPoint",
                "type": "uint256"
              },
              {
                "name": "upperLimit",
                "type": "uint256"
              },
              {
                "name": "lowerLimit",
                "type": "uint256"
              },
              {
                "name": "frozenAtUpperLimit",
                "type": "bool"
              },
              {
                "name": "frozenAtLowerLimit",
                "type": "bool"
              }
            ],
            "lineNumber": 11
          }
        ],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IExchangeState.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IExchangeState": {
        "functions": [
          {
            "name": "getLengthOfEntries",
            "signature": "getLengthOfEntries(address account, bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "getEntryAt",
            "signature": "getEntryAt(address account, bytes32 currencyKey, uint256 index) view",
            "returns": "(bytes32 src, uint256 amount, bytes32 dest, uint256 amountReceived, uint256 exchangeFeeRate, uint256 timestamp, uint256 roundIdForSrc, uint256 roundIdForDest)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "getMaxTimestamp",
            "signature": "getMaxTimestamp(address account, bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 37,
            "requires": [],
            "events": []
          },
          {
            "name": "appendExchangeEntry",
            "signature": "appendExchangeEntry(address account, bytes32 src, uint256 amount, bytes32 dest, uint256 amountReceived, uint256 exchangeFeeRate, uint256 timestamp, uint256 roundIdForSrc, uint256 roundIdForDest)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 40,
            "requires": [],
            "events": []
          },
          {
            "name": "removeEntries",
            "signature": "removeEntries(address account, bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 52,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [
          {
            "name": "ExchangeEntry",
            "members": [
              {
                "name": "src",
                "type": "bytes32"
              },
              {
                "name": "amount",
                "type": "uint256"
              },
              {
                "name": "dest",
                "type": "bytes32"
              },
              {
                "name": "amountReceived",
                "type": "uint256"
              },
              {
                "name": "exchangeFeeRate",
                "type": "uint256"
              },
              {
                "name": "timestamp",
                "type": "uint256"
              },
              {
                "name": "roundIdForSrc",
                "type": "uint256"
              },
              {
                "name": "roundIdForDest",
                "type": "uint256"
              }
            ],
            "lineNumber": 6
          }
        ],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IExchanger.sol": {
    "imports": [
      "./IVirtualPynth.sol"
    ],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IExchanger": {
        "functions": [
          {
            "name": "calculateAmountAfterSettlement",
            "signature": "calculateAmountAfterSettlement(address from, bytes32 currencyKey, uint256 amount, uint256 refunded) view",
            "returns": "(uint256 amountAfterSettlement)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "isPynthRateInvalid",
            "signature": "isPynthRateInvalid(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "maxSecsLeftInWaitingPeriod",
            "signature": "maxSecsLeftInWaitingPeriod(address account, bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "settlementOwing",
            "signature": "settlementOwing(address account, bytes32 currencyKey) view",
            "returns": "(uint256 reclaimAmount, uint256 rebateAmount, uint256 numEntries)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "hasWaitingPeriodOrSettlementOwing",
            "signature": "hasWaitingPeriodOrSettlementOwing(address account, bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 28,
            "requires": [],
            "events": []
          },
          {
            "name": "feeRateForExchange",
            "signature": "feeRateForExchange(bytes32 sourceCurrencyKey, bytes32 destinationCurrencyKey) view",
            "returns": "(uint256 exchangeFeeRate)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 30,
            "requires": [],
            "events": []
          },
          {
            "name": "getAmountsForExchange",
            "signature": "getAmountsForExchange(uint256 sourceAmount, bytes32 sourceCurrencyKey, bytes32 destinationCurrencyKey) view",
            "returns": "(uint256 amountReceived, uint256 fee, uint256 exchangeFeeRate)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 35,
            "requires": [],
            "events": []
          },
          {
            "name": "priceDeviationThresholdFactor",
            "signature": "priceDeviationThresholdFactor() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 48,
            "requires": [],
            "events": []
          },
          {
            "name": "waitingPeriodSecs",
            "signature": "waitingPeriodSecs() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 50,
            "requires": [],
            "events": []
          },
          {
            "name": "exchange",
            "signature": "exchange(address from, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address destinationAddress)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 53,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeOnBehalf",
            "signature": "exchangeOnBehalf(address exchangeForAddress, address from, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 61,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeWithTracking",
            "signature": "exchangeWithTracking(address from, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address destinationAddress, address originator, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 69,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeOnBehalfWithTracking",
            "signature": "exchangeOnBehalfWithTracking(address exchangeForAddress, address from, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address originator, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 79,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeWithVirtual",
            "signature": "exchangeWithVirtual(address from, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address destinationAddress, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived, contract IVirtualPynth vPynth)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 89,
            "requires": [],
            "events": []
          },
          {
            "name": "settle",
            "signature": "settle(address from, bytes32 currencyKey)",
            "returns": "(uint256 reclaimed, uint256 refunded, uint256 numEntries)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 98,
            "requires": [],
            "events": []
          },
          {
            "name": "setLastExchangeRateForPynth",
            "signature": "setLastExchangeRateForPynth(bytes32 currencyKey, uint256 rate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 106,
            "requires": [],
            "events": []
          },
          {
            "name": "suspendPynthWithInvalidRate",
            "signature": "suspendPynthWithInvalidRate(bytes32 currencyKey)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 108,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IFeePool.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IFeePool": {
        "functions": [
          {
            "name": "FEE_ADDRESS",
            "signature": "FEE_ADDRESS() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "feesAvailable",
            "signature": "feesAvailable(address account) view",
            "returns": "(uint256, uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "feePeriodDuration",
            "signature": "feePeriodDuration() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "isFeesClaimable",
            "signature": "isFeesClaimable(address account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "targetThreshold",
            "signature": "targetThreshold() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "totalFeesAvailable",
            "signature": "totalFeesAvailable() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "totalRewardsAvailable",
            "signature": "totalRewardsAvailable() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "claimFees",
            "signature": "claimFees()",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 23,
            "requires": [],
            "events": []
          },
          {
            "name": "claimOnBehalf",
            "signature": "claimOnBehalf(address claimingForAddress)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 25,
            "requires": [],
            "events": []
          },
          {
            "name": "closeCurrentFeePeriod",
            "signature": "closeCurrentFeePeriod()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 27,
            "requires": [],
            "events": []
          },
          {
            "name": "appendAccountIssuanceRecord",
            "signature": "appendAccountIssuanceRecord(address account, uint256 lockedAmount, uint256 debtEntryIndex)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 30,
            "requires": [],
            "events": []
          },
          {
            "name": "recordFeePaid",
            "signature": "recordFeePaid(uint256 pUSDAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 36,
            "requires": [],
            "events": []
          },
          {
            "name": "setRewardsToDistribute",
            "signature": "setRewardsToDistribute(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 38,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IFlexibleStorage.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IFlexibleStorage": {
        "functions": [
          {
            "name": "getUIntValue",
            "signature": "getUIntValue(bytes32 contractName, bytes32 record) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "getUIntValues",
            "signature": "getUIntValues(bytes32 contractName, bytes32[] records) view",
            "returns": "(uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "getIntValue",
            "signature": "getIntValue(bytes32 contractName, bytes32 record) view",
            "returns": "(int256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "getIntValues",
            "signature": "getIntValues(bytes32 contractName, bytes32[] records) view",
            "returns": "(int256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "getAddressValue",
            "signature": "getAddressValue(bytes32 contractName, bytes32 record) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "getAddressValues",
            "signature": "getAddressValues(bytes32 contractName, bytes32[] records) view",
            "returns": "(address[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "getBoolValue",
            "signature": "getBoolValue(bytes32 contractName, bytes32 record) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "getBoolValues",
            "signature": "getBoolValues(bytes32 contractName, bytes32[] records) view",
            "returns": "(bool[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "getBytes32Value",
            "signature": "getBytes32Value(bytes32 contractName, bytes32 record) view",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "getBytes32Values",
            "signature": "getBytes32Values(bytes32 contractName, bytes32[] records) view",
            "returns": "(bytes32[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteUIntValue",
            "signature": "deleteUIntValue(bytes32 contractName, bytes32 record)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 27,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteIntValue",
            "signature": "deleteIntValue(bytes32 contractName, bytes32 record)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteAddressValue",
            "signature": "deleteAddressValue(bytes32 contractName, bytes32 record)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 31,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteBoolValue",
            "signature": "deleteBoolValue(bytes32 contractName, bytes32 record)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 33,
            "requires": [],
            "events": []
          },
          {
            "name": "deleteBytes32Value",
            "signature": "deleteBytes32Value(bytes32 contractName, bytes32 record)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 35,
            "requires": [],
            "events": []
          },
          {
            "name": "setUIntValue",
            "signature": "setUIntValue(bytes32 contractName, bytes32 record, uint256 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 37,
            "requires": [],
            "events": []
          },
          {
            "name": "setUIntValues",
            "signature": "setUIntValues(bytes32 contractName, bytes32[] records, uint256[] values)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 43,
            "requires": [],
            "events": []
          },
          {
            "name": "setIntValue",
            "signature": "setIntValue(bytes32 contractName, bytes32 record, int256 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 49,
            "requires": [],
            "events": []
          },
          {
            "name": "setIntValues",
            "signature": "setIntValues(bytes32 contractName, bytes32[] records, int256[] values)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 55,
            "requires": [],
            "events": []
          },
          {
            "name": "setAddressValue",
            "signature": "setAddressValue(bytes32 contractName, bytes32 record, address value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 61,
            "requires": [],
            "events": []
          },
          {
            "name": "setAddressValues",
            "signature": "setAddressValues(bytes32 contractName, bytes32[] records, address[] values)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 67,
            "requires": [],
            "events": []
          },
          {
            "name": "setBoolValue",
            "signature": "setBoolValue(bytes32 contractName, bytes32 record, bool value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 73,
            "requires": [],
            "events": []
          },
          {
            "name": "setBoolValues",
            "signature": "setBoolValues(bytes32 contractName, bytes32[] records, bool[] values)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 79,
            "requires": [],
            "events": []
          },
          {
            "name": "setBytes32Value",
            "signature": "setBytes32Value(bytes32 contractName, bytes32 record, bytes32 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 85,
            "requires": [],
            "events": []
          },
          {
            "name": "setBytes32Values",
            "signature": "setBytes32Values(bytes32 contractName, bytes32[] records, bytes32[] values)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 91,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IHasBalance.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IHasBalance": {
        "functions": [
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IIssuer.sol": {
    "imports": [
      "../interfaces/IPynth.sol"
    ],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IIssuer": {
        "functions": [
          {
            "name": "anyPynthOrPERIRateIsInvalid",
            "signature": "anyPynthOrPERIRateIsInvalid() view",
            "returns": "(bool anyRateInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "availableCurrencyKeys",
            "signature": "availableCurrencyKeys() view",
            "returns": "(bytes32[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "availablePynthCount",
            "signature": "availablePynthCount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "availablePynths",
            "signature": "availablePynths(uint256 index) view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "canBurnPynths",
            "signature": "canBurnPynths(address account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "collateral",
            "signature": "collateral(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralisationRatio",
            "signature": "collateralisationRatio(address issuer) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralisationRatioAndAnyRatesInvalid",
            "signature": "collateralisationRatioAndAnyRatesInvalid(address _issuer) view",
            "returns": "(uint256 cratio, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "debtBalanceOf",
            "signature": "debtBalanceOf(address issuer, bytes32 currencyKey) view",
            "returns": "(uint256 debtBalance)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 27,
            "requires": [],
            "events": []
          },
          {
            "name": "issuanceRatio",
            "signature": "issuanceRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "lastIssueEvent",
            "signature": "lastIssueEvent(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 31,
            "requires": [],
            "events": []
          },
          {
            "name": "maxIssuablePynths",
            "signature": "maxIssuablePynths(address issuer) view",
            "returns": "(uint256 maxIssuable)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 33,
            "requires": [],
            "events": []
          },
          {
            "name": "minimumStakeTime",
            "signature": "minimumStakeTime() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 35,
            "requires": [],
            "events": []
          },
          {
            "name": "remainingIssuablePynths",
            "signature": "remainingIssuablePynths(address issuer) view",
            "returns": "(uint256 maxIssuable, uint256 alreadyIssued, uint256 totalSystemDebt)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 37,
            "requires": [],
            "events": []
          },
          {
            "name": "currentUSDCDebtQuota",
            "signature": "currentUSDCDebtQuota(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "availableUSDCStakeAmount",
            "signature": "availableUSDCStakeAmount(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 50,
            "requires": [],
            "events": []
          },
          {
            "name": "pynths",
            "signature": "pynths(bytes32 currencyKey) view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 54,
            "requires": [],
            "events": []
          },
          {
            "name": "getPynths",
            "signature": "getPynths(bytes32[] currencyKeys) view",
            "returns": "(contract IPynth[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 56,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthsByAddress",
            "signature": "pynthsByAddress(address pynthAddress) view",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 58,
            "requires": [],
            "events": []
          },
          {
            "name": "totalIssuedPynths",
            "signature": "totalIssuedPynths(bytes32 currencyKey, bool excludeEtherCollateral) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 60,
            "requires": [],
            "events": []
          },
          {
            "name": "transferablePeriFinanceAndAnyRateIsInvalid",
            "signature": "transferablePeriFinanceAndAnyRateIsInvalid(address account, uint256 balance) view",
            "returns": "(uint256 transferable, bool anyRateIsInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 62,
            "requires": [],
            "events": []
          },
          {
            "name": "issuePynthsAndStakeUSDC",
            "signature": "issuePynthsAndStakeUSDC(address _issuer, uint256 _issueAmount, uint256 _usdcStakeAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 68,
            "requires": [],
            "events": []
          },
          {
            "name": "issueMaxPynths",
            "signature": "issueMaxPynths(address _issuer)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 74,
            "requires": [],
            "events": []
          },
          {
            "name": "issuePynthsAndStakeMaxUSDC",
            "signature": "issuePynthsAndStakeMaxUSDC(address _issuer, uint256 _issueAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 77,
            "requires": [],
            "events": []
          },
          {
            "name": "burnPynthsAndUnstakeUSDC",
            "signature": "burnPynthsAndUnstakeUSDC(address _from, uint256 _burnAmount, uint256 _unstakeAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 80,
            "requires": [],
            "events": []
          },
          {
            "name": "burnPynthsAndUnstakeUSDCToTarget",
            "signature": "burnPynthsAndUnstakeUSDCToTarget(address _from)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 86,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidateDelinquentAccount",
            "signature": "liquidateDelinquentAccount(address account, uint256 pusdAmount, address liquidator)",
            "returns": "(uint256 totalRedeemed, uint256 amountToLiquidate)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 89,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/ILiquidations.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "ILiquidations": {
        "functions": [
          {
            "name": "isOpenForLiquidation",
            "signature": "isOpenForLiquidation(address account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "getLiquidationDeadlineForAccount",
            "signature": "getLiquidationDeadlineForAccount(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "isLiquidationDeadlinePassed",
            "signature": "isLiquidationDeadlinePassed(address account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationDelay",
            "signature": "liquidationDelay() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationRatio",
            "signature": "liquidationRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationPenalty",
            "signature": "liquidationPenalty() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "calculateAmountToFixCollateral",
            "signature": "calculateAmountToFixCollateral(uint256 debtBalance, uint256 collateral) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "flagAccountForLiquidation",
            "signature": "flagAccountForLiquidation(address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "removeAccountInLiquidation",
            "signature": "removeAccountInLiquidation(address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          },
          {
            "name": "checkAndRemoveAccountInLiquidation",
            "signature": "checkAndRemoveAccountInLiquidation(address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 26,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IPeriFinance.sol": {
    "imports": [
      "./IPynth.sol",
      "./IVirtualPynth.sol"
    ],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IPeriFinance": {
        "functions": [
          {
            "name": "getRequiredAddress",
            "signature": "getRequiredAddress(bytes32 contractName) view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 9,
            "requires": [],
            "events": []
          },
          {
            "name": "anyPynthOrPERIRateIsInvalid",
            "signature": "anyPynthOrPERIRateIsInvalid() view",
            "returns": "(bool anyRateInvalid)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "availableCurrencyKeys",
            "signature": "availableCurrencyKeys() view",
            "returns": "(bytes32[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "availablePynthCount",
            "signature": "availablePynthCount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "availablePynths",
            "signature": "availablePynths(uint256 index) view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "collateral",
            "signature": "collateral(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "collateralisationRatio",
            "signature": "collateralisationRatio(address issuer) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 23,
            "requires": [],
            "events": []
          },
          {
            "name": "debtBalanceOf",
            "signature": "debtBalanceOf(address issuer, bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 25,
            "requires": [],
            "events": []
          },
          {
            "name": "isWaitingPeriod",
            "signature": "isWaitingPeriod(bytes32 currencyKey) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 27,
            "requires": [],
            "events": []
          },
          {
            "name": "maxIssuablePynths",
            "signature": "maxIssuablePynths(address issuer) view",
            "returns": "(uint256 maxIssuable)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "remainingIssuablePynths",
            "signature": "remainingIssuablePynths(address issuer) view",
            "returns": "(uint256 maxIssuable, uint256 alreadyIssued, uint256 totalSystemDebt)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 31,
            "requires": [],
            "events": []
          },
          {
            "name": "pynths",
            "signature": "pynths(bytes32 currencyKey) view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 40,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthsByAddress",
            "signature": "pynthsByAddress(address pynthAddress) view",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "totalIssuedPynths",
            "signature": "totalIssuedPynths(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 44,
            "requires": [],
            "events": []
          },
          {
            "name": "totalIssuedPynthsExcludeEtherCollateral",
            "signature": "totalIssuedPynthsExcludeEtherCollateral(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "transferablePeriFinance",
            "signature": "transferablePeriFinance(address account) view",
            "returns": "(uint256 transferable)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 48,
            "requires": [],
            "events": []
          },
          {
            "name": "currentUSDCDebtQuota",
            "signature": "currentUSDCDebtQuota(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 50,
            "requires": [],
            "events": []
          },
          {
            "name": "availableUSDCStakeAmount",
            "signature": "availableUSDCStakeAmount(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 54,
            "requires": [],
            "events": []
          },
          {
            "name": "usdcStakedAmountOf",
            "signature": "usdcStakedAmountOf(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 58,
            "requires": [],
            "events": []
          },
          {
            "name": "usdcTotalStakedAmount",
            "signature": "usdcTotalStakedAmount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 62,
            "requires": [],
            "events": []
          },
          {
            "name": "userUSDCStakingShare",
            "signature": "userUSDCStakingShare(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 66,
            "requires": [],
            "events": []
          },
          {
            "name": "totalUSDCStakerCount",
            "signature": "totalUSDCStakerCount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 70,
            "requires": [],
            "events": []
          },
          {
            "name": "issuePynthsAndStakeUSDC",
            "signature": "issuePynthsAndStakeUSDC(uint256 _issueAmount, uint256 _usdcStakeAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 75,
            "requires": [],
            "events": []
          },
          {
            "name": "issueMaxPynths",
            "signature": "issueMaxPynths()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 78,
            "requires": [],
            "events": []
          },
          {
            "name": "issuePynthsAndStakeMaxUSDC",
            "signature": "issuePynthsAndStakeMaxUSDC(uint256 _issueAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 81,
            "requires": [],
            "events": []
          },
          {
            "name": "burnPynthsAndUnstakeUSDC",
            "signature": "burnPynthsAndUnstakeUSDC(uint256 _burnAmount, uint256 _unstakeAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 84,
            "requires": [],
            "events": []
          },
          {
            "name": "burnPynthsAndUnstakeUSDCToTarget",
            "signature": "burnPynthsAndUnstakeUSDCToTarget()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 87,
            "requires": [],
            "events": []
          },
          {
            "name": "exchange",
            "signature": "exchange(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 90,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeOnBehalf",
            "signature": "exchangeOnBehalf(address exchangeForAddress, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 96,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeWithTracking",
            "signature": "exchangeWithTracking(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address originator, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 103,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeOnBehalfWithTracking",
            "signature": "exchangeOnBehalfWithTracking(address exchangeForAddress, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address originator, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 111,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeWithVirtual",
            "signature": "exchangeWithVirtual(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, bytes32 trackingCode)",
            "returns": "(uint256 amountReceived, contract IVirtualPynth vPynth)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 120,
            "requires": [],
            "events": []
          },
          {
            "name": "mint",
            "signature": "mint()",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 127,
            "requires": [],
            "events": []
          },
          {
            "name": "settle",
            "signature": "settle(bytes32 currencyKey)",
            "returns": "(uint256 reclaimed, uint256 refunded, uint256 numEntries)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 129,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidateDelinquentAccount",
            "signature": "liquidateDelinquentAccount(address account, uint256 pusdAmount)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 138,
            "requires": [],
            "events": []
          },
          {
            "name": "mintSecondary",
            "signature": "mintSecondary(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 142,
            "requires": [],
            "events": []
          },
          {
            "name": "mintSecondaryRewards",
            "signature": "mintSecondaryRewards(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 144,
            "requires": [],
            "events": []
          },
          {
            "name": "burnSecondary",
            "signature": "burnSecondary(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 146,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IPeriFinanceBridgeToBase.sol": {
    "imports": [
      "./IRewardEscrowV2.sol"
    ],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IPeriFinanceBridgeToBase": {
        "functions": [
          {
            "name": "initiateWithdrawal",
            "signature": "initiateWithdrawal(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 9,
            "requires": [],
            "events": []
          },
          {
            "name": "completeDeposit",
            "signature": "completeDeposit(address account, uint256 depositAmount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "completeEscrowMigration",
            "signature": "completeEscrowMigration(address account, uint256 escrowedAmount, struct VestingEntries.VestingEntry[] vestingEntries)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "completeRewardDeposit",
            "signature": "completeRewardDeposit(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IPeriFinanceBridgeToOptimism.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IPeriFinanceBridgeToOptimism": {
        "functions": [
          {
            "name": "completeWithdrawal",
            "signature": "completeWithdrawal(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 7,
            "requires": [],
            "events": []
          },
          {
            "name": "initiateDeposit",
            "signature": "initiateDeposit(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "initiateEscrowMigration",
            "signature": "initiateEscrowMigration(uint256[][] entryIDs)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "initiateRewardDeposit",
            "signature": "initiateRewardDeposit(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "depositAndMigrateEscrow",
            "signature": "depositAndMigrateEscrow(uint256 depositAmount, uint256[][] entryIDs)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IPeriFinanceState.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IPeriFinanceState": {
        "functions": [
          {
            "name": "debtLedger",
            "signature": "debtLedger(uint256 index) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "issuanceData",
            "signature": "issuanceData(address account) view",
            "returns": "(uint256 initialDebtOwnership, uint256 debtEntryIndex)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "debtLedgerLength",
            "signature": "debtLedgerLength() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "hasIssued",
            "signature": "hasIssued(address account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "lastDebtLedgerEntry",
            "signature": "lastDebtLedgerEntry() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "incrementTotalIssuerCount",
            "signature": "incrementTotalIssuerCount()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "decrementTotalIssuerCount",
            "signature": "decrementTotalIssuerCount()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "setCurrentIssuanceData",
            "signature": "setCurrentIssuanceData(address account, uint256 initialDebtOwnership)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "appendDebtLedgerValue",
            "signature": "appendDebtLedgerValue(uint256 value)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 23,
            "requires": [],
            "events": []
          },
          {
            "name": "clearIssuanceData",
            "signature": "clearIssuanceData(address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 25,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IPynth.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IPynth": {
        "functions": [
          {
            "name": "currencyKey",
            "signature": "currencyKey() view",
            "returns": "(bytes32)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "transferablePynths",
            "signature": "transferablePynths(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "transferAndSettle",
            "signature": "transferAndSettle(address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 11,
            "requires": [],
            "events": []
          },
          {
            "name": "transferFromAndSettle",
            "signature": "transferFromAndSettle(address from, address to, uint256 value)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "burn",
            "signature": "burn(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "issue",
            "signature": "issue(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IRewardEscrow.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IRewardEscrow": {
        "functions": [
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "numVestingEntries",
            "signature": "numVestingEntries(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "totalEscrowedAccountBalance",
            "signature": "totalEscrowedAccountBalance(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "totalVestedAccountBalance",
            "signature": "totalVestedAccountBalance(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingScheduleEntry",
            "signature": "getVestingScheduleEntry(address account, uint256 index) view",
            "returns": "(uint256[2])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "getNextVestingIndex",
            "signature": "getNextVestingIndex(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "appendVestingEntry",
            "signature": "appendVestingEntry(address account, uint256 quantity)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "vest",
            "signature": "vest()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IRewardEscrowV2.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {
      "VestingEntries": {
        "functions": [],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [
          {
            "name": "VestingEntry",
            "members": [
              {
                "name": "endTime",
                "type": "uint64"
              },
              {
                "name": "escrowAmount",
                "type": "uint256"
              }
            ],
            "lineNumber": 5
          },
          {
            "name": "VestingEntryWithID",
            "members": [
              {
                "name": "endTime",
                "type": "uint64"
              },
              {
                "name": "escrowAmount",
                "type": "uint256"
              },
              {
                "name": "entryID",
                "type": "uint256"
              }
            ],
            "lineNumber": 9
          }
        ],
        "inherits": []
      }
    },
    "interfaces": {
      "IRewardEscrowV2": {
        "functions": [
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "numVestingEntries",
            "signature": "numVestingEntries(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "totalEscrowedAccountBalance",
            "signature": "totalEscrowedAccountBalance(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "totalVestedAccountBalance",
            "signature": "totalVestedAccountBalance(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingQuantity",
            "signature": "getVestingQuantity(address account, uint256[] entryIDs) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 26,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingSchedules",
            "signature": "getVestingSchedules(address account, uint256 index, uint256 pageSize) view",
            "returns": "(struct VestingEntries.VestingEntryWithID[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 28,
            "requires": [],
            "events": []
          },
          {
            "name": "getAccountVestingEntryIDs",
            "signature": "getAccountVestingEntryIDs(address account, uint256 index, uint256 pageSize) view",
            "returns": "(uint256[])",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 34,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingEntryClaimable",
            "signature": "getVestingEntryClaimable(address account, uint256 entryID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 40,
            "requires": [],
            "events": []
          },
          {
            "name": "getVestingEntry",
            "signature": "getVestingEntry(address account, uint256 entryID) view",
            "returns": "(uint64, uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "vest",
            "signature": "vest(uint256[] entryIDs)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 45,
            "requires": [],
            "events": []
          },
          {
            "name": "createEscrowEntry",
            "signature": "createEscrowEntry(address beneficiary, uint256 deposit, uint256 duration)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 47,
            "requires": [],
            "events": []
          },
          {
            "name": "appendVestingEntry",
            "signature": "appendVestingEntry(address account, uint256 quantity, uint256 duration)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 53,
            "requires": [],
            "events": []
          },
          {
            "name": "migrateVestingSchedule",
            "signature": "migrateVestingSchedule(address _addressToMigrate)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 59,
            "requires": [],
            "events": []
          },
          {
            "name": "migrateAccountEscrowBalances",
            "signature": "migrateAccountEscrowBalances(address[] accounts, uint256[] escrowBalances, uint256[] vestedBalances)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 61,
            "requires": [],
            "events": []
          },
          {
            "name": "startMergingWindow",
            "signature": "startMergingWindow()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 68,
            "requires": [],
            "events": []
          },
          {
            "name": "mergeAccount",
            "signature": "mergeAccount(address accountToMerge, uint256[] entryIDs)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 70,
            "requires": [],
            "events": []
          },
          {
            "name": "nominateAccountToMerge",
            "signature": "nominateAccountToMerge(address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 72,
            "requires": [],
            "events": []
          },
          {
            "name": "accountMergingIsOpen",
            "signature": "accountMergingIsOpen() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 74,
            "requires": [],
            "events": []
          },
          {
            "name": "importVestingEntries",
            "signature": "importVestingEntries(address account, uint256 escrowedAmount, struct VestingEntries.VestingEntry[] vestingEntries)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 77,
            "requires": [],
            "events": []
          },
          {
            "name": "burnForMigration",
            "signature": "burnForMigration(address account, uint256[] entryIDs)",
            "returns": "(uint256 escrowedAccountBalance, struct VestingEntries.VestingEntry[] vestingEntries)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 84,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IRewardsDistribution.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IRewardsDistribution": {
        "functions": [
          {
            "name": "authority",
            "signature": "authority() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "distributions",
            "signature": "distributions(uint256 index) view",
            "returns": "(address destination, uint256 amount)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "distributionsLength",
            "signature": "distributionsLength() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "distributeRewards",
            "signature": "distributeRewards(uint256 amount)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [
          {
            "name": "DistributionData",
            "members": [
              {
                "name": "destination",
                "type": "address"
              },
              {
                "name": "amount",
                "type": "uint256"
              }
            ],
            "lineNumber": 6
          }
        ],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IShortingRewards.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IShortingRewards": {
        "functions": [
          {
            "name": "lastTimeRewardApplicable",
            "signature": "lastTimeRewardApplicable() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardPerToken",
            "signature": "rewardPerToken() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "earned",
            "signature": "earned(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "getRewardForDuration",
            "signature": "getRewardForDuration() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "totalSupply",
            "signature": "totalSupply() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "enrol",
            "signature": "enrol(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "withdraw",
            "signature": "withdraw(address account, uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "getReward",
            "signature": "getReward(address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IStakingRewards.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IStakingRewards": {
        "functions": [
          {
            "name": "lastTimeRewardApplicable",
            "signature": "lastTimeRewardApplicable() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "rewardPerToken",
            "signature": "rewardPerToken() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "earned",
            "signature": "earned(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "getRewardForDuration",
            "signature": "getRewardForDuration() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "totalSupply",
            "signature": "totalSupply() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "balanceOf",
            "signature": "balanceOf(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "stake",
            "signature": "stake(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "withdraw",
            "signature": "withdraw(uint256 amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "getReward",
            "signature": "getReward()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          },
          {
            "name": "exit",
            "signature": "exit()",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 26,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IStakingStateUSDC.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IStakingStateUSDC": {
        "functions": [
          {
            "name": "stake",
            "signature": "stake(address _account, uint256 _amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "unstake",
            "signature": "unstake(address _account, uint256 _amount)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 9,
            "requires": [],
            "events": []
          },
          {
            "name": "refund",
            "signature": "refund(address _account, uint256 _amount)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "setUSDCAddress",
            "signature": "setUSDCAddress(address _usdcAddress)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "usdcAddress",
            "signature": "usdcAddress() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "stakedAmountOf",
            "signature": "stakedAmountOf(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 25,
            "requires": [],
            "events": []
          },
          {
            "name": "totalStakerCount",
            "signature": "totalStakerCount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "totalStakedAmount",
            "signature": "totalStakedAmount() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 33,
            "requires": [],
            "events": []
          },
          {
            "name": "userStakingShare",
            "signature": "userStakingShare(address _account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 37,
            "requires": [],
            "events": []
          },
          {
            "name": "decimals",
            "signature": "decimals() view",
            "returns": "(uint8)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 41,
            "requires": [],
            "events": []
          },
          {
            "name": "hasStaked",
            "signature": "hasStaked(address _account) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 45,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/ISupplySchedule.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "ISupplySchedule": {
        "functions": [
          {
            "name": "mintableSupply",
            "signature": "mintableSupply() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "isMintable",
            "signature": "isMintable() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "minterReward",
            "signature": "minterReward() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "recordMintEvent",
            "signature": "recordMintEvent(uint256 supplyMinted)",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/ISystemSettings.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "ISystemSettings": {
        "functions": [
          {
            "name": "priceDeviationThresholdFactor",
            "signature": "priceDeviationThresholdFactor() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 6,
            "requires": [],
            "events": []
          },
          {
            "name": "waitingPeriodSecs",
            "signature": "waitingPeriodSecs() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "issuanceRatio",
            "signature": "issuanceRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "feePeriodDuration",
            "signature": "feePeriodDuration() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "targetThreshold",
            "signature": "targetThreshold() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationDelay",
            "signature": "liquidationDelay() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationRatio",
            "signature": "liquidationRatio() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "liquidationPenalty",
            "signature": "liquidationPenalty() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "rateStalePeriod",
            "signature": "rateStalePeriod() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeFeeRate",
            "signature": "exchangeFeeRate(bytes32 currencyKey) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          },
          {
            "name": "minimumStakeTime",
            "signature": "minimumStakeTime() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 26,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/ISystemStatus.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "ISystemStatus": {
        "functions": [
          {
            "name": "accessControl",
            "signature": "accessControl(bytes32 section, address account) view",
            "returns": "(bool canSuspend, bool canResume)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "requireSystemActive",
            "signature": "requireSystemActive() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 20,
            "requires": [],
            "events": []
          },
          {
            "name": "requireIssuanceActive",
            "signature": "requireIssuanceActive() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 22,
            "requires": [],
            "events": []
          },
          {
            "name": "requireExchangeActive",
            "signature": "requireExchangeActive() view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 24,
            "requires": [],
            "events": []
          },
          {
            "name": "requireExchangeBetweenPynthsAllowed",
            "signature": "requireExchangeBetweenPynthsAllowed(bytes32 sourceCurrencyKey, bytes32 destinationCurrencyKey) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 26,
            "requires": [],
            "events": []
          },
          {
            "name": "requirePynthActive",
            "signature": "requirePynthActive(bytes32 currencyKey) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 28,
            "requires": [],
            "events": []
          },
          {
            "name": "requirePynthsActive",
            "signature": "requirePynthsActive(bytes32 sourceCurrencyKey, bytes32 destinationCurrencyKey) view",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 30,
            "requires": [],
            "events": []
          },
          {
            "name": "systemSuspension",
            "signature": "systemSuspension() view",
            "returns": "(bool suspended, uint248 reason)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 32,
            "requires": [],
            "events": []
          },
          {
            "name": "issuanceSuspension",
            "signature": "issuanceSuspension() view",
            "returns": "(bool suspended, uint248 reason)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 34,
            "requires": [],
            "events": []
          },
          {
            "name": "exchangeSuspension",
            "signature": "exchangeSuspension() view",
            "returns": "(bool suspended, uint248 reason)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 36,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthExchangeSuspension",
            "signature": "pynthExchangeSuspension(bytes32 currencyKey) view",
            "returns": "(bool suspended, uint248 reason)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "pynthSuspension",
            "signature": "pynthSuspension(bytes32 currencyKey) view",
            "returns": "(bool suspended, uint248 reason)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 40,
            "requires": [],
            "events": []
          },
          {
            "name": "getPynthExchangeSuspensions",
            "signature": "getPynthExchangeSuspensions(bytes32[] pynths) view",
            "returns": "(bool[] exchangeSuspensions, uint256[] reasons)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 42,
            "requires": [],
            "events": []
          },
          {
            "name": "getPynthSuspensions",
            "signature": "getPynthSuspensions(bytes32[] pynths) view",
            "returns": "(bool[] suspensions, uint256[] reasons)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 47,
            "requires": [],
            "events": []
          },
          {
            "name": "suspendPynth",
            "signature": "suspendPynth(bytes32 currencyKey, uint256 reason)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 53,
            "requires": [],
            "events": []
          },
          {
            "name": "updateAccessControl",
            "signature": "updateAccessControl(bytes32 section, address account, bool canSuspend, bool canResume)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 55,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [
          {
            "name": "Status",
            "members": [
              {
                "name": "canSuspend",
                "type": "bool"
              },
              {
                "name": "canResume",
                "type": "bool"
              }
            ],
            "lineNumber": 5
          },
          {
            "name": "Suspension",
            "members": [
              {
                "name": "suspended",
                "type": "bool"
              },
              {
                "name": "reason",
                "type": "uint248"
              }
            ],
            "lineNumber": 10
          }
        ],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/ITradingRewards.sol": {
    "imports": [],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "ITradingRewards": {
        "functions": [
          {
            "name": "getAvailableRewards",
            "signature": "getAvailableRewards() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 7,
            "requires": [],
            "events": []
          },
          {
            "name": "getUnassignedRewards",
            "signature": "getUnassignedRewards() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 9,
            "requires": [],
            "events": []
          },
          {
            "name": "getRewardsToken",
            "signature": "getRewardsToken() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 11,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodController",
            "signature": "getPeriodController() view",
            "returns": "(address)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 13,
            "requires": [],
            "events": []
          },
          {
            "name": "getCurrentPeriod",
            "signature": "getCurrentPeriod() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 15,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodIsClaimable",
            "signature": "getPeriodIsClaimable(uint256 periodID) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 17,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodIsFinalized",
            "signature": "getPeriodIsFinalized(uint256 periodID) view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 19,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodRecordedFees",
            "signature": "getPeriodRecordedFees(uint256 periodID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodTotalRewards",
            "signature": "getPeriodTotalRewards(uint256 periodID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 23,
            "requires": [],
            "events": []
          },
          {
            "name": "getPeriodAvailableRewards",
            "signature": "getPeriodAvailableRewards(uint256 periodID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 25,
            "requires": [],
            "events": []
          },
          {
            "name": "getUnaccountedFeesForAccountForPeriod",
            "signature": "getUnaccountedFeesForAccountForPeriod(address account, uint256 periodID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 27,
            "requires": [],
            "events": []
          },
          {
            "name": "getAvailableRewardsForAccountForPeriod",
            "signature": "getAvailableRewardsForAccountForPeriod(address account, uint256 periodID) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 29,
            "requires": [],
            "events": []
          },
          {
            "name": "getAvailableRewardsForAccountForPeriods",
            "signature": "getAvailableRewardsForAccountForPeriods(address account, uint256[] periodIDs) view",
            "returns": "(uint256 totalRewards)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 31,
            "requires": [],
            "events": []
          },
          {
            "name": "claimRewardsForPeriod",
            "signature": "claimRewardsForPeriod(uint256 periodID)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 38,
            "requires": [],
            "events": []
          },
          {
            "name": "claimRewardsForPeriods",
            "signature": "claimRewardsForPeriods(uint256[] periodIDs)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 40,
            "requires": [],
            "events": []
          },
          {
            "name": "recordExchangeFeeForAccount",
            "signature": "recordExchangeFeeForAccount(uint256 usdFeeAmount, address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 44,
            "requires": [],
            "events": []
          },
          {
            "name": "closeCurrentPeriodWithRewards",
            "signature": "closeCurrentPeriodWithRewards(uint256 rewards)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 46,
            "requires": [],
            "events": []
          },
          {
            "name": "recoverTokens",
            "signature": "recoverTokens(address tokenAddress, address recoverAddress)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 48,
            "requires": [],
            "events": []
          },
          {
            "name": "recoverUnassignedRewardTokens",
            "signature": "recoverUnassignedRewardTokens(address recoverAddress)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 50,
            "requires": [],
            "events": []
          },
          {
            "name": "recoverAssignedRewardTokensAndDestroyPeriod",
            "signature": "recoverAssignedRewardTokensAndDestroyPeriod(address recoverAddress, uint256 periodID)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 52,
            "requires": [],
            "events": []
          },
          {
            "name": "setPeriodController",
            "signature": "setPeriodController(address newPeriodController)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 54,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  },
  "contracts/interfaces/IVirtualPynth.sol": {
    "imports": [
      "./IPynth.sol"
    ],
    "contracts": {},
    "libraries": {},
    "interfaces": {
      "IVirtualPynth": {
        "functions": [
          {
            "name": "balanceOfUnderlying",
            "signature": "balanceOfUnderlying(address account) view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 8,
            "requires": [],
            "events": []
          },
          {
            "name": "rate",
            "signature": "rate() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 10,
            "requires": [],
            "events": []
          },
          {
            "name": "readyToSettle",
            "signature": "readyToSettle() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 12,
            "requires": [],
            "events": []
          },
          {
            "name": "secsLeftInWaitingPeriod",
            "signature": "secsLeftInWaitingPeriod() view",
            "returns": "(uint256)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 14,
            "requires": [],
            "events": []
          },
          {
            "name": "settled",
            "signature": "settled() view",
            "returns": "(bool)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 16,
            "requires": [],
            "events": []
          },
          {
            "name": "pynth",
            "signature": "pynth() view",
            "returns": "(contract IPynth)",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 18,
            "requires": [],
            "events": []
          },
          {
            "name": "settle",
            "signature": "settle(address account)",
            "returns": "()",
            "modifiers": [],
            "visibility": "external",
            "lineNumber": 21,
            "requires": [],
            "events": []
          }
        ],
        "events": [],
        "variables": [],
        "modifiers": [],
        "structs": [],
        "inherits": []
      }
    }
  }
}