[
  {
    "inputs": [
      {
        "internalType": "contract ISystemVariables",
        "name": "systemVariables_",
        "type": "address"
      },
      {
        "internalType": "contract IUserManager",
        "name": "userManager_",
        "type": "address"
      },
      {
        "internalType": "contract ILendingPoolManager",
        "name": "lendingPoolManager_",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "epoch",
        "type": "uint256"
      }
    ],
    "name": "ClearingAlreadyExecuted",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ConfigurationAddressZero",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "lendingPool",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "targetEpoch",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "nextEpoch",
        "type": "uint256"
      }
    ],
    "name": "InvalidClearingTargetEpochForLendingPool",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidInitialization",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "lendingPool",
        "type": "address"
      }
    ],
    "name": "InvalidLendingPool",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "lendingPool",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "tranche",
        "type": "address"
      }
    ],
    "name": "InvalidTranche",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LendingPoolIsNotStopped",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LendingPoolIsStopped",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotInitializing",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyClearingCoordinator",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyLendingPoolManager",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "ownLendingPool",
        "type": "address"
      }
    ],
    "name": "OnlyOwnLendingPool",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "ownPendingPool",
        "type": "address"
      }
    ],
    "name": "OnlyOwnPendingPool",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "targetEpoch",
        "type": "uint256"
      }
    ],
    "name": "TargetEpochClearingNotStarted",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "targetEpoch",
        "type": "uint256"
      }
    ],
    "name": "UserLoyaltyLevelsNotYetProcessed",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "lendingPool",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "epoch",
        "type": "uint256"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "drawAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256[]",
            "name": "trancheDesiredRatios",
            "type": "uint256[]"
          },
          {
            "internalType": "uint256",
            "name": "maxExcessPercentage",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "minExcessPercentage",
            "type": "uint256"
          }
        ],
        "indexed": false,
        "internalType": "struct ClearingConfiguration",
        "name": "clearingConfig",
        "type": "tuple"
      }
    ],
    "name": "ClearingConfigSet",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "lendingPool",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "epoch",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "enum ClearingStatus",
        "name": "clearingStatus",
        "type": "uint8"
      }
    ],
    "name": "ClearingExecuted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint64",
        "name": "version",
        "type": "uint64"
      }
    ],
    "name": "Initialized",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "lendingPool",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "targetEpoch",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "priorityCalculationBatchSize",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "acceptRequestsBatchSize",
        "type": "uint256"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "drawAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256[]",
            "name": "trancheDesiredRatios",
            "type": "uint256[]"
          },
          {
            "internalType": "uint256",
            "name": "maxExcessPercentage",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "minExcessPercentage",
            "type": "uint256"
          }
        ],
        "internalType": "struct ClearingConfiguration",
        "name": "clearingConfig",
        "type": "tuple"
      },
      {
        "internalType": "bool",
        "name": "isConfigOverridden",
        "type": "bool"
      }
    ],
    "name": "doClearing",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "lendingPool",
        "type": "address"
      }
    ],
    "name": "initializeLendingPool",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "lendingPool",
        "type": "address"
      }
    ],
    "name": "isLendingPoolClearingPending",
    "outputs": [
      {
        "internalType": "bool",
        "name": "isPending",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "lendingPool",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "epoch",
        "type": "uint256"
      }
    ],
    "name": "lendingPoolClearingStatus",
    "outputs": [
      {
        "internalType": "enum ClearingStatus",
        "name": "status",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "lendingPool",
        "type": "address"
      }
    ],
    "name": "lendingPoolMaxDrawAmount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "lendingPool",
        "type": "address"
      }
    ],
    "name": "nextLendingPoolClearingEpoch",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "nextClearingEpoch",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]