```\\nfunction _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory outOpInfo)\\nprivate returns (uint256 validationData, uint256 paymasterValidationData) {\\n\\n    uint256 preGas = gasleft();\\n    MemoryUserOp memory mUserOp = outOpInfo.mUserOp;\\n    _copyUserOpToMemory(userOp, mUserOp);\\n    outOpInfo.userOpHash = getUserOpHash(userOp);\\n\\n    // validate all numeric values in userOp are well below 128 bit, so they can safely be added\\n    // and multiplied without causing overflow\\n    uint256 maxGasValues = mUserOp.preVerificationGas | mUserOp.verificationGasLimit | mUserOp.callGasLimit |\\n    userOp.maxFeePerGas | userOp.maxPriorityFeePerGas;\\n    require(maxGasValues <= type(uint120).max, "AA94 gas values overflow");\\n\\n    uint256 gasUsedByValidateAccountPrepayment;\\n    (uint256 requiredPreFund) = _getRequiredPrefund(mUserOp);\\n    (gasUsedByValidateAccountPrepayment, validationData) = _validateAccountPrepayment(opIndex, userOp, outOpInfo, requiredPreFund);\\n\\n    if (!_validateAndUpdateNonce(mUserOp.sender, mUserOp.nonce)) {\\n        revert FailedOp(opIndex, "AA25 invalid account nonce");\\n    }\\n\\n    //a "marker" where account opcode validation is done and paymaster opcode validation is about to start\\n    // (used only by off-chain simulateValidation)\\n    numberMarker();\\n\\n    bytes memory context;\\n    if (mUserOp.paymaster != address(0)) {\\n        (context, paymasterValidationData) = _validatePaymasterPrepayment(opIndex, userOp, outOpInfo, requiredPreFund, gasUsedByValidateAccountPrepayment);\\n    }\\nunchecked {\\n    uint256 gasUsed = preGas - gasleft();\\n\\n    if (userOp.verificationGasLimit < gasUsed) {\\n        revert FailedOp(opIndex, "AA40 over verificationGasLimit");\\n    }\\n    outOpInfo.prefund = requiredPreFund;\\n    outOpInfo.contextOffset = getOffsetOfMemoryBytes(context);\\n    outOpInfo.preOpGas = preGas - gasleft() + userOp.preVerificationGas;\\n}\\n}\\n```\\n