class AbstractBoundedFlowSet<T> extends AbstractFlowSet<T> implements BoundedFlowSet<T> {

  @Override
  public void complement() {
    complement(this);
  }

  @Override
  public void complement(FlowSet<T> dest) {<FILL_FUNCTION_BODY>}

  @Override
  public FlowSet<T> topSet() {
    BoundedFlowSet<T> tmp = (BoundedFlowSet<T>) emptySet();
    tmp.complement();
    return tmp;
  }
}

    if (this == dest) {
      complement();
    } else {
      BoundedFlowSet<T> tmp = (BoundedFlowSet<T>) topSet();
      tmp.difference(this, dest);
    }
  
<methods>public non-sealed void <init>() ,public abstract void add(T) ,public void add(T, FlowSet<T>) ,public void clear() ,public abstract AbstractFlowSet<T> clone() ,public abstract boolean contains(T) ,public void copy(FlowSet<T>) ,public void difference(FlowSet<T>) ,public void difference(FlowSet<T>, FlowSet<T>) ,public FlowSet<T> emptySet() ,public boolean equals(java.lang.Object) ,public int hashCode() ,public void intersection(FlowSet<T>) ,public void intersection(FlowSet<T>, FlowSet<T>) ,public abstract boolean isEmpty() ,public boolean isSubSet(FlowSet<T>) ,public abstract Iterator<T> iterator() ,public abstract void remove(T) ,public void remove(T, FlowSet<T>) ,public abstract int size() ,public abstract List<T> toList() ,public java.lang.String toString() ,public void union(FlowSet<T>) ,public void union(FlowSet<T>, FlowSet<T>) <variables>