Hierarchy

Constructors

Methods

  • Parameters

    • __namedParameters: {
          structToSign: {
              offerId: bigint;
              lender: `0x${string}`;
              fee: bigint;
              borrower: `0x${string}`;
              capacity: bigint;
              signer: `0x${string}`;
              requiresLiquidation: boolean;
              nftCollateralAddress: `0x${string}`;
              nftCollateralTokenId: bigint;
              principalAddress: `0x${string}`;
              principalAmount: bigint;
              aprBps: bigint;
              expirationTime: bigint;
              duration: bigint;
              validators: readonly ({ validator: `0x${string}`; arguments: `0x${string}`; })[];
          };
      }
      • structToSign: {
            offerId: bigint;
            lender: `0x${string}`;
            fee: bigint;
            borrower: `0x${string}`;
            capacity: bigint;
            signer: `0x${string}`;
            requiresLiquidation: boolean;
            nftCollateralAddress: `0x${string}`;
            nftCollateralTokenId: bigint;
            principalAddress: `0x${string}`;
            principalAmount: bigint;
            aprBps: bigint;
            expirationTime: bigint;
            duration: bigint;
            validators: readonly ({ validator: `0x${string}`; arguments: `0x${string}`; })[];
        }
        • offerId: bigint
        • lender: `0x${string}`
        • fee: bigint
        • borrower: `0x${string}`
        • capacity: bigint
        • signer: `0x${string}`
        • requiresLiquidation: boolean
        • nftCollateralAddress: `0x${string}`
        • nftCollateralTokenId: bigint
        • principalAddress: `0x${string}`
        • principalAmount: bigint
        • aprBps: bigint
        • expirationTime: bigint
        • duration: bigint
        • validators: readonly ({ validator: `0x${string}`; arguments: `0x${string}`; })[]

    Returns Promise<`0x${string}`>

  • Parameters

    • __namedParameters: {
          structToSign: {
              renegotiationId: bigint;
              loanId: bigint;
              lender: `0x${string}`;
              fee: bigint;
              signer: `0x${string}`;
              targetPrincipal: readonly bigint[];
              principalAmount: bigint;
              aprBps: bigint;
              expirationTime: bigint;
              duration: bigint;
              strictImprovement: boolean;
          };
      }
      • structToSign: {
            renegotiationId: bigint;
            loanId: bigint;
            lender: `0x${string}`;
            fee: bigint;
            signer: `0x${string}`;
            targetPrincipal: readonly bigint[];
            principalAmount: bigint;
            aprBps: bigint;
            expirationTime: bigint;
            duration: bigint;
            strictImprovement: boolean;
        }
        • renegotiationId: bigint
        • loanId: bigint
        • lender: `0x${string}`
        • fee: bigint
        • signer: `0x${string}`
        • targetPrincipal: readonly bigint[]
        • principalAmount: bigint
        • aprBps: bigint
        • expirationTime: bigint
        • duration: bigint
        • strictImprovement: boolean

    Returns Promise<`0x${string}`>

  • Parameters

    • __namedParameters: {
          id: bigint;
      }
      • id: bigint

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            lender: `0x${string}`;
            offerId: bigint;
        }>);
    }>

  • Parameters

    • __namedParameters: {
          minId: bigint;
      }
      • minId: bigint

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            lender: `0x${string}`;
            minOfferId: bigint;
        }>);
    }>

  • Parameters

    • __namedParameters: {
          id: bigint;
      }
      • id: bigint

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            lender: `0x${string}`;
            renegotiationId: bigint;
        }>);
    }>

  • Parameters

    • __namedParameters: {
          minId: bigint;
      }
      • minId: bigint

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            lender: `0x${string}`;
            minRenegotiationId: bigint;
        }>);
    }>

  • Parameters

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            loan: {
                contractAddress: `0x${string}`;
                borrower: `0x${string}`;
                nftCollateralTokenId: bigint;
                nftCollateralAddress: `0x${string}`;
                principalAddress: `0x${string}`;
                principalAmount: bigint;
                startTime: bigint;
                duration: bigint;
                source: readonly {
                    loanId: bigint;
                    lender: `0x${string}`;
                    principalAmount: bigint;
                    accruedInterest: bigint;
                    startTime: bigint;
                    aprBps: bigint;
                }[];
                id: string;
            };
            loanId: bigint;
            offerId: string;
        }>);
    }>

  • Parameters

    • __namedParameters: {
          loan: LoanV4;
          loanId: bigint;
          nftReceiver?: `0x${string}`;
      }
      • loan: LoanV4
      • loanId: bigint
      • Optional nftReceiver?: `0x${string}`

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            loanId: bigint;
            totalRepayment: bigint;
            fee: bigint;
        }>);
    }>

  • Parameters

    • __namedParameters: {
          renegotiationId: bigint;
          refinancings: {
              loan: LoanV4;
              newAprBps: bigint;
              sources: {
                  source: {
                      loanId: bigint;
                      lender: `0x${string}`;
                      principalAmount: bigint;
                      accruedInterest: bigint;
                      startTime: bigint;
                      aprBps: bigint;
                  };
                  refinancingPrincipal: bigint;
              }[];
          }[];
      }
      • renegotiationId: bigint
      • refinancings: {
            loan: LoanV4;
            newAprBps: bigint;
            sources: {
                source: {
                    loanId: bigint;
                    lender: `0x${string}`;
                    principalAmount: bigint;
                    accruedInterest: bigint;
                    startTime: bigint;
                    aprBps: bigint;
                };
                refinancingPrincipal: bigint;
            }[];
        }[]

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            results: {
                renegotiationId: bigint;
                oldLoanId: bigint;
                newLoanId: bigint;
                loan: {
                    borrower: `0x${string}`;
                    nftCollateralTokenId: bigint;
                    nftCollateralAddress: `0x${string}`;
                    principalAddress: `0x${string}`;
                    principalAmount: bigint;
                    startTime: bigint;
                    duration: bigint;
                    source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
                };
                fee: bigint;
            }[];
        }>);
    }>

  • Parameters

    • __namedParameters: {
          offer: {
              renegotiationId: bigint;
              loanId: bigint;
              lender: `0x${string}`;
              fee: bigint;
              signer: `0x${string}`;
              targetPrincipal: readonly bigint[];
              principalAmount: bigint;
              aprBps: bigint;
              expirationTime: bigint;
              duration: bigint;
              strictImprovement: boolean;
          };
          signature: `0x${string}`;
          loan: LoanV4;
      }
      • offer: {
            renegotiationId: bigint;
            loanId: bigint;
            lender: `0x${string}`;
            fee: bigint;
            signer: `0x${string}`;
            targetPrincipal: readonly bigint[];
            principalAmount: bigint;
            aprBps: bigint;
            expirationTime: bigint;
            duration: bigint;
            strictImprovement: boolean;
        }
        • renegotiationId: bigint
        • loanId: bigint
        • lender: `0x${string}`
        • fee: bigint
        • signer: `0x${string}`
        • targetPrincipal: readonly bigint[]
        • principalAmount: bigint
        • aprBps: bigint
        • expirationTime: bigint
        • duration: bigint
        • strictImprovement: boolean
      • signature: `0x${string}`
      • loan: LoanV4

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            loan: {
                contractAddress: `0x${string}`;
                borrower: `0x${string}`;
                nftCollateralTokenId: bigint;
                nftCollateralAddress: `0x${string}`;
                principalAddress: `0x${string}`;
                principalAmount: bigint;
                startTime: bigint;
                duration: bigint;
                source: readonly {
                    loanId: bigint;
                    lender: `0x${string}`;
                    principalAmount: bigint;
                    accruedInterest: bigint;
                    startTime: bigint;
                    aprBps: bigint;
                }[];
                id: string;
            };
            loanId: bigint;
            renegotiationId: string;
        }>);
    }>

  • Parameters

    • __namedParameters: {
          offer: {
              renegotiationId: bigint;
              loanId: bigint;
              lender: `0x${string}`;
              fee: bigint;
              signer: `0x${string}`;
              targetPrincipal: readonly bigint[];
              principalAmount: bigint;
              aprBps: bigint;
              expirationTime: bigint;
              duration: bigint;
              strictImprovement: boolean;
          };
          loan: LoanV4;
      }
      • offer: {
            renegotiationId: bigint;
            loanId: bigint;
            lender: `0x${string}`;
            fee: bigint;
            signer: `0x${string}`;
            targetPrincipal: readonly bigint[];
            principalAmount: bigint;
            aprBps: bigint;
            expirationTime: bigint;
            duration: bigint;
            strictImprovement: boolean;
        }
        • renegotiationId: bigint
        • loanId: bigint
        • lender: `0x${string}`
        • fee: bigint
        • signer: `0x${string}`
        • targetPrincipal: readonly bigint[]
        • principalAmount: bigint
        • aprBps: bigint
        • expirationTime: bigint
        • duration: bigint
        • strictImprovement: boolean
      • loan: LoanV4

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            loan: {
                contractAddress: `0x${string}`;
                borrower: `0x${string}`;
                nftCollateralTokenId: bigint;
                nftCollateralAddress: `0x${string}`;
                principalAddress: `0x${string}`;
                principalAmount: bigint;
                startTime: bigint;
                duration: bigint;
                source: readonly {
                    loanId: bigint;
                    lender: `0x${string}`;
                    principalAmount: bigint;
                    accruedInterest: bigint;
                    startTime: bigint;
                    aprBps: bigint;
                }[];
                id: string;
            };
            loanId: bigint;
            renegotiationId: string;
        }>);
    }>

  • Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            loan: {
                contractAddress: `0x${string}`;
                borrower: `0x${string}`;
                nftCollateralTokenId: bigint;
                nftCollateralAddress: `0x${string}`;
                principalAddress: `0x${string}`;
                principalAmount: bigint;
                startTime: bigint;
                duration: bigint;
                tranche: readonly {
                    loanId: bigint;
                    floor: bigint;
                    principalAmount: bigint;
                    lender: `0x${string}`;
                    accruedInterest: bigint;
                    startTime: bigint;
                    aprBps: bigint;
                }[];
                protocolFee: bigint;
                id: string;
            };
            loanId: bigint;
            renegotiationId: string;
        }>);
    }>

  • Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            loan: {
                contractAddress: `0x${string}`;
                borrower: `0x${string}`;
                nftCollateralTokenId: bigint;
                nftCollateralAddress: `0x${string}`;
                principalAddress: `0x${string}`;
                principalAmount: bigint;
                startTime: bigint;
                duration: bigint;
                tranche: readonly {
                    loanId: bigint;
                    floor: bigint;
                    principalAmount: bigint;
                    lender: `0x${string}`;
                    accruedInterest: bigint;
                    startTime: bigint;
                    aprBps: bigint;
                }[];
                protocolFee: bigint;
                id: string;
            };
            loanId: bigint;
            offerIds: string[];
        }>);
    }>

  • Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            results: {
                loanId: bigint;
                delegate: `0x${string}`;
                value: boolean;
            }[];
        }>);
    }>

  • Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            loan: {
                loanId: bigint;
                contractAddress: `0x${string}`;
                borrower: `0x${string}`;
                nftCollateralTokenId: bigint;
                nftCollateralAddress: `0x${string}`;
                principalAddress: `0x${string}`;
                principalAmount: bigint;
                startTime: bigint | bigint & Date;
                duration: bigint;
                source: readonly {
                    loanId: bigint;
                    lender: `0x${string}`;
                    principalAmount: bigint;
                    accruedInterest: bigint;
                    startTime: bigint;
                    aprBps: bigint;
                }[];
            };
            value: boolean;
        }>);
    }>

  • Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            delegate: `0x${string}`;
            collection: `0x${string}`;
            tokenId: bigint;
        }>);
    }>

  • Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            results: ({
                loanId: bigint;
                offerId: bigint;
                loan: {
                    borrower: `0x${string}`;
                    nftCollateralTokenId: bigint;
                    nftCollateralAddress: `0x${string}`;
                    principalAddress: `0x${string}`;
                    principalAmount: bigint;
                    startTime: bigint;
                    duration: bigint;
                    source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
                };
                lender: `0x${string}`;
                borrower: `0x${string}`;
                fee: bigint;
            } | {
                delegate: `0x${string}`;
                collection: `0x${string}`;
                tokenId: bigint;
            })[];
            loan: {
                contractAddress: `0x${string}`;
                borrower: `0x${string}`;
                nftCollateralTokenId: bigint;
                nftCollateralAddress: `0x${string}`;
                principalAddress: `0x${string}`;
                principalAmount: bigint;
                startTime: bigint;
                duration: bigint;
                source: readonly {
                    loanId: bigint;
                    lender: `0x${string}`;
                    principalAmount: bigint;
                    accruedInterest: bigint;
                    startTime: bigint;
                    aprBps: bigint;
                }[];
                id: string;
            };
            loanId: bigint;
        }>);
    }>

  • Parameters

    • __namedParameters: {
          loan: LoanV4;
          loanId: bigint;
      }

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<{
            loanId: bigint;
        }>);
    }>

