> For the complete documentation index, see [llms.txt](https://docs.maple.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.maple.finance/technical-resources/interfaces/fixed-term-loan.md).

# FixedTermLoan

MapleLoan implements a primitive loan with additional functionality, and is intended to be proxied.

## Functions

### `HUNDRED_PERCENT`

The value that represents 100%, to be easily comparable with the loan rates.

```solidity
    function HUNDRED_PERCENT()
        view
        returns (
            uint256
        );
```

#### Return Values:

| Index | Name |    Type   | Internal Type | Description |
| :---: | :--: | :-------: | :-----------: | ----------- |
|   0   |      | `uint256` |   `uint256`   |             |

### `acceptBorrower`

Accept the borrower role, must be called by pendingBorrower.

```solidity
    function acceptBorrower()
        nonpayable;
```

### `acceptLender`

Accept the lender role, must be called by pendingLender.

```solidity
    function acceptLender()
        nonpayable;
```

### `acceptNewTerms`

Accept the proposed terms ans trigger refinance execution

```solidity
    function acceptNewTerms(
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    )
        nonpayable
        returns (
            bytes32 refinanceCommitment_
        );
```

#### Parameters:

| Index |      Name     |    Type   | Internal Type | Description                                       |
| :---: | :-----------: | :-------: | :-----------: | ------------------------------------------------- |
|   0   | `refinancer_` | `address` |   `address`   | The address of the refinancer contract.           |
|   1   |  `deadline_`  | `uint256` |   `uint256`   | The deadline for accepting the new terms.         |
|   2   |    `calls_`   | `bytes[]` |   `bytes[]`   | The encoded arguments to be passed to refinancer. |

#### Return Values:

| Index |          Name          |    Type   | Internal Type | Description                                   |
| :---: | :--------------------: | :-------: | :-----------: | --------------------------------------------- |
|   0   | `refinanceCommitment_` | `bytes32` |   `bytes32`   | The hash of the accepted refinance agreement. |

### `borrower`

The borrower of the loan, responsible for repayments.

```solidity
    function borrower()
        view
        returns (
            address borrower_
        );
```

#### Return Values:

| Index |     Name    |    Type   | Internal Type | Description |
| :---: | :---------: | :-------: | :-----------: | ----------- |
|   0   | `borrower_` | `address` |   `address`   |             |

### `closeLoan`

Repay all principal and interest and close a loan. FUNDS SHOULD NOT BE TRANSFERRED TO THIS CONTRACT NON-ATOMICALLY. IF THEY ARE, THE BALANCE MAY BE STOLEN USING \`skim\`.

```solidity
    function closeLoan(
        uint256 amount_
    )
        nonpayable
        returns (
            uint256 principal_,
            uint256 interest_,
            uint256 fees_
        );
```

#### Parameters:

| Index |    Name   |    Type   | Internal Type | Description                                |
| :---: | :-------: | :-------: | :-----------: | ------------------------------------------ |
|   0   | `amount_` | `uint256` |   `uint256`   | An amount to pull from the caller, if any. |

#### Return Values:

| Index |     Name     |    Type   | Internal Type | Description                                      |
| :---: | :----------: | :-------: | :-----------: | ------------------------------------------------ |
|   0   | `principal_` | `uint256` |   `uint256`   | The portion of the amount paying back principal. |
|   1   |  `interest_` | `uint256` |   `uint256`   | The portion of the amount paying interest.       |
|   2   |    `fees_`   | `uint256` |   `uint256`   | The portion of the amount paying service fees.   |

### `closingRate`

The fee rate (applied to principal) to close the loan. This value should be configured so that it is less expensive to close a loan with more than one payment remaining, but more expensive to close it if on the last payment.

```solidity
    function closingRate()
        view
        returns (
            uint256 closingRate_
        );
```

#### Return Values:

| Index |      Name      |    Type   | Internal Type | Description |
| :---: | :------------: | :-------: | :-----------: | ----------- |
|   0   | `closingRate_` | `uint256` |   `uint256`   |             |

### `collateral`

The amount of collateral posted against outstanding (drawn down) principal.

```solidity
    function collateral()
        view
        returns (
            uint256 collateral_
        );
```

#### Return Values:

| Index |      Name     |    Type   | Internal Type | Description |
| :---: | :-----------: | :-------: | :-----------: | ----------- |
|   0   | `collateral_` | `uint256` |   `uint256`   |             |

### `collateralAsset`

The address of the asset deposited by the borrower as collateral, if needed.

```solidity
    function collateralAsset()
        view
        returns (
            address collateralAsset_
        );
```

#### Return Values:

| Index |        Name        |    Type   | Internal Type | Description |
| :---: | :----------------: | :-------: | :-----------: | ----------- |
|   0   | `collateralAsset_` | `address` |   `address`   |             |

### `collateralRequired`

The amount of collateral required if all of the principal required is drawn down.

```solidity
    function collateralRequired()
        view
        returns (
            uint256 collateralRequired_
        );
```

#### Return Values:

| Index |          Name         |    Type   | Internal Type | Description |
| :---: | :-------------------: | :-------: | :-----------: | ----------- |
|   0   | `collateralRequired_` | `uint256` |   `uint256`   |             |

### `drawableFunds`

The amount of funds that have yet to be drawn down by the borrower.

```solidity
    function drawableFunds()
        view
        returns (
            uint256 drawableFunds_
        );
```

#### Return Values:

| Index |       Name       |    Type   | Internal Type | Description |
| :---: | :--------------: | :-------: | :-----------: | ----------- |
|   0   | `drawableFunds_` | `uint256` |   `uint256`   |             |

### `drawdownFunds`

Draw down funds from the loan.

```solidity
    function drawdownFunds(
        uint256 amount_,
        address destination_
    )
        nonpayable
        returns (
            uint256 collateralPosted_
        );
```

#### Parameters:

| Index |      Name      |    Type   | Internal Type | Description                    |
| :---: | :------------: | :-------: | :-----------: | ------------------------------ |
|   0   |    `amount_`   | `uint256` |   `uint256`   | The amount to draw down.       |
|   1   | `destination_` | `address` |   `address`   | The address to send the funds. |

#### Return Values:

| Index |         Name        |    Type   | Internal Type | Description                                         |
| :---: | :-----------------: | :-------: | :-----------: | --------------------------------------------------- |
|   0   | `collateralPosted_` | `uint256` |   `uint256`   | The amount of additional collateral posted, if any. |

### `endingPrincipal`

The portion of principal to not be paid down as part of payment installments, which would need to be paid back upon final payment. If endingPrincipal = principal, loan is interest-only.

```solidity
    function endingPrincipal()
        view
        returns (
            uint256 endingPrincipal_
        );
```

#### Return Values:

| Index |        Name        |    Type   | Internal Type | Description |
| :---: | :----------------: | :-------: | :-----------: | ----------- |
|   0   | `endingPrincipal_` | `uint256` |   `uint256`   |             |

### `excessCollateral`

Returns the excess collateral that can be removed.

```solidity
    function excessCollateral()
        view
        returns (
            uint256 excessCollateral_
        );
```

#### Return Values:

| Index |         Name        |    Type   | Internal Type | Description                                        |
| :---: | :-----------------: | :-------: | :-----------: | -------------------------------------------------- |
|   0   | `excessCollateral_` | `uint256` |   `uint256`   | The excess collateral that can be removed, if any. |

### `factory`

The address of the proxy factory.

```solidity
    function factory()
        view
        returns (
            address factory_
        );
```

#### Return Values:

| Index |    Name    |    Type   | Internal Type | Description |
| :---: | :--------: | :-------: | :-----------: | ----------- |
|   0   | `factory_` | `address` |   `address`   |             |

### `feeManager`

The address of the contract that handles payments of fees on behalf of the loan.

```solidity
    function feeManager()
        view
        returns (
            address feeManager_
        );
```

#### Return Values:

| Index |      Name     |    Type   | Internal Type | Description |
| :---: | :-----------: | :-------: | :-----------: | ----------- |
|   0   | `feeManager_` | `address` |   `address`   |             |

### `fundLoan`

Lend funds to the loan/borrower.

```solidity
    function fundLoan()
        nonpayable
        returns (
            uint256 fundsLent_
        );
```

#### Return Values:

| Index |     Name     |    Type   | Internal Type | Description        |
| :---: | :----------: | :-------: | :-----------: | ------------------ |
|   0   | `fundsLent_` | `uint256` |   `uint256`   | The amount funded. |

### `fundsAsset`

The asset deposited by the lender to fund the loan.

```solidity
    function fundsAsset()
        view
        returns (
            address fundsAsset_
        );
```

#### Return Values:

| Index |      Name     |    Type   | Internal Type | Description |
| :---: | :-----------: | :-------: | :-----------: | ----------- |
|   0   | `fundsAsset_` | `address` |   `address`   |             |

### `getAdditionalCollateralRequiredFor`

Get the additional collateral to be posted to drawdown some amount.

```solidity
    function getAdditionalCollateralRequiredFor(
        uint256 drawdown_
    )
        view
        returns (
            uint256 collateral_
        );
```

#### Parameters:

| Index |     Name    |    Type   | Internal Type | Description                          |
| :---: | :---------: | :-------: | :-----------: | ------------------------------------ |
|   0   | `drawdown_` | `uint256` |   `uint256`   | The amount desired to be drawn down. |

#### Return Values:

| Index |      Name     |    Type   | Internal Type | Description |
| :---: | :-----------: | :-------: | :-----------: | ----------- |
|   0   | `collateral_` | `uint256` |   `uint256`   |             |

### `getClosingPaymentBreakdown`

Get the breakdown of the total payment needed to satisfy an early repayment to close the loan.

```solidity
    function getClosingPaymentBreakdown()
        view
        returns (
            uint256 principal_,
            uint256 interest_,
            uint256 fees_
        );
```

#### Return Values:

| Index |     Name     |    Type   | Internal Type | Description                                                         |
| :---: | :----------: | :-------: | :-----------: | ------------------------------------------------------------------- |
|   0   | `principal_` | `uint256` |   `uint256`   | The portion of the total amount that will go towards principal.     |
|   1   |  `interest_` | `uint256` |   `uint256`   | The portion of the total amount that will go towards interest fees. |
|   2   |    `fees_`   | `uint256` |   `uint256`   | The portion of the total amount that will go towards fees.          |

### `getNextPaymentBreakdown`

Get the breakdown of the total payment needed to satisfy the next payment installment.

```solidity
    function getNextPaymentBreakdown()
        view
        returns (
            uint256 principal_,
            uint256 interest_,
            uint256 fees_
        );
```

#### Return Values:

| Index |     Name     |    Type   | Internal Type | Description                                                                      |
| :---: | :----------: | :-------: | :-----------: | -------------------------------------------------------------------------------- |
|   0   | `principal_` | `uint256` |   `uint256`   | The portion of the total amount that will go towards principal.                  |
|   1   |  `interest_` | `uint256` |   `uint256`   | The portion of the total amount that will go towards interest fees.              |
|   2   |    `fees_`   | `uint256` |   `uint256`   | The portion of the total amount that will go towards paying administrative fees. |

### `getNextPaymentDetailedBreakdown`

Get the detailed breakdown of the total payment needed to satisfy the next payment installment.

```solidity
    function getNextPaymentDetailedBreakdown()
        view
        returns (
            uint256 principal_,
            uint256[3] interest_,
            uint256[2] fees_
        );
```

#### Return Values:

| Index |     Name     |     Type     | Internal Type | Description                                                                                                                                               |
| :---: | :----------: | :----------: | :-----------: | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|   0   | `principal_` |   `uint256`  |   `uint256`   | The portion of the total amount that will go towards principal.                                                                                           |
|   1   |  `interest_` | `uint256[3]` |  `uint256[3]` | The portion of the total amount that will go towards interest fees. \[0] Interest from the payment interval. \[1] Late interest. \[2] Refinance interest. |
|   2   |    `fees_`   | `uint256[2]` |  `uint256[2]` | The portion of the total amount that will go towards paying administrative fees. \[0] Delegate fees. \[1] Platform fees.                                  |

### `getRefinanceInterest`

Get the extra interest that will be charged according to loan terms before refinance, based on a given timestamp.

```solidity
    function getRefinanceInterest(
        uint256 timestamp_
    )
        view
        returns (
            uint256 proRataInterest_
        );
```

#### Parameters:

| Index |     Name     |    Type   | Internal Type | Description                                        |
| :---: | :----------: | :-------: | :-----------: | -------------------------------------------------- |
|   0   | `timestamp_` | `uint256` |   `uint256`   | The timestamp when the new terms will be accepted. |

#### Return Values:

| Index |        Name        |    Type   | Internal Type | Description                                           |
| :---: | :----------------: | :-------: | :-----------: | ----------------------------------------------------- |
|   0   | `proRataInterest_` | `uint256` |   `uint256`   | The interest portion to be added in the next payment. |

### `getUnaccountedAmount`

Get the amount on an asset that in not accounted for by the accounting variables (and thus can be skimmed).

```solidity
    function getUnaccountedAmount(
        address asset_
    )
        view
        returns (
            uint256 unaccountedAmount_
        );
```

#### Parameters:

| Index |   Name   |    Type   | Internal Type | Description                      |
| :---: | :------: | :-------: | :-----------: | -------------------------------- |
|   0   | `asset_` | `address` |   `address`   | The address of a asset contract. |

#### Return Values:

| Index |         Name         |    Type   | Internal Type | Description                           |
| :---: | :------------------: | :-------: | :-----------: | ------------------------------------- |
|   0   | `unaccountedAmount_` | `uint256` |   `uint256`   | The amount that is not accounted for. |

### `globals`

The Maple globals address

```solidity
    function globals()
        view
        returns (
            address globals_
        );
```

#### Return Values:

| Index |    Name    |    Type   | Internal Type | Description |
| :---: | :--------: | :-------: | :-----------: | ----------- |
|   0   | `globals_` | `address` |   `address`   |             |

### `governor`

The address of the Maple Governor.

```solidity
    function governor()
        view
        returns (
            address governor_
        );
```

#### Return Values:

| Index |     Name    |    Type   | Internal Type | Description |
| :---: | :---------: | :-------: | :-----------: | ----------- |
|   0   | `governor_` | `address` |   `address`   |             |

### `gracePeriod`

The amount of time the borrower has, after a payment is due, to make a payment before being in default.

```solidity
    function gracePeriod()
        view
        returns (
            uint256 gracePeriod_
        );
```

#### Return Values:

| Index |      Name      |    Type   | Internal Type | Description |
| :---: | :------------: | :-------: | :-----------: | ----------- |
|   0   | `gracePeriod_` | `uint256` |   `uint256`   |             |

### `impairLoan`

Fast forward the next payment due date to the current time. This enables the pool delegate to force a payment (or default).

```solidity
    function impairLoan()
        nonpayable;
```

### `implementation`

The address of the implementation contract being proxied.

```solidity
    function implementation()
        view
        returns (
            address implementation_
        );
```

#### Return Values:

| Index |        Name       |    Type   | Internal Type | Description |
| :---: | :---------------: | :-------: | :-----------: | ----------- |
|   0   | `implementation_` | `address` |   `address`   |             |

### `interestRate`

The annualized interest rate (APR), in units of 1e18, (i.e. 1% is 0.01e18).

```solidity
    function interestRate()
        view
        returns (
            uint256 interestRate_
        );
```

#### Return Values:

| Index |       Name      |    Type   | Internal Type | Description |
| :---: | :-------------: | :-------: | :-----------: | ----------- |
|   0   | `interestRate_` | `uint256` |   `uint256`   |             |

### `isImpaired`

Return if the loan has been impaired.

```solidity
    function isImpaired()
        view
        returns (
            bool isImpaired_
        );
```

#### Return Values:

| Index |      Name     |  Type  | Internal Type | Description                  |
| :---: | :-----------: | :----: | :-----------: | ---------------------------- |
|   0   | `isImpaired_` | `bool` |     `bool`    | Is the loan impaired or not. |

### `lateFeeRate`

The rate charged at late payments.

```solidity
    function lateFeeRate()
        view
        returns (
            uint256 lateFeeRate_
        );
```

#### Return Values:

| Index |      Name      |    Type   | Internal Type | Description |
| :---: | :------------: | :-------: | :-----------: | ----------- |
|   0   | `lateFeeRate_` | `uint256` |   `uint256`   |             |

### `lateInterestPremiumRate`

The premium over the regular interest rate applied when paying late.

```solidity
    function lateInterestPremiumRate()
        view
        returns (
            uint256 lateInterestPremiumRate_
        );
```

#### Return Values:

| Index |            Name            |    Type   | Internal Type | Description |
| :---: | :------------------------: | :-------: | :-----------: | ----------- |
|   0   | `lateInterestPremiumRate_` | `uint256` |   `uint256`   |             |

### `lender`

The lender of the Loan.

```solidity
    function lender()
        view
        returns (
            address lender_
        );
```

#### Return Values:

| Index |    Name   |    Type   | Internal Type | Description |
| :---: | :-------: | :-------: | :-----------: | ----------- |
|   0   | `lender_` | `address` |   `address`   |             |

### `makePayment`

Make a payment to the loan. FUNDS SHOULD NOT BE TRANSFERRED TO THIS CONTRACT NON-ATOMICALLY. IF THEY ARE, THE BALANCE MAY BE STOLEN USING \`skim\`.

```solidity
    function makePayment(
        uint256 amount_
    )
        nonpayable
        returns (
            uint256 principal_,
            uint256 interest_,
            uint256 fees_
        );
```

#### Parameters:

| Index |    Name   |    Type   | Internal Type | Description                                |
| :---: | :-------: | :-------: | :-----------: | ------------------------------------------ |
|   0   | `amount_` | `uint256` |   `uint256`   | An amount to pull from the caller, if any. |

#### Return Values:

| Index |     Name     |    Type   | Internal Type | Description                                      |
| :---: | :----------: | :-------: | :-----------: | ------------------------------------------------ |
|   0   | `principal_` | `uint256` |   `uint256`   | The portion of the amount paying back principal. |
|   1   |  `interest_` | `uint256` |   `uint256`   | The portion of the amount paying interest fees.  |
|   2   |    `fees_`   | `uint256` |   `uint256`   | The portion of the amount paying service fees.   |

### `migrate`

Modifies the proxy's storage by delegate-calling a migrator contract with some arguments. Access control logic critical since caller can force a selfdestruct via a malicious \`migrator\_\` which is delegatecalled.

```solidity
    function migrate(
        address migrator_,
        bytes arguments_
    )
        nonpayable;
```

#### Parameters:

| Index |     Name     |    Type   | Internal Type | Description                                      |
| :---: | :----------: | :-------: | :-----------: | ------------------------------------------------ |
|   0   |  `migrator_` | `address` |   `address`   | The address of a migrator contract.              |
|   1   | `arguments_` |  `bytes`  |    `bytes`    | Some encoded arguments to use for the migration. |

### `nextPaymentDueDate`

The timestamp due date of the next payment.

```solidity
    function nextPaymentDueDate()
        view
        returns (
            uint256 nextPaymentDueDate_
        );
```

#### Return Values:

| Index |          Name         |    Type   | Internal Type | Description |
| :---: | :-------------------: | :-------: | :-----------: | ----------- |
|   0   | `nextPaymentDueDate_` | `uint256` |   `uint256`   |             |

### `originalNextPaymentDueDate`

The saved original payment due date from a loan impairment.

```solidity
    function originalNextPaymentDueDate()
        view
        returns (
            uint256 originalNextPaymentDueDate_
        );
```

#### Return Values:

| Index |              Name             |    Type   | Internal Type | Description |
| :---: | :---------------------------: | :-------: | :-----------: | ----------- |
|   0   | `originalNextPaymentDueDate_` | `uint256` |   `uint256`   |             |

### `paymentInterval`

The specified time between loan payments.

```solidity
    function paymentInterval()
        view
        returns (
            uint256 paymentInterval_
        );
```

#### Return Values:

| Index |        Name        |    Type   | Internal Type | Description |
| :---: | :----------------: | :-------: | :-----------: | ----------- |
|   0   | `paymentInterval_` | `uint256` |   `uint256`   |             |

### `paymentsRemaining`

The number of payment installments remaining for the loan.

```solidity
    function paymentsRemaining()
        view
        returns (
            uint256 paymentsRemaining_
        );
```

#### Return Values:

| Index |         Name         |    Type   | Internal Type | Description |
| :---: | :------------------: | :-------: | :-----------: | ----------- |
|   0   | `paymentsRemaining_` | `uint256` |   `uint256`   |             |

### `pendingBorrower`

The address of the pending borrower.

```solidity
    function pendingBorrower()
        view
        returns (
            address pendingBorrower_
        );
```

#### Return Values:

| Index |        Name        |    Type   | Internal Type | Description |
| :---: | :----------------: | :-------: | :-----------: | ----------- |
|   0   | `pendingBorrower_` | `address` |   `address`   |             |

### `pendingLender`

The address of the pending lender.

```solidity
    function pendingLender()
        view
        returns (
            address pendingLender_
        );
```

#### Return Values:

| Index |       Name       |    Type   | Internal Type | Description |
| :---: | :--------------: | :-------: | :-----------: | ----------- |
|   0   | `pendingLender_` | `address` |   `address`   |             |

### `postCollateral`

Post collateral to the loan. FUNDS SHOULD NOT BE TRANSFERRED TO THIS CONTRACT NON-ATOMICALLY. IF THEY ARE, THE BALANCE MAY BE STOLEN USING \`skim\`.

```solidity
    function postCollateral(
        uint256 amount_
    )
        nonpayable
        returns (
            uint256 collateralPosted_
        );
```

#### Parameters:

| Index |    Name   |    Type   | Internal Type | Description                                |
| :---: | :-------: | :-------: | :-----------: | ------------------------------------------ |
|   0   | `amount_` | `uint256` |   `uint256`   | An amount to pull from the caller, if any. |

#### Return Values:

| Index |         Name        |    Type   | Internal Type | Description        |
| :---: | :-----------------: | :-------: | :-----------: | ------------------ |
|   0   | `collateralPosted_` | `uint256` |   `uint256`   | The amount posted. |

### `principal`

The amount of principal owed (initially, the requested amount), which needs to be paid back.

```solidity
    function principal()
        view
        returns (
            uint256 principal_
        );
```

#### Return Values:

| Index |     Name     |    Type   | Internal Type | Description |
| :---: | :----------: | :-------: | :-----------: | ----------- |
|   0   | `principal_` | `uint256` |   `uint256`   |             |

### `principalRequested`

The initial principal amount requested by the borrower.

```solidity
    function principalRequested()
        view
        returns (
            uint256 principalRequested_
        );
```

#### Return Values:

| Index |          Name         |    Type   | Internal Type | Description |
| :---: | :-------------------: | :-------: | :-----------: | ----------- |
|   0   | `principalRequested_` | `uint256` |   `uint256`   |             |

### `proposeNewTerms`

Propose new terms for refinance.

```solidity
    function proposeNewTerms(
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    )
        nonpayable
        returns (
            bytes32 refinanceCommitment_
        );
```

#### Parameters:

| Index |      Name     |    Type   | Internal Type | Description                                       |
| :---: | :-----------: | :-------: | :-----------: | ------------------------------------------------- |
|   0   | `refinancer_` | `address` |   `address`   | The address of the refinancer contract.           |
|   1   |  `deadline_`  | `uint256` |   `uint256`   | The deadline for accepting the new terms.         |
|   2   |    `calls_`   | `bytes[]` |   `bytes[]`   | The encoded arguments to be passed to refinancer. |

#### Return Values:

| Index |          Name          |    Type   | Internal Type | Description                                   |
| :---: | :--------------------: | :-------: | :-----------: | --------------------------------------------- |
|   0   | `refinanceCommitment_` | `bytes32` |   `bytes32`   | The hash of the proposed refinance agreement. |

### `refinanceCommitment`

The hash of the proposed refinance agreement.

```solidity
    function refinanceCommitment()
        view
        returns (
            bytes32 refinanceCommitment_
        );
```

#### Return Values:

| Index |          Name          |    Type   | Internal Type | Description |
| :---: | :--------------------: | :-------: | :-----------: | ----------- |
|   0   | `refinanceCommitment_` | `bytes32` |   `bytes32`   |             |

### `refinanceInterest`

Amount of unpaid interest that has accrued before a refinance was accepted.

```solidity
    function refinanceInterest()
        view
        returns (
            uint256 refinanceInterest_
        );
```

#### Return Values:

| Index |         Name         |    Type   | Internal Type | Description |
| :---: | :------------------: | :-------: | :-----------: | ----------- |
|   0   | `refinanceInterest_` | `uint256` |   `uint256`   |             |

### `rejectNewTerms`

Nullify the current proposed terms.

```solidity
    function rejectNewTerms(
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    )
        nonpayable
        returns (
            bytes32 refinanceCommitment_
        );
```

#### Parameters:

| Index |      Name     |    Type   | Internal Type | Description                                       |
| :---: | :-----------: | :-------: | :-----------: | ------------------------------------------------- |
|   0   | `refinancer_` | `address` |   `address`   | The address of the refinancer contract.           |
|   1   |  `deadline_`  | `uint256` |   `uint256`   | The deadline for accepting the new terms.         |
|   2   |    `calls_`   | `bytes[]` |   `bytes[]`   | The encoded arguments to be passed to refinancer. |

#### Return Values:

| Index |          Name          |    Type   | Internal Type | Description                                   |
| :---: | :--------------------: | :-------: | :-----------: | --------------------------------------------- |
|   0   | `refinanceCommitment_` | `bytes32` |   `bytes32`   | The hash of the rejected refinance agreement. |

### `removeCollateral`

Remove collateral from the loan (opposite of posting collateral).

```solidity
    function removeCollateral(
        uint256 amount_,
        address destination_
    )
        nonpayable;
```

#### Parameters:

| Index |      Name      |    Type   | Internal Type | Description                                     |
| :---: | :------------: | :-------: | :-----------: | ----------------------------------------------- |
|   0   |    `amount_`   | `uint256` |   `uint256`   | The amount removed.                             |
|   1   | `destination_` | `address` |   `address`   | The destination to send the removed collateral. |

### `removeLoanImpairment`

Remove the loan impairment by restoring the original payment due date.

```solidity
    function removeLoanImpairment()
        nonpayable;
```

### `repossess`

Repossess collateral, and any funds, for a loan in default.

```solidity
    function repossess(
        address destination_
    )
        nonpayable
        returns (
            uint256 collateralRepossessed_,
            uint256 fundsRepossessed_
        );
```

#### Parameters:

| Index |      Name      |    Type   | Internal Type | Description                                                             |
| :---: | :------------: | :-------: | :-----------: | ----------------------------------------------------------------------- |
|   0   | `destination_` | `address` |   `address`   | The address where the collateral and funds asset is to be sent, if any. |

#### Return Values:

| Index |           Name           |    Type   | Internal Type | Description                                 |
| :---: | :----------------------: | :-------: | :-----------: | ------------------------------------------- |
|   0   | `collateralRepossessed_` | `uint256` |   `uint256`   | The amount of collateral asset repossessed. |
|   1   |    `fundsRepossessed_`   | `uint256` |   `uint256`   | The amount of funds asset repossessed.      |

### `returnFunds`

Return funds to the loan (opposite of drawing down). FUNDS SHOULD NOT BE TRANSFERRED TO THIS CONTRACT NON-ATOMICALLY. IF THEY ARE, THE BALANCE MAY BE STOLEN USING \`skim\`.

```solidity
    function returnFunds(
        uint256 amount_
    )
        nonpayable
        returns (
            uint256 fundsReturned_
        );
```

#### Parameters:

| Index |    Name   |    Type   | Internal Type | Description                                |
| :---: | :-------: | :-------: | :-----------: | ------------------------------------------ |
|   0   | `amount_` | `uint256` |   `uint256`   | An amount to pull from the caller, if any. |

#### Return Values:

| Index |       Name       |    Type   | Internal Type | Description          |
| :---: | :--------------: | :-------: | :-----------: | -------------------- |
|   0   | `fundsReturned_` | `uint256` |   `uint256`   | The amount returned. |

### `setImplementation`

Modifies the proxy's implementation address.

```solidity
    function setImplementation(
        address newImplementation_
    )
        nonpayable;
```

#### Parameters:

| Index |         Name         |    Type   | Internal Type | Description                                |
| :---: | :------------------: | :-------: | :-----------: | ------------------------------------------ |
|   0   | `newImplementation_` | `address` |   `address`   | The address of an implementation contract. |

### `setPendingBorrower`

Set the pendingBorrower to a new account.

```solidity
    function setPendingBorrower(
        address pendingBorrower_
    )
        nonpayable;
```

#### Parameters:

| Index |        Name        |    Type   | Internal Type | Description                             |
| :---: | :----------------: | :-------: | :-----------: | --------------------------------------- |
|   0   | `pendingBorrower_` | `address` |   `address`   | The address of the new pendingBorrower. |

### `setPendingLender`

Set the pendingLender to a new account.

```solidity
    function setPendingLender(
        address pendingLender_
    )
        nonpayable;
```

#### Parameters:

| Index |       Name       |    Type   | Internal Type | Description                           |
| :---: | :--------------: | :-------: | :-----------: | ------------------------------------- |
|   0   | `pendingLender_` | `address` |   `address`   | The address of the new pendingLender. |

### `skim`

Remove all token that is not accounted for by the loan (i.e. not \`collateral\` or \`drawableFunds\`).

```solidity
    function skim(
        address token_,
        address destination_
    )
        nonpayable
        returns (
            uint256 skimmed_
        );
```

#### Parameters:

| Index |      Name      |    Type   | Internal Type | Description                        |
| :---: | :------------: | :-------: | :-----------: | ---------------------------------- |
|   0   |    `token_`    | `address` |   `address`   | The address of the token contract. |
|   1   | `destination_` | `address` |   `address`   | The recipient of the token.        |

#### Return Values:

| Index |    Name    |    Type   | Internal Type | Description                                |
| :---: | :--------: | :-------: | :-----------: | ------------------------------------------ |
|   0   | `skimmed_` | `uint256` |   `uint256`   | The amount of token removed from the loan. |

### `upgrade`

Upgrades a contract implementation to a specific version. Access control logic critical since caller can force a selfdestruct via a malicious \`migrator\_\` which is delegatecalled.

```solidity
    function upgrade(
        uint256 toVersion_,
        bytes arguments_
    )
        nonpayable;
```

#### Parameters:

| Index |     Name     |    Type   | Internal Type | Description                                    |
| :---: | :----------: | :-------: | :-----------: | ---------------------------------------------- |
|   0   | `toVersion_` | `uint256` |   `uint256`   | The version to upgrade to.                     |
|   1   | `arguments_` |  `bytes`  |    `bytes`    | Some encoded arguments to use for the upgrade. |

## Events

### `BorrowerAccepted`

Borrower was accepted, and set to a new account.

```solidity
    event BorrowerAccepted(
        address borrower_
    );
```

#### Parameters:

| Index |     Name    |    Type   | Internal Type | Description                      |
| :---: | :---------: | :-------: | :-----------: | -------------------------------- |
|   0   | `borrower_` | `address` |   `address`   | The address of the new borrower. |

### `CollateralPosted`

Collateral was posted.

```solidity
    event CollateralPosted(
        uint256 amount_
    );
```

#### Parameters:

| Index |    Name   |    Type   | Internal Type | Description                      |
| :---: | :-------: | :-------: | :-----------: | -------------------------------- |
|   0   | `amount_` | `uint256` |   `uint256`   | The amount of collateral posted. |

### `CollateralRemoved`

Collateral was removed.

```solidity
    event CollateralRemoved(
        uint256 amount_,
        address destination_
    );
```

#### Parameters:

| Index |      Name      |    Type   | Internal Type | Description                              |
| :---: | :------------: | :-------: | :-----------: | ---------------------------------------- |
|   0   |    `amount_`   | `uint256` |   `uint256`   | The amount of collateral removed.        |
|   1   | `destination_` | `address` |   `address`   | The recipient of the collateral removed. |

### `Funded`

The loan was funded.

```solidity
    event Funded(
        address lender_,
        uint256 amount_,
        uint256 nextPaymentDueDate_
    );
```

#### Parameters:

| Index |          Name         |    Type   | Internal Type | Description                       |
| :---: | :-------------------: | :-------: | :-----------: | --------------------------------- |
|   0   |       `lender_`       | `address` |   `address`   | The address of the lender.        |
|   1   |       `amount_`       | `uint256` |   `uint256`   | The amount funded.                |
|   2   | `nextPaymentDueDate_` | `uint256` |   `uint256`   | The due date of the next payment. |

### `FundsClaimed`

Funds were claimed.

```solidity
    event FundsClaimed(
        uint256 amount_,
        address destination_
    );
```

#### Parameters:

| Index |      Name      |    Type   | Internal Type | Description                         |
| :---: | :------------: | :-------: | :-----------: | ----------------------------------- |
|   0   |    `amount_`   | `uint256` |   `uint256`   | The amount of funds claimed.        |
|   1   | `destination_` | `address` |   `address`   | The recipient of the funds claimed. |

### `FundsDrawnDown`

Funds were drawn.

```solidity
    event FundsDrawnDown(
        uint256 amount_,
        address destination_
    );
```

#### Parameters:

| Index |      Name      |    Type   | Internal Type | Description                            |
| :---: | :------------: | :-------: | :-----------: | -------------------------------------- |
|   0   |    `amount_`   | `uint256` |   `uint256`   | The amount of funds drawn.             |
|   1   | `destination_` | `address` |   `address`   | The recipient of the funds drawn down. |

### `FundsReturned`

Funds were returned.

```solidity
    event FundsReturned(
        uint256 amount_
    );
```

#### Parameters:

| Index |    Name   |    Type   | Internal Type | Description                   |
| :---: | :-------: | :-------: | :-----------: | ----------------------------- |
|   0   | `amount_` | `uint256` |   `uint256`   | The amount of funds returned. |

### `ImpairmentRemoved`

The loan impairment was explicitly removed (i.e. not the result of a payment or new terms acceptance).

```solidity
    event ImpairmentRemoved(
        uint256 nextPaymentDueDate_
    );
```

#### Parameters:

| Index |          Name         |    Type   | Internal Type | Description                    |
| :---: | :-------------------: | :-------: | :-----------: | ------------------------------ |
|   0   | `nextPaymentDueDate_` | `uint256` |   `uint256`   | The new next payment due date. |

### `Initialized`

Loan was initialized.

```solidity
    event Initialized(
        address borrower_,
        address lender_,
        address feeManager_,
        address[2] assets_,
        uint256[3] termDetails_,
        uint256[3] amounts_,
        uint256[4] rates_,
        uint256[2] fees_
    );
```

#### Parameters:

| Index |      Name      |     Type     | Internal Type | Description                                                                                                |
| :---: | :------------: | :----------: | :-----------: | ---------------------------------------------------------------------------------------------------------- |
|   0   |   `borrower_`  |   `address`  |   `address`   | The address of the borrower.                                                                               |
|   1   |    `lender_`   |   `address`  |   `address`   | The address of the lender.                                                                                 |
|   2   |  `feeManager_` |   `address`  |   `address`   | The address of the entity responsible for calculating fees.                                                |
|   3   |    `assets_`   | `address[2]` |  `address[2]` | Array of asset addresses. \[0]: collateralAsset, \[1]: fundsAsset.                                         |
|   4   | `termDetails_` | `uint256[3]` |  `uint256[3]` | Array of loan parameters: \[0]: gracePeriod, \[1]: paymentInterval, \[2]: payments,                        |
|   5   |   `amounts_`   | `uint256[3]` |  `uint256[3]` | Requested amounts: \[0]: collateralRequired, \[1]: principalRequested, \[2]: endingPrincipal.              |
|   6   |    `rates_`    | `uint256[4]` |  `uint256[4]` | Fee parameters: \[0]: interestRate, \[1]: closingFeeRate, \[2]: lateFeeRate, \[3]: lateInterestPremiumRate |
|   7   |     `fees_`    | `uint256[2]` |  `uint256[2]` | Array of fees: \[0]: delegateOriginationFee, \[1]: delegateServiceFee                                      |

### `LenderAccepted`

Lender was accepted, and set to a new account.

```solidity
    event LenderAccepted(
        address lender_
    );
```

#### Parameters:

| Index |    Name   |    Type   | Internal Type | Description                    |
| :---: | :-------: | :-------: | :-----------: | ------------------------------ |
|   0   | `lender_` | `address` |   `address`   | The address of the new lender. |

### `LoanClosed`

Loan was repaid early and closed.

```solidity
    event LoanClosed(
        uint256 principalPaid_,
        uint256 interestPaid_,
        uint256 feesPaid_
    );
```

#### Parameters:

| Index |       Name       |    Type   | Internal Type | Description                                                  |
| :---: | :--------------: | :-------: | :-----------: | ------------------------------------------------------------ |
|   0   | `principalPaid_` | `uint256` |   `uint256`   | The portion of the total amount that went towards principal. |
|   1   |  `interestPaid_` | `uint256` |   `uint256`   | The portion of the total amount that went towards interest.  |
|   2   |    `feesPaid_`   | `uint256` |   `uint256`   | The portion of the total amount that went towards fees.      |

### `LoanImpaired`

The next payment due date was fast forwarded to the current time, activating the grace period. This is emitted when the pool delegate wants to force a payment (or default).

```solidity
    event LoanImpaired(
        uint256 nextPaymentDueDate_
    );
```

#### Parameters:

| Index |          Name         |    Type   | Internal Type | Description                    |
| :---: | :-------------------: | :-------: | :-----------: | ------------------------------ |
|   0   | `nextPaymentDueDate_` | `uint256` |   `uint256`   | The new next payment due date. |

### `NewTermsAccepted`

The terms of the refinance proposal were accepted.

```solidity
    event NewTermsAccepted(
        bytes32 refinanceCommitment_,
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    );
```

#### Parameters:

| Index |          Name          |    Type   | Internal Type | Description                                               |
| :---: | :--------------------: | :-------: | :-----------: | --------------------------------------------------------- |
|   0   | `refinanceCommitment_` | `bytes32` |   `bytes32`   | The hash of the refinancer, deadline, and calls proposed. |
|   1   |      `refinancer_`     | `address` |   `address`   | The address that will execute the refinance.              |
|   2   |       `deadline_`      | `uint256` |   `uint256`   | The deadline for accepting the new terms.                 |
|   3   |        `calls_`        | `bytes[]` |   `bytes[]`   | The individual calls for the refinancer contract.         |

### `NewTermsProposed`

A refinance was proposed.

```solidity
    event NewTermsProposed(
        bytes32 refinanceCommitment_,
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    );
```

#### Parameters:

| Index |          Name          |    Type   | Internal Type | Description                                               |
| :---: | :--------------------: | :-------: | :-----------: | --------------------------------------------------------- |
|   0   | `refinanceCommitment_` | `bytes32` |   `bytes32`   | The hash of the refinancer, deadline, and calls proposed. |
|   1   |      `refinancer_`     | `address` |   `address`   | The address that will execute the refinance.              |
|   2   |       `deadline_`      | `uint256` |   `uint256`   | The deadline for accepting the new terms.                 |
|   3   |        `calls_`        | `bytes[]` |   `bytes[]`   | The individual calls for the refinancer contract.         |

### `NewTermsRejected`

The terms of the refinance proposal were rejected.

```solidity
    event NewTermsRejected(
        bytes32 refinanceCommitment_,
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    );
```

#### Parameters:

| Index |          Name          |    Type   | Internal Type | Description                                               |
| :---: | :--------------------: | :-------: | :-----------: | --------------------------------------------------------- |
|   0   | `refinanceCommitment_` | `bytes32` |   `bytes32`   | The hash of the refinancer, deadline, and calls proposed. |
|   1   |      `refinancer_`     | `address` |   `address`   | The address that will execute the refinance.              |
|   2   |       `deadline_`      | `uint256` |   `uint256`   | The deadline for accepting the new terms.                 |
|   3   |        `calls_`        | `bytes[]` |   `bytes[]`   | The individual calls for the refinancer contract.         |

### `PaymentMade`

Payments were made.

```solidity
    event PaymentMade(
        uint256 principalPaid_,
        uint256 interestPaid_,
        uint256 fees_
    );
```

#### Parameters:

| Index |       Name       |    Type   | Internal Type | Description                                                  |
| :---: | :--------------: | :-------: | :-----------: | ------------------------------------------------------------ |
|   0   | `principalPaid_` | `uint256` |   `uint256`   | The portion of the total amount that went towards principal. |
|   1   |  `interestPaid_` | `uint256` |   `uint256`   | The portion of the total amount that went towards interest.  |
|   2   |      `fees_`     | `uint256` |   `uint256`   | The portion of the total amount that went towards fees.      |

### `PendingBorrowerSet`

Pending borrower was set.

```solidity
    event PendingBorrowerSet(
        address pendingBorrower_
    );
```

#### Parameters:

| Index |        Name        |    Type   | Internal Type | Description                                |
| :---: | :----------------: | :-------: | :-----------: | ------------------------------------------ |
|   0   | `pendingBorrower_` | `address` |   `address`   | Address that can accept the borrower role. |

### `PendingLenderSet`

Pending lender was set.

```solidity
    event PendingLenderSet(
        address pendingLender_
    );
```

#### Parameters:

| Index |       Name       |    Type   | Internal Type | Description                              |
| :---: | :--------------: | :-------: | :-----------: | ---------------------------------------- |
|   0   | `pendingLender_` | `address` |   `address`   | Address that can accept the lender role. |

### `Repossessed`

The loan was in default and funds and collateral was repossessed by the lender.

```solidity
    event Repossessed(
        uint256 collateralRepossessed_,
        uint256 fundsRepossessed_,
        address destination_
    );
```

#### Parameters:

| Index |           Name           |    Type   | Internal Type | Description                                        |
| :---: | :----------------------: | :-------: | :-----------: | -------------------------------------------------- |
|   0   | `collateralRepossessed_` | `uint256` |   `uint256`   | The amount of collateral asset repossessed.        |
|   1   |    `fundsRepossessed_`   | `uint256` |   `uint256`   | The amount of funds asset repossessed.             |
|   2   |      `destination_`      | `address` |   `address`   | The recipient of the collateral and funds, if any. |

### `Skimmed`

Some token (neither fundsAsset nor collateralAsset) was removed from the loan.

```solidity
    event Skimmed(
        address token_,
        uint256 amount_,
        address destination_
    );
```

#### Parameters:

| Index |      Name      |    Type   | Internal Type | Description                               |
| :---: | :------------: | :-------: | :-----------: | ----------------------------------------- |
|   0   |    `token_`    | `address` |   `address`   | The address of the token contract.        |
|   1   |    `amount_`   | `uint256` |   `uint256`   | The amount of token remove from the loan. |
|   2   | `destination_` | `address` |   `address`   | The recipient of the token.               |

### `Upgraded`

The instance was upgraded.

```solidity
    event Upgraded(
        uint256 toVersion_,
        bytes arguments_
    );
```

#### Parameters:

| Index |     Name     |    Type   | Internal Type | Description                    |
| :---: | :----------: | :-------: | :-----------: | ------------------------------ |
|   0   | `toVersion_` | `uint256` |   `uint256`   | The new version of the loan.   |
|   1   | `arguments_` |  `bytes`  |    `bytes`    | The upgrade arguments, if any. |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.maple.finance/technical-resources/interfaces/fixed-term-loan.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
