class Builder {

        /**
         * Utility constructor.
         */
        private Builder() {
        }

        /**
         * Creates new {@link GetExArgs} and enable {@literal EX}.
         *
         * @param timeout expire time in seconds.
         * @return new {@link GetExArgs} with {@literal EX} enabled.
         * @see GetExArgs#ex(long)
         */
        public static GetExArgs ex(long timeout) {
            return new GetExArgs().ex(timeout);
        }

        /**
         * Creates new {@link GetExArgs} and enable {@literal EX}.
         *
         * @param timeout expire time in seconds.
         * @return new {@link GetExArgs} with {@literal EX} enabled.
         * @see GetExArgs#ex(long)
         * @since 6.1
         */
        public static GetExArgs ex(Duration timeout) {
            return new GetExArgs().ex(timeout);
        }

        /**
         * Creates new {@link GetExArgs} and enable {@literal EXAT}.
         *
         * @param timestamp the timestamp type: posix time in seconds.
         * @return new {@link GetExArgs} with {@literal EXAT} enabled.
         * @see GetExArgs#exAt(long)
         */
        public static GetExArgs exAt(long timestamp) {
            return new GetExArgs().exAt(timestamp);
        }

        /**
         * Creates new {@link GetExArgs} and enable {@literal EXAT}.
         *
         * @param timestamp the timestamp type: posix time in seconds.
         * @return new {@link GetExArgs} with {@literal EXAT} enabled.
         * @see GetExArgs#exAt(Date)
         * @since 6.1
         */
        public static GetExArgs exAt(Date timestamp) {
            return new GetExArgs().exAt(timestamp);
        }

        /**
         * Creates new {@link GetExArgs} and enable {@literal EXAT}.
         *
         * @param timestamp the timestamp type: posix time in seconds.
         * @return new {@link GetExArgs} with {@literal EXAT} enabled.
         * @see GetExArgs#exAt(Instant)
         * @since 6.1
         */
        public static GetExArgs exAt(Instant timestamp) {
            return new GetExArgs().exAt(timestamp);
        }

        /**
         * Creates new {@link GetExArgs} and enable {@literal PX}.
         *
         * @param timeout expire time in milliseconds.
         * @return new {@link GetExArgs} with {@literal PX} enabled.
         * @see GetExArgs#px(long)
         */
        public static GetExArgs px(long timeout) {
            return new GetExArgs().px(timeout);
        }

        /**
         * Creates new {@link GetExArgs} and enable {@literal PX}.
         *
         * @param timeout expire time in milliseconds.
         * @return new {@link GetExArgs} with {@literal PX} enabled.
         * @see GetExArgs#px(long)
         * @since 6.1
         */
        public static GetExArgs px(Duration timeout) {
            return new GetExArgs().px(timeout);
        }

        /**
         * Creates new {@link GetExArgs} and enable {@literal PXAT}.
         *
         * @param timestamp the timestamp type: posix time.
         * @return new {@link GetExArgs} with {@literal PXAT} enabled.
         * @see GetExArgs#pxAt(long)
         */
        public static GetExArgs pxAt(long timestamp) {
            return new GetExArgs().pxAt(timestamp);
        }

        /**
         * Creates new {@link GetExArgs} and enable {@literal PXAT}.
         *
         * @param timestamp the timestamp type: posix time.
         * @return new {@link GetExArgs} with {@literal PXAT} enabled.
         * @see GetExArgs#pxAt(Date)
         * @since 6.1
         */
        public static GetExArgs pxAt(Date timestamp) {
            return new GetExArgs().pxAt(timestamp);
        }

        /**
         * Creates new {@link GetExArgs} and enable {@literal PXAT}.
         *
         * @param timestamp the timestamp type: posix time.
         * @return new {@link GetExArgs} with {@literal PXAT} enabled.
         * @see GetExArgs#pxAt(Instant)
         * @since 6.1
         */
        public static GetExArgs pxAt(Instant timestamp) {
            return new GetExArgs().pxAt(timestamp);
        }

        /**
         * Creates new {@link GetExArgs} and enable {@literal PERSIST}.
         *
         * @return new {@link GetExArgs} with {@literal PERSIST} enabled.
         * @see GetExArgs#persist()
         */
        public static GetExArgs persist() {
            return new GetExArgs().persist();
        }

    }

    /**
     * Set the specified expire time, in seconds.
     *
     * @param timeout expire time in seconds.
     * @return {@code this} {@link GetExArgs}.
     */
    public GetExArgs ex(long timeout) {

        this.ex = timeout;
        return this;
    }

    /**
     * Set the specified expire time, in seconds.
     *
     * @param timeout expire time in seconds.
     * @return {@code this} {@link GetExArgs}.
     * @since 6.1
     */
    public GetExArgs ex(Duration timeout) {

        LettuceAssert.notNull(timeout, "Timeout must not be null");

        this.ex = timeout.toMillis() / 1000;
        return this;
    }

    /**
     * Set the specified expire at time using a posix {@code timestamp}.
     *
     * @param timestamp the timestamp type: posix time in seconds.
     * @return {@code this} {@link GetExArgs}.
     * @since 6.1
     */
    public GetExArgs exAt(long timestamp) {

        this.exAt = timestamp;
        return this;
    }

    /**
     * Set the specified expire at time using a posix {@code timestamp}.
     *
     * @param timestamp the timestamp type: posix time in seconds.
     * @return {@code this} {@link GetExArgs}.
     * @since 6.1
     */
    public GetExArgs exAt(Date timestamp) {<FILL_FUNCTION_BODY>


        LettuceAssert.notNull(timestamp, "Timestamp must not be null");

        return exAt(timestamp.getTime() / 1000);
    
<no_super_class>