Properties

abi: readonly [{
    stateMutability: "nonpayable";
    type: "constructor";
    inputs: readonly [{
        name: "loanLiquidator";
        internalType: "address";
        type: "address";
    }, {
        name: "protocolFee";
        internalType: "struct IBaseLoan.ProtocolFee";
        type: "tuple";
        components: readonly [{
            name: "recipient";
            internalType: "address";
            type: "address";
        }, {
            name: "fraction";
            internalType: "uint256";
            type: "uint256";
        }];
    }, {
        name: "currencyManager";
        internalType: "address";
        type: "address";
    }, {
        name: "collectionManager";
        internalType: "address";
        type: "address";
    }, {
        name: "maxSources";
        internalType: "uint8";
        type: "uint8";
    }];
}, {
    type: "error";
    inputs: readonly [];
    name: "AddressZeroError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_offerId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "CancelledOrExecutedOfferError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_offerId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "CancelledRenegotiationOffer";
}, {
    type: "error";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_renegotiationId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "CancelledRenegotiationOfferError";
}, {
    type: "error";
    inputs: readonly [];
    name: "CannotLiquidateError";
}, {
    type: "error";
    inputs: readonly [];
    name: "CollectionNotWhitelistedError";
}, {
    type: "error";
    inputs: readonly [];
    name: "CurrencyNotWhitelistedError";
}, {
    type: "error";
    inputs: readonly [];
    name: "ExpiredLoanError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_expirationTime";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "ExpiredOfferError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_expirationTime";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "ExpiredRenegotiationOfferError";
}, {
    type: "error";
    inputs: readonly [];
    name: "InvalidBorrowerError";
}, {
    type: "error";
    inputs: readonly [];
    name: "InvalidCallbackError";
}, {
    type: "error";
    inputs: readonly [];
    name: "InvalidCollateralIdError";
}, {
    type: "error";
    inputs: readonly [];
    name: "InvalidLiquidationError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_loanId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "InvalidLoanError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_fraction";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "InvalidProtocolFeeError";
}, {
    type: "error";
    inputs: readonly [];
    name: "InvalidRenegotiationOfferError";
}, {
    type: "error";
    inputs: readonly [];
    name: "InvalidSignatureError";
}, {
    type: "error";
    inputs: readonly [];
    name: "InvalidSignerError";
}, {
    type: "error";
    inputs: readonly [];
    name: "LengthMismatchError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_liquidator";
        internalType: "address";
        type: "address";
    }];
    name: "LiquidatorOnlyError";
}, {
    type: "error";
    inputs: readonly [];
    name: "LoanExpiredError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_expirationTime";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "LoanNotDueError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_loanId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "LoanNotFoundError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_newMinOfferId";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "_minOfferId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "LowOfferIdError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_newMinRenegotiationOfferId";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "_minOfferId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "LowRenegotiationOfferIdError";
}, {
    type: "error";
    inputs: readonly [];
    name: "MaxCapacityExceededError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_id";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "NotMintedError";
}, {
    type: "error";
    inputs: readonly [];
    name: "NotStrictlyImprovedError";
}, {
    type: "error";
    inputs: readonly [];
    name: "OnlyBorrowerCallableError";
}, {
    type: "error";
    inputs: readonly [];
    name: "OnlyLenderOrSignerCallableError";
}, {
    type: "error";
    inputs: readonly [];
    name: "PartialOfferCannotChangeDurationError";
}, {
    type: "error";
    inputs: readonly [];
    name: "PartialOfferCannotHaveFeeError";
}, {
    type: "error";
    inputs: readonly [];
    name: "RefinanceFullError";
}, {
    type: "error";
    inputs: readonly [];
    name: "RepaymentError";
}, {
    type: "error";
    inputs: readonly [{
        name: "sourcePrincipal";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "loanPrincipal";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "TargetPrincipalTooLowError";
}, {
    type: "error";
    inputs: readonly [{
        name: "_pendingProtocolFeeSetTime";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "TooEarlyError";
}, {
    type: "error";
    inputs: readonly [{
        name: "sources";
        internalType: "uint8";
        type: "uint8";
    }];
    name: "TooManySourcesError";
}, {
    type: "error";
    inputs: readonly [];
    name: "Unauthorized";
}, {
    type: "error";
    inputs: readonly [{
        name: "_authorized";
        internalType: "address";
        type: "address";
    }];
    name: "UnauthorizedError";
}, {
    type: "error";
    inputs: readonly [];
    name: "ZeroAddressError";
}, {
    type: "error";
    inputs: readonly [];
    name: "ZeroDurationError";
}, {
    type: "error";
    inputs: readonly [];
    name: "ZeroInterestError";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "lender";
        internalType: "address";
        type: "address";
        indexed: false;
    }, {
        name: "minOfferId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }];
    name: "AllOffersCancelled";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "lender";
        internalType: "address";
        type: "address";
        indexed: false;
    }, {
        name: "minRenegotiationId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }];
    name: "AllRenegotiationOffersCancelled";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "lender";
        internalType: "address";
        type: "address";
        indexed: false;
    }, {
        name: "signer";
        internalType: "address";
        type: "address";
        indexed: false;
    }];
    name: "ApprovedSigner";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "minimum";
        internalType: "struct IBaseLoan.ImprovementMinimum";
        type: "tuple";
        components: readonly [{
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "interest";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }];
        indexed: false;
    }];
    name: "ImprovementMinimumUpdated";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "newDuration";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }];
    name: "LiquidationAuctionDurationUpdated";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "liquidator";
        internalType: "address";
        type: "address";
        indexed: false;
    }];
    name: "LiquidationContractUpdated";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "loanId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }, {
        name: "offerId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }, {
        name: "loan";
        internalType: "struct IMultiSourceLoan.Loan";
        type: "tuple";
        components: readonly [{
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "startTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "source";
            internalType: "struct IMultiSourceLoan.Source[]";
            type: "tuple[]";
            components: readonly [{
                name: "loanId";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "lender";
                internalType: "address";
                type: "address";
            }, {
                name: "principalAmount";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "accruedInterest";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "startTime";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "aprBps";
                internalType: "uint256";
                type: "uint256";
            }];
        }];
        indexed: false;
    }, {
        name: "fee";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }];
    name: "LoanEmitted";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "loanId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }];
    name: "LoanForeclosed";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "loanId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }, {
        name: "repayment";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }];
    name: "LoanLiquidated";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "renegotiationId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }, {
        name: "oldLoanId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }, {
        name: "newLoanId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }, {
        name: "loan";
        internalType: "struct IMultiSourceLoan.Loan";
        type: "tuple";
        components: readonly [{
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "startTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "source";
            internalType: "struct IMultiSourceLoan.Source[]";
            type: "tuple[]";
            components: readonly [{
                name: "loanId";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "lender";
                internalType: "address";
                type: "address";
            }, {
                name: "principalAmount";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "accruedInterest";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "startTime";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "aprBps";
                internalType: "uint256";
                type: "uint256";
            }];
        }];
        indexed: false;
    }, {
        name: "fee";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }];
    name: "LoanRefinanced";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "loanId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }, {
        name: "totalRepayment";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }, {
        name: "fee";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }];
    name: "LoanRepaid";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "loanId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }, {
        name: "liquidator";
        internalType: "address";
        type: "address";
        indexed: false;
    }];
    name: "LoanSentToLiquidator";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "newMax";
        internalType: "uint8";
        type: "uint8";
        indexed: false;
    }];
    name: "MaxSourcesUpdated";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "lender";
        internalType: "address";
        type: "address";
        indexed: false;
    }, {
        name: "offerId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }];
    name: "OfferCancelled";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "user";
        internalType: "address";
        type: "address";
        indexed: true;
    }, {
        name: "newOwner";
        internalType: "address";
        type: "address";
        indexed: true;
    }];
    name: "OwnershipTransferred";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "fee";
        internalType: "struct IBaseLoan.ProtocolFee";
        type: "tuple";
        components: readonly [{
            name: "recipient";
            internalType: "address";
            type: "address";
        }, {
            name: "fraction";
            internalType: "uint256";
            type: "uint256";
        }];
        indexed: false;
    }];
    name: "ProtocolFeePendingUpdate";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "fee";
        internalType: "struct IBaseLoan.ProtocolFee";
        type: "tuple";
        components: readonly [{
            name: "recipient";
            internalType: "address";
            type: "address";
        }, {
            name: "fraction";
            internalType: "uint256";
            type: "uint256";
        }];
        indexed: false;
    }];
    name: "ProtocolFeeUpdated";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "lender";
        internalType: "address";
        type: "address";
        indexed: false;
    }, {
        name: "renegotiationId";
        internalType: "uint256";
        type: "uint256";
        indexed: false;
    }];
    name: "RenegotiationOfferCancelled";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "contract_added";
        internalType: "address";
        type: "address";
        indexed: false;
    }];
    name: "WhitelistedCallbackContractAdded";
}, {
    type: "event";
    anonymous: false;
    inputs: readonly [{
        name: "contract_removed";
        internalType: "address";
        type: "address";
        indexed: false;
    }];
    name: "WhitelistedCallbackContractRemoved";
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "DOMAIN_SEPARATOR";
    outputs: readonly [{
        name: "";
        internalType: "bytes32";
        type: "bytes32";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "FEE_UPDATE_NOTICE";
    outputs: readonly [{
        name: "";
        internalType: "uint256";
        type: "uint256";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "INITIAL_DOMAIN_SEPARATOR";
    outputs: readonly [{
        name: "";
        internalType: "bytes32";
        type: "bytes32";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "MAX_PROTOCOL_FEE";
    outputs: readonly [{
        name: "";
        internalType: "uint256";
        type: "uint256";
    }];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_contract";
        internalType: "address";
        type: "address";
    }];
    name: "addWhitelistedCallbackContract";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_signer";
        internalType: "address";
        type: "address";
    }];
    name: "approveSigner";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_minOfferId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "cancelAllOffers";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_minRenegotiationId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "cancelAllRenegotiationOffers";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_offerId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "cancelOffer";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_offerIds";
        internalType: "uint256[]";
        type: "uint256[]";
    }];
    name: "cancelOffers";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_renegotiationId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "cancelRenegotiationOffer";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_renegotiationIds";
        internalType: "uint256[]";
        type: "uint256[]";
    }];
    name: "cancelRenegotiationOffers";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_loanOffer";
        internalType: "struct IBaseLoan.LoanOffer";
        type: "tuple";
        components: readonly [{
            name: "offerId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "lender";
            internalType: "address";
            type: "address";
        }, {
            name: "fee";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "capacity";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "signer";
            internalType: "address";
            type: "address";
        }, {
            name: "requiresLiquidation";
            internalType: "bool";
            type: "bool";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "aprBps";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "expirationTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "validators";
            internalType: "struct IBaseLoan.OfferValidator[]";
            type: "tuple[]";
            components: readonly [{
                name: "validator";
                internalType: "address";
                type: "address";
            }, {
                name: "arguments";
                internalType: "bytes";
                type: "bytes";
            }];
        }];
    }, {
        name: "_tokenId";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "_lenderOfferSignature";
        internalType: "bytes";
        type: "bytes";
    }, {
        name: "_withCallback";
        internalType: "bool";
        type: "bool";
    }];
    name: "emitLoan";
    outputs: readonly [{
        name: "";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "";
        internalType: "struct IMultiSourceLoan.Loan";
        type: "tuple";
        components: readonly [{
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "startTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "source";
            internalType: "struct IMultiSourceLoan.Source[]";
            type: "tuple[]";
            components: readonly [{
                name: "loanId";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "lender";
                internalType: "address";
                type: "address";
            }, {
                name: "principalAmount";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "accruedInterest";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "startTime";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "aprBps";
                internalType: "uint256";
                type: "uint256";
            }];
        }];
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [{
        name: "";
        internalType: "address";
        type: "address";
    }];
    name: "getApprovedSigner";
    outputs: readonly [{
        name: "";
        internalType: "address";
        type: "address";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "getCollectionManager";
    outputs: readonly [{
        name: "";
        internalType: "address";
        type: "address";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "getCurrencyManager";
    outputs: readonly [{
        name: "";
        internalType: "address";
        type: "address";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "getImprovementMinimum";
    outputs: readonly [{
        name: "";
        internalType: "struct IBaseLoan.ImprovementMinimum";
        type: "tuple";
        components: readonly [{
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "interest";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }];
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "getLiquidationAuctionDuration";
    outputs: readonly [{
        name: "";
        internalType: "uint48";
        type: "uint48";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "getLiquidator";
    outputs: readonly [{
        name: "";
        internalType: "address";
        type: "address";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [{
        name: "_loanId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "getLoanHash";
    outputs: readonly [{
        name: "";
        internalType: "bytes32";
        type: "bytes32";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "getMaxSources";
    outputs: readonly [{
        name: "";
        internalType: "uint8";
        type: "uint8";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [{
        name: "_loanPrincipal";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "getMinSourcePrincipal";
    outputs: readonly [{
        name: "";
        internalType: "uint256";
        type: "uint256";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "getPendingProtocolFee";
    outputs: readonly [{
        name: "";
        internalType: "struct IBaseLoan.ProtocolFee";
        type: "tuple";
        components: readonly [{
            name: "recipient";
            internalType: "address";
            type: "address";
        }, {
            name: "fraction";
            internalType: "uint256";
            type: "uint256";
        }];
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "getPendingProtocolFeeSetTime";
    outputs: readonly [{
        name: "";
        internalType: "uint256";
        type: "uint256";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "getProtocolFee";
    outputs: readonly [{
        name: "";
        internalType: "struct IBaseLoan.ProtocolFee";
        type: "tuple";
        components: readonly [{
            name: "recipient";
            internalType: "address";
            type: "address";
        }, {
            name: "fraction";
            internalType: "uint256";
            type: "uint256";
        }];
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "getTotalLoansIssued";
    outputs: readonly [{
        name: "";
        internalType: "uint256";
        type: "uint256";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [{
        name: "_lender";
        internalType: "address";
        type: "address";
    }, {
        name: "_offerId";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "getUsedCapacity";
    outputs: readonly [{
        name: "";
        internalType: "uint256";
        type: "uint256";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [{
        name: "";
        internalType: "address";
        type: "address";
    }, {
        name: "";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "isOfferCancelled";
    outputs: readonly [{
        name: "";
        internalType: "bool";
        type: "bool";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [{
        name: "";
        internalType: "address";
        type: "address";
    }, {
        name: "";
        internalType: "uint256";
        type: "uint256";
    }];
    name: "isRenegotiationOfferCancelled";
    outputs: readonly [{
        name: "";
        internalType: "bool";
        type: "bool";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [{
        name: "_contract";
        internalType: "address";
        type: "address";
    }];
    name: "isWhitelistedCallbackContract";
    outputs: readonly [{
        name: "";
        internalType: "bool";
        type: "bool";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [{
        name: "";
        internalType: "address";
        type: "address";
    }];
    name: "lenderMinOfferId";
    outputs: readonly [{
        name: "";
        internalType: "uint256";
        type: "uint256";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [{
        name: "";
        internalType: "address";
        type: "address";
    }];
    name: "lenderMinRenegotiationOfferId";
    outputs: readonly [{
        name: "";
        internalType: "uint256";
        type: "uint256";
    }];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_loanId";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "_loan";
        internalType: "struct IMultiSourceLoan.Loan";
        type: "tuple";
        components: readonly [{
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "startTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "source";
            internalType: "struct IMultiSourceLoan.Source[]";
            type: "tuple[]";
            components: readonly [{
                name: "loanId";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "lender";
                internalType: "address";
                type: "address";
            }, {
                name: "principalAmount";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "accruedInterest";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "startTime";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "aprBps";
                internalType: "uint256";
                type: "uint256";
            }];
        }];
    }];
    name: "liquidateLoan";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_collateralAddress";
        internalType: "address";
        type: "address";
    }, {
        name: "_collateralTokenId";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "_loanId";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "_repayment";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "_loan";
        internalType: "bytes";
        type: "bytes";
    }];
    name: "loanLiquidated";
    outputs: readonly [];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "name";
    outputs: readonly [{
        name: "";
        internalType: "string";
        type: "string";
    }];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "";
        internalType: "address";
        type: "address";
    }, {
        name: "";
        internalType: "address";
        type: "address";
    }, {
        name: "";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "";
        internalType: "bytes";
        type: "bytes";
    }];
    name: "onERC721Received";
    outputs: readonly [{
        name: "";
        internalType: "bytes4";
        type: "bytes4";
    }];
}, {
    stateMutability: "view";
    type: "function";
    inputs: readonly [];
    name: "owner";
    outputs: readonly [{
        name: "";
        internalType: "address";
        type: "address";
    }];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_renegotiationOffer";
        internalType: "struct IMultiSourceLoan.RenegotiationOffer";
        type: "tuple";
        components: readonly [{
            name: "renegotiationId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "loanId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "lender";
            internalType: "address";
            type: "address";
        }, {
            name: "fee";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "signer";
            internalType: "address";
            type: "address";
        }, {
            name: "targetPrincipal";
            internalType: "uint256[]";
            type: "uint256[]";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "aprBps";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "expirationTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "strictImprovement";
            internalType: "bool";
            type: "bool";
        }];
    }, {
        name: "_loan";
        internalType: "struct IMultiSourceLoan.Loan";
        type: "tuple";
        components: readonly [{
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "startTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "source";
            internalType: "struct IMultiSourceLoan.Source[]";
            type: "tuple[]";
            components: readonly [{
                name: "loanId";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "lender";
                internalType: "address";
                type: "address";
            }, {
                name: "principalAmount";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "accruedInterest";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "startTime";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "aprBps";
                internalType: "uint256";
                type: "uint256";
            }];
        }];
    }, {
        name: "_renegotiationOfferSignature";
        internalType: "bytes";
        type: "bytes";
    }];
    name: "refinanceFull";
    outputs: readonly [{
        name: "";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "";
        internalType: "struct IMultiSourceLoan.Loan";
        type: "tuple";
        components: readonly [{
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "startTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "source";
            internalType: "struct IMultiSourceLoan.Source[]";
            type: "tuple[]";
            components: readonly [{
                name: "loanId";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "lender";
                internalType: "address";
                type: "address";
            }, {
                name: "principalAmount";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "accruedInterest";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "startTime";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "aprBps";
                internalType: "uint256";
                type: "uint256";
            }];
        }];
    }];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_renegotiationOffer";
        internalType: "struct IMultiSourceLoan.RenegotiationOffer";
        type: "tuple";
        components: readonly [{
            name: "renegotiationId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "loanId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "lender";
            internalType: "address";
            type: "address";
        }, {
            name: "fee";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "signer";
            internalType: "address";
            type: "address";
        }, {
            name: "targetPrincipal";
            internalType: "uint256[]";
            type: "uint256[]";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "aprBps";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "expirationTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "strictImprovement";
            internalType: "bool";
            type: "bool";
        }];
    }, {
        name: "_loan";
        internalType: "struct IMultiSourceLoan.Loan";
        type: "tuple";
        components: readonly [{
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "startTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "source";
            internalType: "struct IMultiSourceLoan.Source[]";
            type: "tuple[]";
            components: readonly [{
                name: "loanId";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "lender";
                internalType: "address";
                type: "address";
            }, {
                name: "principalAmount";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "accruedInterest";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "startTime";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "aprBps";
                internalType: "uint256";
                type: "uint256";
            }];
        }];
    }];
    name: "refinancePartial";
    outputs: readonly [{
        name: "";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "";
        internalType: "struct IMultiSourceLoan.Loan";
        type: "tuple";
        components: readonly [{
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "startTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "source";
            internalType: "struct IMultiSourceLoan.Source[]";
            type: "tuple[]";
            components: readonly [{
                name: "loanId";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "lender";
                internalType: "address";
                type: "address";
            }, {
                name: "principalAmount";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "accruedInterest";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "startTime";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "aprBps";
                internalType: "uint256";
                type: "uint256";
            }];
        }];
    }];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_renegotiationOffer";
        internalType: "struct IMultiSourceLoan.RenegotiationOffer[]";
        type: "tuple[]";
        components: readonly [{
            name: "renegotiationId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "loanId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "lender";
            internalType: "address";
            type: "address";
        }, {
            name: "fee";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "signer";
            internalType: "address";
            type: "address";
        }, {
            name: "targetPrincipal";
            internalType: "uint256[]";
            type: "uint256[]";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "aprBps";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "expirationTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "strictImprovement";
            internalType: "bool";
            type: "bool";
        }];
    }, {
        name: "_loan";
        internalType: "struct IMultiSourceLoan.Loan[]";
        type: "tuple[]";
        components: readonly [{
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "startTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "source";
            internalType: "struct IMultiSourceLoan.Source[]";
            type: "tuple[]";
            components: readonly [{
                name: "loanId";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "lender";
                internalType: "address";
                type: "address";
            }, {
                name: "principalAmount";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "accruedInterest";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "startTime";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "aprBps";
                internalType: "uint256";
                type: "uint256";
            }];
        }];
    }];
    name: "refinancePartialBatch";
    outputs: readonly [{
        name: "loanId";
        internalType: "uint256[]";
        type: "uint256[]";
    }, {
        name: "loans";
        internalType: "struct IMultiSourceLoan.Loan[]";
        type: "tuple[]";
        components: readonly [{
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "startTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "source";
            internalType: "struct IMultiSourceLoan.Source[]";
            type: "tuple[]";
            components: readonly [{
                name: "loanId";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "lender";
                internalType: "address";
                type: "address";
            }, {
                name: "principalAmount";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "accruedInterest";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "startTime";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "aprBps";
                internalType: "uint256";
                type: "uint256";
            }];
        }];
    }];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_contract";
        internalType: "address";
        type: "address";
    }];
    name: "removeWhitelistedCallbackContract";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_collateralTo";
        internalType: "address";
        type: "address";
    }, {
        name: "_loanId";
        internalType: "uint256";
        type: "uint256";
    }, {
        name: "_loan";
        internalType: "struct IMultiSourceLoan.Loan";
        type: "tuple";
        components: readonly [{
            name: "borrower";
            internalType: "address";
            type: "address";
        }, {
            name: "nftCollateralTokenId";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "nftCollateralAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAddress";
            internalType: "address";
            type: "address";
        }, {
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "startTime";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "source";
            internalType: "struct IMultiSourceLoan.Source[]";
            type: "tuple[]";
            components: readonly [{
                name: "loanId";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "lender";
                internalType: "address";
                type: "address";
            }, {
                name: "principalAmount";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "accruedInterest";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "startTime";
                internalType: "uint256";
                type: "uint256";
            }, {
                name: "aprBps";
                internalType: "uint256";
                type: "uint256";
            }];
        }];
    }, {
        name: "_withCallback";
        internalType: "bool";
        type: "bool";
    }];
    name: "repayLoan";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "maxSources";
        internalType: "uint8";
        type: "uint8";
    }];
    name: "setMaxSources";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [];
    name: "setProtocolFee";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "newOwner";
        internalType: "address";
        type: "address";
    }];
    name: "transferOwnership";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_newMinimum";
        internalType: "struct IBaseLoan.ImprovementMinimum";
        type: "tuple";
        components: readonly [{
            name: "principalAmount";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "interest";
            internalType: "uint256";
            type: "uint256";
        }, {
            name: "duration";
            internalType: "uint256";
            type: "uint256";
        }];
    }];
    name: "updateImprovementMinimum";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_newDuration";
        internalType: "uint48";
        type: "uint48";
    }];
    name: "updateLiquidationAuctionDuration";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "loanLiquidator";
        internalType: "contract ILoanLiquidator";
        type: "address";
    }];
    name: "updateLiquidationContract";
    outputs: readonly [];
}, {
    stateMutability: "nonpayable";
    type: "function";
    inputs: readonly [{
        name: "_newProtocolFee";
        internalType: "struct IBaseLoan.ProtocolFee";
        type: "tuple";
        components: readonly [{
            name: "recipient";
            internalType: "address";
            type: "address";
        }, {
            name: "fraction";
            internalType: "uint256";
            type: "uint256";
        }];
    }];
    name: "updateProtocolFee";
    outputs: readonly [];
}]
address: `0x${string}`
bcClient: {}

Type declaration

    wallet: {}

    Type declaration

      contract: GetContractReturnType<readonly [{
          stateMutability: "nonpayable";
          type: "constructor";
          inputs: readonly [{
              name: "loanLiquidator";
              internalType: "address";
              type: "address";
          }, {
              name: "protocolFee";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              name: "currencyManager";
              internalType: "address";
              type: "address";
          }, {
              name: "collectionManager";
              internalType: "address";
              type: "address";
          }, {
              name: "maxSources";
              internalType: "uint8";
              type: "uint8";
          }];
      }, {
          type: "error";
          inputs: readonly [];
          name: "AddressZeroError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_offerId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "CancelledOrExecutedOfferError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_offerId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "CancelledRenegotiationOffer";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_renegotiationId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "CancelledRenegotiationOfferError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "CannotLiquidateError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "CollectionNotWhitelistedError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "CurrencyNotWhitelistedError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "ExpiredLoanError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_expirationTime";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "ExpiredOfferError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_expirationTime";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "ExpiredRenegotiationOfferError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidBorrowerError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidCallbackError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidCollateralIdError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidLiquidationError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "InvalidLoanError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_fraction";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "InvalidProtocolFeeError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidRenegotiationOfferError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidSignatureError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidSignerError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "LengthMismatchError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_liquidator";
              internalType: "address";
              type: "address";
          }];
          name: "LiquidatorOnlyError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "LoanExpiredError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_expirationTime";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "LoanNotDueError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "LoanNotFoundError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_newMinOfferId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_minOfferId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "LowOfferIdError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_newMinRenegotiationOfferId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_minOfferId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "LowRenegotiationOfferIdError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "MaxCapacityExceededError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_id";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "NotMintedError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "NotStrictlyImprovedError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "OnlyBorrowerCallableError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "OnlyLenderOrSignerCallableError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "PartialOfferCannotChangeDurationError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "PartialOfferCannotHaveFeeError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "RefinanceFullError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "RepaymentError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "sourcePrincipal";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "loanPrincipal";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "TargetPrincipalTooLowError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_pendingProtocolFeeSetTime";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "TooEarlyError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "sources";
              internalType: "uint8";
              type: "uint8";
          }];
          name: "TooManySourcesError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "Unauthorized";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_authorized";
              internalType: "address";
              type: "address";
          }];
          name: "UnauthorizedError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "ZeroAddressError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "ZeroDurationError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "ZeroInterestError";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "lender";
              internalType: "address";
              type: "address";
              indexed: false;
          }, {
              name: "minOfferId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "AllOffersCancelled";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "lender";
              internalType: "address";
              type: "address";
              indexed: false;
          }, {
              name: "minRenegotiationId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "AllRenegotiationOffersCancelled";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "lender";
              internalType: "address";
              type: "address";
              indexed: false;
          }, {
              name: "signer";
              internalType: "address";
              type: "address";
              indexed: false;
          }];
          name: "ApprovedSigner";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "minimum";
              internalType: "struct IBaseLoan.ImprovementMinimum";
              type: "tuple";
              components: readonly [{
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "interest";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }];
              indexed: false;
          }];
          name: "ImprovementMinimumUpdated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "newDuration";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LiquidationAuctionDurationUpdated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "liquidator";
              internalType: "address";
              type: "address";
              indexed: false;
          }];
          name: "LiquidationContractUpdated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "loanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "offerId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
              indexed: false;
          }, {
              name: "fee";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LoanEmitted";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "loanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LoanForeclosed";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "loanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "repayment";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LoanLiquidated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "renegotiationId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "oldLoanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "newLoanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
              indexed: false;
          }, {
              name: "fee";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LoanRefinanced";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "loanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "totalRepayment";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "fee";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LoanRepaid";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "loanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "liquidator";
              internalType: "address";
              type: "address";
              indexed: false;
          }];
          name: "LoanSentToLiquidator";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "newMax";
              internalType: "uint8";
              type: "uint8";
              indexed: false;
          }];
          name: "MaxSourcesUpdated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "lender";
              internalType: "address";
              type: "address";
              indexed: false;
          }, {
              name: "offerId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "OfferCancelled";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "user";
              internalType: "address";
              type: "address";
              indexed: true;
          }, {
              name: "newOwner";
              internalType: "address";
              type: "address";
              indexed: true;
          }];
          name: "OwnershipTransferred";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "fee";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
              indexed: false;
          }];
          name: "ProtocolFeePendingUpdate";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "fee";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
              indexed: false;
          }];
          name: "ProtocolFeeUpdated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "lender";
              internalType: "address";
              type: "address";
              indexed: false;
          }, {
              name: "renegotiationId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "RenegotiationOfferCancelled";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "contract_added";
              internalType: "address";
              type: "address";
              indexed: false;
          }];
          name: "WhitelistedCallbackContractAdded";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "contract_removed";
              internalType: "address";
              type: "address";
              indexed: false;
          }];
          name: "WhitelistedCallbackContractRemoved";
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "DOMAIN_SEPARATOR";
          outputs: readonly [{
              name: "";
              internalType: "bytes32";
              type: "bytes32";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "FEE_UPDATE_NOTICE";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "INITIAL_DOMAIN_SEPARATOR";
          outputs: readonly [{
              name: "";
              internalType: "bytes32";
              type: "bytes32";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "MAX_PROTOCOL_FEE";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_contract";
              internalType: "address";
              type: "address";
          }];
          name: "addWhitelistedCallbackContract";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_signer";
              internalType: "address";
              type: "address";
          }];
          name: "approveSigner";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_minOfferId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "cancelAllOffers";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_minRenegotiationId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "cancelAllRenegotiationOffers";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_offerId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "cancelOffer";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_offerIds";
              internalType: "uint256[]";
              type: "uint256[]";
          }];
          name: "cancelOffers";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_renegotiationId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "cancelRenegotiationOffer";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_renegotiationIds";
              internalType: "uint256[]";
              type: "uint256[]";
          }];
          name: "cancelRenegotiationOffers";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_loanOffer";
              internalType: "struct IBaseLoan.LoanOffer";
              type: "tuple";
              components: readonly [{
                  name: "offerId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "capacity";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "signer";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "requiresLiquidation";
                  internalType: "bool";
                  type: "bool";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "aprBps";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "validators";
                  internalType: "struct IBaseLoan.OfferValidator[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "validator";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "arguments";
                      internalType: "bytes";
                      type: "bytes";
                  }];
              }];
          }, {
              name: "_tokenId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_lenderOfferSignature";
              internalType: "bytes";
              type: "bytes";
          }, {
              name: "_withCallback";
              internalType: "bool";
              type: "bool";
          }];
          name: "emitLoan";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
          name: "getApprovedSigner";
          outputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getCollectionManager";
          outputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getCurrencyManager";
          outputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getImprovementMinimum";
          outputs: readonly [{
              name: "";
              internalType: "struct IBaseLoan.ImprovementMinimum";
              type: "tuple";
              components: readonly [{
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "interest";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getLiquidationAuctionDuration";
          outputs: readonly [{
              name: "";
              internalType: "uint48";
              type: "uint48";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getLiquidator";
          outputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "getLoanHash";
          outputs: readonly [{
              name: "";
              internalType: "bytes32";
              type: "bytes32";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getMaxSources";
          outputs: readonly [{
              name: "";
              internalType: "uint8";
              type: "uint8";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "_loanPrincipal";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "getMinSourcePrincipal";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getPendingProtocolFee";
          outputs: readonly [{
              name: "";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getPendingProtocolFeeSetTime";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getProtocolFee";
          outputs: readonly [{
              name: "";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getTotalLoansIssued";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_offerId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "getUsedCapacity";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }, {
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "isOfferCancelled";
          outputs: readonly [{
              name: "";
              internalType: "bool";
              type: "bool";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }, {
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "isRenegotiationOfferCancelled";
          outputs: readonly [{
              name: "";
              internalType: "bool";
              type: "bool";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "_contract";
              internalType: "address";
              type: "address";
          }];
          name: "isWhitelistedCallbackContract";
          outputs: readonly [{
              name: "";
              internalType: "bool";
              type: "bool";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
          name: "lenderMinOfferId";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
          name: "lenderMinRenegotiationOfferId";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
          name: "liquidateLoan";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_collateralAddress";
              internalType: "address";
              type: "address";
          }, {
              name: "_collateralTokenId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_repayment";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_loan";
              internalType: "bytes";
              type: "bytes";
          }];
          name: "loanLiquidated";
          outputs: readonly [];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "name";
          outputs: readonly [{
              name: "";
              internalType: "string";
              type: "string";
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }, {
              name: "";
              internalType: "address";
              type: "address";
          }, {
              name: "";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "";
              internalType: "bytes";
              type: "bytes";
          }];
          name: "onERC721Received";
          outputs: readonly [{
              name: "";
              internalType: "bytes4";
              type: "bytes4";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "owner";
          outputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_renegotiationOffer";
              internalType: "struct IMultiSourceLoan.RenegotiationOffer";
              type: "tuple";
              components: readonly [{
                  name: "renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "signer";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "targetPrincipal";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "aprBps";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "strictImprovement";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              name: "_loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }, {
              name: "_renegotiationOfferSignature";
              internalType: "bytes";
              type: "bytes";
          }];
          name: "refinanceFull";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_renegotiationOffer";
              internalType: "struct IMultiSourceLoan.RenegotiationOffer";
              type: "tuple";
              components: readonly [{
                  name: "renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "signer";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "targetPrincipal";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "aprBps";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "strictImprovement";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              name: "_loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
          name: "refinancePartial";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_renegotiationOffer";
              internalType: "struct IMultiSourceLoan.RenegotiationOffer[]";
              type: "tuple[]";
              components: readonly [{
                  name: "renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "signer";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "targetPrincipal";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "aprBps";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "strictImprovement";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              name: "_loan";
              internalType: "struct IMultiSourceLoan.Loan[]";
              type: "tuple[]";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
          name: "refinancePartialBatch";
          outputs: readonly [{
              name: "loanId";
              internalType: "uint256[]";
              type: "uint256[]";
          }, {
              name: "loans";
              internalType: "struct IMultiSourceLoan.Loan[]";
              type: "tuple[]";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_contract";
              internalType: "address";
              type: "address";
          }];
          name: "removeWhitelistedCallbackContract";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_collateralTo";
              internalType: "address";
              type: "address";
          }, {
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }, {
              name: "_withCallback";
              internalType: "bool";
              type: "bool";
          }];
          name: "repayLoan";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "maxSources";
              internalType: "uint8";
              type: "uint8";
          }];
          name: "setMaxSources";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [];
          name: "setProtocolFee";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "newOwner";
              internalType: "address";
              type: "address";
          }];
          name: "transferOwnership";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_newMinimum";
              internalType: "struct IBaseLoan.ImprovementMinimum";
              type: "tuple";
              components: readonly [{
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "interest";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }];
          name: "updateImprovementMinimum";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_newDuration";
              internalType: "uint48";
              type: "uint48";
          }];
          name: "updateLiquidationAuctionDuration";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "loanLiquidator";
              internalType: "contract ILoanLiquidator";
              type: "address";
          }];
          name: "updateLiquidationContract";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_newProtocolFee";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }];
          name: "updateProtocolFee";
          outputs: readonly [];
      }], {} | {}>
      safeContractWrite: {
          transferOwnership: ((args, options?) => Promise<`0x${string}`>);
          liquidateLoan: ((args, options?) => Promise<`0x${string}`>);
          onERC721Received: ((args, options?) => Promise<`0x${string}`>);
          addWhitelistedCallbackContract: ((args, options?) => Promise<`0x${string}`>);
          approveSigner: ((args, options?) => Promise<`0x${string}`>);
          cancelAllOffers: ((args, options?) => Promise<`0x${string}`>);
          cancelAllRenegotiationOffers: ((args, options?) => Promise<`0x${string}`>);
          cancelOffer: ((args, options?) => Promise<`0x${string}`>);
          cancelOffers: ((args, options?) => Promise<`0x${string}`>);
          cancelRenegotiationOffer: ((args, options?) => Promise<`0x${string}`>);
          cancelRenegotiationOffers: ((args, options?) => Promise<`0x${string}`>);
          loanLiquidated: ((args, options?) => Promise<`0x${string}`>);
          removeWhitelistedCallbackContract: ((args, options?) => Promise<`0x${string}`>);
          setProtocolFee: ((args, options?) => Promise<`0x${string}`>);
          updateImprovementMinimum: ((args, options?) => Promise<`0x${string}`>);
          updateLiquidationAuctionDuration: ((args, options?) => Promise<`0x${string}`>);
          updateLiquidationContract: ((args, options?) => Promise<`0x${string}`>);
          updateProtocolFee: ((args, options?) => Promise<`0x${string}`>);
          emitLoan: ((args, options?) => Promise<`0x${string}`>);
          refinanceFull: ((args, options?) => Promise<`0x${string}`>);
          refinancePartial: ((args, options?) => Promise<`0x${string}`>);
          refinancePartialBatch: ((args, options?) => Promise<`0x${string}`>);
          repayLoan: ((args, options?) => Promise<`0x${string}`>);
          setMaxSources: ((args, options?) => Promise<`0x${string}`>);
      }

      Type declaration

      • transferOwnership: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • liquidateLoan: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [bigint, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }] | readonly [bigint, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }] & readonly [bigint, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • onERC721Received: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`, `0x${string}`, bigint, `0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • addWhitelistedCallbackContract: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • approveSigner: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • cancelAllOffers: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`, bigint]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • cancelAllRenegotiationOffers: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`, bigint]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • cancelOffer: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`, bigint]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • cancelOffers: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`, readonly bigint[]] | readonly [`0x${string}`, readonly bigint[]] & readonly [`0x${string}`, readonly bigint[]]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • cancelRenegotiationOffer: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`, bigint]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • cancelRenegotiationOffers: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`, readonly bigint[]] | readonly [`0x${string}`, readonly bigint[]] & readonly [`0x${string}`, readonly bigint[]]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • loanLiquidated: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`, bigint, bigint, bigint, `0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • removeWhitelistedCallbackContract: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • setProtocolFee: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: undefined | readonly []
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • updateImprovementMinimum: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [{
                  principalAmount: bigint;
                  interest: bigint;
                  duration: bigint;
              }] | readonly [{
                  principalAmount: bigint;
                  interest: bigint;
                  duration: bigint;
              }] & readonly [{
                  principalAmount: bigint;
                  interest: bigint;
                  duration: bigint;
              }]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • updateLiquidationAuctionDuration: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [number]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • updateLiquidationContract: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • updateProtocolFee: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [{
                  recipient: `0x${string}`;
                  fraction: bigint;
              }] | readonly [{
                  recipient: `0x${string}`;
                  fraction: bigint;
              }] & readonly [{
                  recipient: `0x${string}`;
                  fraction: bigint;
              }]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • emitLoan: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [{
                  offerId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  borrower: `0x${string}`;
                  capacity: bigint;
                  signer: `0x${string}`;
                  requiresLiquidation: Widen<boolean>;
                  nftCollateralAddress: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  validators: readonly ({ validator: `0x${string}`; arguments: `0x${string}`; })[];
              }, bigint, `0x${string}`, Widen<boolean>] | readonly [{
                  offerId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  borrower: `0x${string}`;
                  capacity: bigint;
                  signer: `0x${string}`;
                  requiresLiquidation: boolean;
                  nftCollateralAddress: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  validators: readonly ({ validator: `0x${string}`; arguments: `0x${string}`; })[];
              }, bigint, `0x${string}`, boolean] & readonly [{
                  offerId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  borrower: `0x${string}`;
                  capacity: bigint;
                  signer: `0x${string}`;
                  requiresLiquidation: Widen<boolean>;
                  nftCollateralAddress: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  validators: readonly ({ validator: `0x${string}`; arguments: `0x${string}`; })[];
              }, bigint, `0x${string}`, Widen<boolean>]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • refinanceFull: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [{
                  renegotiationId: bigint;
                  loanId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  signer: `0x${string}`;
                  targetPrincipal: readonly bigint[];
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  strictImprovement: Widen<boolean>;
              }, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }, `0x${string}`] | readonly [{
                  renegotiationId: bigint;
                  loanId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  signer: `0x${string}`;
                  targetPrincipal: readonly bigint[];
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  strictImprovement: boolean;
              }, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }, `0x${string}`] & readonly [{
                  renegotiationId: bigint;
                  loanId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  signer: `0x${string}`;
                  targetPrincipal: readonly bigint[];
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  strictImprovement: Widen<boolean>;
              }, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }, `0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • refinancePartial: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [{
                  renegotiationId: bigint;
                  loanId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  signer: `0x${string}`;
                  targetPrincipal: readonly bigint[];
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  strictImprovement: Widen<boolean>;
              }, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }] | readonly [{
                  renegotiationId: bigint;
                  loanId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  signer: `0x${string}`;
                  targetPrincipal: readonly bigint[];
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  strictImprovement: boolean;
              }, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }] & readonly [{
                  renegotiationId: bigint;
                  loanId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  signer: `0x${string}`;
                  targetPrincipal: readonly bigint[];
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  strictImprovement: Widen<boolean>;
              }, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • refinancePartialBatch: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [readonly {
                  renegotiationId: bigint;
                  loanId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  signer: `0x${string}`;
                  targetPrincipal: readonly bigint[];
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  strictImprovement: Widen<boolean>;
              }[], readonly {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly { loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; }[];
              }[]] | readonly [readonly {
                  renegotiationId: bigint;
                  loanId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  signer: `0x${string}`;
                  targetPrincipal: readonly bigint[];
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  strictImprovement: boolean;
              }[], readonly {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly { loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; }[];
              }[]] & readonly [readonly {
                  renegotiationId: bigint;
                  loanId: bigint;
                  lender: `0x${string}`;
                  fee: bigint;
                  signer: `0x${string}`;
                  targetPrincipal: readonly bigint[];
                  principalAmount: bigint;
                  aprBps: bigint;
                  expirationTime: bigint;
                  duration: bigint;
                  strictImprovement: Widen<boolean>;
              }[], readonly {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly { loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; }[];
              }[]]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • repayLoan: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`, bigint, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }, Widen<boolean>] | readonly [`0x${string}`, bigint, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }, boolean] & readonly [`0x${string}`, bigint, {
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  source: readonly ({ loanId: bigint; lender: `0x${string}`; principalAmount: bigint; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
              }, Widen<boolean>]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • setMaxSources: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [number]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      parseEventLogs: (<TFunctionName>(eventName, logs) => ParseEventLogsReturnType<readonly [{
          stateMutability: "nonpayable";
          type: "constructor";
          inputs: readonly [{
              name: "loanLiquidator";
              internalType: "address";
              type: "address";
          }, {
              name: "protocolFee";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              name: "currencyManager";
              internalType: "address";
              type: "address";
          }, {
              name: "collectionManager";
              internalType: "address";
              type: "address";
          }, {
              name: "maxSources";
              internalType: "uint8";
              type: "uint8";
          }];
      }, {
          type: "error";
          inputs: readonly [];
          name: "AddressZeroError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_offerId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "CancelledOrExecutedOfferError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_offerId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "CancelledRenegotiationOffer";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_renegotiationId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "CancelledRenegotiationOfferError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "CannotLiquidateError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "CollectionNotWhitelistedError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "CurrencyNotWhitelistedError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "ExpiredLoanError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_expirationTime";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "ExpiredOfferError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_expirationTime";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "ExpiredRenegotiationOfferError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidBorrowerError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidCallbackError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidCollateralIdError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidLiquidationError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "InvalidLoanError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_fraction";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "InvalidProtocolFeeError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidRenegotiationOfferError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidSignatureError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "InvalidSignerError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "LengthMismatchError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_liquidator";
              internalType: "address";
              type: "address";
          }];
          name: "LiquidatorOnlyError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "LoanExpiredError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_expirationTime";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "LoanNotDueError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "LoanNotFoundError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_newMinOfferId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_minOfferId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "LowOfferIdError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_newMinRenegotiationOfferId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_minOfferId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "LowRenegotiationOfferIdError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "MaxCapacityExceededError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_id";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "NotMintedError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "NotStrictlyImprovedError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "OnlyBorrowerCallableError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "OnlyLenderOrSignerCallableError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "PartialOfferCannotChangeDurationError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "PartialOfferCannotHaveFeeError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "RefinanceFullError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "RepaymentError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "sourcePrincipal";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "loanPrincipal";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "TargetPrincipalTooLowError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_pendingProtocolFeeSetTime";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "TooEarlyError";
      }, {
          type: "error";
          inputs: readonly [{
              name: "sources";
              internalType: "uint8";
              type: "uint8";
          }];
          name: "TooManySourcesError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "Unauthorized";
      }, {
          type: "error";
          inputs: readonly [{
              name: "_authorized";
              internalType: "address";
              type: "address";
          }];
          name: "UnauthorizedError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "ZeroAddressError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "ZeroDurationError";
      }, {
          type: "error";
          inputs: readonly [];
          name: "ZeroInterestError";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "lender";
              internalType: "address";
              type: "address";
              indexed: false;
          }, {
              name: "minOfferId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "AllOffersCancelled";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "lender";
              internalType: "address";
              type: "address";
              indexed: false;
          }, {
              name: "minRenegotiationId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "AllRenegotiationOffersCancelled";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "lender";
              internalType: "address";
              type: "address";
              indexed: false;
          }, {
              name: "signer";
              internalType: "address";
              type: "address";
              indexed: false;
          }];
          name: "ApprovedSigner";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "minimum";
              internalType: "struct IBaseLoan.ImprovementMinimum";
              type: "tuple";
              components: readonly [{
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "interest";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }];
              indexed: false;
          }];
          name: "ImprovementMinimumUpdated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "newDuration";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LiquidationAuctionDurationUpdated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "liquidator";
              internalType: "address";
              type: "address";
              indexed: false;
          }];
          name: "LiquidationContractUpdated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "loanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "offerId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
              indexed: false;
          }, {
              name: "fee";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LoanEmitted";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "loanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LoanForeclosed";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "loanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "repayment";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LoanLiquidated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "renegotiationId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "oldLoanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "newLoanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
              indexed: false;
          }, {
              name: "fee";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LoanRefinanced";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "loanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "totalRepayment";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "fee";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "LoanRepaid";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "loanId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }, {
              name: "liquidator";
              internalType: "address";
              type: "address";
              indexed: false;
          }];
          name: "LoanSentToLiquidator";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "newMax";
              internalType: "uint8";
              type: "uint8";
              indexed: false;
          }];
          name: "MaxSourcesUpdated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "lender";
              internalType: "address";
              type: "address";
              indexed: false;
          }, {
              name: "offerId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "OfferCancelled";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "user";
              internalType: "address";
              type: "address";
              indexed: true;
          }, {
              name: "newOwner";
              internalType: "address";
              type: "address";
              indexed: true;
          }];
          name: "OwnershipTransferred";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "fee";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
              indexed: false;
          }];
          name: "ProtocolFeePendingUpdate";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "fee";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
              indexed: false;
          }];
          name: "ProtocolFeeUpdated";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "lender";
              internalType: "address";
              type: "address";
              indexed: false;
          }, {
              name: "renegotiationId";
              internalType: "uint256";
              type: "uint256";
              indexed: false;
          }];
          name: "RenegotiationOfferCancelled";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "contract_added";
              internalType: "address";
              type: "address";
              indexed: false;
          }];
          name: "WhitelistedCallbackContractAdded";
      }, {
          type: "event";
          anonymous: false;
          inputs: readonly [{
              name: "contract_removed";
              internalType: "address";
              type: "address";
              indexed: false;
          }];
          name: "WhitelistedCallbackContractRemoved";
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "DOMAIN_SEPARATOR";
          outputs: readonly [{
              name: "";
              internalType: "bytes32";
              type: "bytes32";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "FEE_UPDATE_NOTICE";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "INITIAL_DOMAIN_SEPARATOR";
          outputs: readonly [{
              name: "";
              internalType: "bytes32";
              type: "bytes32";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "MAX_PROTOCOL_FEE";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_contract";
              internalType: "address";
              type: "address";
          }];
          name: "addWhitelistedCallbackContract";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_signer";
              internalType: "address";
              type: "address";
          }];
          name: "approveSigner";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_minOfferId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "cancelAllOffers";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_minRenegotiationId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "cancelAllRenegotiationOffers";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_offerId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "cancelOffer";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_offerIds";
              internalType: "uint256[]";
              type: "uint256[]";
          }];
          name: "cancelOffers";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_renegotiationId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "cancelRenegotiationOffer";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_renegotiationIds";
              internalType: "uint256[]";
              type: "uint256[]";
          }];
          name: "cancelRenegotiationOffers";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_loanOffer";
              internalType: "struct IBaseLoan.LoanOffer";
              type: "tuple";
              components: readonly [{
                  name: "offerId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "capacity";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "signer";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "requiresLiquidation";
                  internalType: "bool";
                  type: "bool";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "aprBps";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "validators";
                  internalType: "struct IBaseLoan.OfferValidator[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "validator";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "arguments";
                      internalType: "bytes";
                      type: "bytes";
                  }];
              }];
          }, {
              name: "_tokenId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_lenderOfferSignature";
              internalType: "bytes";
              type: "bytes";
          }, {
              name: "_withCallback";
              internalType: "bool";
              type: "bool";
          }];
          name: "emitLoan";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
          name: "getApprovedSigner";
          outputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getCollectionManager";
          outputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getCurrencyManager";
          outputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getImprovementMinimum";
          outputs: readonly [{
              name: "";
              internalType: "struct IBaseLoan.ImprovementMinimum";
              type: "tuple";
              components: readonly [{
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "interest";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getLiquidationAuctionDuration";
          outputs: readonly [{
              name: "";
              internalType: "uint48";
              type: "uint48";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getLiquidator";
          outputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "getLoanHash";
          outputs: readonly [{
              name: "";
              internalType: "bytes32";
              type: "bytes32";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getMaxSources";
          outputs: readonly [{
              name: "";
              internalType: "uint8";
              type: "uint8";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "_loanPrincipal";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "getMinSourcePrincipal";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getPendingProtocolFee";
          outputs: readonly [{
              name: "";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getPendingProtocolFeeSetTime";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getProtocolFee";
          outputs: readonly [{
              name: "";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "getTotalLoansIssued";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "_lender";
              internalType: "address";
              type: "address";
          }, {
              name: "_offerId";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "getUsedCapacity";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }, {
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "isOfferCancelled";
          outputs: readonly [{
              name: "";
              internalType: "bool";
              type: "bool";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }, {
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
          name: "isRenegotiationOfferCancelled";
          outputs: readonly [{
              name: "";
              internalType: "bool";
              type: "bool";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "_contract";
              internalType: "address";
              type: "address";
          }];
          name: "isWhitelistedCallbackContract";
          outputs: readonly [{
              name: "";
              internalType: "bool";
              type: "bool";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
          name: "lenderMinOfferId";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
          name: "lenderMinRenegotiationOfferId";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
          name: "liquidateLoan";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_collateralAddress";
              internalType: "address";
              type: "address";
          }, {
              name: "_collateralTokenId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_repayment";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_loan";
              internalType: "bytes";
              type: "bytes";
          }];
          name: "loanLiquidated";
          outputs: readonly [];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "name";
          outputs: readonly [{
              name: "";
              internalType: "string";
              type: "string";
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }, {
              name: "";
              internalType: "address";
              type: "address";
          }, {
              name: "";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "";
              internalType: "bytes";
              type: "bytes";
          }];
          name: "onERC721Received";
          outputs: readonly [{
              name: "";
              internalType: "bytes4";
              type: "bytes4";
          }];
      }, {
          stateMutability: "view";
          type: "function";
          inputs: readonly [];
          name: "owner";
          outputs: readonly [{
              name: "";
              internalType: "address";
              type: "address";
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_renegotiationOffer";
              internalType: "struct IMultiSourceLoan.RenegotiationOffer";
              type: "tuple";
              components: readonly [{
                  name: "renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "signer";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "targetPrincipal";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "aprBps";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "strictImprovement";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              name: "_loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }, {
              name: "_renegotiationOfferSignature";
              internalType: "bytes";
              type: "bytes";
          }];
          name: "refinanceFull";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_renegotiationOffer";
              internalType: "struct IMultiSourceLoan.RenegotiationOffer";
              type: "tuple";
              components: readonly [{
                  name: "renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "signer";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "targetPrincipal";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "aprBps";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "strictImprovement";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              name: "_loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
          name: "refinancePartial";
          outputs: readonly [{
              name: "";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_renegotiationOffer";
              internalType: "struct IMultiSourceLoan.RenegotiationOffer[]";
              type: "tuple[]";
              components: readonly [{
                  name: "renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "signer";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "targetPrincipal";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "aprBps";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "strictImprovement";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              name: "_loan";
              internalType: "struct IMultiSourceLoan.Loan[]";
              type: "tuple[]";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
          name: "refinancePartialBatch";
          outputs: readonly [{
              name: "loanId";
              internalType: "uint256[]";
              type: "uint256[]";
          }, {
              name: "loans";
              internalType: "struct IMultiSourceLoan.Loan[]";
              type: "tuple[]";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_contract";
              internalType: "address";
              type: "address";
          }];
          name: "removeWhitelistedCallbackContract";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_collateralTo";
              internalType: "address";
              type: "address";
          }, {
              name: "_loanId";
              internalType: "uint256";
              type: "uint256";
          }, {
              name: "_loan";
              internalType: "struct IMultiSourceLoan.Loan";
              type: "tuple";
              components: readonly [{
                  name: "borrower";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "nftCollateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "startTime";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "source";
                  internalType: "struct IMultiSourceLoan.Source[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "accruedInterest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }, {
              name: "_withCallback";
              internalType: "bool";
              type: "bool";
          }];
          name: "repayLoan";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "maxSources";
              internalType: "uint8";
              type: "uint8";
          }];
          name: "setMaxSources";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [];
          name: "setProtocolFee";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "newOwner";
              internalType: "address";
              type: "address";
          }];
          name: "transferOwnership";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_newMinimum";
              internalType: "struct IBaseLoan.ImprovementMinimum";
              type: "tuple";
              components: readonly [{
                  name: "principalAmount";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "interest";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "duration";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }];
          name: "updateImprovementMinimum";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_newDuration";
              internalType: "uint48";
              type: "uint48";
          }];
          name: "updateLiquidationAuctionDuration";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "loanLiquidator";
              internalType: "contract ILoanLiquidator";
              type: "address";
          }];
          name: "updateLiquidationContract";
          outputs: readonly [];
      }, {
          stateMutability: "nonpayable";
          type: "function";
          inputs: readonly [{
              name: "_newProtocolFee";
              internalType: "struct IBaseLoan.ProtocolFee";
              type: "tuple";
              components: readonly [{
                  name: "recipient";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }];
          name: "updateProtocolFee";
          outputs: readonly [];
      }], TFunctionName, true, TFunctionName extends ("OwnershipTransferred" | "AllOffersCancelled" | "AllRenegotiationOffersCancelled" | "ApprovedSigner" | "ImprovementMinimumUpdated" | "LiquidationAuctionDurationUpdated" | "LiquidationContractUpdated" | "LoanForeclosed" | "LoanLiquidated" | "LoanSentToLiquidator" | "OfferCancelled" | "ProtocolFeePendingUpdate" | "ProtocolFeeUpdated" | "RenegotiationOfferCancelled" | "WhitelistedCallbackContractAdded" | "WhitelistedCallbackContractRemoved" | "LoanEmitted" | "LoanRefinanced" | "LoanRepaid" | "MaxSourcesUpdated")[]
          ? TFunctionName[number]
          : TFunctionName>)

      Type declaration

        • <TFunctionName>(eventName, logs): ParseEventLogsReturnType<readonly [{
              stateMutability: "nonpayable";
              type: "constructor";
              inputs: readonly [{
                  name: "loanLiquidator";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "protocolFee";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }, {
                  name: "currencyManager";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "collectionManager";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "maxSources";
                  internalType: "uint8";
                  type: "uint8";
              }];
          }, {
              type: "error";
              inputs: readonly [];
              name: "AddressZeroError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_offerId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "CancelledOrExecutedOfferError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_offerId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "CancelledRenegotiationOffer";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "CancelledRenegotiationOfferError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "CannotLiquidateError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "CollectionNotWhitelistedError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "CurrencyNotWhitelistedError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "ExpiredLoanError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "ExpiredOfferError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "ExpiredRenegotiationOfferError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidBorrowerError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidCallbackError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidCollateralIdError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidLiquidationError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "InvalidLoanError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "InvalidProtocolFeeError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidRenegotiationOfferError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidSignatureError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidSignerError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "LengthMismatchError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_liquidator";
                  internalType: "address";
                  type: "address";
              }];
              name: "LiquidatorOnlyError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "LoanExpiredError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "LoanNotDueError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "LoanNotFoundError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_newMinOfferId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_minOfferId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "LowOfferIdError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_newMinRenegotiationOfferId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_minOfferId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "LowRenegotiationOfferIdError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "MaxCapacityExceededError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_id";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "NotMintedError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "NotStrictlyImprovedError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "OnlyBorrowerCallableError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "OnlyLenderOrSignerCallableError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "PartialOfferCannotChangeDurationError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "PartialOfferCannotHaveFeeError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "RefinanceFullError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "RepaymentError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "sourcePrincipal";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "loanPrincipal";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "TargetPrincipalTooLowError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_pendingProtocolFeeSetTime";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "TooEarlyError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "sources";
                  internalType: "uint8";
                  type: "uint8";
              }];
              name: "TooManySourcesError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "Unauthorized";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_authorized";
                  internalType: "address";
                  type: "address";
              }];
              name: "UnauthorizedError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "ZeroAddressError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "ZeroDurationError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "ZeroInterestError";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "lender";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }, {
                  name: "minOfferId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "AllOffersCancelled";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "lender";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }, {
                  name: "minRenegotiationId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "AllRenegotiationOffersCancelled";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "lender";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }, {
                  name: "signer";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }];
              name: "ApprovedSigner";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "minimum";
                  internalType: "struct IBaseLoan.ImprovementMinimum";
                  type: "tuple";
                  components: readonly [{
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "interest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }];
                  indexed: false;
              }];
              name: "ImprovementMinimumUpdated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "newDuration";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LiquidationAuctionDurationUpdated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "liquidator";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }];
              name: "LiquidationContractUpdated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "offerId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
                  indexed: false;
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LoanEmitted";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LoanForeclosed";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "repayment";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LoanLiquidated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "oldLoanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "newLoanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
                  indexed: false;
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LoanRefinanced";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "totalRepayment";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LoanRepaid";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "liquidator";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }];
              name: "LoanSentToLiquidator";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "newMax";
                  internalType: "uint8";
                  type: "uint8";
                  indexed: false;
              }];
              name: "MaxSourcesUpdated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "lender";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }, {
                  name: "offerId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "OfferCancelled";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "user";
                  internalType: "address";
                  type: "address";
                  indexed: true;
              }, {
                  name: "newOwner";
                  internalType: "address";
                  type: "address";
                  indexed: true;
              }];
              name: "OwnershipTransferred";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "fee";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
                  indexed: false;
              }];
              name: "ProtocolFeePendingUpdate";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "fee";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
                  indexed: false;
              }];
              name: "ProtocolFeeUpdated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "lender";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }, {
                  name: "renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "RenegotiationOfferCancelled";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "contract_added";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }];
              name: "WhitelistedCallbackContractAdded";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "contract_removed";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }];
              name: "WhitelistedCallbackContractRemoved";
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "DOMAIN_SEPARATOR";
              outputs: readonly [{
                  name: "";
                  internalType: "bytes32";
                  type: "bytes32";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "FEE_UPDATE_NOTICE";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "INITIAL_DOMAIN_SEPARATOR";
              outputs: readonly [{
                  name: "";
                  internalType: "bytes32";
                  type: "bytes32";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "MAX_PROTOCOL_FEE";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_contract";
                  internalType: "address";
                  type: "address";
              }];
              name: "addWhitelistedCallbackContract";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_signer";
                  internalType: "address";
                  type: "address";
              }];
              name: "approveSigner";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_minOfferId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "cancelAllOffers";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_minRenegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "cancelAllRenegotiationOffers";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_offerId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "cancelOffer";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_offerIds";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }];
              name: "cancelOffers";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "cancelRenegotiationOffer";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_renegotiationIds";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }];
              name: "cancelRenegotiationOffers";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_loanOffer";
                  internalType: "struct IBaseLoan.LoanOffer";
                  type: "tuple";
                  components: readonly [{
                      name: "offerId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fee";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "capacity";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "signer";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "requiresLiquidation";
                      internalType: "bool";
                      type: "bool";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "expirationTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "validators";
                      internalType: "struct IBaseLoan.OfferValidator[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "validator";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "arguments";
                          internalType: "bytes";
                          type: "bytes";
                      }];
                  }];
              }, {
                  name: "_tokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_lenderOfferSignature";
                  internalType: "bytes";
                  type: "bytes";
              }, {
                  name: "_withCallback";
                  internalType: "bool";
                  type: "bool";
              }];
              name: "emitLoan";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
              name: "getApprovedSigner";
              outputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getCollectionManager";
              outputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getCurrencyManager";
              outputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getImprovementMinimum";
              outputs: readonly [{
                  name: "";
                  internalType: "struct IBaseLoan.ImprovementMinimum";
                  type: "tuple";
                  components: readonly [{
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "interest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getLiquidationAuctionDuration";
              outputs: readonly [{
                  name: "";
                  internalType: "uint48";
                  type: "uint48";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getLiquidator";
              outputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "getLoanHash";
              outputs: readonly [{
                  name: "";
                  internalType: "bytes32";
                  type: "bytes32";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getMaxSources";
              outputs: readonly [{
                  name: "";
                  internalType: "uint8";
                  type: "uint8";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "_loanPrincipal";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "getMinSourcePrincipal";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getPendingProtocolFee";
              outputs: readonly [{
                  name: "";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getPendingProtocolFeeSetTime";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getProtocolFee";
              outputs: readonly [{
                  name: "";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getTotalLoansIssued";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_offerId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "getUsedCapacity";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "isOfferCancelled";
              outputs: readonly [{
                  name: "";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "isRenegotiationOfferCancelled";
              outputs: readonly [{
                  name: "";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "_contract";
                  internalType: "address";
                  type: "address";
              }];
              name: "isWhitelistedCallbackContract";
              outputs: readonly [{
                  name: "";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
              name: "lenderMinOfferId";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
              name: "lenderMinRenegotiationOfferId";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
              name: "liquidateLoan";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_collateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_collateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_repayment";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_loan";
                  internalType: "bytes";
                  type: "bytes";
              }];
              name: "loanLiquidated";
              outputs: readonly [];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "name";
              outputs: readonly [{
                  name: "";
                  internalType: "string";
                  type: "string";
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "";
                  internalType: "bytes";
                  type: "bytes";
              }];
              name: "onERC721Received";
              outputs: readonly [{
                  name: "";
                  internalType: "bytes4";
                  type: "bytes4";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "owner";
              outputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_renegotiationOffer";
                  internalType: "struct IMultiSourceLoan.RenegotiationOffer";
                  type: "tuple";
                  components: readonly [{
                      name: "renegotiationId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fee";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "signer";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "targetPrincipal";
                      internalType: "uint256[]";
                      type: "uint256[]";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "expirationTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "strictImprovement";
                      internalType: "bool";
                      type: "bool";
                  }];
              }, {
                  name: "_loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }, {
                  name: "_renegotiationOfferSignature";
                  internalType: "bytes";
                  type: "bytes";
              }];
              name: "refinanceFull";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_renegotiationOffer";
                  internalType: "struct IMultiSourceLoan.RenegotiationOffer";
                  type: "tuple";
                  components: readonly [{
                      name: "renegotiationId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fee";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "signer";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "targetPrincipal";
                      internalType: "uint256[]";
                      type: "uint256[]";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "expirationTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "strictImprovement";
                      internalType: "bool";
                      type: "bool";
                  }];
              }, {
                  name: "_loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
              name: "refinancePartial";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_renegotiationOffer";
                  internalType: "struct IMultiSourceLoan.RenegotiationOffer[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "renegotiationId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fee";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "signer";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "targetPrincipal";
                      internalType: "uint256[]";
                      type: "uint256[]";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "expirationTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "strictImprovement";
                      internalType: "bool";
                      type: "bool";
                  }];
              }, {
                  name: "_loan";
                  internalType: "struct IMultiSourceLoan.Loan[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
              name: "refinancePartialBatch";
              outputs: readonly [{
                  name: "loanId";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }, {
                  name: "loans";
                  internalType: "struct IMultiSourceLoan.Loan[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_contract";
                  internalType: "address";
                  type: "address";
              }];
              name: "removeWhitelistedCallbackContract";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_collateralTo";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }, {
                  name: "_withCallback";
                  internalType: "bool";
                  type: "bool";
              }];
              name: "repayLoan";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "maxSources";
                  internalType: "uint8";
                  type: "uint8";
              }];
              name: "setMaxSources";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [];
              name: "setProtocolFee";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "newOwner";
                  internalType: "address";
                  type: "address";
              }];
              name: "transferOwnership";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_newMinimum";
                  internalType: "struct IBaseLoan.ImprovementMinimum";
                  type: "tuple";
                  components: readonly [{
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "interest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
              name: "updateImprovementMinimum";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_newDuration";
                  internalType: "uint48";
                  type: "uint48";
              }];
              name: "updateLiquidationAuctionDuration";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "loanLiquidator";
                  internalType: "contract ILoanLiquidator";
                  type: "address";
              }];
              name: "updateLiquidationContract";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_newProtocolFee";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
              name: "updateProtocolFee";
              outputs: readonly [];
          }], TFunctionName, true, TFunctionName extends ("OwnershipTransferred" | "AllOffersCancelled" | "AllRenegotiationOffersCancelled" | "ApprovedSigner" | "ImprovementMinimumUpdated" | "LiquidationAuctionDurationUpdated" | "LiquidationContractUpdated" | "LoanForeclosed" | "LoanLiquidated" | "LoanSentToLiquidator" | "OfferCancelled" | "ProtocolFeePendingUpdate" | "ProtocolFeeUpdated" | "RenegotiationOfferCancelled" | "WhitelistedCallbackContractAdded" | "WhitelistedCallbackContractRemoved" | "LoanEmitted" | "LoanRefinanced" | "LoanRepaid" | "MaxSourcesUpdated")[]
              ? TFunctionName[number]
              : TFunctionName>
        • Type Parameters

          • TFunctionName extends "OwnershipTransferred" | "AllOffersCancelled" | "AllRenegotiationOffersCancelled" | "ApprovedSigner" | "ImprovementMinimumUpdated" | "LiquidationAuctionDurationUpdated" | "LiquidationContractUpdated" | "LoanForeclosed" | "LoanLiquidated" | "LoanSentToLiquidator" | "OfferCancelled" | "ProtocolFeePendingUpdate" | "ProtocolFeeUpdated" | "RenegotiationOfferCancelled" | "WhitelistedCallbackContractAdded" | "WhitelistedCallbackContractRemoved" | "LoanEmitted" | "LoanRefinanced" | "LoanRepaid" | "MaxSourcesUpdated"

          Parameters

          • eventName: TFunctionName
          • logs: Log<bigint, number, false>[]

          Returns ParseEventLogsReturnType<readonly [{
              stateMutability: "nonpayable";
              type: "constructor";
              inputs: readonly [{
                  name: "loanLiquidator";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "protocolFee";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }, {
                  name: "currencyManager";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "collectionManager";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "maxSources";
                  internalType: "uint8";
                  type: "uint8";
              }];
          }, {
              type: "error";
              inputs: readonly [];
              name: "AddressZeroError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_offerId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "CancelledOrExecutedOfferError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_offerId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "CancelledRenegotiationOffer";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "CancelledRenegotiationOfferError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "CannotLiquidateError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "CollectionNotWhitelistedError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "CurrencyNotWhitelistedError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "ExpiredLoanError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "ExpiredOfferError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "ExpiredRenegotiationOfferError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidBorrowerError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidCallbackError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidCollateralIdError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidLiquidationError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "InvalidLoanError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_fraction";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "InvalidProtocolFeeError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidRenegotiationOfferError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidSignatureError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "InvalidSignerError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "LengthMismatchError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_liquidator";
                  internalType: "address";
                  type: "address";
              }];
              name: "LiquidatorOnlyError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "LoanExpiredError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_expirationTime";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "LoanNotDueError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "LoanNotFoundError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_newMinOfferId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_minOfferId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "LowOfferIdError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_newMinRenegotiationOfferId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_minOfferId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "LowRenegotiationOfferIdError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "MaxCapacityExceededError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_id";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "NotMintedError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "NotStrictlyImprovedError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "OnlyBorrowerCallableError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "OnlyLenderOrSignerCallableError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "PartialOfferCannotChangeDurationError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "PartialOfferCannotHaveFeeError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "RefinanceFullError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "RepaymentError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "sourcePrincipal";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "loanPrincipal";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "TargetPrincipalTooLowError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_pendingProtocolFeeSetTime";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "TooEarlyError";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "sources";
                  internalType: "uint8";
                  type: "uint8";
              }];
              name: "TooManySourcesError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "Unauthorized";
          }, {
              type: "error";
              inputs: readonly [{
                  name: "_authorized";
                  internalType: "address";
                  type: "address";
              }];
              name: "UnauthorizedError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "ZeroAddressError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "ZeroDurationError";
          }, {
              type: "error";
              inputs: readonly [];
              name: "ZeroInterestError";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "lender";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }, {
                  name: "minOfferId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "AllOffersCancelled";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "lender";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }, {
                  name: "minRenegotiationId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "AllRenegotiationOffersCancelled";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "lender";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }, {
                  name: "signer";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }];
              name: "ApprovedSigner";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "minimum";
                  internalType: "struct IBaseLoan.ImprovementMinimum";
                  type: "tuple";
                  components: readonly [{
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "interest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }];
                  indexed: false;
              }];
              name: "ImprovementMinimumUpdated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "newDuration";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LiquidationAuctionDurationUpdated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "liquidator";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }];
              name: "LiquidationContractUpdated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "offerId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
                  indexed: false;
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LoanEmitted";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LoanForeclosed";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "repayment";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LoanLiquidated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "oldLoanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "newLoanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
                  indexed: false;
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LoanRefinanced";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "totalRepayment";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "fee";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "LoanRepaid";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "loanId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }, {
                  name: "liquidator";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }];
              name: "LoanSentToLiquidator";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "newMax";
                  internalType: "uint8";
                  type: "uint8";
                  indexed: false;
              }];
              name: "MaxSourcesUpdated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "lender";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }, {
                  name: "offerId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "OfferCancelled";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "user";
                  internalType: "address";
                  type: "address";
                  indexed: true;
              }, {
                  name: "newOwner";
                  internalType: "address";
                  type: "address";
                  indexed: true;
              }];
              name: "OwnershipTransferred";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "fee";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
                  indexed: false;
              }];
              name: "ProtocolFeePendingUpdate";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "fee";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
                  indexed: false;
              }];
              name: "ProtocolFeeUpdated";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "lender";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }, {
                  name: "renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
                  indexed: false;
              }];
              name: "RenegotiationOfferCancelled";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "contract_added";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }];
              name: "WhitelistedCallbackContractAdded";
          }, {
              type: "event";
              anonymous: false;
              inputs: readonly [{
                  name: "contract_removed";
                  internalType: "address";
                  type: "address";
                  indexed: false;
              }];
              name: "WhitelistedCallbackContractRemoved";
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "DOMAIN_SEPARATOR";
              outputs: readonly [{
                  name: "";
                  internalType: "bytes32";
                  type: "bytes32";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "FEE_UPDATE_NOTICE";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "INITIAL_DOMAIN_SEPARATOR";
              outputs: readonly [{
                  name: "";
                  internalType: "bytes32";
                  type: "bytes32";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "MAX_PROTOCOL_FEE";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_contract";
                  internalType: "address";
                  type: "address";
              }];
              name: "addWhitelistedCallbackContract";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_signer";
                  internalType: "address";
                  type: "address";
              }];
              name: "approveSigner";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_minOfferId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "cancelAllOffers";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_minRenegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "cancelAllRenegotiationOffers";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_offerId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "cancelOffer";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_offerIds";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }];
              name: "cancelOffers";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_renegotiationId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "cancelRenegotiationOffer";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_renegotiationIds";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }];
              name: "cancelRenegotiationOffers";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_loanOffer";
                  internalType: "struct IBaseLoan.LoanOffer";
                  type: "tuple";
                  components: readonly [{
                      name: "offerId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fee";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "capacity";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "signer";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "requiresLiquidation";
                      internalType: "bool";
                      type: "bool";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "expirationTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "validators";
                      internalType: "struct IBaseLoan.OfferValidator[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "validator";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "arguments";
                          internalType: "bytes";
                          type: "bytes";
                      }];
                  }];
              }, {
                  name: "_tokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_lenderOfferSignature";
                  internalType: "bytes";
                  type: "bytes";
              }, {
                  name: "_withCallback";
                  internalType: "bool";
                  type: "bool";
              }];
              name: "emitLoan";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
              name: "getApprovedSigner";
              outputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getCollectionManager";
              outputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getCurrencyManager";
              outputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getImprovementMinimum";
              outputs: readonly [{
                  name: "";
                  internalType: "struct IBaseLoan.ImprovementMinimum";
                  type: "tuple";
                  components: readonly [{
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "interest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getLiquidationAuctionDuration";
              outputs: readonly [{
                  name: "";
                  internalType: "uint48";
                  type: "uint48";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getLiquidator";
              outputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "getLoanHash";
              outputs: readonly [{
                  name: "";
                  internalType: "bytes32";
                  type: "bytes32";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getMaxSources";
              outputs: readonly [{
                  name: "";
                  internalType: "uint8";
                  type: "uint8";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "_loanPrincipal";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "getMinSourcePrincipal";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getPendingProtocolFee";
              outputs: readonly [{
                  name: "";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getPendingProtocolFeeSetTime";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getProtocolFee";
              outputs: readonly [{
                  name: "";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "getTotalLoansIssued";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "_lender";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_offerId";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "getUsedCapacity";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "isOfferCancelled";
              outputs: readonly [{
                  name: "";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
              name: "isRenegotiationOfferCancelled";
              outputs: readonly [{
                  name: "";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "_contract";
                  internalType: "address";
                  type: "address";
              }];
              name: "isWhitelistedCallbackContract";
              outputs: readonly [{
                  name: "";
                  internalType: "bool";
                  type: "bool";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
              name: "lenderMinOfferId";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
              name: "lenderMinRenegotiationOfferId";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
              name: "liquidateLoan";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_collateralAddress";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_collateralTokenId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_repayment";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_loan";
                  internalType: "bytes";
                  type: "bytes";
              }];
              name: "loanLiquidated";
              outputs: readonly [];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "name";
              outputs: readonly [{
                  name: "";
                  internalType: "string";
                  type: "string";
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "";
                  internalType: "bytes";
                  type: "bytes";
              }];
              name: "onERC721Received";
              outputs: readonly [{
                  name: "";
                  internalType: "bytes4";
                  type: "bytes4";
              }];
          }, {
              stateMutability: "view";
              type: "function";
              inputs: readonly [];
              name: "owner";
              outputs: readonly [{
                  name: "";
                  internalType: "address";
                  type: "address";
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_renegotiationOffer";
                  internalType: "struct IMultiSourceLoan.RenegotiationOffer";
                  type: "tuple";
                  components: readonly [{
                      name: "renegotiationId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fee";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "signer";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "targetPrincipal";
                      internalType: "uint256[]";
                      type: "uint256[]";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "expirationTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "strictImprovement";
                      internalType: "bool";
                      type: "bool";
                  }];
              }, {
                  name: "_loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }, {
                  name: "_renegotiationOfferSignature";
                  internalType: "bytes";
                  type: "bytes";
              }];
              name: "refinanceFull";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_renegotiationOffer";
                  internalType: "struct IMultiSourceLoan.RenegotiationOffer";
                  type: "tuple";
                  components: readonly [{
                      name: "renegotiationId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fee";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "signer";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "targetPrincipal";
                      internalType: "uint256[]";
                      type: "uint256[]";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "expirationTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "strictImprovement";
                      internalType: "bool";
                      type: "bool";
                  }];
              }, {
                  name: "_loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
              name: "refinancePartial";
              outputs: readonly [{
                  name: "";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_renegotiationOffer";
                  internalType: "struct IMultiSourceLoan.RenegotiationOffer[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "renegotiationId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "loanId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "lender";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fee";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "signer";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "targetPrincipal";
                      internalType: "uint256[]";
                      type: "uint256[]";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "aprBps";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "expirationTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "strictImprovement";
                      internalType: "bool";
                      type: "bool";
                  }];
              }, {
                  name: "_loan";
                  internalType: "struct IMultiSourceLoan.Loan[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
              name: "refinancePartialBatch";
              outputs: readonly [{
                  name: "loanId";
                  internalType: "uint256[]";
                  type: "uint256[]";
              }, {
                  name: "loans";
                  internalType: "struct IMultiSourceLoan.Loan[]";
                  type: "tuple[]";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_contract";
                  internalType: "address";
                  type: "address";
              }];
              name: "removeWhitelistedCallbackContract";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_collateralTo";
                  internalType: "address";
                  type: "address";
              }, {
                  name: "_loanId";
                  internalType: "uint256";
                  type: "uint256";
              }, {
                  name: "_loan";
                  internalType: "struct IMultiSourceLoan.Loan";
                  type: "tuple";
                  components: readonly [{
                      name: "borrower";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAddress";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "startTime";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "source";
                      internalType: "struct IMultiSourceLoan.Source[]";
                      type: "tuple[]";
                      components: readonly [{
                          name: "loanId";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "lender";
                          internalType: "address";
                          type: "address";
                      }, {
                          name: "principalAmount";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "accruedInterest";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "startTime";
                          internalType: "uint256";
                          type: "uint256";
                      }, {
                          name: "aprBps";
                          internalType: "uint256";
                          type: "uint256";
                      }];
                  }];
              }, {
                  name: "_withCallback";
                  internalType: "bool";
                  type: "bool";
              }];
              name: "repayLoan";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "maxSources";
                  internalType: "uint8";
                  type: "uint8";
              }];
              name: "setMaxSources";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [];
              name: "setProtocolFee";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "newOwner";
                  internalType: "address";
                  type: "address";
              }];
              name: "transferOwnership";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_newMinimum";
                  internalType: "struct IBaseLoan.ImprovementMinimum";
                  type: "tuple";
                  components: readonly [{
                      name: "principalAmount";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "interest";
                      internalType: "uint256";
                      type: "uint256";
                  }, {
                      name: "duration";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
              name: "updateImprovementMinimum";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_newDuration";
                  internalType: "uint48";
                  type: "uint48";
              }];
              name: "updateLiquidationAuctionDuration";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "loanLiquidator";
                  internalType: "contract ILoanLiquidator";
                  type: "address";
              }];
              name: "updateLiquidationContract";
              outputs: readonly [];
          }, {
              stateMutability: "nonpayable";
              type: "function";
              inputs: readonly [{
                  name: "_newProtocolFee";
                  internalType: "struct IBaseLoan.ProtocolFee";
                  type: "tuple";
                  components: readonly [{
                      name: "recipient";
                      internalType: "address";
                      type: "address";
                  }, {
                      name: "fraction";
                      internalType: "uint256";
                      type: "uint256";
                  }];
              }];
              name: "updateProtocolFee";
              outputs: readonly [];
          }], TFunctionName, true, TFunctionName extends ("OwnershipTransferred" | "AllOffersCancelled" | "AllRenegotiationOffersCancelled" | "ApprovedSigner" | "ImprovementMinimumUpdated" | "LiquidationAuctionDurationUpdated" | "LiquidationContractUpdated" | "LoanForeclosed" | "LoanLiquidated" | "LoanSentToLiquidator" | "OfferCancelled" | "ProtocolFeePendingUpdate" | "ProtocolFeeUpdated" | "RenegotiationOfferCancelled" | "WhitelistedCallbackContractAdded" | "WhitelistedCallbackContractRemoved" | "LoanEmitted" | "LoanRefinanced" | "LoanRepaid" | "MaxSourcesUpdated")[]
              ? TFunctionName[number]
              : TFunctionName>