// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: k8s.io/api/authorization/v1/generated.proto

package io.kubernetes.client.proto;

public final class V1Authorization {
  private V1Authorization() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface ExtraValueOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.ExtraValue)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated string items = 1;</code>
     */
    java.util.List<java.lang.String>
        getItemsList();
    /**
     * <code>repeated string items = 1;</code>
     */
    int getItemsCount();
    /**
     * <code>repeated string items = 1;</code>
     */
    java.lang.String getItems(int index);
    /**
     * <code>repeated string items = 1;</code>
     */
    com.google.protobuf.ByteString
        getItemsBytes(int index);
  }
  /**
   * <pre>
   * ExtraValue masks the value so protobuf can generate
   * +protobuf.nullable=true
   * +protobuf.options.(gogoproto.goproto_stringer)=false
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.ExtraValue}
   */
  public  static final class ExtraValue extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.ExtraValue)
      ExtraValueOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ExtraValue.newBuilder() to construct.
    private ExtraValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExtraValue() {
      items_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ExtraValue(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                items_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              items_.add(bs);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          items_ = items_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ExtraValue_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ExtraValue_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.ExtraValue.class, io.kubernetes.client.proto.V1Authorization.ExtraValue.Builder.class);
    }

    public static final int ITEMS_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList items_;
    /**
     * <code>repeated string items = 1;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getItemsList() {
      return items_;
    }
    /**
     * <code>repeated string items = 1;</code>
     */
    public int getItemsCount() {
      return items_.size();
    }
    /**
     * <code>repeated string items = 1;</code>
     */
    public java.lang.String getItems(int index) {
      return items_.get(index);
    }
    /**
     * <code>repeated string items = 1;</code>
     */
    public com.google.protobuf.ByteString
        getItemsBytes(int index) {
      return items_.getByteString(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < items_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, items_.getRaw(i));
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < items_.size(); i++) {
          dataSize += computeStringSizeNoTag(items_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getItemsList().size();
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.ExtraValue)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.ExtraValue other = (io.kubernetes.client.proto.V1Authorization.ExtraValue) obj;

      boolean result = true;
      result = result && getItemsList()
          .equals(other.getItemsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getItemsCount() > 0) {
        hash = (37 * hash) + ITEMS_FIELD_NUMBER;
        hash = (53 * hash) + getItemsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.ExtraValue parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.ExtraValue prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * ExtraValue masks the value so protobuf can generate
     * +protobuf.nullable=true
     * +protobuf.options.(gogoproto.goproto_stringer)=false
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.ExtraValue}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.ExtraValue)
        io.kubernetes.client.proto.V1Authorization.ExtraValueOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ExtraValue_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ExtraValue_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.ExtraValue.class, io.kubernetes.client.proto.V1Authorization.ExtraValue.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.ExtraValue.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        items_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ExtraValue_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.ExtraValue getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.ExtraValue.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.ExtraValue build() {
        io.kubernetes.client.proto.V1Authorization.ExtraValue result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.ExtraValue buildPartial() {
        io.kubernetes.client.proto.V1Authorization.ExtraValue result = new io.kubernetes.client.proto.V1Authorization.ExtraValue(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          items_ = items_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.items_ = items_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.ExtraValue) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.ExtraValue)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.ExtraValue other) {
        if (other == io.kubernetes.client.proto.V1Authorization.ExtraValue.getDefaultInstance()) return this;
        if (!other.items_.isEmpty()) {
          if (items_.isEmpty()) {
            items_ = other.items_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureItemsIsMutable();
            items_.addAll(other.items_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.ExtraValue parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.ExtraValue) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.LazyStringList items_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureItemsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          items_ = new com.google.protobuf.LazyStringArrayList(items_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated string items = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getItemsList() {
        return items_.getUnmodifiableView();
      }
      /**
       * <code>repeated string items = 1;</code>
       */
      public int getItemsCount() {
        return items_.size();
      }
      /**
       * <code>repeated string items = 1;</code>
       */
      public java.lang.String getItems(int index) {
        return items_.get(index);
      }
      /**
       * <code>repeated string items = 1;</code>
       */
      public com.google.protobuf.ByteString
          getItemsBytes(int index) {
        return items_.getByteString(index);
      }
      /**
       * <code>repeated string items = 1;</code>
       */
      public Builder setItems(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureItemsIsMutable();
        items_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string items = 1;</code>
       */
      public Builder addItems(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureItemsIsMutable();
        items_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string items = 1;</code>
       */
      public Builder addAllItems(
          java.lang.Iterable<java.lang.String> values) {
        ensureItemsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, items_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string items = 1;</code>
       */
      public Builder clearItems() {
        items_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string items = 1;</code>
       */
      public Builder addItemsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureItemsIsMutable();
        items_.add(value);
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.ExtraValue)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.ExtraValue)
    private static final io.kubernetes.client.proto.V1Authorization.ExtraValue DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.ExtraValue();
    }

    public static io.kubernetes.client.proto.V1Authorization.ExtraValue getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ExtraValue>
        PARSER = new com.google.protobuf.AbstractParser<ExtraValue>() {
      public ExtraValue parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ExtraValue(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<ExtraValue> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ExtraValue> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.ExtraValue getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LocalSubjectAccessReviewOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.LocalSubjectAccessReview)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    boolean hasMetadata();
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    io.kubernetes.client.proto.Meta.ObjectMeta getMetadata();
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder();

    /**
     * <pre>
     * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
     * you made the request against.  If empty, it is defaulted.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    boolean hasSpec();
    /**
     * <pre>
     * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
     * you made the request against.  If empty, it is defaulted.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec getSpec();
    /**
     * <pre>
     * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
     * you made the request against.  If empty, it is defaulted.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder getSpecOrBuilder();

    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    boolean hasStatus();
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getStatus();
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder getStatusOrBuilder();
  }
  /**
   * <pre>
   * LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace.
   * Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions
   * checking.
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.LocalSubjectAccessReview}
   */
  public  static final class LocalSubjectAccessReview extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.LocalSubjectAccessReview)
      LocalSubjectAccessReviewOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use LocalSubjectAccessReview.newBuilder() to construct.
    private LocalSubjectAccessReview(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private LocalSubjectAccessReview() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private LocalSubjectAccessReview(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              io.kubernetes.client.proto.Meta.ObjectMeta.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = metadata_.toBuilder();
              }
              metadata_ = input.readMessage(io.kubernetes.client.proto.Meta.ObjectMeta.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(metadata_);
                metadata_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = spec_.toBuilder();
              }
              spec_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(spec_);
                spec_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_LocalSubjectAccessReview_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_LocalSubjectAccessReview_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview.class, io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview.Builder.class);
    }

    private int bitField0_;
    public static final int METADATA_FIELD_NUMBER = 1;
    private io.kubernetes.client.proto.Meta.ObjectMeta metadata_;
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public boolean hasMetadata() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public io.kubernetes.client.proto.Meta.ObjectMeta getMetadata() {
      return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
    }
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder() {
      return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
    }

    public static final int SPEC_FIELD_NUMBER = 2;
    private io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec spec_;
    /**
     * <pre>
     * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
     * you made the request against.  If empty, it is defaulted.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    public boolean hasSpec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
     * you made the request against.  If empty, it is defaulted.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec getSpec() {
      return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance() : spec_;
    }
    /**
     * <pre>
     * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
     * you made the request against.  If empty, it is defaulted.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder getSpecOrBuilder() {
      return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance() : spec_;
    }

    public static final int STATUS_FIELD_NUMBER = 3;
    private io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus status_;
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    public boolean hasStatus() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getStatus() {
      return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
    }
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder getStatusOrBuilder() {
      return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, getMetadata());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, getSpec());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, getStatus());
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getMetadata());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getSpec());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getStatus());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview other = (io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview) obj;

      boolean result = true;
      result = result && (hasMetadata() == other.hasMetadata());
      if (hasMetadata()) {
        result = result && getMetadata()
            .equals(other.getMetadata());
      }
      result = result && (hasSpec() == other.hasSpec());
      if (hasSpec()) {
        result = result && getSpec()
            .equals(other.getSpec());
      }
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasMetadata()) {
        hash = (37 * hash) + METADATA_FIELD_NUMBER;
        hash = (53 * hash) + getMetadata().hashCode();
      }
      if (hasSpec()) {
        hash = (37 * hash) + SPEC_FIELD_NUMBER;
        hash = (53 * hash) + getSpec().hashCode();
      }
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getStatus().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace.
     * Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions
     * checking.
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.LocalSubjectAccessReview}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.LocalSubjectAccessReview)
        io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReviewOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_LocalSubjectAccessReview_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_LocalSubjectAccessReview_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview.class, io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMetadataFieldBuilder();
          getSpecFieldBuilder();
          getStatusFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (metadataBuilder_ == null) {
          metadata_ = null;
        } else {
          metadataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (specBuilder_ == null) {
          spec_ = null;
        } else {
          specBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          statusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_LocalSubjectAccessReview_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview build() {
        io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview buildPartial() {
        io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview result = new io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (metadataBuilder_ == null) {
          result.metadata_ = metadata_;
        } else {
          result.metadata_ = metadataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (specBuilder_ == null) {
          result.spec_ = spec_;
        } else {
          result.spec_ = specBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview other) {
        if (other == io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview.getDefaultInstance()) return this;
        if (other.hasMetadata()) {
          mergeMetadata(other.getMetadata());
        }
        if (other.hasSpec()) {
          mergeSpec(other.getSpec());
        }
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private io.kubernetes.client.proto.Meta.ObjectMeta metadata_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder> metadataBuilder_;
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public boolean hasMetadata() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMeta getMetadata() {
        if (metadataBuilder_ == null) {
          return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
        } else {
          return metadataBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder setMetadata(io.kubernetes.client.proto.Meta.ObjectMeta value) {
        if (metadataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          metadata_ = value;
          onChanged();
        } else {
          metadataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder setMetadata(
          io.kubernetes.client.proto.Meta.ObjectMeta.Builder builderForValue) {
        if (metadataBuilder_ == null) {
          metadata_ = builderForValue.build();
          onChanged();
        } else {
          metadataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder mergeMetadata(io.kubernetes.client.proto.Meta.ObjectMeta value) {
        if (metadataBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              metadata_ != null &&
              metadata_ != io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance()) {
            metadata_ =
              io.kubernetes.client.proto.Meta.ObjectMeta.newBuilder(metadata_).mergeFrom(value).buildPartial();
          } else {
            metadata_ = value;
          }
          onChanged();
        } else {
          metadataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder clearMetadata() {
        if (metadataBuilder_ == null) {
          metadata_ = null;
          onChanged();
        } else {
          metadataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMeta.Builder getMetadataBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getMetadataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder() {
        if (metadataBuilder_ != null) {
          return metadataBuilder_.getMessageOrBuilder();
        } else {
          return metadata_ == null ?
              io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
        }
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder> 
          getMetadataFieldBuilder() {
        if (metadataBuilder_ == null) {
          metadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder>(
                  getMetadata(),
                  getParentForChildren(),
                  isClean());
          metadata_ = null;
        }
        return metadataBuilder_;
      }

      private io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec spec_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder> specBuilder_;
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
       * you made the request against.  If empty, it is defaulted.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public boolean hasSpec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
       * you made the request against.  If empty, it is defaulted.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec getSpec() {
        if (specBuilder_ == null) {
          return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance() : spec_;
        } else {
          return specBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
       * you made the request against.  If empty, it is defaulted.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder setSpec(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec value) {
        if (specBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          spec_ = value;
          onChanged();
        } else {
          specBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
       * you made the request against.  If empty, it is defaulted.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder setSpec(
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder builderForValue) {
        if (specBuilder_ == null) {
          spec_ = builderForValue.build();
          onChanged();
        } else {
          specBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
       * you made the request against.  If empty, it is defaulted.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder mergeSpec(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec value) {
        if (specBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              spec_ != null &&
              spec_ != io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance()) {
            spec_ =
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.newBuilder(spec_).mergeFrom(value).buildPartial();
          } else {
            spec_ = value;
          }
          onChanged();
        } else {
          specBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
       * you made the request against.  If empty, it is defaulted.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder clearSpec() {
        if (specBuilder_ == null) {
          spec_ = null;
          onChanged();
        } else {
          specBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
       * you made the request against.  If empty, it is defaulted.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder getSpecBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getSpecFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
       * you made the request against.  If empty, it is defaulted.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder getSpecOrBuilder() {
        if (specBuilder_ != null) {
          return specBuilder_.getMessageOrBuilder();
        } else {
          return spec_ == null ?
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance() : spec_;
        }
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace
       * you made the request against.  If empty, it is defaulted.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder> 
          getSpecFieldBuilder() {
        if (specBuilder_ == null) {
          specBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder>(
                  getSpec(),
                  getParentForChildren(),
                  isClean());
          spec_ = null;
        }
        return specBuilder_;
      }

      private io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder> statusBuilder_;
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public boolean hasStatus() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder setStatus(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder setStatus(
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder mergeStatus(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus value) {
        if (statusBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              status_ != null &&
              status_ != io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance()) {
            status_ =
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          statusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder getStatusBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.LocalSubjectAccessReview)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.LocalSubjectAccessReview)
    private static final io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview();
    }

    public static io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<LocalSubjectAccessReview>
        PARSER = new com.google.protobuf.AbstractParser<LocalSubjectAccessReview>() {
      public LocalSubjectAccessReview parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new LocalSubjectAccessReview(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<LocalSubjectAccessReview> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<LocalSubjectAccessReview> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.LocalSubjectAccessReview getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface NonResourceAttributesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.NonResourceAttributes)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Path is the URL path of the request
     * +optional
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    boolean hasPath();
    /**
     * <pre>
     * Path is the URL path of the request
     * +optional
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    java.lang.String getPath();
    /**
     * <pre>
     * Path is the URL path of the request
     * +optional
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    com.google.protobuf.ByteString
        getPathBytes();

    /**
     * <pre>
     * Verb is the standard HTTP verb
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    boolean hasVerb();
    /**
     * <pre>
     * Verb is the standard HTTP verb
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    java.lang.String getVerb();
    /**
     * <pre>
     * Verb is the standard HTTP verb
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    com.google.protobuf.ByteString
        getVerbBytes();
  }
  /**
   * <pre>
   * NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.NonResourceAttributes}
   */
  public  static final class NonResourceAttributes extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.NonResourceAttributes)
      NonResourceAttributesOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use NonResourceAttributes.newBuilder() to construct.
    private NonResourceAttributes(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private NonResourceAttributes() {
      path_ = "";
      verb_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private NonResourceAttributes(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              path_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              verb_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_NonResourceAttributes_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_NonResourceAttributes_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.class, io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder.class);
    }

    private int bitField0_;
    public static final int PATH_FIELD_NUMBER = 1;
    private volatile java.lang.Object path_;
    /**
     * <pre>
     * Path is the URL path of the request
     * +optional
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    public boolean hasPath() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Path is the URL path of the request
     * +optional
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    public java.lang.String getPath() {
      java.lang.Object ref = path_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          path_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Path is the URL path of the request
     * +optional
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    public com.google.protobuf.ByteString
        getPathBytes() {
      java.lang.Object ref = path_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        path_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VERB_FIELD_NUMBER = 2;
    private volatile java.lang.Object verb_;
    /**
     * <pre>
     * Verb is the standard HTTP verb
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    public boolean hasVerb() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Verb is the standard HTTP verb
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    public java.lang.String getVerb() {
      java.lang.Object ref = verb_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          verb_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Verb is the standard HTTP verb
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    public com.google.protobuf.ByteString
        getVerbBytes() {
      java.lang.Object ref = verb_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        verb_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, path_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, verb_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, path_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, verb_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.NonResourceAttributes)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.NonResourceAttributes other = (io.kubernetes.client.proto.V1Authorization.NonResourceAttributes) obj;

      boolean result = true;
      result = result && (hasPath() == other.hasPath());
      if (hasPath()) {
        result = result && getPath()
            .equals(other.getPath());
      }
      result = result && (hasVerb() == other.hasVerb());
      if (hasVerb()) {
        result = result && getVerb()
            .equals(other.getVerb());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasPath()) {
        hash = (37 * hash) + PATH_FIELD_NUMBER;
        hash = (53 * hash) + getPath().hashCode();
      }
      if (hasVerb()) {
        hash = (37 * hash) + VERB_FIELD_NUMBER;
        hash = (53 * hash) + getVerb().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.NonResourceAttributes prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.NonResourceAttributes}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.NonResourceAttributes)
        io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_NonResourceAttributes_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_NonResourceAttributes_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.class, io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        path_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        verb_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_NonResourceAttributes_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.NonResourceAttributes getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.NonResourceAttributes build() {
        io.kubernetes.client.proto.V1Authorization.NonResourceAttributes result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.NonResourceAttributes buildPartial() {
        io.kubernetes.client.proto.V1Authorization.NonResourceAttributes result = new io.kubernetes.client.proto.V1Authorization.NonResourceAttributes(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.path_ = path_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.verb_ = verb_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.NonResourceAttributes) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.NonResourceAttributes)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.NonResourceAttributes other) {
        if (other == io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance()) return this;
        if (other.hasPath()) {
          bitField0_ |= 0x00000001;
          path_ = other.path_;
          onChanged();
        }
        if (other.hasVerb()) {
          bitField0_ |= 0x00000002;
          verb_ = other.verb_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.NonResourceAttributes parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.NonResourceAttributes) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object path_ = "";
      /**
       * <pre>
       * Path is the URL path of the request
       * +optional
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public boolean hasPath() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Path is the URL path of the request
       * +optional
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public java.lang.String getPath() {
        java.lang.Object ref = path_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            path_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Path is the URL path of the request
       * +optional
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public com.google.protobuf.ByteString
          getPathBytes() {
        java.lang.Object ref = path_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          path_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Path is the URL path of the request
       * +optional
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public Builder setPath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        path_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Path is the URL path of the request
       * +optional
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public Builder clearPath() {
        bitField0_ = (bitField0_ & ~0x00000001);
        path_ = getDefaultInstance().getPath();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Path is the URL path of the request
       * +optional
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public Builder setPathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        path_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object verb_ = "";
      /**
       * <pre>
       * Verb is the standard HTTP verb
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public boolean hasVerb() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Verb is the standard HTTP verb
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public java.lang.String getVerb() {
        java.lang.Object ref = verb_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            verb_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Verb is the standard HTTP verb
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public com.google.protobuf.ByteString
          getVerbBytes() {
        java.lang.Object ref = verb_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          verb_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Verb is the standard HTTP verb
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public Builder setVerb(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        verb_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is the standard HTTP verb
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public Builder clearVerb() {
        bitField0_ = (bitField0_ & ~0x00000002);
        verb_ = getDefaultInstance().getVerb();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is the standard HTTP verb
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public Builder setVerbBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        verb_ = value;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.NonResourceAttributes)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.NonResourceAttributes)
    private static final io.kubernetes.client.proto.V1Authorization.NonResourceAttributes DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.NonResourceAttributes();
    }

    public static io.kubernetes.client.proto.V1Authorization.NonResourceAttributes getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<NonResourceAttributes>
        PARSER = new com.google.protobuf.AbstractParser<NonResourceAttributes>() {
      public NonResourceAttributes parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new NonResourceAttributes(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<NonResourceAttributes> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<NonResourceAttributes> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.NonResourceAttributes getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface NonResourceRuleOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.NonResourceRule)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    java.util.List<java.lang.String>
        getVerbsList();
    /**
     * <pre>
     * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    int getVerbsCount();
    /**
     * <pre>
     * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    java.lang.String getVerbs(int index);
    /**
     * <pre>
     * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    com.google.protobuf.ByteString
        getVerbsBytes(int index);

    /**
     * <pre>
     * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
     * final step in the path.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string nonResourceURLs = 2;</code>
     */
    java.util.List<java.lang.String>
        getNonResourceURLsList();
    /**
     * <pre>
     * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
     * final step in the path.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string nonResourceURLs = 2;</code>
     */
    int getNonResourceURLsCount();
    /**
     * <pre>
     * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
     * final step in the path.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string nonResourceURLs = 2;</code>
     */
    java.lang.String getNonResourceURLs(int index);
    /**
     * <pre>
     * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
     * final step in the path.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string nonResourceURLs = 2;</code>
     */
    com.google.protobuf.ByteString
        getNonResourceURLsBytes(int index);
  }
  /**
   * <pre>
   * NonResourceRule holds information that describes a rule for the non-resource
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.NonResourceRule}
   */
  public  static final class NonResourceRule extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.NonResourceRule)
      NonResourceRuleOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use NonResourceRule.newBuilder() to construct.
    private NonResourceRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private NonResourceRule() {
      verbs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      nonResourceURLs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private NonResourceRule(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                verbs_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              verbs_.add(bs);
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                nonResourceURLs_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              nonResourceURLs_.add(bs);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          verbs_ = verbs_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          nonResourceURLs_ = nonResourceURLs_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_NonResourceRule_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_NonResourceRule_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.NonResourceRule.class, io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder.class);
    }

    public static final int VERBS_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList verbs_;
    /**
     * <pre>
     * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getVerbsList() {
      return verbs_;
    }
    /**
     * <pre>
     * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    public int getVerbsCount() {
      return verbs_.size();
    }
    /**
     * <pre>
     * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    public java.lang.String getVerbs(int index) {
      return verbs_.get(index);
    }
    /**
     * <pre>
     * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    public com.google.protobuf.ByteString
        getVerbsBytes(int index) {
      return verbs_.getByteString(index);
    }

    public static final int NONRESOURCEURLS_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList nonResourceURLs_;
    /**
     * <pre>
     * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
     * final step in the path.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string nonResourceURLs = 2;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getNonResourceURLsList() {
      return nonResourceURLs_;
    }
    /**
     * <pre>
     * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
     * final step in the path.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string nonResourceURLs = 2;</code>
     */
    public int getNonResourceURLsCount() {
      return nonResourceURLs_.size();
    }
    /**
     * <pre>
     * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
     * final step in the path.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string nonResourceURLs = 2;</code>
     */
    public java.lang.String getNonResourceURLs(int index) {
      return nonResourceURLs_.get(index);
    }
    /**
     * <pre>
     * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
     * final step in the path.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string nonResourceURLs = 2;</code>
     */
    public com.google.protobuf.ByteString
        getNonResourceURLsBytes(int index) {
      return nonResourceURLs_.getByteString(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < verbs_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, verbs_.getRaw(i));
      }
      for (int i = 0; i < nonResourceURLs_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nonResourceURLs_.getRaw(i));
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < verbs_.size(); i++) {
          dataSize += computeStringSizeNoTag(verbs_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getVerbsList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < nonResourceURLs_.size(); i++) {
          dataSize += computeStringSizeNoTag(nonResourceURLs_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getNonResourceURLsList().size();
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.NonResourceRule)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.NonResourceRule other = (io.kubernetes.client.proto.V1Authorization.NonResourceRule) obj;

      boolean result = true;
      result = result && getVerbsList()
          .equals(other.getVerbsList());
      result = result && getNonResourceURLsList()
          .equals(other.getNonResourceURLsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getVerbsCount() > 0) {
        hash = (37 * hash) + VERBS_FIELD_NUMBER;
        hash = (53 * hash) + getVerbsList().hashCode();
      }
      if (getNonResourceURLsCount() > 0) {
        hash = (37 * hash) + NONRESOURCEURLS_FIELD_NUMBER;
        hash = (53 * hash) + getNonResourceURLsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.NonResourceRule prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * NonResourceRule holds information that describes a rule for the non-resource
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.NonResourceRule}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.NonResourceRule)
        io.kubernetes.client.proto.V1Authorization.NonResourceRuleOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_NonResourceRule_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_NonResourceRule_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.NonResourceRule.class, io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.NonResourceRule.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        verbs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        nonResourceURLs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_NonResourceRule_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.NonResourceRule getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.NonResourceRule.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.NonResourceRule build() {
        io.kubernetes.client.proto.V1Authorization.NonResourceRule result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.NonResourceRule buildPartial() {
        io.kubernetes.client.proto.V1Authorization.NonResourceRule result = new io.kubernetes.client.proto.V1Authorization.NonResourceRule(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          verbs_ = verbs_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.verbs_ = verbs_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          nonResourceURLs_ = nonResourceURLs_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.nonResourceURLs_ = nonResourceURLs_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.NonResourceRule) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.NonResourceRule)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.NonResourceRule other) {
        if (other == io.kubernetes.client.proto.V1Authorization.NonResourceRule.getDefaultInstance()) return this;
        if (!other.verbs_.isEmpty()) {
          if (verbs_.isEmpty()) {
            verbs_ = other.verbs_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureVerbsIsMutable();
            verbs_.addAll(other.verbs_);
          }
          onChanged();
        }
        if (!other.nonResourceURLs_.isEmpty()) {
          if (nonResourceURLs_.isEmpty()) {
            nonResourceURLs_ = other.nonResourceURLs_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureNonResourceURLsIsMutable();
            nonResourceURLs_.addAll(other.nonResourceURLs_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.NonResourceRule parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.NonResourceRule) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.LazyStringList verbs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureVerbsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          verbs_ = new com.google.protobuf.LazyStringArrayList(verbs_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getVerbsList() {
        return verbs_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public int getVerbsCount() {
        return verbs_.size();
      }
      /**
       * <pre>
       * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public java.lang.String getVerbs(int index) {
        return verbs_.get(index);
      }
      /**
       * <pre>
       * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public com.google.protobuf.ByteString
          getVerbsBytes(int index) {
        return verbs_.getByteString(index);
      }
      /**
       * <pre>
       * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public Builder setVerbs(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureVerbsIsMutable();
        verbs_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public Builder addVerbs(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureVerbsIsMutable();
        verbs_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public Builder addAllVerbs(
          java.lang.Iterable<java.lang.String> values) {
        ensureVerbsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, verbs_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public Builder clearVerbs() {
        verbs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public Builder addVerbsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureVerbsIsMutable();
        verbs_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList nonResourceURLs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureNonResourceURLsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          nonResourceURLs_ = new com.google.protobuf.LazyStringArrayList(nonResourceURLs_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
       * final step in the path.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string nonResourceURLs = 2;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getNonResourceURLsList() {
        return nonResourceURLs_.getUnmodifiableView();
      }
      /**
       * <pre>
       * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
       * final step in the path.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string nonResourceURLs = 2;</code>
       */
      public int getNonResourceURLsCount() {
        return nonResourceURLs_.size();
      }
      /**
       * <pre>
       * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
       * final step in the path.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string nonResourceURLs = 2;</code>
       */
      public java.lang.String getNonResourceURLs(int index) {
        return nonResourceURLs_.get(index);
      }
      /**
       * <pre>
       * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
       * final step in the path.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string nonResourceURLs = 2;</code>
       */
      public com.google.protobuf.ByteString
          getNonResourceURLsBytes(int index) {
        return nonResourceURLs_.getByteString(index);
      }
      /**
       * <pre>
       * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
       * final step in the path.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string nonResourceURLs = 2;</code>
       */
      public Builder setNonResourceURLs(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNonResourceURLsIsMutable();
        nonResourceURLs_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
       * final step in the path.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string nonResourceURLs = 2;</code>
       */
      public Builder addNonResourceURLs(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNonResourceURLsIsMutable();
        nonResourceURLs_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
       * final step in the path.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string nonResourceURLs = 2;</code>
       */
      public Builder addAllNonResourceURLs(
          java.lang.Iterable<java.lang.String> values) {
        ensureNonResourceURLsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, nonResourceURLs_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
       * final step in the path.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string nonResourceURLs = 2;</code>
       */
      public Builder clearNonResourceURLs() {
        nonResourceURLs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full,
       * final step in the path.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string nonResourceURLs = 2;</code>
       */
      public Builder addNonResourceURLsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNonResourceURLsIsMutable();
        nonResourceURLs_.add(value);
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.NonResourceRule)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.NonResourceRule)
    private static final io.kubernetes.client.proto.V1Authorization.NonResourceRule DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.NonResourceRule();
    }

    public static io.kubernetes.client.proto.V1Authorization.NonResourceRule getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<NonResourceRule>
        PARSER = new com.google.protobuf.AbstractParser<NonResourceRule>() {
      public NonResourceRule parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new NonResourceRule(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<NonResourceRule> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<NonResourceRule> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.NonResourceRule getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ResourceAttributesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.ResourceAttributes)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
     * "" (empty) is defaulted for LocalSubjectAccessReviews
     * "" (empty) is empty for cluster-scoped resources
     * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
     * +optional
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    boolean hasNamespace();
    /**
     * <pre>
     * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
     * "" (empty) is defaulted for LocalSubjectAccessReviews
     * "" (empty) is empty for cluster-scoped resources
     * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
     * +optional
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    java.lang.String getNamespace();
    /**
     * <pre>
     * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
     * "" (empty) is defaulted for LocalSubjectAccessReviews
     * "" (empty) is empty for cluster-scoped resources
     * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
     * +optional
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    com.google.protobuf.ByteString
        getNamespaceBytes();

    /**
     * <pre>
     * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    boolean hasVerb();
    /**
     * <pre>
     * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    java.lang.String getVerb();
    /**
     * <pre>
     * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    com.google.protobuf.ByteString
        getVerbBytes();

    /**
     * <pre>
     * Group is the API Group of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string group = 3;</code>
     */
    boolean hasGroup();
    /**
     * <pre>
     * Group is the API Group of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string group = 3;</code>
     */
    java.lang.String getGroup();
    /**
     * <pre>
     * Group is the API Group of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string group = 3;</code>
     */
    com.google.protobuf.ByteString
        getGroupBytes();

    /**
     * <pre>
     * Version is the API Version of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string version = 4;</code>
     */
    boolean hasVersion();
    /**
     * <pre>
     * Version is the API Version of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string version = 4;</code>
     */
    java.lang.String getVersion();
    /**
     * <pre>
     * Version is the API Version of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string version = 4;</code>
     */
    com.google.protobuf.ByteString
        getVersionBytes();

    /**
     * <pre>
     * Resource is one of the existing resource types.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string resource = 5;</code>
     */
    boolean hasResource();
    /**
     * <pre>
     * Resource is one of the existing resource types.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string resource = 5;</code>
     */
    java.lang.String getResource();
    /**
     * <pre>
     * Resource is one of the existing resource types.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string resource = 5;</code>
     */
    com.google.protobuf.ByteString
        getResourceBytes();

    /**
     * <pre>
     * Subresource is one of the existing resource types.  "" means none.
     * +optional
     * </pre>
     *
     * <code>optional string subresource = 6;</code>
     */
    boolean hasSubresource();
    /**
     * <pre>
     * Subresource is one of the existing resource types.  "" means none.
     * +optional
     * </pre>
     *
     * <code>optional string subresource = 6;</code>
     */
    java.lang.String getSubresource();
    /**
     * <pre>
     * Subresource is one of the existing resource types.  "" means none.
     * +optional
     * </pre>
     *
     * <code>optional string subresource = 6;</code>
     */
    com.google.protobuf.ByteString
        getSubresourceBytes();

    /**
     * <pre>
     * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
     * +optional
     * </pre>
     *
     * <code>optional string name = 7;</code>
     */
    boolean hasName();
    /**
     * <pre>
     * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
     * +optional
     * </pre>
     *
     * <code>optional string name = 7;</code>
     */
    java.lang.String getName();
    /**
     * <pre>
     * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
     * +optional
     * </pre>
     *
     * <code>optional string name = 7;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();
  }
  /**
   * <pre>
   * ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.ResourceAttributes}
   */
  public  static final class ResourceAttributes extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.ResourceAttributes)
      ResourceAttributesOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ResourceAttributes.newBuilder() to construct.
    private ResourceAttributes(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ResourceAttributes() {
      namespace_ = "";
      verb_ = "";
      group_ = "";
      version_ = "";
      resource_ = "";
      subresource_ = "";
      name_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ResourceAttributes(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              namespace_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              verb_ = bs;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              group_ = bs;
              break;
            }
            case 34: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000008;
              version_ = bs;
              break;
            }
            case 42: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000010;
              resource_ = bs;
              break;
            }
            case 50: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000020;
              subresource_ = bs;
              break;
            }
            case 58: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000040;
              name_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ResourceAttributes_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ResourceAttributes_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.ResourceAttributes.class, io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder.class);
    }

    private int bitField0_;
    public static final int NAMESPACE_FIELD_NUMBER = 1;
    private volatile java.lang.Object namespace_;
    /**
     * <pre>
     * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
     * "" (empty) is defaulted for LocalSubjectAccessReviews
     * "" (empty) is empty for cluster-scoped resources
     * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
     * +optional
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    public boolean hasNamespace() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
     * "" (empty) is defaulted for LocalSubjectAccessReviews
     * "" (empty) is empty for cluster-scoped resources
     * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
     * +optional
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    public java.lang.String getNamespace() {
      java.lang.Object ref = namespace_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          namespace_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
     * "" (empty) is defaulted for LocalSubjectAccessReviews
     * "" (empty) is empty for cluster-scoped resources
     * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
     * +optional
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNamespaceBytes() {
      java.lang.Object ref = namespace_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        namespace_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VERB_FIELD_NUMBER = 2;
    private volatile java.lang.Object verb_;
    /**
     * <pre>
     * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    public boolean hasVerb() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    public java.lang.String getVerb() {
      java.lang.Object ref = verb_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          verb_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string verb = 2;</code>
     */
    public com.google.protobuf.ByteString
        getVerbBytes() {
      java.lang.Object ref = verb_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        verb_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GROUP_FIELD_NUMBER = 3;
    private volatile java.lang.Object group_;
    /**
     * <pre>
     * Group is the API Group of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string group = 3;</code>
     */
    public boolean hasGroup() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Group is the API Group of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string group = 3;</code>
     */
    public java.lang.String getGroup() {
      java.lang.Object ref = group_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          group_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Group is the API Group of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string group = 3;</code>
     */
    public com.google.protobuf.ByteString
        getGroupBytes() {
      java.lang.Object ref = group_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        group_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VERSION_FIELD_NUMBER = 4;
    private volatile java.lang.Object version_;
    /**
     * <pre>
     * Version is the API Version of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string version = 4;</code>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * Version is the API Version of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string version = 4;</code>
     */
    public java.lang.String getVersion() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          version_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Version is the API Version of the Resource.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string version = 4;</code>
     */
    public com.google.protobuf.ByteString
        getVersionBytes() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        version_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RESOURCE_FIELD_NUMBER = 5;
    private volatile java.lang.Object resource_;
    /**
     * <pre>
     * Resource is one of the existing resource types.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string resource = 5;</code>
     */
    public boolean hasResource() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <pre>
     * Resource is one of the existing resource types.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string resource = 5;</code>
     */
    public java.lang.String getResource() {
      java.lang.Object ref = resource_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          resource_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Resource is one of the existing resource types.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>optional string resource = 5;</code>
     */
    public com.google.protobuf.ByteString
        getResourceBytes() {
      java.lang.Object ref = resource_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        resource_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SUBRESOURCE_FIELD_NUMBER = 6;
    private volatile java.lang.Object subresource_;
    /**
     * <pre>
     * Subresource is one of the existing resource types.  "" means none.
     * +optional
     * </pre>
     *
     * <code>optional string subresource = 6;</code>
     */
    public boolean hasSubresource() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <pre>
     * Subresource is one of the existing resource types.  "" means none.
     * +optional
     * </pre>
     *
     * <code>optional string subresource = 6;</code>
     */
    public java.lang.String getSubresource() {
      java.lang.Object ref = subresource_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          subresource_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Subresource is one of the existing resource types.  "" means none.
     * +optional
     * </pre>
     *
     * <code>optional string subresource = 6;</code>
     */
    public com.google.protobuf.ByteString
        getSubresourceBytes() {
      java.lang.Object ref = subresource_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        subresource_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int NAME_FIELD_NUMBER = 7;
    private volatile java.lang.Object name_;
    /**
     * <pre>
     * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
     * +optional
     * </pre>
     *
     * <code>optional string name = 7;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <pre>
     * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
     * +optional
     * </pre>
     *
     * <code>optional string name = 7;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
     * +optional
     * </pre>
     *
     * <code>optional string name = 7;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, namespace_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, verb_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, group_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, version_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, resource_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, subresource_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, name_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, namespace_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, verb_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, group_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, version_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, resource_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, subresource_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, name_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.ResourceAttributes)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.ResourceAttributes other = (io.kubernetes.client.proto.V1Authorization.ResourceAttributes) obj;

      boolean result = true;
      result = result && (hasNamespace() == other.hasNamespace());
      if (hasNamespace()) {
        result = result && getNamespace()
            .equals(other.getNamespace());
      }
      result = result && (hasVerb() == other.hasVerb());
      if (hasVerb()) {
        result = result && getVerb()
            .equals(other.getVerb());
      }
      result = result && (hasGroup() == other.hasGroup());
      if (hasGroup()) {
        result = result && getGroup()
            .equals(other.getGroup());
      }
      result = result && (hasVersion() == other.hasVersion());
      if (hasVersion()) {
        result = result && getVersion()
            .equals(other.getVersion());
      }
      result = result && (hasResource() == other.hasResource());
      if (hasResource()) {
        result = result && getResource()
            .equals(other.getResource());
      }
      result = result && (hasSubresource() == other.hasSubresource());
      if (hasSubresource()) {
        result = result && getSubresource()
            .equals(other.getSubresource());
      }
      result = result && (hasName() == other.hasName());
      if (hasName()) {
        result = result && getName()
            .equals(other.getName());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasNamespace()) {
        hash = (37 * hash) + NAMESPACE_FIELD_NUMBER;
        hash = (53 * hash) + getNamespace().hashCode();
      }
      if (hasVerb()) {
        hash = (37 * hash) + VERB_FIELD_NUMBER;
        hash = (53 * hash) + getVerb().hashCode();
      }
      if (hasGroup()) {
        hash = (37 * hash) + GROUP_FIELD_NUMBER;
        hash = (53 * hash) + getGroup().hashCode();
      }
      if (hasVersion()) {
        hash = (37 * hash) + VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getVersion().hashCode();
      }
      if (hasResource()) {
        hash = (37 * hash) + RESOURCE_FIELD_NUMBER;
        hash = (53 * hash) + getResource().hashCode();
      }
      if (hasSubresource()) {
        hash = (37 * hash) + SUBRESOURCE_FIELD_NUMBER;
        hash = (53 * hash) + getSubresource().hashCode();
      }
      if (hasName()) {
        hash = (37 * hash) + NAME_FIELD_NUMBER;
        hash = (53 * hash) + getName().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.ResourceAttributes prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.ResourceAttributes}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.ResourceAttributes)
        io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ResourceAttributes_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ResourceAttributes_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.ResourceAttributes.class, io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.ResourceAttributes.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        namespace_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        verb_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        group_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        version_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        resource_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        subresource_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ResourceAttributes_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.ResourceAttributes getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.ResourceAttributes build() {
        io.kubernetes.client.proto.V1Authorization.ResourceAttributes result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.ResourceAttributes buildPartial() {
        io.kubernetes.client.proto.V1Authorization.ResourceAttributes result = new io.kubernetes.client.proto.V1Authorization.ResourceAttributes(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.namespace_ = namespace_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.verb_ = verb_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.group_ = group_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.resource_ = resource_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.subresource_ = subresource_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.name_ = name_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.ResourceAttributes) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.ResourceAttributes)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.ResourceAttributes other) {
        if (other == io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance()) return this;
        if (other.hasNamespace()) {
          bitField0_ |= 0x00000001;
          namespace_ = other.namespace_;
          onChanged();
        }
        if (other.hasVerb()) {
          bitField0_ |= 0x00000002;
          verb_ = other.verb_;
          onChanged();
        }
        if (other.hasGroup()) {
          bitField0_ |= 0x00000004;
          group_ = other.group_;
          onChanged();
        }
        if (other.hasVersion()) {
          bitField0_ |= 0x00000008;
          version_ = other.version_;
          onChanged();
        }
        if (other.hasResource()) {
          bitField0_ |= 0x00000010;
          resource_ = other.resource_;
          onChanged();
        }
        if (other.hasSubresource()) {
          bitField0_ |= 0x00000020;
          subresource_ = other.subresource_;
          onChanged();
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000040;
          name_ = other.name_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.ResourceAttributes parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.ResourceAttributes) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object namespace_ = "";
      /**
       * <pre>
       * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
       * "" (empty) is defaulted for LocalSubjectAccessReviews
       * "" (empty) is empty for cluster-scoped resources
       * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
       * +optional
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public boolean hasNamespace() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
       * "" (empty) is defaulted for LocalSubjectAccessReviews
       * "" (empty) is empty for cluster-scoped resources
       * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
       * +optional
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public java.lang.String getNamespace() {
        java.lang.Object ref = namespace_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            namespace_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
       * "" (empty) is defaulted for LocalSubjectAccessReviews
       * "" (empty) is empty for cluster-scoped resources
       * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
       * +optional
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNamespaceBytes() {
        java.lang.Object ref = namespace_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          namespace_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
       * "" (empty) is defaulted for LocalSubjectAccessReviews
       * "" (empty) is empty for cluster-scoped resources
       * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
       * +optional
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public Builder setNamespace(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        namespace_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
       * "" (empty) is defaulted for LocalSubjectAccessReviews
       * "" (empty) is empty for cluster-scoped resources
       * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
       * +optional
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public Builder clearNamespace() {
        bitField0_ = (bitField0_ & ~0x00000001);
        namespace_ = getDefaultInstance().getNamespace();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces
       * "" (empty) is defaulted for LocalSubjectAccessReviews
       * "" (empty) is empty for cluster-scoped resources
       * "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview
       * +optional
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public Builder setNamespaceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        namespace_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object verb_ = "";
      /**
       * <pre>
       * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public boolean hasVerb() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public java.lang.String getVerb() {
        java.lang.Object ref = verb_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            verb_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public com.google.protobuf.ByteString
          getVerbBytes() {
        java.lang.Object ref = verb_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          verb_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public Builder setVerb(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        verb_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public Builder clearVerb() {
        bitField0_ = (bitField0_ & ~0x00000002);
        verb_ = getDefaultInstance().getVerb();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string verb = 2;</code>
       */
      public Builder setVerbBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        verb_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object group_ = "";
      /**
       * <pre>
       * Group is the API Group of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string group = 3;</code>
       */
      public boolean hasGroup() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Group is the API Group of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string group = 3;</code>
       */
      public java.lang.String getGroup() {
        java.lang.Object ref = group_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            group_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Group is the API Group of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string group = 3;</code>
       */
      public com.google.protobuf.ByteString
          getGroupBytes() {
        java.lang.Object ref = group_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          group_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Group is the API Group of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string group = 3;</code>
       */
      public Builder setGroup(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        group_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Group is the API Group of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string group = 3;</code>
       */
      public Builder clearGroup() {
        bitField0_ = (bitField0_ & ~0x00000004);
        group_ = getDefaultInstance().getGroup();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Group is the API Group of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string group = 3;</code>
       */
      public Builder setGroupBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        group_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object version_ = "";
      /**
       * <pre>
       * Version is the API Version of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string version = 4;</code>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * Version is the API Version of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string version = 4;</code>
       */
      public java.lang.String getVersion() {
        java.lang.Object ref = version_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            version_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Version is the API Version of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string version = 4;</code>
       */
      public com.google.protobuf.ByteString
          getVersionBytes() {
        java.lang.Object ref = version_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          version_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Version is the API Version of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string version = 4;</code>
       */
      public Builder setVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Version is the API Version of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string version = 4;</code>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000008);
        version_ = getDefaultInstance().getVersion();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Version is the API Version of the Resource.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string version = 4;</code>
       */
      public Builder setVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        version_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object resource_ = "";
      /**
       * <pre>
       * Resource is one of the existing resource types.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string resource = 5;</code>
       */
      public boolean hasResource() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <pre>
       * Resource is one of the existing resource types.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string resource = 5;</code>
       */
      public java.lang.String getResource() {
        java.lang.Object ref = resource_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            resource_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Resource is one of the existing resource types.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string resource = 5;</code>
       */
      public com.google.protobuf.ByteString
          getResourceBytes() {
        java.lang.Object ref = resource_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          resource_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Resource is one of the existing resource types.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string resource = 5;</code>
       */
      public Builder setResource(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        resource_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Resource is one of the existing resource types.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string resource = 5;</code>
       */
      public Builder clearResource() {
        bitField0_ = (bitField0_ & ~0x00000010);
        resource_ = getDefaultInstance().getResource();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Resource is one of the existing resource types.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>optional string resource = 5;</code>
       */
      public Builder setResourceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        resource_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object subresource_ = "";
      /**
       * <pre>
       * Subresource is one of the existing resource types.  "" means none.
       * +optional
       * </pre>
       *
       * <code>optional string subresource = 6;</code>
       */
      public boolean hasSubresource() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <pre>
       * Subresource is one of the existing resource types.  "" means none.
       * +optional
       * </pre>
       *
       * <code>optional string subresource = 6;</code>
       */
      public java.lang.String getSubresource() {
        java.lang.Object ref = subresource_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            subresource_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Subresource is one of the existing resource types.  "" means none.
       * +optional
       * </pre>
       *
       * <code>optional string subresource = 6;</code>
       */
      public com.google.protobuf.ByteString
          getSubresourceBytes() {
        java.lang.Object ref = subresource_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          subresource_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Subresource is one of the existing resource types.  "" means none.
       * +optional
       * </pre>
       *
       * <code>optional string subresource = 6;</code>
       */
      public Builder setSubresource(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        subresource_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Subresource is one of the existing resource types.  "" means none.
       * +optional
       * </pre>
       *
       * <code>optional string subresource = 6;</code>
       */
      public Builder clearSubresource() {
        bitField0_ = (bitField0_ & ~0x00000020);
        subresource_ = getDefaultInstance().getSubresource();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Subresource is one of the existing resource types.  "" means none.
       * +optional
       * </pre>
       *
       * <code>optional string subresource = 6;</code>
       */
      public Builder setSubresourceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        subresource_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <pre>
       * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
       * +optional
       * </pre>
       *
       * <code>optional string name = 7;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <pre>
       * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
       * +optional
       * </pre>
       *
       * <code>optional string name = 7;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
       * +optional
       * </pre>
       *
       * <code>optional string name = 7;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
       * +optional
       * </pre>
       *
       * <code>optional string name = 7;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
       * +optional
       * </pre>
       *
       * <code>optional string name = 7;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000040);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all.
       * +optional
       * </pre>
       *
       * <code>optional string name = 7;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        name_ = value;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.ResourceAttributes)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.ResourceAttributes)
    private static final io.kubernetes.client.proto.V1Authorization.ResourceAttributes DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.ResourceAttributes();
    }

    public static io.kubernetes.client.proto.V1Authorization.ResourceAttributes getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ResourceAttributes>
        PARSER = new com.google.protobuf.AbstractParser<ResourceAttributes>() {
      public ResourceAttributes parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ResourceAttributes(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<ResourceAttributes> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ResourceAttributes> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.ResourceAttributes getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ResourceRuleOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.ResourceRule)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    java.util.List<java.lang.String>
        getVerbsList();
    /**
     * <pre>
     * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    int getVerbsCount();
    /**
     * <pre>
     * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    java.lang.String getVerbs(int index);
    /**
     * <pre>
     * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    com.google.protobuf.ByteString
        getVerbsBytes(int index);

    /**
     * <pre>
     * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
     * the enumerated resources in any API group will be allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string apiGroups = 2;</code>
     */
    java.util.List<java.lang.String>
        getApiGroupsList();
    /**
     * <pre>
     * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
     * the enumerated resources in any API group will be allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string apiGroups = 2;</code>
     */
    int getApiGroupsCount();
    /**
     * <pre>
     * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
     * the enumerated resources in any API group will be allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string apiGroups = 2;</code>
     */
    java.lang.String getApiGroups(int index);
    /**
     * <pre>
     * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
     * the enumerated resources in any API group will be allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string apiGroups = 2;</code>
     */
    com.google.protobuf.ByteString
        getApiGroupsBytes(int index);

    /**
     * <pre>
     * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
     *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
     * +optional
     * </pre>
     *
     * <code>repeated string resources = 3;</code>
     */
    java.util.List<java.lang.String>
        getResourcesList();
    /**
     * <pre>
     * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
     *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
     * +optional
     * </pre>
     *
     * <code>repeated string resources = 3;</code>
     */
    int getResourcesCount();
    /**
     * <pre>
     * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
     *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
     * +optional
     * </pre>
     *
     * <code>repeated string resources = 3;</code>
     */
    java.lang.String getResources(int index);
    /**
     * <pre>
     * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
     *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
     * +optional
     * </pre>
     *
     * <code>repeated string resources = 3;</code>
     */
    com.google.protobuf.ByteString
        getResourcesBytes(int index);

    /**
     * <pre>
     * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string resourceNames = 4;</code>
     */
    java.util.List<java.lang.String>
        getResourceNamesList();
    /**
     * <pre>
     * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string resourceNames = 4;</code>
     */
    int getResourceNamesCount();
    /**
     * <pre>
     * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string resourceNames = 4;</code>
     */
    java.lang.String getResourceNames(int index);
    /**
     * <pre>
     * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string resourceNames = 4;</code>
     */
    com.google.protobuf.ByteString
        getResourceNamesBytes(int index);
  }
  /**
   * <pre>
   * ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant,
   * may contain duplicates, and possibly be incomplete.
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.ResourceRule}
   */
  public  static final class ResourceRule extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.ResourceRule)
      ResourceRuleOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ResourceRule.newBuilder() to construct.
    private ResourceRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ResourceRule() {
      verbs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      apiGroups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      resources_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      resourceNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ResourceRule(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                verbs_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              verbs_.add(bs);
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                apiGroups_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              apiGroups_.add(bs);
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                resources_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              resources_.add(bs);
              break;
            }
            case 34: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                resourceNames_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000008;
              }
              resourceNames_.add(bs);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          verbs_ = verbs_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          apiGroups_ = apiGroups_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          resources_ = resources_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          resourceNames_ = resourceNames_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ResourceRule_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ResourceRule_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.ResourceRule.class, io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder.class);
    }

    public static final int VERBS_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList verbs_;
    /**
     * <pre>
     * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getVerbsList() {
      return verbs_;
    }
    /**
     * <pre>
     * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    public int getVerbsCount() {
      return verbs_.size();
    }
    /**
     * <pre>
     * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    public java.lang.String getVerbs(int index) {
      return verbs_.get(index);
    }
    /**
     * <pre>
     * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
     * </pre>
     *
     * <code>repeated string verbs = 1;</code>
     */
    public com.google.protobuf.ByteString
        getVerbsBytes(int index) {
      return verbs_.getByteString(index);
    }

    public static final int APIGROUPS_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList apiGroups_;
    /**
     * <pre>
     * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
     * the enumerated resources in any API group will be allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string apiGroups = 2;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getApiGroupsList() {
      return apiGroups_;
    }
    /**
     * <pre>
     * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
     * the enumerated resources in any API group will be allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string apiGroups = 2;</code>
     */
    public int getApiGroupsCount() {
      return apiGroups_.size();
    }
    /**
     * <pre>
     * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
     * the enumerated resources in any API group will be allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string apiGroups = 2;</code>
     */
    public java.lang.String getApiGroups(int index) {
      return apiGroups_.get(index);
    }
    /**
     * <pre>
     * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
     * the enumerated resources in any API group will be allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string apiGroups = 2;</code>
     */
    public com.google.protobuf.ByteString
        getApiGroupsBytes(int index) {
      return apiGroups_.getByteString(index);
    }

    public static final int RESOURCES_FIELD_NUMBER = 3;
    private com.google.protobuf.LazyStringList resources_;
    /**
     * <pre>
     * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
     *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
     * +optional
     * </pre>
     *
     * <code>repeated string resources = 3;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getResourcesList() {
      return resources_;
    }
    /**
     * <pre>
     * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
     *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
     * +optional
     * </pre>
     *
     * <code>repeated string resources = 3;</code>
     */
    public int getResourcesCount() {
      return resources_.size();
    }
    /**
     * <pre>
     * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
     *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
     * +optional
     * </pre>
     *
     * <code>repeated string resources = 3;</code>
     */
    public java.lang.String getResources(int index) {
      return resources_.get(index);
    }
    /**
     * <pre>
     * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
     *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
     * +optional
     * </pre>
     *
     * <code>repeated string resources = 3;</code>
     */
    public com.google.protobuf.ByteString
        getResourcesBytes(int index) {
      return resources_.getByteString(index);
    }

    public static final int RESOURCENAMES_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList resourceNames_;
    /**
     * <pre>
     * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string resourceNames = 4;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getResourceNamesList() {
      return resourceNames_;
    }
    /**
     * <pre>
     * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string resourceNames = 4;</code>
     */
    public int getResourceNamesCount() {
      return resourceNames_.size();
    }
    /**
     * <pre>
     * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string resourceNames = 4;</code>
     */
    public java.lang.String getResourceNames(int index) {
      return resourceNames_.get(index);
    }
    /**
     * <pre>
     * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
     * +optional
     * </pre>
     *
     * <code>repeated string resourceNames = 4;</code>
     */
    public com.google.protobuf.ByteString
        getResourceNamesBytes(int index) {
      return resourceNames_.getByteString(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < verbs_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, verbs_.getRaw(i));
      }
      for (int i = 0; i < apiGroups_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, apiGroups_.getRaw(i));
      }
      for (int i = 0; i < resources_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, resources_.getRaw(i));
      }
      for (int i = 0; i < resourceNames_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, resourceNames_.getRaw(i));
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < verbs_.size(); i++) {
          dataSize += computeStringSizeNoTag(verbs_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getVerbsList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < apiGroups_.size(); i++) {
          dataSize += computeStringSizeNoTag(apiGroups_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getApiGroupsList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < resources_.size(); i++) {
          dataSize += computeStringSizeNoTag(resources_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getResourcesList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < resourceNames_.size(); i++) {
          dataSize += computeStringSizeNoTag(resourceNames_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getResourceNamesList().size();
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.ResourceRule)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.ResourceRule other = (io.kubernetes.client.proto.V1Authorization.ResourceRule) obj;

      boolean result = true;
      result = result && getVerbsList()
          .equals(other.getVerbsList());
      result = result && getApiGroupsList()
          .equals(other.getApiGroupsList());
      result = result && getResourcesList()
          .equals(other.getResourcesList());
      result = result && getResourceNamesList()
          .equals(other.getResourceNamesList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getVerbsCount() > 0) {
        hash = (37 * hash) + VERBS_FIELD_NUMBER;
        hash = (53 * hash) + getVerbsList().hashCode();
      }
      if (getApiGroupsCount() > 0) {
        hash = (37 * hash) + APIGROUPS_FIELD_NUMBER;
        hash = (53 * hash) + getApiGroupsList().hashCode();
      }
      if (getResourcesCount() > 0) {
        hash = (37 * hash) + RESOURCES_FIELD_NUMBER;
        hash = (53 * hash) + getResourcesList().hashCode();
      }
      if (getResourceNamesCount() > 0) {
        hash = (37 * hash) + RESOURCENAMES_FIELD_NUMBER;
        hash = (53 * hash) + getResourceNamesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.ResourceRule parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.ResourceRule prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant,
     * may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.ResourceRule}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.ResourceRule)
        io.kubernetes.client.proto.V1Authorization.ResourceRuleOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ResourceRule_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ResourceRule_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.ResourceRule.class, io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.ResourceRule.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        verbs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        apiGroups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        resources_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        resourceNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_ResourceRule_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.ResourceRule getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.ResourceRule.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.ResourceRule build() {
        io.kubernetes.client.proto.V1Authorization.ResourceRule result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.ResourceRule buildPartial() {
        io.kubernetes.client.proto.V1Authorization.ResourceRule result = new io.kubernetes.client.proto.V1Authorization.ResourceRule(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          verbs_ = verbs_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.verbs_ = verbs_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          apiGroups_ = apiGroups_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.apiGroups_ = apiGroups_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          resources_ = resources_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.resources_ = resources_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          resourceNames_ = resourceNames_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.resourceNames_ = resourceNames_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.ResourceRule) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.ResourceRule)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.ResourceRule other) {
        if (other == io.kubernetes.client.proto.V1Authorization.ResourceRule.getDefaultInstance()) return this;
        if (!other.verbs_.isEmpty()) {
          if (verbs_.isEmpty()) {
            verbs_ = other.verbs_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureVerbsIsMutable();
            verbs_.addAll(other.verbs_);
          }
          onChanged();
        }
        if (!other.apiGroups_.isEmpty()) {
          if (apiGroups_.isEmpty()) {
            apiGroups_ = other.apiGroups_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureApiGroupsIsMutable();
            apiGroups_.addAll(other.apiGroups_);
          }
          onChanged();
        }
        if (!other.resources_.isEmpty()) {
          if (resources_.isEmpty()) {
            resources_ = other.resources_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureResourcesIsMutable();
            resources_.addAll(other.resources_);
          }
          onChanged();
        }
        if (!other.resourceNames_.isEmpty()) {
          if (resourceNames_.isEmpty()) {
            resourceNames_ = other.resourceNames_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureResourceNamesIsMutable();
            resourceNames_.addAll(other.resourceNames_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.ResourceRule parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.ResourceRule) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.LazyStringList verbs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureVerbsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          verbs_ = new com.google.protobuf.LazyStringArrayList(verbs_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getVerbsList() {
        return verbs_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public int getVerbsCount() {
        return verbs_.size();
      }
      /**
       * <pre>
       * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public java.lang.String getVerbs(int index) {
        return verbs_.get(index);
      }
      /**
       * <pre>
       * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public com.google.protobuf.ByteString
          getVerbsBytes(int index) {
        return verbs_.getByteString(index);
      }
      /**
       * <pre>
       * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public Builder setVerbs(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureVerbsIsMutable();
        verbs_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public Builder addVerbs(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureVerbsIsMutable();
        verbs_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public Builder addAllVerbs(
          java.lang.Iterable<java.lang.String> values) {
        ensureVerbsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, verbs_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public Builder clearVerbs() {
        verbs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  "*" means all.
       * </pre>
       *
       * <code>repeated string verbs = 1;</code>
       */
      public Builder addVerbsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureVerbsIsMutable();
        verbs_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList apiGroups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureApiGroupsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          apiGroups_ = new com.google.protobuf.LazyStringArrayList(apiGroups_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
       * the enumerated resources in any API group will be allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string apiGroups = 2;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getApiGroupsList() {
        return apiGroups_.getUnmodifiableView();
      }
      /**
       * <pre>
       * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
       * the enumerated resources in any API group will be allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string apiGroups = 2;</code>
       */
      public int getApiGroupsCount() {
        return apiGroups_.size();
      }
      /**
       * <pre>
       * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
       * the enumerated resources in any API group will be allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string apiGroups = 2;</code>
       */
      public java.lang.String getApiGroups(int index) {
        return apiGroups_.get(index);
      }
      /**
       * <pre>
       * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
       * the enumerated resources in any API group will be allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string apiGroups = 2;</code>
       */
      public com.google.protobuf.ByteString
          getApiGroupsBytes(int index) {
        return apiGroups_.getByteString(index);
      }
      /**
       * <pre>
       * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
       * the enumerated resources in any API group will be allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string apiGroups = 2;</code>
       */
      public Builder setApiGroups(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureApiGroupsIsMutable();
        apiGroups_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
       * the enumerated resources in any API group will be allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string apiGroups = 2;</code>
       */
      public Builder addApiGroups(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureApiGroupsIsMutable();
        apiGroups_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
       * the enumerated resources in any API group will be allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string apiGroups = 2;</code>
       */
      public Builder addAllApiGroups(
          java.lang.Iterable<java.lang.String> values) {
        ensureApiGroupsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, apiGroups_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
       * the enumerated resources in any API group will be allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string apiGroups = 2;</code>
       */
      public Builder clearApiGroups() {
        apiGroups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of
       * the enumerated resources in any API group will be allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string apiGroups = 2;</code>
       */
      public Builder addApiGroupsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureApiGroupsIsMutable();
        apiGroups_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList resources_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureResourcesIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          resources_ = new com.google.protobuf.LazyStringArrayList(resources_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <pre>
       * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
       *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
       * +optional
       * </pre>
       *
       * <code>repeated string resources = 3;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getResourcesList() {
        return resources_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
       *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
       * +optional
       * </pre>
       *
       * <code>repeated string resources = 3;</code>
       */
      public int getResourcesCount() {
        return resources_.size();
      }
      /**
       * <pre>
       * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
       *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
       * +optional
       * </pre>
       *
       * <code>repeated string resources = 3;</code>
       */
      public java.lang.String getResources(int index) {
        return resources_.get(index);
      }
      /**
       * <pre>
       * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
       *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
       * +optional
       * </pre>
       *
       * <code>repeated string resources = 3;</code>
       */
      public com.google.protobuf.ByteString
          getResourcesBytes(int index) {
        return resources_.getByteString(index);
      }
      /**
       * <pre>
       * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
       *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
       * +optional
       * </pre>
       *
       * <code>repeated string resources = 3;</code>
       */
      public Builder setResources(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureResourcesIsMutable();
        resources_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
       *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
       * +optional
       * </pre>
       *
       * <code>repeated string resources = 3;</code>
       */
      public Builder addResources(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureResourcesIsMutable();
        resources_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
       *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
       * +optional
       * </pre>
       *
       * <code>repeated string resources = 3;</code>
       */
      public Builder addAllResources(
          java.lang.Iterable<java.lang.String> values) {
        ensureResourcesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, resources_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
       *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
       * +optional
       * </pre>
       *
       * <code>repeated string resources = 3;</code>
       */
      public Builder clearResources() {
        resources_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Resources is a list of resources this rule applies to.  "*" means all in the specified apiGroups.
       *  "*&#47;foo" represents the subresource 'foo' for all resources in the specified apiGroups.
       * +optional
       * </pre>
       *
       * <code>repeated string resources = 3;</code>
       */
      public Builder addResourcesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureResourcesIsMutable();
        resources_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList resourceNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureResourceNamesIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          resourceNames_ = new com.google.protobuf.LazyStringArrayList(resourceNames_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <pre>
       * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string resourceNames = 4;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getResourceNamesList() {
        return resourceNames_.getUnmodifiableView();
      }
      /**
       * <pre>
       * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string resourceNames = 4;</code>
       */
      public int getResourceNamesCount() {
        return resourceNames_.size();
      }
      /**
       * <pre>
       * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string resourceNames = 4;</code>
       */
      public java.lang.String getResourceNames(int index) {
        return resourceNames_.get(index);
      }
      /**
       * <pre>
       * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string resourceNames = 4;</code>
       */
      public com.google.protobuf.ByteString
          getResourceNamesBytes(int index) {
        return resourceNames_.getByteString(index);
      }
      /**
       * <pre>
       * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string resourceNames = 4;</code>
       */
      public Builder setResourceNames(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureResourceNamesIsMutable();
        resourceNames_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string resourceNames = 4;</code>
       */
      public Builder addResourceNames(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureResourceNamesIsMutable();
        resourceNames_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string resourceNames = 4;</code>
       */
      public Builder addAllResourceNames(
          java.lang.Iterable<java.lang.String> values) {
        ensureResourceNamesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, resourceNames_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string resourceNames = 4;</code>
       */
      public Builder clearResourceNames() {
        resourceNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  "*" means all.
       * +optional
       * </pre>
       *
       * <code>repeated string resourceNames = 4;</code>
       */
      public Builder addResourceNamesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureResourceNamesIsMutable();
        resourceNames_.add(value);
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.ResourceRule)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.ResourceRule)
    private static final io.kubernetes.client.proto.V1Authorization.ResourceRule DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.ResourceRule();
    }

    public static io.kubernetes.client.proto.V1Authorization.ResourceRule getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ResourceRule>
        PARSER = new com.google.protobuf.AbstractParser<ResourceRule>() {
      public ResourceRule parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ResourceRule(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<ResourceRule> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ResourceRule> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.ResourceRule getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SelfSubjectAccessReviewOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.SelfSubjectAccessReview)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    boolean hasMetadata();
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    io.kubernetes.client.proto.Meta.ObjectMeta getMetadata();
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder();

    /**
     * <pre>
     * Spec holds information about the request being evaluated.  user and groups must be empty
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
     */
    boolean hasSpec();
    /**
     * <pre>
     * Spec holds information about the request being evaluated.  user and groups must be empty
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec getSpec();
    /**
     * <pre>
     * Spec holds information about the request being evaluated.  user and groups must be empty
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpecOrBuilder getSpecOrBuilder();

    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    boolean hasStatus();
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getStatus();
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder getStatusOrBuilder();
  }
  /**
   * <pre>
   * SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a
   * spec.namespace means "in all namespaces".  Self is a special case, because users should always be able
   * to check whether they can perform an action
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.SelfSubjectAccessReview}
   */
  public  static final class SelfSubjectAccessReview extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.SelfSubjectAccessReview)
      SelfSubjectAccessReviewOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SelfSubjectAccessReview.newBuilder() to construct.
    private SelfSubjectAccessReview(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SelfSubjectAccessReview() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SelfSubjectAccessReview(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              io.kubernetes.client.proto.Meta.ObjectMeta.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = metadata_.toBuilder();
              }
              metadata_ = input.readMessage(io.kubernetes.client.proto.Meta.ObjectMeta.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(metadata_);
                metadata_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = spec_.toBuilder();
              }
              spec_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(spec_);
                spec_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReview_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReview_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview.class, io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview.Builder.class);
    }

    private int bitField0_;
    public static final int METADATA_FIELD_NUMBER = 1;
    private io.kubernetes.client.proto.Meta.ObjectMeta metadata_;
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public boolean hasMetadata() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public io.kubernetes.client.proto.Meta.ObjectMeta getMetadata() {
      return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
    }
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder() {
      return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
    }

    public static final int SPEC_FIELD_NUMBER = 2;
    private io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec spec_;
    /**
     * <pre>
     * Spec holds information about the request being evaluated.  user and groups must be empty
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
     */
    public boolean hasSpec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Spec holds information about the request being evaluated.  user and groups must be empty
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec getSpec() {
      return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.getDefaultInstance() : spec_;
    }
    /**
     * <pre>
     * Spec holds information about the request being evaluated.  user and groups must be empty
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpecOrBuilder getSpecOrBuilder() {
      return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.getDefaultInstance() : spec_;
    }

    public static final int STATUS_FIELD_NUMBER = 3;
    private io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus status_;
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    public boolean hasStatus() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getStatus() {
      return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
    }
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder getStatusOrBuilder() {
      return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, getMetadata());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, getSpec());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, getStatus());
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getMetadata());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getSpec());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getStatus());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview other = (io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview) obj;

      boolean result = true;
      result = result && (hasMetadata() == other.hasMetadata());
      if (hasMetadata()) {
        result = result && getMetadata()
            .equals(other.getMetadata());
      }
      result = result && (hasSpec() == other.hasSpec());
      if (hasSpec()) {
        result = result && getSpec()
            .equals(other.getSpec());
      }
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasMetadata()) {
        hash = (37 * hash) + METADATA_FIELD_NUMBER;
        hash = (53 * hash) + getMetadata().hashCode();
      }
      if (hasSpec()) {
        hash = (37 * hash) + SPEC_FIELD_NUMBER;
        hash = (53 * hash) + getSpec().hashCode();
      }
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getStatus().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a
     * spec.namespace means "in all namespaces".  Self is a special case, because users should always be able
     * to check whether they can perform an action
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.SelfSubjectAccessReview}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.SelfSubjectAccessReview)
        io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReview_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReview_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview.class, io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMetadataFieldBuilder();
          getSpecFieldBuilder();
          getStatusFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (metadataBuilder_ == null) {
          metadata_ = null;
        } else {
          metadataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (specBuilder_ == null) {
          spec_ = null;
        } else {
          specBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          statusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReview_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview build() {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview buildPartial() {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview result = new io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (metadataBuilder_ == null) {
          result.metadata_ = metadata_;
        } else {
          result.metadata_ = metadataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (specBuilder_ == null) {
          result.spec_ = spec_;
        } else {
          result.spec_ = specBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview other) {
        if (other == io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview.getDefaultInstance()) return this;
        if (other.hasMetadata()) {
          mergeMetadata(other.getMetadata());
        }
        if (other.hasSpec()) {
          mergeSpec(other.getSpec());
        }
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private io.kubernetes.client.proto.Meta.ObjectMeta metadata_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder> metadataBuilder_;
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public boolean hasMetadata() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMeta getMetadata() {
        if (metadataBuilder_ == null) {
          return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
        } else {
          return metadataBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder setMetadata(io.kubernetes.client.proto.Meta.ObjectMeta value) {
        if (metadataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          metadata_ = value;
          onChanged();
        } else {
          metadataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder setMetadata(
          io.kubernetes.client.proto.Meta.ObjectMeta.Builder builderForValue) {
        if (metadataBuilder_ == null) {
          metadata_ = builderForValue.build();
          onChanged();
        } else {
          metadataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder mergeMetadata(io.kubernetes.client.proto.Meta.ObjectMeta value) {
        if (metadataBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              metadata_ != null &&
              metadata_ != io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance()) {
            metadata_ =
              io.kubernetes.client.proto.Meta.ObjectMeta.newBuilder(metadata_).mergeFrom(value).buildPartial();
          } else {
            metadata_ = value;
          }
          onChanged();
        } else {
          metadataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder clearMetadata() {
        if (metadataBuilder_ == null) {
          metadata_ = null;
          onChanged();
        } else {
          metadataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMeta.Builder getMetadataBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getMetadataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder() {
        if (metadataBuilder_ != null) {
          return metadataBuilder_.getMessageOrBuilder();
        } else {
          return metadata_ == null ?
              io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
        }
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder> 
          getMetadataFieldBuilder() {
        if (metadataBuilder_ == null) {
          metadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder>(
                  getMetadata(),
                  getParentForChildren(),
                  isClean());
          metadata_ = null;
        }
        return metadataBuilder_;
      }

      private io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec spec_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec, io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpecOrBuilder> specBuilder_;
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  user and groups must be empty
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
       */
      public boolean hasSpec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  user and groups must be empty
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec getSpec() {
        if (specBuilder_ == null) {
          return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.getDefaultInstance() : spec_;
        } else {
          return specBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  user and groups must be empty
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder setSpec(io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec value) {
        if (specBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          spec_ = value;
          onChanged();
        } else {
          specBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  user and groups must be empty
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder setSpec(
          io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.Builder builderForValue) {
        if (specBuilder_ == null) {
          spec_ = builderForValue.build();
          onChanged();
        } else {
          specBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  user and groups must be empty
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder mergeSpec(io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec value) {
        if (specBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              spec_ != null &&
              spec_ != io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.getDefaultInstance()) {
            spec_ =
              io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.newBuilder(spec_).mergeFrom(value).buildPartial();
          } else {
            spec_ = value;
          }
          onChanged();
        } else {
          specBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  user and groups must be empty
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder clearSpec() {
        if (specBuilder_ == null) {
          spec_ = null;
          onChanged();
        } else {
          specBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  user and groups must be empty
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.Builder getSpecBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getSpecFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  user and groups must be empty
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpecOrBuilder getSpecOrBuilder() {
        if (specBuilder_ != null) {
          return specBuilder_.getMessageOrBuilder();
        } else {
          return spec_ == null ?
              io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.getDefaultInstance() : spec_;
        }
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.  user and groups must be empty
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec spec = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec, io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpecOrBuilder> 
          getSpecFieldBuilder() {
        if (specBuilder_ == null) {
          specBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec, io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpecOrBuilder>(
                  getSpec(),
                  getParentForChildren(),
                  isClean());
          spec_ = null;
        }
        return specBuilder_;
      }

      private io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder> statusBuilder_;
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public boolean hasStatus() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder setStatus(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder setStatus(
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder mergeStatus(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus value) {
        if (statusBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              status_ != null &&
              status_ != io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance()) {
            status_ =
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          statusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder getStatusBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.SelfSubjectAccessReview)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.SelfSubjectAccessReview)
    private static final io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview();
    }

    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SelfSubjectAccessReview>
        PARSER = new com.google.protobuf.AbstractParser<SelfSubjectAccessReview>() {
      public SelfSubjectAccessReview parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new SelfSubjectAccessReview(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SelfSubjectAccessReview> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SelfSubjectAccessReview> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReview getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SelfSubjectAccessReviewSpecOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    boolean hasResourceAttributes();
    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    io.kubernetes.client.proto.V1Authorization.ResourceAttributes getResourceAttributes();
    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder getResourceAttributesOrBuilder();

    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    boolean hasNonResourceAttributes();
    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.NonResourceAttributes getNonResourceAttributes();
    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder getNonResourceAttributesOrBuilder();
  }
  /**
   * <pre>
   * SelfSubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes
   * and NonResourceAuthorizationAttributes must be set
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec}
   */
  public  static final class SelfSubjectAccessReviewSpec extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec)
      SelfSubjectAccessReviewSpecOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SelfSubjectAccessReviewSpec.newBuilder() to construct.
    private SelfSubjectAccessReviewSpec(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SelfSubjectAccessReviewSpec() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SelfSubjectAccessReviewSpec(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = resourceAttributes_.toBuilder();
              }
              resourceAttributes_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.ResourceAttributes.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(resourceAttributes_);
                resourceAttributes_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = nonResourceAttributes_.toBuilder();
              }
              nonResourceAttributes_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(nonResourceAttributes_);
                nonResourceAttributes_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReviewSpec_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReviewSpec_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.class, io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.Builder.class);
    }

    private int bitField0_;
    public static final int RESOURCEATTRIBUTES_FIELD_NUMBER = 1;
    private io.kubernetes.client.proto.V1Authorization.ResourceAttributes resourceAttributes_;
    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    public boolean hasResourceAttributes() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.ResourceAttributes getResourceAttributes() {
      return resourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance() : resourceAttributes_;
    }
    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder getResourceAttributesOrBuilder() {
      return resourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance() : resourceAttributes_;
    }

    public static final int NONRESOURCEATTRIBUTES_FIELD_NUMBER = 2;
    private io.kubernetes.client.proto.V1Authorization.NonResourceAttributes nonResourceAttributes_;
    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    public boolean hasNonResourceAttributes() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.NonResourceAttributes getNonResourceAttributes() {
      return nonResourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance() : nonResourceAttributes_;
    }
    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder getNonResourceAttributesOrBuilder() {
      return nonResourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance() : nonResourceAttributes_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, getResourceAttributes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, getNonResourceAttributes());
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getResourceAttributes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getNonResourceAttributes());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec other = (io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec) obj;

      boolean result = true;
      result = result && (hasResourceAttributes() == other.hasResourceAttributes());
      if (hasResourceAttributes()) {
        result = result && getResourceAttributes()
            .equals(other.getResourceAttributes());
      }
      result = result && (hasNonResourceAttributes() == other.hasNonResourceAttributes());
      if (hasNonResourceAttributes()) {
        result = result && getNonResourceAttributes()
            .equals(other.getNonResourceAttributes());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasResourceAttributes()) {
        hash = (37 * hash) + RESOURCEATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getResourceAttributes().hashCode();
      }
      if (hasNonResourceAttributes()) {
        hash = (37 * hash) + NONRESOURCEATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getNonResourceAttributes().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * SelfSubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes
     * and NonResourceAuthorizationAttributes must be set
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec)
        io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpecOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReviewSpec_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReviewSpec_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.class, io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getResourceAttributesFieldBuilder();
          getNonResourceAttributesFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (resourceAttributesBuilder_ == null) {
          resourceAttributes_ = null;
        } else {
          resourceAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (nonResourceAttributesBuilder_ == null) {
          nonResourceAttributes_ = null;
        } else {
          nonResourceAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReviewSpec_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec build() {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec buildPartial() {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec result = new io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (resourceAttributesBuilder_ == null) {
          result.resourceAttributes_ = resourceAttributes_;
        } else {
          result.resourceAttributes_ = resourceAttributesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (nonResourceAttributesBuilder_ == null) {
          result.nonResourceAttributes_ = nonResourceAttributes_;
        } else {
          result.nonResourceAttributes_ = nonResourceAttributesBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec other) {
        if (other == io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec.getDefaultInstance()) return this;
        if (other.hasResourceAttributes()) {
          mergeResourceAttributes(other.getResourceAttributes());
        }
        if (other.hasNonResourceAttributes()) {
          mergeNonResourceAttributes(other.getNonResourceAttributes());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private io.kubernetes.client.proto.V1Authorization.ResourceAttributes resourceAttributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.ResourceAttributes, io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder> resourceAttributesBuilder_;
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public boolean hasResourceAttributes() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.ResourceAttributes getResourceAttributes() {
        if (resourceAttributesBuilder_ == null) {
          return resourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance() : resourceAttributes_;
        } else {
          return resourceAttributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public Builder setResourceAttributes(io.kubernetes.client.proto.V1Authorization.ResourceAttributes value) {
        if (resourceAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          resourceAttributes_ = value;
          onChanged();
        } else {
          resourceAttributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public Builder setResourceAttributes(
          io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder builderForValue) {
        if (resourceAttributesBuilder_ == null) {
          resourceAttributes_ = builderForValue.build();
          onChanged();
        } else {
          resourceAttributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public Builder mergeResourceAttributes(io.kubernetes.client.proto.V1Authorization.ResourceAttributes value) {
        if (resourceAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              resourceAttributes_ != null &&
              resourceAttributes_ != io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance()) {
            resourceAttributes_ =
              io.kubernetes.client.proto.V1Authorization.ResourceAttributes.newBuilder(resourceAttributes_).mergeFrom(value).buildPartial();
          } else {
            resourceAttributes_ = value;
          }
          onChanged();
        } else {
          resourceAttributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public Builder clearResourceAttributes() {
        if (resourceAttributesBuilder_ == null) {
          resourceAttributes_ = null;
          onChanged();
        } else {
          resourceAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder getResourceAttributesBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getResourceAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder getResourceAttributesOrBuilder() {
        if (resourceAttributesBuilder_ != null) {
          return resourceAttributesBuilder_.getMessageOrBuilder();
        } else {
          return resourceAttributes_ == null ?
              io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance() : resourceAttributes_;
        }
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.ResourceAttributes, io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder> 
          getResourceAttributesFieldBuilder() {
        if (resourceAttributesBuilder_ == null) {
          resourceAttributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.ResourceAttributes, io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder>(
                  getResourceAttributes(),
                  getParentForChildren(),
                  isClean());
          resourceAttributes_ = null;
        }
        return resourceAttributesBuilder_;
      }

      private io.kubernetes.client.proto.V1Authorization.NonResourceAttributes nonResourceAttributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.NonResourceAttributes, io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder> nonResourceAttributesBuilder_;
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public boolean hasNonResourceAttributes() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.NonResourceAttributes getNonResourceAttributes() {
        if (nonResourceAttributesBuilder_ == null) {
          return nonResourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance() : nonResourceAttributes_;
        } else {
          return nonResourceAttributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public Builder setNonResourceAttributes(io.kubernetes.client.proto.V1Authorization.NonResourceAttributes value) {
        if (nonResourceAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          nonResourceAttributes_ = value;
          onChanged();
        } else {
          nonResourceAttributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public Builder setNonResourceAttributes(
          io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder builderForValue) {
        if (nonResourceAttributesBuilder_ == null) {
          nonResourceAttributes_ = builderForValue.build();
          onChanged();
        } else {
          nonResourceAttributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public Builder mergeNonResourceAttributes(io.kubernetes.client.proto.V1Authorization.NonResourceAttributes value) {
        if (nonResourceAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              nonResourceAttributes_ != null &&
              nonResourceAttributes_ != io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance()) {
            nonResourceAttributes_ =
              io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.newBuilder(nonResourceAttributes_).mergeFrom(value).buildPartial();
          } else {
            nonResourceAttributes_ = value;
          }
          onChanged();
        } else {
          nonResourceAttributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public Builder clearNonResourceAttributes() {
        if (nonResourceAttributesBuilder_ == null) {
          nonResourceAttributes_ = null;
          onChanged();
        } else {
          nonResourceAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder getNonResourceAttributesBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getNonResourceAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder getNonResourceAttributesOrBuilder() {
        if (nonResourceAttributesBuilder_ != null) {
          return nonResourceAttributesBuilder_.getMessageOrBuilder();
        } else {
          return nonResourceAttributes_ == null ?
              io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance() : nonResourceAttributes_;
        }
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.NonResourceAttributes, io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder> 
          getNonResourceAttributesFieldBuilder() {
        if (nonResourceAttributesBuilder_ == null) {
          nonResourceAttributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.NonResourceAttributes, io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder>(
                  getNonResourceAttributes(),
                  getParentForChildren(),
                  isClean());
          nonResourceAttributes_ = null;
        }
        return nonResourceAttributesBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.SelfSubjectAccessReviewSpec)
    private static final io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec();
    }

    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SelfSubjectAccessReviewSpec>
        PARSER = new com.google.protobuf.AbstractParser<SelfSubjectAccessReviewSpec>() {
      public SelfSubjectAccessReviewSpec parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new SelfSubjectAccessReviewSpec(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SelfSubjectAccessReviewSpec> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SelfSubjectAccessReviewSpec> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.SelfSubjectAccessReviewSpec getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SelfSubjectRulesReviewOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.SelfSubjectRulesReview)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    boolean hasMetadata();
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    io.kubernetes.client.proto.Meta.ObjectMeta getMetadata();
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder();

    /**
     * <pre>
     * Spec holds information about the request being evaluated.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
     */
    boolean hasSpec();
    /**
     * <pre>
     * Spec holds information about the request being evaluated.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec getSpec();
    /**
     * <pre>
     * Spec holds information about the request being evaluated.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpecOrBuilder getSpecOrBuilder();

    /**
     * <pre>
     * Status is filled in by the server and indicates the set of actions a user can perform.
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
     */
    boolean hasStatus();
    /**
     * <pre>
     * Status is filled in by the server and indicates the set of actions a user can perform.
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus getStatus();
    /**
     * <pre>
     * Status is filled in by the server and indicates the set of actions a user can perform.
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatusOrBuilder getStatusOrBuilder();
  }
  /**
   * <pre>
   * SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace.
   * The returned list of actions may be incomplete depending on the server's authorization mode,
   * and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions,
   * or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to
   * drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns.
   * SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.SelfSubjectRulesReview}
   */
  public  static final class SelfSubjectRulesReview extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.SelfSubjectRulesReview)
      SelfSubjectRulesReviewOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SelfSubjectRulesReview.newBuilder() to construct.
    private SelfSubjectRulesReview(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SelfSubjectRulesReview() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SelfSubjectRulesReview(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              io.kubernetes.client.proto.Meta.ObjectMeta.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = metadata_.toBuilder();
              }
              metadata_ = input.readMessage(io.kubernetes.client.proto.Meta.ObjectMeta.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(metadata_);
                metadata_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = spec_.toBuilder();
              }
              spec_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(spec_);
                spec_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReview_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReview_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview.class, io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview.Builder.class);
    }

    private int bitField0_;
    public static final int METADATA_FIELD_NUMBER = 1;
    private io.kubernetes.client.proto.Meta.ObjectMeta metadata_;
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public boolean hasMetadata() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public io.kubernetes.client.proto.Meta.ObjectMeta getMetadata() {
      return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
    }
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder() {
      return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
    }

    public static final int SPEC_FIELD_NUMBER = 2;
    private io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec spec_;
    /**
     * <pre>
     * Spec holds information about the request being evaluated.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
     */
    public boolean hasSpec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Spec holds information about the request being evaluated.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec getSpec() {
      return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.getDefaultInstance() : spec_;
    }
    /**
     * <pre>
     * Spec holds information about the request being evaluated.
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpecOrBuilder getSpecOrBuilder() {
      return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.getDefaultInstance() : spec_;
    }

    public static final int STATUS_FIELD_NUMBER = 3;
    private io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus status_;
    /**
     * <pre>
     * Status is filled in by the server and indicates the set of actions a user can perform.
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
     */
    public boolean hasStatus() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Status is filled in by the server and indicates the set of actions a user can perform.
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus getStatus() {
      return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.getDefaultInstance() : status_;
    }
    /**
     * <pre>
     * Status is filled in by the server and indicates the set of actions a user can perform.
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatusOrBuilder getStatusOrBuilder() {
      return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.getDefaultInstance() : status_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, getMetadata());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, getSpec());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, getStatus());
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getMetadata());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getSpec());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getStatus());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview other = (io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview) obj;

      boolean result = true;
      result = result && (hasMetadata() == other.hasMetadata());
      if (hasMetadata()) {
        result = result && getMetadata()
            .equals(other.getMetadata());
      }
      result = result && (hasSpec() == other.hasSpec());
      if (hasSpec()) {
        result = result && getSpec()
            .equals(other.getSpec());
      }
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasMetadata()) {
        hash = (37 * hash) + METADATA_FIELD_NUMBER;
        hash = (53 * hash) + getMetadata().hashCode();
      }
      if (hasSpec()) {
        hash = (37 * hash) + SPEC_FIELD_NUMBER;
        hash = (53 * hash) + getSpec().hashCode();
      }
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getStatus().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace.
     * The returned list of actions may be incomplete depending on the server's authorization mode,
     * and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions,
     * or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to
     * drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns.
     * SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.SelfSubjectRulesReview}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.SelfSubjectRulesReview)
        io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReview_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReview_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview.class, io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMetadataFieldBuilder();
          getSpecFieldBuilder();
          getStatusFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (metadataBuilder_ == null) {
          metadata_ = null;
        } else {
          metadataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (specBuilder_ == null) {
          spec_ = null;
        } else {
          specBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          statusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReview_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview build() {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview buildPartial() {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview result = new io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (metadataBuilder_ == null) {
          result.metadata_ = metadata_;
        } else {
          result.metadata_ = metadataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (specBuilder_ == null) {
          result.spec_ = spec_;
        } else {
          result.spec_ = specBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview other) {
        if (other == io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview.getDefaultInstance()) return this;
        if (other.hasMetadata()) {
          mergeMetadata(other.getMetadata());
        }
        if (other.hasSpec()) {
          mergeSpec(other.getSpec());
        }
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private io.kubernetes.client.proto.Meta.ObjectMeta metadata_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder> metadataBuilder_;
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public boolean hasMetadata() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMeta getMetadata() {
        if (metadataBuilder_ == null) {
          return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
        } else {
          return metadataBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder setMetadata(io.kubernetes.client.proto.Meta.ObjectMeta value) {
        if (metadataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          metadata_ = value;
          onChanged();
        } else {
          metadataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder setMetadata(
          io.kubernetes.client.proto.Meta.ObjectMeta.Builder builderForValue) {
        if (metadataBuilder_ == null) {
          metadata_ = builderForValue.build();
          onChanged();
        } else {
          metadataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder mergeMetadata(io.kubernetes.client.proto.Meta.ObjectMeta value) {
        if (metadataBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              metadata_ != null &&
              metadata_ != io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance()) {
            metadata_ =
              io.kubernetes.client.proto.Meta.ObjectMeta.newBuilder(metadata_).mergeFrom(value).buildPartial();
          } else {
            metadata_ = value;
          }
          onChanged();
        } else {
          metadataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder clearMetadata() {
        if (metadataBuilder_ == null) {
          metadata_ = null;
          onChanged();
        } else {
          metadataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMeta.Builder getMetadataBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getMetadataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder() {
        if (metadataBuilder_ != null) {
          return metadataBuilder_.getMessageOrBuilder();
        } else {
          return metadata_ == null ?
              io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
        }
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder> 
          getMetadataFieldBuilder() {
        if (metadataBuilder_ == null) {
          metadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder>(
                  getMetadata(),
                  getParentForChildren(),
                  isClean());
          metadata_ = null;
        }
        return metadataBuilder_;
      }

      private io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec spec_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec, io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpecOrBuilder> specBuilder_;
      /**
       * <pre>
       * Spec holds information about the request being evaluated.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
       */
      public boolean hasSpec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec getSpec() {
        if (specBuilder_ == null) {
          return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.getDefaultInstance() : spec_;
        } else {
          return specBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
       */
      public Builder setSpec(io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec value) {
        if (specBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          spec_ = value;
          onChanged();
        } else {
          specBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
       */
      public Builder setSpec(
          io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.Builder builderForValue) {
        if (specBuilder_ == null) {
          spec_ = builderForValue.build();
          onChanged();
        } else {
          specBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
       */
      public Builder mergeSpec(io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec value) {
        if (specBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              spec_ != null &&
              spec_ != io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.getDefaultInstance()) {
            spec_ =
              io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.newBuilder(spec_).mergeFrom(value).buildPartial();
          } else {
            spec_ = value;
          }
          onChanged();
        } else {
          specBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
       */
      public Builder clearSpec() {
        if (specBuilder_ == null) {
          spec_ = null;
          onChanged();
        } else {
          specBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.Builder getSpecBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getSpecFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpecOrBuilder getSpecOrBuilder() {
        if (specBuilder_ != null) {
          return specBuilder_.getMessageOrBuilder();
        } else {
          return spec_ == null ?
              io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.getDefaultInstance() : spec_;
        }
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated.
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec spec = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec, io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpecOrBuilder> 
          getSpecFieldBuilder() {
        if (specBuilder_ == null) {
          specBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec, io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpecOrBuilder>(
                  getSpec(),
                  getParentForChildren(),
                  isClean());
          spec_ = null;
        }
        return specBuilder_;
      }

      private io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatusOrBuilder> statusBuilder_;
      /**
       * <pre>
       * Status is filled in by the server and indicates the set of actions a user can perform.
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
       */
      public boolean hasStatus() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates the set of actions a user can perform.
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates the set of actions a user can perform.
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
       */
      public Builder setStatus(io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates the set of actions a user can perform.
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
       */
      public Builder setStatus(
          io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates the set of actions a user can perform.
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
       */
      public Builder mergeStatus(io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus value) {
        if (statusBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              status_ != null &&
              status_ != io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.getDefaultInstance()) {
            status_ =
              io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates the set of actions a user can perform.
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          statusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates the set of actions a user can perform.
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.Builder getStatusBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates the set of actions a user can perform.
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates the set of actions a user can perform.
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectRulesReviewStatus status = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.SelfSubjectRulesReview)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.SelfSubjectRulesReview)
    private static final io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview();
    }

    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SelfSubjectRulesReview>
        PARSER = new com.google.protobuf.AbstractParser<SelfSubjectRulesReview>() {
      public SelfSubjectRulesReview parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new SelfSubjectRulesReview(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SelfSubjectRulesReview> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SelfSubjectRulesReview> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReview getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SelfSubjectRulesReviewSpecOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Namespace to evaluate rules for. Required.
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    boolean hasNamespace();
    /**
     * <pre>
     * Namespace to evaluate rules for. Required.
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    java.lang.String getNamespace();
    /**
     * <pre>
     * Namespace to evaluate rules for. Required.
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    com.google.protobuf.ByteString
        getNamespaceBytes();
  }
  /**
   * Protobuf type {@code k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec}
   */
  public  static final class SelfSubjectRulesReviewSpec extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec)
      SelfSubjectRulesReviewSpecOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SelfSubjectRulesReviewSpec.newBuilder() to construct.
    private SelfSubjectRulesReviewSpec(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SelfSubjectRulesReviewSpec() {
      namespace_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SelfSubjectRulesReviewSpec(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              namespace_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReviewSpec_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReviewSpec_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.class, io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.Builder.class);
    }

    private int bitField0_;
    public static final int NAMESPACE_FIELD_NUMBER = 1;
    private volatile java.lang.Object namespace_;
    /**
     * <pre>
     * Namespace to evaluate rules for. Required.
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    public boolean hasNamespace() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Namespace to evaluate rules for. Required.
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    public java.lang.String getNamespace() {
      java.lang.Object ref = namespace_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          namespace_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Namespace to evaluate rules for. Required.
     * </pre>
     *
     * <code>optional string namespace = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNamespaceBytes() {
      java.lang.Object ref = namespace_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        namespace_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, namespace_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, namespace_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec other = (io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec) obj;

      boolean result = true;
      result = result && (hasNamespace() == other.hasNamespace());
      if (hasNamespace()) {
        result = result && getNamespace()
            .equals(other.getNamespace());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasNamespace()) {
        hash = (37 * hash) + NAMESPACE_FIELD_NUMBER;
        hash = (53 * hash) + getNamespace().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec)
        io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpecOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReviewSpec_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReviewSpec_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.class, io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        namespace_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReviewSpec_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec build() {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec buildPartial() {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec result = new io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.namespace_ = namespace_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec other) {
        if (other == io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec.getDefaultInstance()) return this;
        if (other.hasNamespace()) {
          bitField0_ |= 0x00000001;
          namespace_ = other.namespace_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object namespace_ = "";
      /**
       * <pre>
       * Namespace to evaluate rules for. Required.
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public boolean hasNamespace() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Namespace to evaluate rules for. Required.
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public java.lang.String getNamespace() {
        java.lang.Object ref = namespace_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            namespace_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Namespace to evaluate rules for. Required.
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNamespaceBytes() {
        java.lang.Object ref = namespace_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          namespace_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Namespace to evaluate rules for. Required.
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public Builder setNamespace(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        namespace_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Namespace to evaluate rules for. Required.
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public Builder clearNamespace() {
        bitField0_ = (bitField0_ & ~0x00000001);
        namespace_ = getDefaultInstance().getNamespace();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Namespace to evaluate rules for. Required.
       * </pre>
       *
       * <code>optional string namespace = 1;</code>
       */
      public Builder setNamespaceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        namespace_ = value;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.SelfSubjectRulesReviewSpec)
    private static final io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec();
    }

    public static io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SelfSubjectRulesReviewSpec>
        PARSER = new com.google.protobuf.AbstractParser<SelfSubjectRulesReviewSpec>() {
      public SelfSubjectRulesReviewSpec parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new SelfSubjectRulesReviewSpec(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SelfSubjectRulesReviewSpec> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SelfSubjectRulesReviewSpec> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.SelfSubjectRulesReviewSpec getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SubjectAccessReviewOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.SubjectAccessReview)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    boolean hasMetadata();
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    io.kubernetes.client.proto.Meta.ObjectMeta getMetadata();
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder();

    /**
     * <pre>
     * Spec holds information about the request being evaluated
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    boolean hasSpec();
    /**
     * <pre>
     * Spec holds information about the request being evaluated
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec getSpec();
    /**
     * <pre>
     * Spec holds information about the request being evaluated
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder getSpecOrBuilder();

    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    boolean hasStatus();
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getStatus();
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder getStatusOrBuilder();
  }
  /**
   * <pre>
   * SubjectAccessReview checks whether or not a user or group can perform an action.
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.SubjectAccessReview}
   */
  public  static final class SubjectAccessReview extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.SubjectAccessReview)
      SubjectAccessReviewOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SubjectAccessReview.newBuilder() to construct.
    private SubjectAccessReview(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SubjectAccessReview() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SubjectAccessReview(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              io.kubernetes.client.proto.Meta.ObjectMeta.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = metadata_.toBuilder();
              }
              metadata_ = input.readMessage(io.kubernetes.client.proto.Meta.ObjectMeta.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(metadata_);
                metadata_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = spec_.toBuilder();
              }
              spec_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(spec_);
                spec_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReview_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReview_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReview.class, io.kubernetes.client.proto.V1Authorization.SubjectAccessReview.Builder.class);
    }

    private int bitField0_;
    public static final int METADATA_FIELD_NUMBER = 1;
    private io.kubernetes.client.proto.Meta.ObjectMeta metadata_;
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public boolean hasMetadata() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public io.kubernetes.client.proto.Meta.ObjectMeta getMetadata() {
      return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
    }
    /**
     * <pre>
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
     */
    public io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder() {
      return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
    }

    public static final int SPEC_FIELD_NUMBER = 2;
    private io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec spec_;
    /**
     * <pre>
     * Spec holds information about the request being evaluated
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    public boolean hasSpec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Spec holds information about the request being evaluated
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec getSpec() {
      return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance() : spec_;
    }
    /**
     * <pre>
     * Spec holds information about the request being evaluated
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder getSpecOrBuilder() {
      return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance() : spec_;
    }

    public static final int STATUS_FIELD_NUMBER = 3;
    private io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus status_;
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    public boolean hasStatus() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getStatus() {
      return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
    }
    /**
     * <pre>
     * Status is filled in by the server and indicates whether the request is allowed or not
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder getStatusOrBuilder() {
      return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, getMetadata());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, getSpec());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, getStatus());
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getMetadata());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getSpec());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getStatus());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.SubjectAccessReview)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.SubjectAccessReview other = (io.kubernetes.client.proto.V1Authorization.SubjectAccessReview) obj;

      boolean result = true;
      result = result && (hasMetadata() == other.hasMetadata());
      if (hasMetadata()) {
        result = result && getMetadata()
            .equals(other.getMetadata());
      }
      result = result && (hasSpec() == other.hasSpec());
      if (hasSpec()) {
        result = result && getSpec()
            .equals(other.getSpec());
      }
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasMetadata()) {
        hash = (37 * hash) + METADATA_FIELD_NUMBER;
        hash = (53 * hash) + getMetadata().hashCode();
      }
      if (hasSpec()) {
        hash = (37 * hash) + SPEC_FIELD_NUMBER;
        hash = (53 * hash) + getSpec().hashCode();
      }
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getStatus().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.SubjectAccessReview prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * SubjectAccessReview checks whether or not a user or group can perform an action.
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.SubjectAccessReview}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.SubjectAccessReview)
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReview_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReview_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.SubjectAccessReview.class, io.kubernetes.client.proto.V1Authorization.SubjectAccessReview.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.SubjectAccessReview.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMetadataFieldBuilder();
          getSpecFieldBuilder();
          getStatusFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (metadataBuilder_ == null) {
          metadata_ = null;
        } else {
          metadataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (specBuilder_ == null) {
          spec_ = null;
        } else {
          specBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          statusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReview_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReview getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.SubjectAccessReview.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReview build() {
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReview result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReview buildPartial() {
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReview result = new io.kubernetes.client.proto.V1Authorization.SubjectAccessReview(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (metadataBuilder_ == null) {
          result.metadata_ = metadata_;
        } else {
          result.metadata_ = metadataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (specBuilder_ == null) {
          result.spec_ = spec_;
        } else {
          result.spec_ = specBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.SubjectAccessReview) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.SubjectAccessReview)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.SubjectAccessReview other) {
        if (other == io.kubernetes.client.proto.V1Authorization.SubjectAccessReview.getDefaultInstance()) return this;
        if (other.hasMetadata()) {
          mergeMetadata(other.getMetadata());
        }
        if (other.hasSpec()) {
          mergeSpec(other.getSpec());
        }
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReview parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.SubjectAccessReview) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private io.kubernetes.client.proto.Meta.ObjectMeta metadata_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder> metadataBuilder_;
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public boolean hasMetadata() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMeta getMetadata() {
        if (metadataBuilder_ == null) {
          return metadata_ == null ? io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
        } else {
          return metadataBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder setMetadata(io.kubernetes.client.proto.Meta.ObjectMeta value) {
        if (metadataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          metadata_ = value;
          onChanged();
        } else {
          metadataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder setMetadata(
          io.kubernetes.client.proto.Meta.ObjectMeta.Builder builderForValue) {
        if (metadataBuilder_ == null) {
          metadata_ = builderForValue.build();
          onChanged();
        } else {
          metadataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder mergeMetadata(io.kubernetes.client.proto.Meta.ObjectMeta value) {
        if (metadataBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              metadata_ != null &&
              metadata_ != io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance()) {
            metadata_ =
              io.kubernetes.client.proto.Meta.ObjectMeta.newBuilder(metadata_).mergeFrom(value).buildPartial();
          } else {
            metadata_ = value;
          }
          onChanged();
        } else {
          metadataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public Builder clearMetadata() {
        if (metadataBuilder_ == null) {
          metadata_ = null;
          onChanged();
        } else {
          metadataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMeta.Builder getMetadataBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getMetadataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      public io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder getMetadataOrBuilder() {
        if (metadataBuilder_ != null) {
          return metadataBuilder_.getMessageOrBuilder();
        } else {
          return metadata_ == null ?
              io.kubernetes.client.proto.Meta.ObjectMeta.getDefaultInstance() : metadata_;
        }
      }
      /**
       * <pre>
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder> 
          getMetadataFieldBuilder() {
        if (metadataBuilder_ == null) {
          metadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.Meta.ObjectMeta, io.kubernetes.client.proto.Meta.ObjectMeta.Builder, io.kubernetes.client.proto.Meta.ObjectMetaOrBuilder>(
                  getMetadata(),
                  getParentForChildren(),
                  isClean());
          metadata_ = null;
        }
        return metadataBuilder_;
      }

      private io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec spec_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder> specBuilder_;
      /**
       * <pre>
       * Spec holds information about the request being evaluated
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public boolean hasSpec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec getSpec() {
        if (specBuilder_ == null) {
          return spec_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance() : spec_;
        } else {
          return specBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder setSpec(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec value) {
        if (specBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          spec_ = value;
          onChanged();
        } else {
          specBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder setSpec(
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder builderForValue) {
        if (specBuilder_ == null) {
          spec_ = builderForValue.build();
          onChanged();
        } else {
          specBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder mergeSpec(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec value) {
        if (specBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              spec_ != null &&
              spec_ != io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance()) {
            spec_ =
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.newBuilder(spec_).mergeFrom(value).buildPartial();
          } else {
            spec_ = value;
          }
          onChanged();
        } else {
          specBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public Builder clearSpec() {
        if (specBuilder_ == null) {
          spec_ = null;
          onChanged();
        } else {
          specBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder getSpecBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getSpecFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder getSpecOrBuilder() {
        if (specBuilder_ != null) {
          return specBuilder_.getMessageOrBuilder();
        } else {
          return spec_ == null ?
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance() : spec_;
        }
      }
      /**
       * <pre>
       * Spec holds information about the request being evaluated
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewSpec spec = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder> 
          getSpecFieldBuilder() {
        if (specBuilder_ == null) {
          specBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder>(
                  getSpec(),
                  getParentForChildren(),
                  isClean());
          spec_ = null;
        }
        return specBuilder_;
      }

      private io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder> statusBuilder_;
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public boolean hasStatus() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder setStatus(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder setStatus(
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder mergeStatus(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus value) {
        if (statusBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              status_ != null &&
              status_ != io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance()) {
            status_ =
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          statusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder getStatusBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <pre>
       * Status is filled in by the server and indicates whether the request is allowed or not
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.SubjectAccessReviewStatus status = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.SubjectAccessReview)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.SubjectAccessReview)
    private static final io.kubernetes.client.proto.V1Authorization.SubjectAccessReview DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.SubjectAccessReview();
    }

    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReview getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SubjectAccessReview>
        PARSER = new com.google.protobuf.AbstractParser<SubjectAccessReview>() {
      public SubjectAccessReview parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new SubjectAccessReview(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SubjectAccessReview> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SubjectAccessReview> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReview getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SubjectAccessReviewSpecOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.SubjectAccessReviewSpec)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    boolean hasResourceAttributes();
    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    io.kubernetes.client.proto.V1Authorization.ResourceAttributes getResourceAttributes();
    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder getResourceAttributesOrBuilder();

    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    boolean hasNonResourceAttributes();
    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.NonResourceAttributes getNonResourceAttributes();
    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder getNonResourceAttributesOrBuilder();

    /**
     * <pre>
     * User is the user you're testing for.
     * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
     * +optional
     * </pre>
     *
     * <code>optional string user = 3;</code>
     */
    boolean hasUser();
    /**
     * <pre>
     * User is the user you're testing for.
     * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
     * +optional
     * </pre>
     *
     * <code>optional string user = 3;</code>
     */
    java.lang.String getUser();
    /**
     * <pre>
     * User is the user you're testing for.
     * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
     * +optional
     * </pre>
     *
     * <code>optional string user = 3;</code>
     */
    com.google.protobuf.ByteString
        getUserBytes();

    /**
     * <pre>
     * Groups is the groups you're testing for.
     * +optional
     * </pre>
     *
     * <code>repeated string groups = 4;</code>
     */
    java.util.List<java.lang.String>
        getGroupsList();
    /**
     * <pre>
     * Groups is the groups you're testing for.
     * +optional
     * </pre>
     *
     * <code>repeated string groups = 4;</code>
     */
    int getGroupsCount();
    /**
     * <pre>
     * Groups is the groups you're testing for.
     * +optional
     * </pre>
     *
     * <code>repeated string groups = 4;</code>
     */
    java.lang.String getGroups(int index);
    /**
     * <pre>
     * Groups is the groups you're testing for.
     * +optional
     * </pre>
     *
     * <code>repeated string groups = 4;</code>
     */
    com.google.protobuf.ByteString
        getGroupsBytes(int index);

    /**
     * <pre>
     * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
     * it needs a reflection here.
     * +optional
     * </pre>
     *
     * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
     */
    int getExtraCount();
    /**
     * <pre>
     * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
     * it needs a reflection here.
     * +optional
     * </pre>
     *
     * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
     */
    boolean containsExtra(
        java.lang.String key);
    /**
     * Use {@link #getExtraMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue>
    getExtra();
    /**
     * <pre>
     * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
     * it needs a reflection here.
     * +optional
     * </pre>
     *
     * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
     */
    java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue>
    getExtraMap();
    /**
     * <pre>
     * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
     * it needs a reflection here.
     * +optional
     * </pre>
     *
     * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
     */

    io.kubernetes.client.proto.V1Authorization.ExtraValue getExtraOrDefault(
        java.lang.String key,
        io.kubernetes.client.proto.V1Authorization.ExtraValue defaultValue);
    /**
     * <pre>
     * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
     * it needs a reflection here.
     * +optional
     * </pre>
     *
     * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
     */

    io.kubernetes.client.proto.V1Authorization.ExtraValue getExtraOrThrow(
        java.lang.String key);

    /**
     * <pre>
     * UID information about the requesting user.
     * +optional
     * </pre>
     *
     * <code>optional string uid = 6;</code>
     */
    boolean hasUid();
    /**
     * <pre>
     * UID information about the requesting user.
     * +optional
     * </pre>
     *
     * <code>optional string uid = 6;</code>
     */
    java.lang.String getUid();
    /**
     * <pre>
     * UID information about the requesting user.
     * +optional
     * </pre>
     *
     * <code>optional string uid = 6;</code>
     */
    com.google.protobuf.ByteString
        getUidBytes();
  }
  /**
   * <pre>
   * SubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes
   * and NonResourceAuthorizationAttributes must be set
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.SubjectAccessReviewSpec}
   */
  public  static final class SubjectAccessReviewSpec extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.SubjectAccessReviewSpec)
      SubjectAccessReviewSpecOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SubjectAccessReviewSpec.newBuilder() to construct.
    private SubjectAccessReviewSpec(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SubjectAccessReviewSpec() {
      user_ = "";
      groups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      uid_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SubjectAccessReviewSpec(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = resourceAttributes_.toBuilder();
              }
              resourceAttributes_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.ResourceAttributes.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(resourceAttributes_);
                resourceAttributes_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = nonResourceAttributes_.toBuilder();
              }
              nonResourceAttributes_ = input.readMessage(io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(nonResourceAttributes_);
                nonResourceAttributes_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              user_ = bs;
              break;
            }
            case 34: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                groups_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000008;
              }
              groups_.add(bs);
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                extra_ = com.google.protobuf.MapField.newMapField(
                    ExtraDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000010;
              }
              com.google.protobuf.MapEntry<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue>
              extra__ = input.readMessage(
                  ExtraDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              extra_.getMutableMap().put(
                  extra__.getKey(), extra__.getValue());
              break;
            }
            case 50: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000008;
              uid_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          groups_ = groups_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 5:
          return internalGetExtra();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.class, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder.class);
    }

    private int bitField0_;
    public static final int RESOURCEATTRIBUTES_FIELD_NUMBER = 1;
    private io.kubernetes.client.proto.V1Authorization.ResourceAttributes resourceAttributes_;
    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    public boolean hasResourceAttributes() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.ResourceAttributes getResourceAttributes() {
      return resourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance() : resourceAttributes_;
    }
    /**
     * <pre>
     * ResourceAuthorizationAttributes describes information for a resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder getResourceAttributesOrBuilder() {
      return resourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance() : resourceAttributes_;
    }

    public static final int NONRESOURCEATTRIBUTES_FIELD_NUMBER = 2;
    private io.kubernetes.client.proto.V1Authorization.NonResourceAttributes nonResourceAttributes_;
    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    public boolean hasNonResourceAttributes() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.NonResourceAttributes getNonResourceAttributes() {
      return nonResourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance() : nonResourceAttributes_;
    }
    /**
     * <pre>
     * NonResourceAttributes describes information for a non-resource access request
     * +optional
     * </pre>
     *
     * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder getNonResourceAttributesOrBuilder() {
      return nonResourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance() : nonResourceAttributes_;
    }

    public static final int USER_FIELD_NUMBER = 3;
    private volatile java.lang.Object user_;
    /**
     * <pre>
     * User is the user you're testing for.
     * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
     * +optional
     * </pre>
     *
     * <code>optional string user = 3;</code>
     */
    public boolean hasUser() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * User is the user you're testing for.
     * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
     * +optional
     * </pre>
     *
     * <code>optional string user = 3;</code>
     */
    public java.lang.String getUser() {
      java.lang.Object ref = user_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          user_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * User is the user you're testing for.
     * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
     * +optional
     * </pre>
     *
     * <code>optional string user = 3;</code>
     */
    public com.google.protobuf.ByteString
        getUserBytes() {
      java.lang.Object ref = user_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        user_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GROUPS_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList groups_;
    /**
     * <pre>
     * Groups is the groups you're testing for.
     * +optional
     * </pre>
     *
     * <code>repeated string groups = 4;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getGroupsList() {
      return groups_;
    }
    /**
     * <pre>
     * Groups is the groups you're testing for.
     * +optional
     * </pre>
     *
     * <code>repeated string groups = 4;</code>
     */
    public int getGroupsCount() {
      return groups_.size();
    }
    /**
     * <pre>
     * Groups is the groups you're testing for.
     * +optional
     * </pre>
     *
     * <code>repeated string groups = 4;</code>
     */
    public java.lang.String getGroups(int index) {
      return groups_.get(index);
    }
    /**
     * <pre>
     * Groups is the groups you're testing for.
     * +optional
     * </pre>
     *
     * <code>repeated string groups = 4;</code>
     */
    public com.google.protobuf.ByteString
        getGroupsBytes(int index) {
      return groups_.getByteString(index);
    }

    public static final int EXTRA_FIELD_NUMBER = 5;
    private static final class ExtraDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue>newDefaultInstance(
                  io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_ExtraEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  io.kubernetes.client.proto.V1Authorization.ExtraValue.getDefaultInstance());
    }
    private com.google.protobuf.MapField<
        java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> extra_;
    private com.google.protobuf.MapField<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue>
    internalGetExtra() {
      if (extra_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            ExtraDefaultEntryHolder.defaultEntry);
      }
      return extra_;
    }

    public int getExtraCount() {
      return internalGetExtra().getMap().size();
    }
    /**
     * <pre>
     * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
     * it needs a reflection here.
     * +optional
     * </pre>
     *
     * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
     */

    public boolean containsExtra(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetExtra().getMap().containsKey(key);
    }
    /**
     * Use {@link #getExtraMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> getExtra() {
      return getExtraMap();
    }
    /**
     * <pre>
     * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
     * it needs a reflection here.
     * +optional
     * </pre>
     *
     * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
     */

    public java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> getExtraMap() {
      return internalGetExtra().getMap();
    }
    /**
     * <pre>
     * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
     * it needs a reflection here.
     * +optional
     * </pre>
     *
     * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
     */

    public io.kubernetes.client.proto.V1Authorization.ExtraValue getExtraOrDefault(
        java.lang.String key,
        io.kubernetes.client.proto.V1Authorization.ExtraValue defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> map =
          internalGetExtra().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
     * it needs a reflection here.
     * +optional
     * </pre>
     *
     * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
     */

    public io.kubernetes.client.proto.V1Authorization.ExtraValue getExtraOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> map =
          internalGetExtra().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    public static final int UID_FIELD_NUMBER = 6;
    private volatile java.lang.Object uid_;
    /**
     * <pre>
     * UID information about the requesting user.
     * +optional
     * </pre>
     *
     * <code>optional string uid = 6;</code>
     */
    public boolean hasUid() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * UID information about the requesting user.
     * +optional
     * </pre>
     *
     * <code>optional string uid = 6;</code>
     */
    public java.lang.String getUid() {
      java.lang.Object ref = uid_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          uid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * UID information about the requesting user.
     * +optional
     * </pre>
     *
     * <code>optional string uid = 6;</code>
     */
    public com.google.protobuf.ByteString
        getUidBytes() {
      java.lang.Object ref = uid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        uid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, getResourceAttributes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, getNonResourceAttributes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, user_);
      }
      for (int i = 0; i < groups_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, groups_.getRaw(i));
      }
      com.google.protobuf.GeneratedMessageV3
        .serializeStringMapTo(
          output,
          internalGetExtra(),
          ExtraDefaultEntryHolder.defaultEntry,
          5);
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, uid_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getResourceAttributes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getNonResourceAttributes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, user_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < groups_.size(); i++) {
          dataSize += computeStringSizeNoTag(groups_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getGroupsList().size();
      }
      for (java.util.Map.Entry<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> entry
           : internalGetExtra().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue>
        extra__ = ExtraDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(5, extra__);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, uid_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec other = (io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec) obj;

      boolean result = true;
      result = result && (hasResourceAttributes() == other.hasResourceAttributes());
      if (hasResourceAttributes()) {
        result = result && getResourceAttributes()
            .equals(other.getResourceAttributes());
      }
      result = result && (hasNonResourceAttributes() == other.hasNonResourceAttributes());
      if (hasNonResourceAttributes()) {
        result = result && getNonResourceAttributes()
            .equals(other.getNonResourceAttributes());
      }
      result = result && (hasUser() == other.hasUser());
      if (hasUser()) {
        result = result && getUser()
            .equals(other.getUser());
      }
      result = result && getGroupsList()
          .equals(other.getGroupsList());
      result = result && internalGetExtra().equals(
          other.internalGetExtra());
      result = result && (hasUid() == other.hasUid());
      if (hasUid()) {
        result = result && getUid()
            .equals(other.getUid());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasResourceAttributes()) {
        hash = (37 * hash) + RESOURCEATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getResourceAttributes().hashCode();
      }
      if (hasNonResourceAttributes()) {
        hash = (37 * hash) + NONRESOURCEATTRIBUTES_FIELD_NUMBER;
        hash = (53 * hash) + getNonResourceAttributes().hashCode();
      }
      if (hasUser()) {
        hash = (37 * hash) + USER_FIELD_NUMBER;
        hash = (53 * hash) + getUser().hashCode();
      }
      if (getGroupsCount() > 0) {
        hash = (37 * hash) + GROUPS_FIELD_NUMBER;
        hash = (53 * hash) + getGroupsList().hashCode();
      }
      if (!internalGetExtra().getMap().isEmpty()) {
        hash = (37 * hash) + EXTRA_FIELD_NUMBER;
        hash = (53 * hash) + internalGetExtra().hashCode();
      }
      if (hasUid()) {
        hash = (37 * hash) + UID_FIELD_NUMBER;
        hash = (53 * hash) + getUid().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * SubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes
     * and NonResourceAuthorizationAttributes must be set
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.SubjectAccessReviewSpec}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.SubjectAccessReviewSpec)
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpecOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 5:
            return internalGetExtra();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 5:
            return internalGetMutableExtra();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.class, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getResourceAttributesFieldBuilder();
          getNonResourceAttributesFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (resourceAttributesBuilder_ == null) {
          resourceAttributes_ = null;
        } else {
          resourceAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (nonResourceAttributesBuilder_ == null) {
          nonResourceAttributes_ = null;
        } else {
          nonResourceAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        user_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        groups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        internalGetMutableExtra().clear();
        uid_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec build() {
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec buildPartial() {
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec result = new io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (resourceAttributesBuilder_ == null) {
          result.resourceAttributes_ = resourceAttributes_;
        } else {
          result.resourceAttributes_ = resourceAttributesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (nonResourceAttributesBuilder_ == null) {
          result.nonResourceAttributes_ = nonResourceAttributes_;
        } else {
          result.nonResourceAttributes_ = nonResourceAttributesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.user_ = user_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          groups_ = groups_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.groups_ = groups_;
        result.extra_ = internalGetExtra();
        result.extra_.makeImmutable();
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000008;
        }
        result.uid_ = uid_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec other) {
        if (other == io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec.getDefaultInstance()) return this;
        if (other.hasResourceAttributes()) {
          mergeResourceAttributes(other.getResourceAttributes());
        }
        if (other.hasNonResourceAttributes()) {
          mergeNonResourceAttributes(other.getNonResourceAttributes());
        }
        if (other.hasUser()) {
          bitField0_ |= 0x00000004;
          user_ = other.user_;
          onChanged();
        }
        if (!other.groups_.isEmpty()) {
          if (groups_.isEmpty()) {
            groups_ = other.groups_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureGroupsIsMutable();
            groups_.addAll(other.groups_);
          }
          onChanged();
        }
        internalGetMutableExtra().mergeFrom(
            other.internalGetExtra());
        if (other.hasUid()) {
          bitField0_ |= 0x00000020;
          uid_ = other.uid_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private io.kubernetes.client.proto.V1Authorization.ResourceAttributes resourceAttributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.ResourceAttributes, io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder> resourceAttributesBuilder_;
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public boolean hasResourceAttributes() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.ResourceAttributes getResourceAttributes() {
        if (resourceAttributesBuilder_ == null) {
          return resourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance() : resourceAttributes_;
        } else {
          return resourceAttributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public Builder setResourceAttributes(io.kubernetes.client.proto.V1Authorization.ResourceAttributes value) {
        if (resourceAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          resourceAttributes_ = value;
          onChanged();
        } else {
          resourceAttributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public Builder setResourceAttributes(
          io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder builderForValue) {
        if (resourceAttributesBuilder_ == null) {
          resourceAttributes_ = builderForValue.build();
          onChanged();
        } else {
          resourceAttributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public Builder mergeResourceAttributes(io.kubernetes.client.proto.V1Authorization.ResourceAttributes value) {
        if (resourceAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              resourceAttributes_ != null &&
              resourceAttributes_ != io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance()) {
            resourceAttributes_ =
              io.kubernetes.client.proto.V1Authorization.ResourceAttributes.newBuilder(resourceAttributes_).mergeFrom(value).buildPartial();
          } else {
            resourceAttributes_ = value;
          }
          onChanged();
        } else {
          resourceAttributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public Builder clearResourceAttributes() {
        if (resourceAttributesBuilder_ == null) {
          resourceAttributes_ = null;
          onChanged();
        } else {
          resourceAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder getResourceAttributesBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getResourceAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder getResourceAttributesOrBuilder() {
        if (resourceAttributesBuilder_ != null) {
          return resourceAttributesBuilder_.getMessageOrBuilder();
        } else {
          return resourceAttributes_ == null ?
              io.kubernetes.client.proto.V1Authorization.ResourceAttributes.getDefaultInstance() : resourceAttributes_;
        }
      }
      /**
       * <pre>
       * ResourceAuthorizationAttributes describes information for a resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.ResourceAttributes resourceAttributes = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.ResourceAttributes, io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder> 
          getResourceAttributesFieldBuilder() {
        if (resourceAttributesBuilder_ == null) {
          resourceAttributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.ResourceAttributes, io.kubernetes.client.proto.V1Authorization.ResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.ResourceAttributesOrBuilder>(
                  getResourceAttributes(),
                  getParentForChildren(),
                  isClean());
          resourceAttributes_ = null;
        }
        return resourceAttributesBuilder_;
      }

      private io.kubernetes.client.proto.V1Authorization.NonResourceAttributes nonResourceAttributes_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.NonResourceAttributes, io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder> nonResourceAttributesBuilder_;
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public boolean hasNonResourceAttributes() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.NonResourceAttributes getNonResourceAttributes() {
        if (nonResourceAttributesBuilder_ == null) {
          return nonResourceAttributes_ == null ? io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance() : nonResourceAttributes_;
        } else {
          return nonResourceAttributesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public Builder setNonResourceAttributes(io.kubernetes.client.proto.V1Authorization.NonResourceAttributes value) {
        if (nonResourceAttributesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          nonResourceAttributes_ = value;
          onChanged();
        } else {
          nonResourceAttributesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public Builder setNonResourceAttributes(
          io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder builderForValue) {
        if (nonResourceAttributesBuilder_ == null) {
          nonResourceAttributes_ = builderForValue.build();
          onChanged();
        } else {
          nonResourceAttributesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public Builder mergeNonResourceAttributes(io.kubernetes.client.proto.V1Authorization.NonResourceAttributes value) {
        if (nonResourceAttributesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              nonResourceAttributes_ != null &&
              nonResourceAttributes_ != io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance()) {
            nonResourceAttributes_ =
              io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.newBuilder(nonResourceAttributes_).mergeFrom(value).buildPartial();
          } else {
            nonResourceAttributes_ = value;
          }
          onChanged();
        } else {
          nonResourceAttributesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public Builder clearNonResourceAttributes() {
        if (nonResourceAttributesBuilder_ == null) {
          nonResourceAttributes_ = null;
          onChanged();
        } else {
          nonResourceAttributesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder getNonResourceAttributesBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getNonResourceAttributesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder getNonResourceAttributesOrBuilder() {
        if (nonResourceAttributesBuilder_ != null) {
          return nonResourceAttributesBuilder_.getMessageOrBuilder();
        } else {
          return nonResourceAttributes_ == null ?
              io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.getDefaultInstance() : nonResourceAttributes_;
        }
      }
      /**
       * <pre>
       * NonResourceAttributes describes information for a non-resource access request
       * +optional
       * </pre>
       *
       * <code>optional .k8s.io.api.authorization.v1.NonResourceAttributes nonResourceAttributes = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.NonResourceAttributes, io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder> 
          getNonResourceAttributesFieldBuilder() {
        if (nonResourceAttributesBuilder_ == null) {
          nonResourceAttributesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.NonResourceAttributes, io.kubernetes.client.proto.V1Authorization.NonResourceAttributes.Builder, io.kubernetes.client.proto.V1Authorization.NonResourceAttributesOrBuilder>(
                  getNonResourceAttributes(),
                  getParentForChildren(),
                  isClean());
          nonResourceAttributes_ = null;
        }
        return nonResourceAttributesBuilder_;
      }

      private java.lang.Object user_ = "";
      /**
       * <pre>
       * User is the user you're testing for.
       * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
       * +optional
       * </pre>
       *
       * <code>optional string user = 3;</code>
       */
      public boolean hasUser() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * User is the user you're testing for.
       * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
       * +optional
       * </pre>
       *
       * <code>optional string user = 3;</code>
       */
      public java.lang.String getUser() {
        java.lang.Object ref = user_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            user_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * User is the user you're testing for.
       * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
       * +optional
       * </pre>
       *
       * <code>optional string user = 3;</code>
       */
      public com.google.protobuf.ByteString
          getUserBytes() {
        java.lang.Object ref = user_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          user_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * User is the user you're testing for.
       * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
       * +optional
       * </pre>
       *
       * <code>optional string user = 3;</code>
       */
      public Builder setUser(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        user_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * User is the user you're testing for.
       * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
       * +optional
       * </pre>
       *
       * <code>optional string user = 3;</code>
       */
      public Builder clearUser() {
        bitField0_ = (bitField0_ & ~0x00000004);
        user_ = getDefaultInstance().getUser();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * User is the user you're testing for.
       * If you specify "User" but not "Groups", then is it interpreted as "What if User were not a member of any groups
       * +optional
       * </pre>
       *
       * <code>optional string user = 3;</code>
       */
      public Builder setUserBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        user_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList groups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureGroupsIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          groups_ = new com.google.protobuf.LazyStringArrayList(groups_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <pre>
       * Groups is the groups you're testing for.
       * +optional
       * </pre>
       *
       * <code>repeated string groups = 4;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getGroupsList() {
        return groups_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Groups is the groups you're testing for.
       * +optional
       * </pre>
       *
       * <code>repeated string groups = 4;</code>
       */
      public int getGroupsCount() {
        return groups_.size();
      }
      /**
       * <pre>
       * Groups is the groups you're testing for.
       * +optional
       * </pre>
       *
       * <code>repeated string groups = 4;</code>
       */
      public java.lang.String getGroups(int index) {
        return groups_.get(index);
      }
      /**
       * <pre>
       * Groups is the groups you're testing for.
       * +optional
       * </pre>
       *
       * <code>repeated string groups = 4;</code>
       */
      public com.google.protobuf.ByteString
          getGroupsBytes(int index) {
        return groups_.getByteString(index);
      }
      /**
       * <pre>
       * Groups is the groups you're testing for.
       * +optional
       * </pre>
       *
       * <code>repeated string groups = 4;</code>
       */
      public Builder setGroups(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGroupsIsMutable();
        groups_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Groups is the groups you're testing for.
       * +optional
       * </pre>
       *
       * <code>repeated string groups = 4;</code>
       */
      public Builder addGroups(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGroupsIsMutable();
        groups_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Groups is the groups you're testing for.
       * +optional
       * </pre>
       *
       * <code>repeated string groups = 4;</code>
       */
      public Builder addAllGroups(
          java.lang.Iterable<java.lang.String> values) {
        ensureGroupsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, groups_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Groups is the groups you're testing for.
       * +optional
       * </pre>
       *
       * <code>repeated string groups = 4;</code>
       */
      public Builder clearGroups() {
        groups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Groups is the groups you're testing for.
       * +optional
       * </pre>
       *
       * <code>repeated string groups = 4;</code>
       */
      public Builder addGroupsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGroupsIsMutable();
        groups_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.MapField<
          java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> extra_;
      private com.google.protobuf.MapField<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue>
      internalGetExtra() {
        if (extra_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              ExtraDefaultEntryHolder.defaultEntry);
        }
        return extra_;
      }
      private com.google.protobuf.MapField<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue>
      internalGetMutableExtra() {
        onChanged();;
        if (extra_ == null) {
          extra_ = com.google.protobuf.MapField.newMapField(
              ExtraDefaultEntryHolder.defaultEntry);
        }
        if (!extra_.isMutable()) {
          extra_ = extra_.copy();
        }
        return extra_;
      }

      public int getExtraCount() {
        return internalGetExtra().getMap().size();
      }
      /**
       * <pre>
       * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
       * it needs a reflection here.
       * +optional
       * </pre>
       *
       * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
       */

      public boolean containsExtra(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetExtra().getMap().containsKey(key);
      }
      /**
       * Use {@link #getExtraMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> getExtra() {
        return getExtraMap();
      }
      /**
       * <pre>
       * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
       * it needs a reflection here.
       * +optional
       * </pre>
       *
       * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
       */

      public java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> getExtraMap() {
        return internalGetExtra().getMap();
      }
      /**
       * <pre>
       * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
       * it needs a reflection here.
       * +optional
       * </pre>
       *
       * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
       */

      public io.kubernetes.client.proto.V1Authorization.ExtraValue getExtraOrDefault(
          java.lang.String key,
          io.kubernetes.client.proto.V1Authorization.ExtraValue defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> map =
            internalGetExtra().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
       * it needs a reflection here.
       * +optional
       * </pre>
       *
       * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
       */

      public io.kubernetes.client.proto.V1Authorization.ExtraValue getExtraOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> map =
            internalGetExtra().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearExtra() {
        internalGetMutableExtra().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
       * it needs a reflection here.
       * +optional
       * </pre>
       *
       * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
       */

      public Builder removeExtra(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableExtra().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue>
      getMutableExtra() {
        return internalGetMutableExtra().getMutableMap();
      }
      /**
       * <pre>
       * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
       * it needs a reflection here.
       * +optional
       * </pre>
       *
       * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
       */
      public Builder putExtra(
          java.lang.String key,
          io.kubernetes.client.proto.V1Authorization.ExtraValue value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableExtra().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer
       * it needs a reflection here.
       * +optional
       * </pre>
       *
       * <code>map&lt;string, .k8s.io.api.authorization.v1.ExtraValue&gt; extra = 5;</code>
       */

      public Builder putAllExtra(
          java.util.Map<java.lang.String, io.kubernetes.client.proto.V1Authorization.ExtraValue> values) {
        internalGetMutableExtra().getMutableMap()
            .putAll(values);
        return this;
      }

      private java.lang.Object uid_ = "";
      /**
       * <pre>
       * UID information about the requesting user.
       * +optional
       * </pre>
       *
       * <code>optional string uid = 6;</code>
       */
      public boolean hasUid() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <pre>
       * UID information about the requesting user.
       * +optional
       * </pre>
       *
       * <code>optional string uid = 6;</code>
       */
      public java.lang.String getUid() {
        java.lang.Object ref = uid_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            uid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * UID information about the requesting user.
       * +optional
       * </pre>
       *
       * <code>optional string uid = 6;</code>
       */
      public com.google.protobuf.ByteString
          getUidBytes() {
        java.lang.Object ref = uid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          uid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * UID information about the requesting user.
       * +optional
       * </pre>
       *
       * <code>optional string uid = 6;</code>
       */
      public Builder setUid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        uid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * UID information about the requesting user.
       * +optional
       * </pre>
       *
       * <code>optional string uid = 6;</code>
       */
      public Builder clearUid() {
        bitField0_ = (bitField0_ & ~0x00000020);
        uid_ = getDefaultInstance().getUid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * UID information about the requesting user.
       * +optional
       * </pre>
       *
       * <code>optional string uid = 6;</code>
       */
      public Builder setUidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        uid_ = value;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.SubjectAccessReviewSpec)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.SubjectAccessReviewSpec)
    private static final io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec();
    }

    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SubjectAccessReviewSpec>
        PARSER = new com.google.protobuf.AbstractParser<SubjectAccessReviewSpec>() {
      public SubjectAccessReviewSpec parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new SubjectAccessReviewSpec(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SubjectAccessReviewSpec> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SubjectAccessReviewSpec> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewSpec getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SubjectAccessReviewStatusOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.SubjectAccessReviewStatus)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Allowed is required.  True if the action would be allowed, false otherwise.
     * </pre>
     *
     * <code>optional bool allowed = 1;</code>
     */
    boolean hasAllowed();
    /**
     * <pre>
     * Allowed is required.  True if the action would be allowed, false otherwise.
     * </pre>
     *
     * <code>optional bool allowed = 1;</code>
     */
    boolean getAllowed();

    /**
     * <pre>
     * Reason is optional.  It indicates why a request was allowed or denied.
     * +optional
     * </pre>
     *
     * <code>optional string reason = 2;</code>
     */
    boolean hasReason();
    /**
     * <pre>
     * Reason is optional.  It indicates why a request was allowed or denied.
     * +optional
     * </pre>
     *
     * <code>optional string reason = 2;</code>
     */
    java.lang.String getReason();
    /**
     * <pre>
     * Reason is optional.  It indicates why a request was allowed or denied.
     * +optional
     * </pre>
     *
     * <code>optional string reason = 2;</code>
     */
    com.google.protobuf.ByteString
        getReasonBytes();

    /**
     * <pre>
     * EvaluationError is an indication that some error occurred during the authorization check.
     * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
     * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 3;</code>
     */
    boolean hasEvaluationError();
    /**
     * <pre>
     * EvaluationError is an indication that some error occurred during the authorization check.
     * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
     * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 3;</code>
     */
    java.lang.String getEvaluationError();
    /**
     * <pre>
     * EvaluationError is an indication that some error occurred during the authorization check.
     * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
     * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 3;</code>
     */
    com.google.protobuf.ByteString
        getEvaluationErrorBytes();
  }
  /**
   * <pre>
   * SubjectAccessReviewStatus
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.SubjectAccessReviewStatus}
   */
  public  static final class SubjectAccessReviewStatus extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.SubjectAccessReviewStatus)
      SubjectAccessReviewStatusOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SubjectAccessReviewStatus.newBuilder() to construct.
    private SubjectAccessReviewStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SubjectAccessReviewStatus() {
      allowed_ = false;
      reason_ = "";
      evaluationError_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SubjectAccessReviewStatus(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              allowed_ = input.readBool();
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              reason_ = bs;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              evaluationError_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewStatus_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewStatus_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.class, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder.class);
    }

    private int bitField0_;
    public static final int ALLOWED_FIELD_NUMBER = 1;
    private boolean allowed_;
    /**
     * <pre>
     * Allowed is required.  True if the action would be allowed, false otherwise.
     * </pre>
     *
     * <code>optional bool allowed = 1;</code>
     */
    public boolean hasAllowed() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Allowed is required.  True if the action would be allowed, false otherwise.
     * </pre>
     *
     * <code>optional bool allowed = 1;</code>
     */
    public boolean getAllowed() {
      return allowed_;
    }

    public static final int REASON_FIELD_NUMBER = 2;
    private volatile java.lang.Object reason_;
    /**
     * <pre>
     * Reason is optional.  It indicates why a request was allowed or denied.
     * +optional
     * </pre>
     *
     * <code>optional string reason = 2;</code>
     */
    public boolean hasReason() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Reason is optional.  It indicates why a request was allowed or denied.
     * +optional
     * </pre>
     *
     * <code>optional string reason = 2;</code>
     */
    public java.lang.String getReason() {
      java.lang.Object ref = reason_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          reason_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Reason is optional.  It indicates why a request was allowed or denied.
     * +optional
     * </pre>
     *
     * <code>optional string reason = 2;</code>
     */
    public com.google.protobuf.ByteString
        getReasonBytes() {
      java.lang.Object ref = reason_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        reason_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EVALUATIONERROR_FIELD_NUMBER = 3;
    private volatile java.lang.Object evaluationError_;
    /**
     * <pre>
     * EvaluationError is an indication that some error occurred during the authorization check.
     * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
     * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 3;</code>
     */
    public boolean hasEvaluationError() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * EvaluationError is an indication that some error occurred during the authorization check.
     * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
     * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 3;</code>
     */
    public java.lang.String getEvaluationError() {
      java.lang.Object ref = evaluationError_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          evaluationError_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * EvaluationError is an indication that some error occurred during the authorization check.
     * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
     * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 3;</code>
     */
    public com.google.protobuf.ByteString
        getEvaluationErrorBytes() {
      java.lang.Object ref = evaluationError_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        evaluationError_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, allowed_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, reason_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, evaluationError_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, allowed_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, reason_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, evaluationError_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus other = (io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus) obj;

      boolean result = true;
      result = result && (hasAllowed() == other.hasAllowed());
      if (hasAllowed()) {
        result = result && (getAllowed()
            == other.getAllowed());
      }
      result = result && (hasReason() == other.hasReason());
      if (hasReason()) {
        result = result && getReason()
            .equals(other.getReason());
      }
      result = result && (hasEvaluationError() == other.hasEvaluationError());
      if (hasEvaluationError()) {
        result = result && getEvaluationError()
            .equals(other.getEvaluationError());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasAllowed()) {
        hash = (37 * hash) + ALLOWED_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getAllowed());
      }
      if (hasReason()) {
        hash = (37 * hash) + REASON_FIELD_NUMBER;
        hash = (53 * hash) + getReason().hashCode();
      }
      if (hasEvaluationError()) {
        hash = (37 * hash) + EVALUATIONERROR_FIELD_NUMBER;
        hash = (53 * hash) + getEvaluationError().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * SubjectAccessReviewStatus
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.SubjectAccessReviewStatus}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.SubjectAccessReviewStatus)
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatusOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewStatus_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewStatus_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.class, io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        allowed_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        reason_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        evaluationError_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewStatus_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus build() {
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus buildPartial() {
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus result = new io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.allowed_ = allowed_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.reason_ = reason_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.evaluationError_ = evaluationError_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus other) {
        if (other == io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus.getDefaultInstance()) return this;
        if (other.hasAllowed()) {
          setAllowed(other.getAllowed());
        }
        if (other.hasReason()) {
          bitField0_ |= 0x00000002;
          reason_ = other.reason_;
          onChanged();
        }
        if (other.hasEvaluationError()) {
          bitField0_ |= 0x00000004;
          evaluationError_ = other.evaluationError_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private boolean allowed_ ;
      /**
       * <pre>
       * Allowed is required.  True if the action would be allowed, false otherwise.
       * </pre>
       *
       * <code>optional bool allowed = 1;</code>
       */
      public boolean hasAllowed() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Allowed is required.  True if the action would be allowed, false otherwise.
       * </pre>
       *
       * <code>optional bool allowed = 1;</code>
       */
      public boolean getAllowed() {
        return allowed_;
      }
      /**
       * <pre>
       * Allowed is required.  True if the action would be allowed, false otherwise.
       * </pre>
       *
       * <code>optional bool allowed = 1;</code>
       */
      public Builder setAllowed(boolean value) {
        bitField0_ |= 0x00000001;
        allowed_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Allowed is required.  True if the action would be allowed, false otherwise.
       * </pre>
       *
       * <code>optional bool allowed = 1;</code>
       */
      public Builder clearAllowed() {
        bitField0_ = (bitField0_ & ~0x00000001);
        allowed_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object reason_ = "";
      /**
       * <pre>
       * Reason is optional.  It indicates why a request was allowed or denied.
       * +optional
       * </pre>
       *
       * <code>optional string reason = 2;</code>
       */
      public boolean hasReason() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Reason is optional.  It indicates why a request was allowed or denied.
       * +optional
       * </pre>
       *
       * <code>optional string reason = 2;</code>
       */
      public java.lang.String getReason() {
        java.lang.Object ref = reason_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            reason_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Reason is optional.  It indicates why a request was allowed or denied.
       * +optional
       * </pre>
       *
       * <code>optional string reason = 2;</code>
       */
      public com.google.protobuf.ByteString
          getReasonBytes() {
        java.lang.Object ref = reason_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          reason_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Reason is optional.  It indicates why a request was allowed or denied.
       * +optional
       * </pre>
       *
       * <code>optional string reason = 2;</code>
       */
      public Builder setReason(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        reason_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Reason is optional.  It indicates why a request was allowed or denied.
       * +optional
       * </pre>
       *
       * <code>optional string reason = 2;</code>
       */
      public Builder clearReason() {
        bitField0_ = (bitField0_ & ~0x00000002);
        reason_ = getDefaultInstance().getReason();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Reason is optional.  It indicates why a request was allowed or denied.
       * +optional
       * </pre>
       *
       * <code>optional string reason = 2;</code>
       */
      public Builder setReasonBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        reason_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object evaluationError_ = "";
      /**
       * <pre>
       * EvaluationError is an indication that some error occurred during the authorization check.
       * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
       * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 3;</code>
       */
      public boolean hasEvaluationError() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * EvaluationError is an indication that some error occurred during the authorization check.
       * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
       * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 3;</code>
       */
      public java.lang.String getEvaluationError() {
        java.lang.Object ref = evaluationError_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            evaluationError_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * EvaluationError is an indication that some error occurred during the authorization check.
       * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
       * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 3;</code>
       */
      public com.google.protobuf.ByteString
          getEvaluationErrorBytes() {
        java.lang.Object ref = evaluationError_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          evaluationError_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * EvaluationError is an indication that some error occurred during the authorization check.
       * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
       * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 3;</code>
       */
      public Builder setEvaluationError(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        evaluationError_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * EvaluationError is an indication that some error occurred during the authorization check.
       * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
       * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 3;</code>
       */
      public Builder clearEvaluationError() {
        bitField0_ = (bitField0_ & ~0x00000004);
        evaluationError_ = getDefaultInstance().getEvaluationError();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * EvaluationError is an indication that some error occurred during the authorization check.
       * It is entirely possible to get an error and be able to continue determine authorization status in spite of it.
       * For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 3;</code>
       */
      public Builder setEvaluationErrorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        evaluationError_ = value;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.SubjectAccessReviewStatus)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.SubjectAccessReviewStatus)
    private static final io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus();
    }

    public static io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SubjectAccessReviewStatus>
        PARSER = new com.google.protobuf.AbstractParser<SubjectAccessReviewStatus>() {
      public SubjectAccessReviewStatus parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new SubjectAccessReviewStatus(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SubjectAccessReviewStatus> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SubjectAccessReviewStatus> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.SubjectAccessReviewStatus getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SubjectRulesReviewStatusOrBuilder extends
      // @@protoc_insertion_point(interface_extends:k8s.io.api.authorization.v1.SubjectRulesReviewStatus)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ResourceRules is the list of actions the subject is allowed to perform on resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
     */
    java.util.List<io.kubernetes.client.proto.V1Authorization.ResourceRule> 
        getResourceRulesList();
    /**
     * <pre>
     * ResourceRules is the list of actions the subject is allowed to perform on resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
     */
    io.kubernetes.client.proto.V1Authorization.ResourceRule getResourceRules(int index);
    /**
     * <pre>
     * ResourceRules is the list of actions the subject is allowed to perform on resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
     */
    int getResourceRulesCount();
    /**
     * <pre>
     * ResourceRules is the list of actions the subject is allowed to perform on resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
     */
    java.util.List<? extends io.kubernetes.client.proto.V1Authorization.ResourceRuleOrBuilder> 
        getResourceRulesOrBuilderList();
    /**
     * <pre>
     * ResourceRules is the list of actions the subject is allowed to perform on resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
     */
    io.kubernetes.client.proto.V1Authorization.ResourceRuleOrBuilder getResourceRulesOrBuilder(
        int index);

    /**
     * <pre>
     * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
     */
    java.util.List<io.kubernetes.client.proto.V1Authorization.NonResourceRule> 
        getNonResourceRulesList();
    /**
     * <pre>
     * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.NonResourceRule getNonResourceRules(int index);
    /**
     * <pre>
     * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
     */
    int getNonResourceRulesCount();
    /**
     * <pre>
     * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
     */
    java.util.List<? extends io.kubernetes.client.proto.V1Authorization.NonResourceRuleOrBuilder> 
        getNonResourceRulesOrBuilderList();
    /**
     * <pre>
     * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
     */
    io.kubernetes.client.proto.V1Authorization.NonResourceRuleOrBuilder getNonResourceRulesOrBuilder(
        int index);

    /**
     * <pre>
     * Incomplete is true when the rules returned by this call are incomplete. This is most commonly
     * encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.
     * </pre>
     *
     * <code>optional bool incomplete = 3;</code>
     */
    boolean hasIncomplete();
    /**
     * <pre>
     * Incomplete is true when the rules returned by this call are incomplete. This is most commonly
     * encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.
     * </pre>
     *
     * <code>optional bool incomplete = 3;</code>
     */
    boolean getIncomplete();

    /**
     * <pre>
     * EvaluationError can appear in combination with Rules. It indicates an error occurred during
     * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
     * ResourceRules and/or NonResourceRules may be incomplete.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 4;</code>
     */
    boolean hasEvaluationError();
    /**
     * <pre>
     * EvaluationError can appear in combination with Rules. It indicates an error occurred during
     * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
     * ResourceRules and/or NonResourceRules may be incomplete.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 4;</code>
     */
    java.lang.String getEvaluationError();
    /**
     * <pre>
     * EvaluationError can appear in combination with Rules. It indicates an error occurred during
     * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
     * ResourceRules and/or NonResourceRules may be incomplete.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 4;</code>
     */
    com.google.protobuf.ByteString
        getEvaluationErrorBytes();
  }
  /**
   * <pre>
   * SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on
   * the set of authorizers the server is configured with and any errors experienced during evaluation.
   * Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission,
   * even if that list is incomplete.
   * </pre>
   *
   * Protobuf type {@code k8s.io.api.authorization.v1.SubjectRulesReviewStatus}
   */
  public  static final class SubjectRulesReviewStatus extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:k8s.io.api.authorization.v1.SubjectRulesReviewStatus)
      SubjectRulesReviewStatusOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SubjectRulesReviewStatus.newBuilder() to construct.
    private SubjectRulesReviewStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SubjectRulesReviewStatus() {
      resourceRules_ = java.util.Collections.emptyList();
      nonResourceRules_ = java.util.Collections.emptyList();
      incomplete_ = false;
      evaluationError_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SubjectRulesReviewStatus(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                resourceRules_ = new java.util.ArrayList<io.kubernetes.client.proto.V1Authorization.ResourceRule>();
                mutable_bitField0_ |= 0x00000001;
              }
              resourceRules_.add(
                  input.readMessage(io.kubernetes.client.proto.V1Authorization.ResourceRule.PARSER, extensionRegistry));
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                nonResourceRules_ = new java.util.ArrayList<io.kubernetes.client.proto.V1Authorization.NonResourceRule>();
                mutable_bitField0_ |= 0x00000002;
              }
              nonResourceRules_.add(
                  input.readMessage(io.kubernetes.client.proto.V1Authorization.NonResourceRule.PARSER, extensionRegistry));
              break;
            }
            case 24: {
              bitField0_ |= 0x00000001;
              incomplete_ = input.readBool();
              break;
            }
            case 34: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              evaluationError_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          resourceRules_ = java.util.Collections.unmodifiableList(resourceRules_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          nonResourceRules_ = java.util.Collections.unmodifiableList(nonResourceRules_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectRulesReviewStatus_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectRulesReviewStatus_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.class, io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.Builder.class);
    }

    private int bitField0_;
    public static final int RESOURCERULES_FIELD_NUMBER = 1;
    private java.util.List<io.kubernetes.client.proto.V1Authorization.ResourceRule> resourceRules_;
    /**
     * <pre>
     * ResourceRules is the list of actions the subject is allowed to perform on resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
     */
    public java.util.List<io.kubernetes.client.proto.V1Authorization.ResourceRule> getResourceRulesList() {
      return resourceRules_;
    }
    /**
     * <pre>
     * ResourceRules is the list of actions the subject is allowed to perform on resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
     */
    public java.util.List<? extends io.kubernetes.client.proto.V1Authorization.ResourceRuleOrBuilder> 
        getResourceRulesOrBuilderList() {
      return resourceRules_;
    }
    /**
     * <pre>
     * ResourceRules is the list of actions the subject is allowed to perform on resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
     */
    public int getResourceRulesCount() {
      return resourceRules_.size();
    }
    /**
     * <pre>
     * ResourceRules is the list of actions the subject is allowed to perform on resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.ResourceRule getResourceRules(int index) {
      return resourceRules_.get(index);
    }
    /**
     * <pre>
     * ResourceRules is the list of actions the subject is allowed to perform on resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.ResourceRuleOrBuilder getResourceRulesOrBuilder(
        int index) {
      return resourceRules_.get(index);
    }

    public static final int NONRESOURCERULES_FIELD_NUMBER = 2;
    private java.util.List<io.kubernetes.client.proto.V1Authorization.NonResourceRule> nonResourceRules_;
    /**
     * <pre>
     * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
     */
    public java.util.List<io.kubernetes.client.proto.V1Authorization.NonResourceRule> getNonResourceRulesList() {
      return nonResourceRules_;
    }
    /**
     * <pre>
     * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
     */
    public java.util.List<? extends io.kubernetes.client.proto.V1Authorization.NonResourceRuleOrBuilder> 
        getNonResourceRulesOrBuilderList() {
      return nonResourceRules_;
    }
    /**
     * <pre>
     * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
     */
    public int getNonResourceRulesCount() {
      return nonResourceRules_.size();
    }
    /**
     * <pre>
     * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.NonResourceRule getNonResourceRules(int index) {
      return nonResourceRules_.get(index);
    }
    /**
     * <pre>
     * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
     * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
     * </pre>
     *
     * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
     */
    public io.kubernetes.client.proto.V1Authorization.NonResourceRuleOrBuilder getNonResourceRulesOrBuilder(
        int index) {
      return nonResourceRules_.get(index);
    }

    public static final int INCOMPLETE_FIELD_NUMBER = 3;
    private boolean incomplete_;
    /**
     * <pre>
     * Incomplete is true when the rules returned by this call are incomplete. This is most commonly
     * encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.
     * </pre>
     *
     * <code>optional bool incomplete = 3;</code>
     */
    public boolean hasIncomplete() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Incomplete is true when the rules returned by this call are incomplete. This is most commonly
     * encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.
     * </pre>
     *
     * <code>optional bool incomplete = 3;</code>
     */
    public boolean getIncomplete() {
      return incomplete_;
    }

    public static final int EVALUATIONERROR_FIELD_NUMBER = 4;
    private volatile java.lang.Object evaluationError_;
    /**
     * <pre>
     * EvaluationError can appear in combination with Rules. It indicates an error occurred during
     * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
     * ResourceRules and/or NonResourceRules may be incomplete.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 4;</code>
     */
    public boolean hasEvaluationError() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * EvaluationError can appear in combination with Rules. It indicates an error occurred during
     * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
     * ResourceRules and/or NonResourceRules may be incomplete.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 4;</code>
     */
    public java.lang.String getEvaluationError() {
      java.lang.Object ref = evaluationError_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          evaluationError_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * EvaluationError can appear in combination with Rules. It indicates an error occurred during
     * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
     * ResourceRules and/or NonResourceRules may be incomplete.
     * +optional
     * </pre>
     *
     * <code>optional string evaluationError = 4;</code>
     */
    public com.google.protobuf.ByteString
        getEvaluationErrorBytes() {
      java.lang.Object ref = evaluationError_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        evaluationError_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < resourceRules_.size(); i++) {
        output.writeMessage(1, resourceRules_.get(i));
      }
      for (int i = 0; i < nonResourceRules_.size(); i++) {
        output.writeMessage(2, nonResourceRules_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(3, incomplete_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, evaluationError_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < resourceRules_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, resourceRules_.get(i));
      }
      for (int i = 0; i < nonResourceRules_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, nonResourceRules_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, incomplete_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, evaluationError_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus)) {
        return super.equals(obj);
      }
      io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus other = (io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus) obj;

      boolean result = true;
      result = result && getResourceRulesList()
          .equals(other.getResourceRulesList());
      result = result && getNonResourceRulesList()
          .equals(other.getNonResourceRulesList());
      result = result && (hasIncomplete() == other.hasIncomplete());
      if (hasIncomplete()) {
        result = result && (getIncomplete()
            == other.getIncomplete());
      }
      result = result && (hasEvaluationError() == other.hasEvaluationError());
      if (hasEvaluationError()) {
        result = result && getEvaluationError()
            .equals(other.getEvaluationError());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getResourceRulesCount() > 0) {
        hash = (37 * hash) + RESOURCERULES_FIELD_NUMBER;
        hash = (53 * hash) + getResourceRulesList().hashCode();
      }
      if (getNonResourceRulesCount() > 0) {
        hash = (37 * hash) + NONRESOURCERULES_FIELD_NUMBER;
        hash = (53 * hash) + getNonResourceRulesList().hashCode();
      }
      if (hasIncomplete()) {
        hash = (37 * hash) + INCOMPLETE_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getIncomplete());
      }
      if (hasEvaluationError()) {
        hash = (37 * hash) + EVALUATIONERROR_FIELD_NUMBER;
        hash = (53 * hash) + getEvaluationError().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on
     * the set of authorizers the server is configured with and any errors experienced during evaluation.
     * Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission,
     * even if that list is incomplete.
     * </pre>
     *
     * Protobuf type {@code k8s.io.api.authorization.v1.SubjectRulesReviewStatus}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:k8s.io.api.authorization.v1.SubjectRulesReviewStatus)
        io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatusOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectRulesReviewStatus_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectRulesReviewStatus_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.class, io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.Builder.class);
      }

      // Construct using io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getResourceRulesFieldBuilder();
          getNonResourceRulesFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (resourceRulesBuilder_ == null) {
          resourceRules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          resourceRulesBuilder_.clear();
        }
        if (nonResourceRulesBuilder_ == null) {
          nonResourceRules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          nonResourceRulesBuilder_.clear();
        }
        incomplete_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        evaluationError_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return io.kubernetes.client.proto.V1Authorization.internal_static_k8s_io_api_authorization_v1_SubjectRulesReviewStatus_descriptor;
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus getDefaultInstanceForType() {
        return io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.getDefaultInstance();
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus build() {
        io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus buildPartial() {
        io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus result = new io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (resourceRulesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            resourceRules_ = java.util.Collections.unmodifiableList(resourceRules_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.resourceRules_ = resourceRules_;
        } else {
          result.resourceRules_ = resourceRulesBuilder_.build();
        }
        if (nonResourceRulesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            nonResourceRules_ = java.util.Collections.unmodifiableList(nonResourceRules_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.nonResourceRules_ = nonResourceRules_;
        } else {
          result.nonResourceRules_ = nonResourceRulesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000001;
        }
        result.incomplete_ = incomplete_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000002;
        }
        result.evaluationError_ = evaluationError_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus) {
          return mergeFrom((io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus other) {
        if (other == io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus.getDefaultInstance()) return this;
        if (resourceRulesBuilder_ == null) {
          if (!other.resourceRules_.isEmpty()) {
            if (resourceRules_.isEmpty()) {
              resourceRules_ = other.resourceRules_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureResourceRulesIsMutable();
              resourceRules_.addAll(other.resourceRules_);
            }
            onChanged();
          }
        } else {
          if (!other.resourceRules_.isEmpty()) {
            if (resourceRulesBuilder_.isEmpty()) {
              resourceRulesBuilder_.dispose();
              resourceRulesBuilder_ = null;
              resourceRules_ = other.resourceRules_;
              bitField0_ = (bitField0_ & ~0x00000001);
              resourceRulesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getResourceRulesFieldBuilder() : null;
            } else {
              resourceRulesBuilder_.addAllMessages(other.resourceRules_);
            }
          }
        }
        if (nonResourceRulesBuilder_ == null) {
          if (!other.nonResourceRules_.isEmpty()) {
            if (nonResourceRules_.isEmpty()) {
              nonResourceRules_ = other.nonResourceRules_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureNonResourceRulesIsMutable();
              nonResourceRules_.addAll(other.nonResourceRules_);
            }
            onChanged();
          }
        } else {
          if (!other.nonResourceRules_.isEmpty()) {
            if (nonResourceRulesBuilder_.isEmpty()) {
              nonResourceRulesBuilder_.dispose();
              nonResourceRulesBuilder_ = null;
              nonResourceRules_ = other.nonResourceRules_;
              bitField0_ = (bitField0_ & ~0x00000002);
              nonResourceRulesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getNonResourceRulesFieldBuilder() : null;
            } else {
              nonResourceRulesBuilder_.addAllMessages(other.nonResourceRules_);
            }
          }
        }
        if (other.hasIncomplete()) {
          setIncomplete(other.getIncomplete());
        }
        if (other.hasEvaluationError()) {
          bitField0_ |= 0x00000008;
          evaluationError_ = other.evaluationError_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<io.kubernetes.client.proto.V1Authorization.ResourceRule> resourceRules_ =
        java.util.Collections.emptyList();
      private void ensureResourceRulesIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          resourceRules_ = new java.util.ArrayList<io.kubernetes.client.proto.V1Authorization.ResourceRule>(resourceRules_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.ResourceRule, io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder, io.kubernetes.client.proto.V1Authorization.ResourceRuleOrBuilder> resourceRulesBuilder_;

      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public java.util.List<io.kubernetes.client.proto.V1Authorization.ResourceRule> getResourceRulesList() {
        if (resourceRulesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(resourceRules_);
        } else {
          return resourceRulesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public int getResourceRulesCount() {
        if (resourceRulesBuilder_ == null) {
          return resourceRules_.size();
        } else {
          return resourceRulesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.ResourceRule getResourceRules(int index) {
        if (resourceRulesBuilder_ == null) {
          return resourceRules_.get(index);
        } else {
          return resourceRulesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public Builder setResourceRules(
          int index, io.kubernetes.client.proto.V1Authorization.ResourceRule value) {
        if (resourceRulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureResourceRulesIsMutable();
          resourceRules_.set(index, value);
          onChanged();
        } else {
          resourceRulesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public Builder setResourceRules(
          int index, io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder builderForValue) {
        if (resourceRulesBuilder_ == null) {
          ensureResourceRulesIsMutable();
          resourceRules_.set(index, builderForValue.build());
          onChanged();
        } else {
          resourceRulesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public Builder addResourceRules(io.kubernetes.client.proto.V1Authorization.ResourceRule value) {
        if (resourceRulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureResourceRulesIsMutable();
          resourceRules_.add(value);
          onChanged();
        } else {
          resourceRulesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public Builder addResourceRules(
          int index, io.kubernetes.client.proto.V1Authorization.ResourceRule value) {
        if (resourceRulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureResourceRulesIsMutable();
          resourceRules_.add(index, value);
          onChanged();
        } else {
          resourceRulesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public Builder addResourceRules(
          io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder builderForValue) {
        if (resourceRulesBuilder_ == null) {
          ensureResourceRulesIsMutable();
          resourceRules_.add(builderForValue.build());
          onChanged();
        } else {
          resourceRulesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public Builder addResourceRules(
          int index, io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder builderForValue) {
        if (resourceRulesBuilder_ == null) {
          ensureResourceRulesIsMutable();
          resourceRules_.add(index, builderForValue.build());
          onChanged();
        } else {
          resourceRulesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public Builder addAllResourceRules(
          java.lang.Iterable<? extends io.kubernetes.client.proto.V1Authorization.ResourceRule> values) {
        if (resourceRulesBuilder_ == null) {
          ensureResourceRulesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, resourceRules_);
          onChanged();
        } else {
          resourceRulesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public Builder clearResourceRules() {
        if (resourceRulesBuilder_ == null) {
          resourceRules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          resourceRulesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public Builder removeResourceRules(int index) {
        if (resourceRulesBuilder_ == null) {
          ensureResourceRulesIsMutable();
          resourceRules_.remove(index);
          onChanged();
        } else {
          resourceRulesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder getResourceRulesBuilder(
          int index) {
        return getResourceRulesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.ResourceRuleOrBuilder getResourceRulesOrBuilder(
          int index) {
        if (resourceRulesBuilder_ == null) {
          return resourceRules_.get(index);  } else {
          return resourceRulesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public java.util.List<? extends io.kubernetes.client.proto.V1Authorization.ResourceRuleOrBuilder> 
           getResourceRulesOrBuilderList() {
        if (resourceRulesBuilder_ != null) {
          return resourceRulesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(resourceRules_);
        }
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder addResourceRulesBuilder() {
        return getResourceRulesFieldBuilder().addBuilder(
            io.kubernetes.client.proto.V1Authorization.ResourceRule.getDefaultInstance());
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder addResourceRulesBuilder(
          int index) {
        return getResourceRulesFieldBuilder().addBuilder(
            index, io.kubernetes.client.proto.V1Authorization.ResourceRule.getDefaultInstance());
      }
      /**
       * <pre>
       * ResourceRules is the list of actions the subject is allowed to perform on resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.ResourceRule resourceRules = 1;</code>
       */
      public java.util.List<io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder> 
           getResourceRulesBuilderList() {
        return getResourceRulesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.ResourceRule, io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder, io.kubernetes.client.proto.V1Authorization.ResourceRuleOrBuilder> 
          getResourceRulesFieldBuilder() {
        if (resourceRulesBuilder_ == null) {
          resourceRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.ResourceRule, io.kubernetes.client.proto.V1Authorization.ResourceRule.Builder, io.kubernetes.client.proto.V1Authorization.ResourceRuleOrBuilder>(
                  resourceRules_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          resourceRules_ = null;
        }
        return resourceRulesBuilder_;
      }

      private java.util.List<io.kubernetes.client.proto.V1Authorization.NonResourceRule> nonResourceRules_ =
        java.util.Collections.emptyList();
      private void ensureNonResourceRulesIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          nonResourceRules_ = new java.util.ArrayList<io.kubernetes.client.proto.V1Authorization.NonResourceRule>(nonResourceRules_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.NonResourceRule, io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder, io.kubernetes.client.proto.V1Authorization.NonResourceRuleOrBuilder> nonResourceRulesBuilder_;

      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public java.util.List<io.kubernetes.client.proto.V1Authorization.NonResourceRule> getNonResourceRulesList() {
        if (nonResourceRulesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(nonResourceRules_);
        } else {
          return nonResourceRulesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public int getNonResourceRulesCount() {
        if (nonResourceRulesBuilder_ == null) {
          return nonResourceRules_.size();
        } else {
          return nonResourceRulesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.NonResourceRule getNonResourceRules(int index) {
        if (nonResourceRulesBuilder_ == null) {
          return nonResourceRules_.get(index);
        } else {
          return nonResourceRulesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public Builder setNonResourceRules(
          int index, io.kubernetes.client.proto.V1Authorization.NonResourceRule value) {
        if (nonResourceRulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNonResourceRulesIsMutable();
          nonResourceRules_.set(index, value);
          onChanged();
        } else {
          nonResourceRulesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public Builder setNonResourceRules(
          int index, io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder builderForValue) {
        if (nonResourceRulesBuilder_ == null) {
          ensureNonResourceRulesIsMutable();
          nonResourceRules_.set(index, builderForValue.build());
          onChanged();
        } else {
          nonResourceRulesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public Builder addNonResourceRules(io.kubernetes.client.proto.V1Authorization.NonResourceRule value) {
        if (nonResourceRulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNonResourceRulesIsMutable();
          nonResourceRules_.add(value);
          onChanged();
        } else {
          nonResourceRulesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public Builder addNonResourceRules(
          int index, io.kubernetes.client.proto.V1Authorization.NonResourceRule value) {
        if (nonResourceRulesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNonResourceRulesIsMutable();
          nonResourceRules_.add(index, value);
          onChanged();
        } else {
          nonResourceRulesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public Builder addNonResourceRules(
          io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder builderForValue) {
        if (nonResourceRulesBuilder_ == null) {
          ensureNonResourceRulesIsMutable();
          nonResourceRules_.add(builderForValue.build());
          onChanged();
        } else {
          nonResourceRulesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public Builder addNonResourceRules(
          int index, io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder builderForValue) {
        if (nonResourceRulesBuilder_ == null) {
          ensureNonResourceRulesIsMutable();
          nonResourceRules_.add(index, builderForValue.build());
          onChanged();
        } else {
          nonResourceRulesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public Builder addAllNonResourceRules(
          java.lang.Iterable<? extends io.kubernetes.client.proto.V1Authorization.NonResourceRule> values) {
        if (nonResourceRulesBuilder_ == null) {
          ensureNonResourceRulesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, nonResourceRules_);
          onChanged();
        } else {
          nonResourceRulesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public Builder clearNonResourceRules() {
        if (nonResourceRulesBuilder_ == null) {
          nonResourceRules_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          nonResourceRulesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public Builder removeNonResourceRules(int index) {
        if (nonResourceRulesBuilder_ == null) {
          ensureNonResourceRulesIsMutable();
          nonResourceRules_.remove(index);
          onChanged();
        } else {
          nonResourceRulesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder getNonResourceRulesBuilder(
          int index) {
        return getNonResourceRulesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.NonResourceRuleOrBuilder getNonResourceRulesOrBuilder(
          int index) {
        if (nonResourceRulesBuilder_ == null) {
          return nonResourceRules_.get(index);  } else {
          return nonResourceRulesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public java.util.List<? extends io.kubernetes.client.proto.V1Authorization.NonResourceRuleOrBuilder> 
           getNonResourceRulesOrBuilderList() {
        if (nonResourceRulesBuilder_ != null) {
          return nonResourceRulesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(nonResourceRules_);
        }
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder addNonResourceRulesBuilder() {
        return getNonResourceRulesFieldBuilder().addBuilder(
            io.kubernetes.client.proto.V1Authorization.NonResourceRule.getDefaultInstance());
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder addNonResourceRulesBuilder(
          int index) {
        return getNonResourceRulesFieldBuilder().addBuilder(
            index, io.kubernetes.client.proto.V1Authorization.NonResourceRule.getDefaultInstance());
      }
      /**
       * <pre>
       * NonResourceRules is the list of actions the subject is allowed to perform on non-resources.
       * The list ordering isn't significant, may contain duplicates, and possibly be incomplete.
       * </pre>
       *
       * <code>repeated .k8s.io.api.authorization.v1.NonResourceRule nonResourceRules = 2;</code>
       */
      public java.util.List<io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder> 
           getNonResourceRulesBuilderList() {
        return getNonResourceRulesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          io.kubernetes.client.proto.V1Authorization.NonResourceRule, io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder, io.kubernetes.client.proto.V1Authorization.NonResourceRuleOrBuilder> 
          getNonResourceRulesFieldBuilder() {
        if (nonResourceRulesBuilder_ == null) {
          nonResourceRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              io.kubernetes.client.proto.V1Authorization.NonResourceRule, io.kubernetes.client.proto.V1Authorization.NonResourceRule.Builder, io.kubernetes.client.proto.V1Authorization.NonResourceRuleOrBuilder>(
                  nonResourceRules_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          nonResourceRules_ = null;
        }
        return nonResourceRulesBuilder_;
      }

      private boolean incomplete_ ;
      /**
       * <pre>
       * Incomplete is true when the rules returned by this call are incomplete. This is most commonly
       * encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.
       * </pre>
       *
       * <code>optional bool incomplete = 3;</code>
       */
      public boolean hasIncomplete() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Incomplete is true when the rules returned by this call are incomplete. This is most commonly
       * encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.
       * </pre>
       *
       * <code>optional bool incomplete = 3;</code>
       */
      public boolean getIncomplete() {
        return incomplete_;
      }
      /**
       * <pre>
       * Incomplete is true when the rules returned by this call are incomplete. This is most commonly
       * encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.
       * </pre>
       *
       * <code>optional bool incomplete = 3;</code>
       */
      public Builder setIncomplete(boolean value) {
        bitField0_ |= 0x00000004;
        incomplete_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Incomplete is true when the rules returned by this call are incomplete. This is most commonly
       * encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.
       * </pre>
       *
       * <code>optional bool incomplete = 3;</code>
       */
      public Builder clearIncomplete() {
        bitField0_ = (bitField0_ & ~0x00000004);
        incomplete_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object evaluationError_ = "";
      /**
       * <pre>
       * EvaluationError can appear in combination with Rules. It indicates an error occurred during
       * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
       * ResourceRules and/or NonResourceRules may be incomplete.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 4;</code>
       */
      public boolean hasEvaluationError() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * EvaluationError can appear in combination with Rules. It indicates an error occurred during
       * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
       * ResourceRules and/or NonResourceRules may be incomplete.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 4;</code>
       */
      public java.lang.String getEvaluationError() {
        java.lang.Object ref = evaluationError_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            evaluationError_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * EvaluationError can appear in combination with Rules. It indicates an error occurred during
       * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
       * ResourceRules and/or NonResourceRules may be incomplete.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 4;</code>
       */
      public com.google.protobuf.ByteString
          getEvaluationErrorBytes() {
        java.lang.Object ref = evaluationError_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          evaluationError_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * EvaluationError can appear in combination with Rules. It indicates an error occurred during
       * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
       * ResourceRules and/or NonResourceRules may be incomplete.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 4;</code>
       */
      public Builder setEvaluationError(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        evaluationError_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * EvaluationError can appear in combination with Rules. It indicates an error occurred during
       * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
       * ResourceRules and/or NonResourceRules may be incomplete.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 4;</code>
       */
      public Builder clearEvaluationError() {
        bitField0_ = (bitField0_ & ~0x00000008);
        evaluationError_ = getDefaultInstance().getEvaluationError();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * EvaluationError can appear in combination with Rules. It indicates an error occurred during
       * rule evaluation, such as an authorizer that doesn't support rule evaluation, and that
       * ResourceRules and/or NonResourceRules may be incomplete.
       * +optional
       * </pre>
       *
       * <code>optional string evaluationError = 4;</code>
       */
      public Builder setEvaluationErrorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        evaluationError_ = value;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:k8s.io.api.authorization.v1.SubjectRulesReviewStatus)
    }

    // @@protoc_insertion_point(class_scope:k8s.io.api.authorization.v1.SubjectRulesReviewStatus)
    private static final io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus();
    }

    public static io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SubjectRulesReviewStatus>
        PARSER = new com.google.protobuf.AbstractParser<SubjectRulesReviewStatus>() {
      public SubjectRulesReviewStatus parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new SubjectRulesReviewStatus(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SubjectRulesReviewStatus> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SubjectRulesReviewStatus> getParserForType() {
      return PARSER;
    }

    public io.kubernetes.client.proto.V1Authorization.SubjectRulesReviewStatus getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_ExtraValue_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_ExtraValue_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_LocalSubjectAccessReview_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_LocalSubjectAccessReview_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_NonResourceAttributes_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_NonResourceAttributes_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_NonResourceRule_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_NonResourceRule_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_ResourceAttributes_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_ResourceAttributes_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_ResourceRule_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_ResourceRule_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReview_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReview_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReviewSpec_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReviewSpec_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReview_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReview_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReviewSpec_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReviewSpec_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReview_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_SubjectAccessReview_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_ExtraEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_ExtraEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewStatus_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewStatus_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_k8s_io_api_authorization_v1_SubjectRulesReviewStatus_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_k8s_io_api_authorization_v1_SubjectRulesReviewStatus_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n+k8s.io/api/authorization/v1/generated." +
      "proto\022\033k8s.io.api.authorization.v1\0324k8s." +
      "io/apimachinery/pkg/apis/meta/v1/generat" +
      "ed.proto\032/k8s.io/apimachinery/pkg/runtim" +
      "e/generated.proto\0326k8s.io/apimachinery/p" +
      "kg/runtime/schema/generated.proto\0323k8s.i" +
      "o/apimachinery/pkg/util/intstr/generated" +
      ".proto\"\033\n\nExtraValue\022\r\n\005items\030\001 \003(\t\"\352\001\n\030" +
      "LocalSubjectAccessReview\022B\n\010metadata\030\001 \001" +
      "(\01320.k8s.io.apimachinery.pkg.apis.meta.v",
      "1.ObjectMeta\022B\n\004spec\030\002 \001(\01324.k8s.io.api." +
      "authorization.v1.SubjectAccessReviewSpec" +
      "\022F\n\006status\030\003 \001(\01326.k8s.io.api.authorizat" +
      "ion.v1.SubjectAccessReviewStatus\"3\n\025NonR" +
      "esourceAttributes\022\014\n\004path\030\001 \001(\t\022\014\n\004verb\030" +
      "\002 \001(\t\"9\n\017NonResourceRule\022\r\n\005verbs\030\001 \003(\t\022" +
      "\027\n\017nonResourceURLs\030\002 \003(\t\"\212\001\n\022ResourceAtt" +
      "ributes\022\021\n\tnamespace\030\001 \001(\t\022\014\n\004verb\030\002 \001(\t" +
      "\022\r\n\005group\030\003 \001(\t\022\017\n\007version\030\004 \001(\t\022\020\n\010reso" +
      "urce\030\005 \001(\t\022\023\n\013subresource\030\006 \001(\t\022\014\n\004name\030",
      "\007 \001(\t\"Z\n\014ResourceRule\022\r\n\005verbs\030\001 \003(\t\022\021\n\t" +
      "apiGroups\030\002 \003(\t\022\021\n\tresources\030\003 \003(\t\022\025\n\rre" +
      "sourceNames\030\004 \003(\t\"\355\001\n\027SelfSubjectAccessR" +
      "eview\022B\n\010metadata\030\001 \001(\01320.k8s.io.apimach" +
      "inery.pkg.apis.meta.v1.ObjectMeta\022F\n\004spe" +
      "c\030\002 \001(\01328.k8s.io.api.authorization.v1.Se" +
      "lfSubjectAccessReviewSpec\022F\n\006status\030\003 \001(" +
      "\01326.k8s.io.api.authorization.v1.SubjectA" +
      "ccessReviewStatus\"\275\001\n\033SelfSubjectAccessR" +
      "eviewSpec\022K\n\022resourceAttributes\030\001 \001(\0132/.",
      "k8s.io.api.authorization.v1.ResourceAttr" +
      "ibutes\022Q\n\025nonResourceAttributes\030\002 \001(\01322." +
      "k8s.io.api.authorization.v1.NonResourceA" +
      "ttributes\"\352\001\n\026SelfSubjectRulesReview\022B\n\010" +
      "metadata\030\001 \001(\01320.k8s.io.apimachinery.pkg" +
      ".apis.meta.v1.ObjectMeta\022E\n\004spec\030\002 \001(\01327" +
      ".k8s.io.api.authorization.v1.SelfSubject" +
      "RulesReviewSpec\022E\n\006status\030\003 \001(\01325.k8s.io" +
      ".api.authorization.v1.SubjectRulesReview" +
      "Status\"/\n\032SelfSubjectRulesReviewSpec\022\021\n\t",
      "namespace\030\001 \001(\t\"\345\001\n\023SubjectAccessReview\022" +
      "B\n\010metadata\030\001 \001(\01320.k8s.io.apimachinery." +
      "pkg.apis.meta.v1.ObjectMeta\022B\n\004spec\030\002 \001(" +
      "\01324.k8s.io.api.authorization.v1.SubjectA" +
      "ccessReviewSpec\022F\n\006status\030\003 \001(\01326.k8s.io" +
      ".api.authorization.v1.SubjectAccessRevie" +
      "wStatus\"\213\003\n\027SubjectAccessReviewSpec\022K\n\022r" +
      "esourceAttributes\030\001 \001(\0132/.k8s.io.api.aut" +
      "horization.v1.ResourceAttributes\022Q\n\025nonR" +
      "esourceAttributes\030\002 \001(\01322.k8s.io.api.aut",
      "horization.v1.NonResourceAttributes\022\014\n\004u" +
      "ser\030\003 \001(\t\022\016\n\006groups\030\004 \003(\t\022N\n\005extra\030\005 \003(\013" +
      "2?.k8s.io.api.authorization.v1.SubjectAc" +
      "cessReviewSpec.ExtraEntry\022\013\n\003uid\030\006 \001(\t\032U" +
      "\n\nExtraEntry\022\013\n\003key\030\001 \001(\t\0226\n\005value\030\002 \001(\013" +
      "2\'.k8s.io.api.authorization.v1.ExtraValu" +
      "e:\0028\001\"U\n\031SubjectAccessReviewStatus\022\017\n\007al" +
      "lowed\030\001 \001(\010\022\016\n\006reason\030\002 \001(\t\022\027\n\017evaluatio" +
      "nError\030\003 \001(\t\"\321\001\n\030SubjectRulesReviewStatu" +
      "s\022@\n\rresourceRules\030\001 \003(\0132).k8s.io.api.au",
      "thorization.v1.ResourceRule\022F\n\020nonResour" +
      "ceRules\030\002 \003(\0132,.k8s.io.api.authorization" +
      ".v1.NonResourceRule\022\022\n\nincomplete\030\003 \001(\010\022" +
      "\027\n\017evaluationError\030\004 \001(\tB1\n\032io.kubernete" +
      "s.client.protoB\017V1AuthorizationZ\002v1"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          io.kubernetes.client.proto.Meta.getDescriptor(),
          io.kubernetes.client.proto.Runtime.getDescriptor(),
          io.kubernetes.client.proto.RuntimeSchema.getDescriptor(),
          io.kubernetes.client.proto.IntStr.getDescriptor(),
        }, assigner);
    internal_static_k8s_io_api_authorization_v1_ExtraValue_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_k8s_io_api_authorization_v1_ExtraValue_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_ExtraValue_descriptor,
        new java.lang.String[] { "Items", });
    internal_static_k8s_io_api_authorization_v1_LocalSubjectAccessReview_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_k8s_io_api_authorization_v1_LocalSubjectAccessReview_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_LocalSubjectAccessReview_descriptor,
        new java.lang.String[] { "Metadata", "Spec", "Status", });
    internal_static_k8s_io_api_authorization_v1_NonResourceAttributes_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_k8s_io_api_authorization_v1_NonResourceAttributes_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_NonResourceAttributes_descriptor,
        new java.lang.String[] { "Path", "Verb", });
    internal_static_k8s_io_api_authorization_v1_NonResourceRule_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_k8s_io_api_authorization_v1_NonResourceRule_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_NonResourceRule_descriptor,
        new java.lang.String[] { "Verbs", "NonResourceURLs", });
    internal_static_k8s_io_api_authorization_v1_ResourceAttributes_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_k8s_io_api_authorization_v1_ResourceAttributes_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_ResourceAttributes_descriptor,
        new java.lang.String[] { "Namespace", "Verb", "Group", "Version", "Resource", "Subresource", "Name", });
    internal_static_k8s_io_api_authorization_v1_ResourceRule_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_k8s_io_api_authorization_v1_ResourceRule_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_ResourceRule_descriptor,
        new java.lang.String[] { "Verbs", "ApiGroups", "Resources", "ResourceNames", });
    internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReview_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReview_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReview_descriptor,
        new java.lang.String[] { "Metadata", "Spec", "Status", });
    internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReviewSpec_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReviewSpec_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_SelfSubjectAccessReviewSpec_descriptor,
        new java.lang.String[] { "ResourceAttributes", "NonResourceAttributes", });
    internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReview_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReview_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReview_descriptor,
        new java.lang.String[] { "Metadata", "Spec", "Status", });
    internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReviewSpec_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReviewSpec_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_SelfSubjectRulesReviewSpec_descriptor,
        new java.lang.String[] { "Namespace", });
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReview_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReview_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_SubjectAccessReview_descriptor,
        new java.lang.String[] { "Metadata", "Spec", "Status", });
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_descriptor,
        new java.lang.String[] { "ResourceAttributes", "NonResourceAttributes", "User", "Groups", "Extra", "Uid", });
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_ExtraEntry_descriptor =
      internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_descriptor.getNestedTypes().get(0);
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_ExtraEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewSpec_ExtraEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewStatus_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewStatus_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_SubjectAccessReviewStatus_descriptor,
        new java.lang.String[] { "Allowed", "Reason", "EvaluationError", });
    internal_static_k8s_io_api_authorization_v1_SubjectRulesReviewStatus_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_k8s_io_api_authorization_v1_SubjectRulesReviewStatus_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_k8s_io_api_authorization_v1_SubjectRulesReviewStatus_descriptor,
        new java.lang.String[] { "ResourceRules", "NonResourceRules", "Incomplete", "EvaluationError", });
    io.kubernetes.client.proto.Meta.getDescriptor();
    io.kubernetes.client.proto.Runtime.getDescriptor();
    io.kubernetes.client.proto.RuntimeSchema.getDescriptor();
    io.kubernetes.client.proto.IntStr.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
