class OpenedValueStoreImpl implements OpenedValueStore<AuthT, OpenT> {

  @Override
  public Pair<List<AuthT>, List<OpenT>> popValues() {
    // the caller has the responsibility of managing the returned lists, so we clear by referencing
    // new empty lists (which avoids copying) and return references to original value lists
    List<AuthT> tempSharesWithMacs = sharesWithMacs;
    List<OpenT> tempOpenedValues = openValues;
    sharesWithMacs = new ArrayList<>();
    openValues = new ArrayList<>();
    return new Pair<>(tempSharesWithMacs, tempOpenedValues);
  }

  public  OpenedValueStoreImpl();

}