public static <T>CompletionStage<T> dereference(CompletionStage<? extends CompletionStage<T>> stage){
  return stage.thenCompose(Function.identity());
}

public static < T > CompletionStage < T > dereference ( CompletionStage < ? extends CompletionStage < T > > stage ) { return stage . thenCompose ( Function . identity ( ) ) ; }
this takes a stage of a stage of a value and returns a plain stage of a value .
