StakePoolProgram.withdrawSol constructor
      
      StakePoolProgram.withdrawSol({ 
    
- required SolAddress stakePool,
 - required SolAddress sourcePoolAccount,
 - required SolAddress withdrawAuthority,
 - required SolAddress reserveStake,
 - required SolAddress destinationSystemAccount,
 - required SolAddress sourceTransferAuthority,
 - required SolAddress managerFeeAccount,
 - required SolAddress poolMint,
 - required StakePoolWithdrawSolLayout layout,
 - SolAddress? solWithdrawAuthority,
 
Withdraw SOL directly from the pool's reserve account.
Implementation
factory StakePoolProgram.withdrawSol({
  /// Stake pool
  required SolAddress stakePool,
  /// User account to burn pool tokens
  required SolAddress sourcePoolAccount,
  /// Stake pool withdraw authority
  required SolAddress withdrawAuthority,
  /// Reserve stake account, to withdraw SOL
  required SolAddress reserveStake,
  /// Account receiving the lamports from the reserve, must be a
  /// system account
  required SolAddress destinationSystemAccount,
  /// User transfer authority, for pool token account
  required SolAddress sourceTransferAuthority,
  /// Account to receive pool fee tokens
  required SolAddress managerFeeAccount,
  /// Pool token mint account
  required SolAddress poolMint,
  required StakePoolWithdrawSolLayout layout,
  /// Stake pool sol withdraw authority
  SolAddress? solWithdrawAuthority,
}) {
  return StakePoolProgram(
      layout: layout,
      keys: [
        stakePool.toWritable(),
        withdrawAuthority.toReadOnly(),
        sourceTransferAuthority.toSigner(),
        sourcePoolAccount.toWritable(),
        reserveStake.toWritable(),
        destinationSystemAccount.toWritable(),
        managerFeeAccount.toWritable(),
        poolMint.toWritable(),
        SystemProgramConst.sysvarClockPubkey.toReadOnly(),
        SystemProgramConst.sysvarStakeHistoryPubkey.toReadOnly(),
        StakeProgramConst.programId.toReadOnly(),
        SPLTokenProgramConst.tokenProgramId.toReadOnly(),
        if (solWithdrawAuthority != null) solWithdrawAuthority.toSigner()
      ],
      programId: StakePoolProgramConst.programId);
}