@Override
      public T nextImpl() {
        if (cur != null && cur.hasNext()) return cur.next();
        if (!original.hasNext()) return stop();
        Iterable<? extends T> next = function.fun(original.next());
        cur = next == null ? null : next.iterator();
        return skip();
      }
@Override
      public T nextImpl()