class OffsetLeadSeries extends OffsetSeries<T> {

    @Override
    public Series<T> shift(int offset, T filler) {
        // optimize shift by unwrapping the delegate where possible
        return (offset > 0 && Objects.equals(filler, this.filler))
                ? new OffsetLeadSeries<>(delegate, this.offset + offset, filler)
                : super.shift(offset, filler);
    }

    public  OffsetLeadSeries(Series<T> delegate, int offset, T filler);

}