// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: Global_Uconnect_Control.proto

package com.fca.uconnect.global;

public final class GlobalUconnectControl {
  private GlobalUconnectControl() {}
  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 UconnectMessageOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.fca.uconnect.global.UconnectMessage)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
     * </pre>
     *
     * <code>optional int64 timestamp = 1;</code>
     */
    boolean hasTimestamp();
    /**
     * <pre>
     *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
     * </pre>
     *
     * <code>optional int64 timestamp = 1;</code>
     */
    long getTimestamp();

    /**
     * <pre>
     *&#47; may contain any arbitrary sequence of bytes. Intended for implementations where parties to a session need to share a session identifier. Implementations that do so will be able to use sessionId and messageId to correlate logged messages for diagnostic/debug purposes.
     * </pre>
     *
     * <code>optional bytes sessionId = 2;</code>
     */
    boolean hasSessionId();
    /**
     * <pre>
     *&#47; may contain any arbitrary sequence of bytes. Intended for implementations where parties to a session need to share a session identifier. Implementations that do so will be able to use sessionId and messageId to correlate logged messages for diagnostic/debug purposes.
     * </pre>
     *
     * <code>optional bytes sessionId = 2;</code>
     */
    com.google.protobuf.ByteString getSessionId();

    /**
     * <pre>
     *&#47; Assigned to each message by the creator, to allow receivers to reply with correlation. Single node clients can use a per application instance global variable that increments with every message, with a range of -2^31-2^31-1. Clients that are clustered should assign a range of messageIds to each node in the cluster, with the full range equally apportioned.
     * </pre>
     *
     * <code>optional int32 messageId = 3;</code>
     */
    boolean hasMessageId();
    /**
     * <pre>
     *&#47; Assigned to each message by the creator, to allow receivers to reply with correlation. Single node clients can use a per application instance global variable that increments with every message, with a range of -2^31-2^31-1. Clients that are clustered should assign a range of messageIds to each node in the cluster, with the full range equally apportioned.
     * </pre>
     *
     * <code>optional int32 messageId = 3;</code>
     */
    int getMessageId();

    /**
     * <pre>
     *&#47; Must only be set from the messageId of a received message. If there is not a received message being responded to, do not set any value other than the default. Initiators of interactions should never set correlationId, it is for point to point request/response only.
     * </pre>
     *
     * <code>optional int32 correlationId = 4;</code>
     */
    boolean hasCorrelationId();
    /**
     * <pre>
     *&#47; Must only be set from the messageId of a received message. If there is not a received message being responded to, do not set any value other than the default. Initiators of interactions should never set correlationId, it is for point to point request/response only.
     * </pre>
     *
     * <code>optional int32 correlationId = 4;</code>
     */
    int getCorrelationId();

    /**
     * <pre>
     *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
     * </pre>
     *
     * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
     */
    java.util.List<com.fca.uconnect.global.GlobalUconnectControl.UconnectAny> 
        getMessagesList();
    /**
     * <pre>
     *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
     * </pre>
     *
     * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
     */
    com.fca.uconnect.global.GlobalUconnectControl.UconnectAny getMessages(int index);
    /**
     * <pre>
     *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
     * </pre>
     *
     * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
     */
    int getMessagesCount();
    /**
     * <pre>
     *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
     * </pre>
     *
     * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
     */
    java.util.List<? extends com.fca.uconnect.global.GlobalUconnectControl.UconnectAnyOrBuilder> 
        getMessagesOrBuilderList();
    /**
     * <pre>
     *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
     * </pre>
     *
     * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
     */
    com.fca.uconnect.global.GlobalUconnectControl.UconnectAnyOrBuilder getMessagesOrBuilder(
        int index);

    /**
     * <pre>
     *&#47; The global api version to provide guidance to the backend for message routing in a multi-version environment.
     * </pre>
     *
     * <code>optional bytes apiVersionId = 6;</code>
     */
    boolean hasApiVersionId();
    /**
     * <pre>
     *&#47; The global api version to provide guidance to the backend for message routing in a multi-version environment.
     * </pre>
     *
     * <code>optional bytes apiVersionId = 6;</code>
     */
    com.google.protobuf.ByteString getApiVersionId();
  }
  /**
   * <pre>
   **
   * The UconnectMessage is the top level protocol buffer message for this API and contains header elements that are common to all messages.
   * Use of correlationId/messageId
   * The transport layer between the vehicle and services for the API is MQTT, which supports only the publish/subscribe messaging pattern. MQTT does not have any inherent mechanism for correlating sequences of messages, so the UconnectMessage includes messageId and correlationId attributes for this purpose. 
   * While a particular implemenation may make messageId a monotonically increasing unique sequence, it is not a requirement to do so and applications should not count on such behavior. Awareness of how an implementation generates messageId may be helpful for maintenance and debug, but properties such as uniqueness across sessions or application restarts should not be assumed.
   * Following diagrams are intended as an illustration of the concept of request/response correlation and should not be considered as any kind of suggested application architecture.
   * The following Diagram depicts how Client should implement Request/Response with messageId/correlationId.
   * &lt;img class=img-border src=./images/reqresp.png&gt;
   * The following Diagram depicts how SDP should implement Request/Response with messageId/correlationId.
   * &lt;img class=img-border style=margin-left:0em; src=./images/reqrespfromsdp.png&gt;
   * &lt;table class=sequence-table&gt;&lt;thead&gt;&lt;tr&gt;
   * &lt;td&gt;Title&lt;/td&gt;&lt;td&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;
   * &lt;tbody&gt;
   * &lt;tr&gt;&lt;td&gt;New Request/Response Interaction&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP starts new Request Response interaction to a Topic.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;Create Interaction Context &lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP creates Message with required information&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;newMessageId = nextMessageID()&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP generates the messageId for the message by incrementing a sequence counter and assign it to newMessageID&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;Put(newMessageId,interactionContext)&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;Create Message&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP creates message with interaction context.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;message.messageID = newMessageID &lt;/td&gt;&lt;td&gt;&lt;p&gt;Add the newly generated messageId to UconnectMessage.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;Publish Message&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP publishes the message to MQTT broker topic. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;Read Message&lt;/td&gt;&lt;td&gt;&lt;p&gt;The TBM/HU reads the message from subscribed MQTT Broker topic.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;Create Response&lt;/td&gt;&lt;td&gt;&lt;p&gt;The TBM/HU creates response message with required information.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;response.correlationID=message.messageID&lt;/td&gt;&lt;td&gt;&lt;p&gt;The TBM/HU correlationId set to the messageId from the received  Message.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;Publish Response&lt;/td&gt;&lt;td&gt;&lt;p&gt;The TBM/HU publishes response message to MQTT Broker topic.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;Read Response&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP reads the response message from subscribed MQTT Broker topic.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;interactionContext = get(response.correlationID)&lt;/td&gt;&lt;td&gt;&lt;p&gt;The TBM/HU verifies the correlationId matches the messageId of the sent request and assigns received Response to a required message.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;process Response&lt;/td&gt;&lt;td&gt;&lt;p&gt;TBM/HU process response message .&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;delete(response.correlationID)&lt;/td&gt;&lt;td&gt;&lt;p&gt;TBM/HU reads the message from MQTT Broker.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;/tbody&gt;
   * &lt;/table&gt;
   *  The following Diagram depicts how SDP initiate publish with no response.
   * &lt;img class=img-border src=./images/pubsubfromsdp.png&gt;
   * &lt;table class=sequence-table&gt;&lt;thead&gt;&lt;tr&gt;
   * &lt;td&gt;Title&lt;/td&gt;&lt;td&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;
   * &lt;tbody&gt;
   * &lt;tr&gt;&lt;td&gt;New Publish Interaction&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP starts new Publish interaction to a Topic.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;Create Message &lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP creates Message with required information&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;message.messageID = 0&lt;/td&gt;&lt;td&gt;&lt;p&gt;The Message id is defaulted to 0 as there is no response and no correlation Id from TBM/HU.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;Publish Message&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP Publish the message to required Topic through MQTT broker&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;tr&gt;&lt;td&gt;Read Message&lt;/td&gt;&lt;td&gt;&lt;p&gt;TBM/HU reads the message from MQTT Broker.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
   * &lt;/tbody&gt;
   * &lt;/table&gt;
   * </pre>
   *
   * Protobuf type {@code com.fca.uconnect.global.UconnectMessage}
   */
  public  static final class UconnectMessage extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.fca.uconnect.global.UconnectMessage)
      UconnectMessageOrBuilder {
    // Use UconnectMessage.newBuilder() to construct.
    private UconnectMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private UconnectMessage() {
      timestamp_ = 0L;
      sessionId_ = com.google.protobuf.ByteString.EMPTY;
      messageId_ = 0;
      correlationId_ = 0;
      messages_ = java.util.Collections.emptyList();
      apiVersionId_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private UconnectMessage(
        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;
              timestamp_ = input.readInt64();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              sessionId_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              messageId_ = input.readInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              correlationId_ = input.readInt32();
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                messages_ = new java.util.ArrayList<com.fca.uconnect.global.GlobalUconnectControl.UconnectAny>();
                mutable_bitField0_ |= 0x00000010;
              }
              messages_.add(
                  input.readMessage(com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.PARSER, extensionRegistry));
              break;
            }
            case 50: {
              bitField0_ |= 0x00000010;
              apiVersionId_ = input.readBytes();
              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_ & 0x00000010) == 0x00000010)) {
          messages_ = java.util.Collections.unmodifiableList(messages_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_UconnectMessage_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_UconnectMessage_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage.class, com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage.Builder.class);
    }

    private int bitField0_;
    public static final int TIMESTAMP_FIELD_NUMBER = 1;
    private long timestamp_;
    /**
     * <pre>
     *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
     * </pre>
     *
     * <code>optional int64 timestamp = 1;</code>
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
     * </pre>
     *
     * <code>optional int64 timestamp = 1;</code>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    public static final int SESSIONID_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString sessionId_;
    /**
     * <pre>
     *&#47; may contain any arbitrary sequence of bytes. Intended for implementations where parties to a session need to share a session identifier. Implementations that do so will be able to use sessionId and messageId to correlate logged messages for diagnostic/debug purposes.
     * </pre>
     *
     * <code>optional bytes sessionId = 2;</code>
     */
    public boolean hasSessionId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     *&#47; may contain any arbitrary sequence of bytes. Intended for implementations where parties to a session need to share a session identifier. Implementations that do so will be able to use sessionId and messageId to correlate logged messages for diagnostic/debug purposes.
     * </pre>
     *
     * <code>optional bytes sessionId = 2;</code>
     */
    public com.google.protobuf.ByteString getSessionId() {
      return sessionId_;
    }

    public static final int MESSAGEID_FIELD_NUMBER = 3;
    private int messageId_;
    /**
     * <pre>
     *&#47; Assigned to each message by the creator, to allow receivers to reply with correlation. Single node clients can use a per application instance global variable that increments with every message, with a range of -2^31-2^31-1. Clients that are clustered should assign a range of messageIds to each node in the cluster, with the full range equally apportioned.
     * </pre>
     *
     * <code>optional int32 messageId = 3;</code>
     */
    public boolean hasMessageId() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     *&#47; Assigned to each message by the creator, to allow receivers to reply with correlation. Single node clients can use a per application instance global variable that increments with every message, with a range of -2^31-2^31-1. Clients that are clustered should assign a range of messageIds to each node in the cluster, with the full range equally apportioned.
     * </pre>
     *
     * <code>optional int32 messageId = 3;</code>
     */
    public int getMessageId() {
      return messageId_;
    }

    public static final int CORRELATIONID_FIELD_NUMBER = 4;
    private int correlationId_;
    /**
     * <pre>
     *&#47; Must only be set from the messageId of a received message. If there is not a received message being responded to, do not set any value other than the default. Initiators of interactions should never set correlationId, it is for point to point request/response only.
     * </pre>
     *
     * <code>optional int32 correlationId = 4;</code>
     */
    public boolean hasCorrelationId() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     *&#47; Must only be set from the messageId of a received message. If there is not a received message being responded to, do not set any value other than the default. Initiators of interactions should never set correlationId, it is for point to point request/response only.
     * </pre>
     *
     * <code>optional int32 correlationId = 4;</code>
     */
    public int getCorrelationId() {
      return correlationId_;
    }

    public static final int MESSAGES_FIELD_NUMBER = 5;
    private java.util.List<com.fca.uconnect.global.GlobalUconnectControl.UconnectAny> messages_;
    /**
     * <pre>
     *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
     * </pre>
     *
     * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
     */
    public java.util.List<com.fca.uconnect.global.GlobalUconnectControl.UconnectAny> getMessagesList() {
      return messages_;
    }
    /**
     * <pre>
     *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
     * </pre>
     *
     * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
     */
    public java.util.List<? extends com.fca.uconnect.global.GlobalUconnectControl.UconnectAnyOrBuilder> 
        getMessagesOrBuilderList() {
      return messages_;
    }
    /**
     * <pre>
     *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
     * </pre>
     *
     * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
     */
    public int getMessagesCount() {
      return messages_.size();
    }
    /**
     * <pre>
     *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
     * </pre>
     *
     * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
     */
    public com.fca.uconnect.global.GlobalUconnectControl.UconnectAny getMessages(int index) {
      return messages_.get(index);
    }
    /**
     * <pre>
     *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
     * </pre>
     *
     * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
     */
    public com.fca.uconnect.global.GlobalUconnectControl.UconnectAnyOrBuilder getMessagesOrBuilder(
        int index) {
      return messages_.get(index);
    }

    public static final int APIVERSIONID_FIELD_NUMBER = 6;
    private com.google.protobuf.ByteString apiVersionId_;
    /**
     * <pre>
     *&#47; The global api version to provide guidance to the backend for message routing in a multi-version environment.
     * </pre>
     *
     * <code>optional bytes apiVersionId = 6;</code>
     */
    public boolean hasApiVersionId() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <pre>
     *&#47; The global api version to provide guidance to the backend for message routing in a multi-version environment.
     * </pre>
     *
     * <code>optional bytes apiVersionId = 6;</code>
     */
    public com.google.protobuf.ByteString getApiVersionId() {
      return apiVersionId_;
    }

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

      for (int i = 0; i < getMessagesCount(); i++) {
        if (!getMessages(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, sessionId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, messageId_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, correlationId_);
      }
      for (int i = 0; i < messages_.size(); i++) {
        output.writeMessage(5, messages_.get(i));
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(6, apiVersionId_);
      }
      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
          .computeInt64Size(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, sessionId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, messageId_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, correlationId_);
      }
      for (int i = 0; i < messages_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, messages_.get(i));
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, apiVersionId_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage)) {
        return super.equals(obj);
      }
      com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage other = (com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage) obj;

      boolean result = true;
      result = result && (hasTimestamp() == other.hasTimestamp());
      if (hasTimestamp()) {
        result = result && (getTimestamp()
            == other.getTimestamp());
      }
      result = result && (hasSessionId() == other.hasSessionId());
      if (hasSessionId()) {
        result = result && getSessionId()
            .equals(other.getSessionId());
      }
      result = result && (hasMessageId() == other.hasMessageId());
      if (hasMessageId()) {
        result = result && (getMessageId()
            == other.getMessageId());
      }
      result = result && (hasCorrelationId() == other.hasCorrelationId());
      if (hasCorrelationId()) {
        result = result && (getCorrelationId()
            == other.getCorrelationId());
      }
      result = result && getMessagesList()
          .equals(other.getMessagesList());
      result = result && (hasApiVersionId() == other.hasApiVersionId());
      if (hasApiVersionId()) {
        result = result && getApiVersionId()
            .equals(other.getApiVersionId());
      }
      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) + getDescriptorForType().hashCode();
      if (hasTimestamp()) {
        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getTimestamp());
      }
      if (hasSessionId()) {
        hash = (37 * hash) + SESSIONID_FIELD_NUMBER;
        hash = (53 * hash) + getSessionId().hashCode();
      }
      if (hasMessageId()) {
        hash = (37 * hash) + MESSAGEID_FIELD_NUMBER;
        hash = (53 * hash) + getMessageId();
      }
      if (hasCorrelationId()) {
        hash = (37 * hash) + CORRELATIONID_FIELD_NUMBER;
        hash = (53 * hash) + getCorrelationId();
      }
      if (getMessagesCount() > 0) {
        hash = (37 * hash) + MESSAGES_FIELD_NUMBER;
        hash = (53 * hash) + getMessagesList().hashCode();
      }
      if (hasApiVersionId()) {
        hash = (37 * hash) + APIVERSIONID_FIELD_NUMBER;
        hash = (53 * hash) + getApiVersionId().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage 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 com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage 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 com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage 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(com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage 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>
     **
     * The UconnectMessage is the top level protocol buffer message for this API and contains header elements that are common to all messages.
     * Use of correlationId/messageId
     * The transport layer between the vehicle and services for the API is MQTT, which supports only the publish/subscribe messaging pattern. MQTT does not have any inherent mechanism for correlating sequences of messages, so the UconnectMessage includes messageId and correlationId attributes for this purpose. 
     * While a particular implemenation may make messageId a monotonically increasing unique sequence, it is not a requirement to do so and applications should not count on such behavior. Awareness of how an implementation generates messageId may be helpful for maintenance and debug, but properties such as uniqueness across sessions or application restarts should not be assumed.
     * Following diagrams are intended as an illustration of the concept of request/response correlation and should not be considered as any kind of suggested application architecture.
     * The following Diagram depicts how Client should implement Request/Response with messageId/correlationId.
     * &lt;img class=img-border src=./images/reqresp.png&gt;
     * The following Diagram depicts how SDP should implement Request/Response with messageId/correlationId.
     * &lt;img class=img-border style=margin-left:0em; src=./images/reqrespfromsdp.png&gt;
     * &lt;table class=sequence-table&gt;&lt;thead&gt;&lt;tr&gt;
     * &lt;td&gt;Title&lt;/td&gt;&lt;td&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;
     * &lt;tbody&gt;
     * &lt;tr&gt;&lt;td&gt;New Request/Response Interaction&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP starts new Request Response interaction to a Topic.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;Create Interaction Context &lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP creates Message with required information&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;newMessageId = nextMessageID()&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP generates the messageId for the message by incrementing a sequence counter and assign it to newMessageID&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;Put(newMessageId,interactionContext)&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;Create Message&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP creates message with interaction context.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;message.messageID = newMessageID &lt;/td&gt;&lt;td&gt;&lt;p&gt;Add the newly generated messageId to UconnectMessage.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;Publish Message&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP publishes the message to MQTT broker topic. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;Read Message&lt;/td&gt;&lt;td&gt;&lt;p&gt;The TBM/HU reads the message from subscribed MQTT Broker topic.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;Create Response&lt;/td&gt;&lt;td&gt;&lt;p&gt;The TBM/HU creates response message with required information.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;response.correlationID=message.messageID&lt;/td&gt;&lt;td&gt;&lt;p&gt;The TBM/HU correlationId set to the messageId from the received  Message.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;Publish Response&lt;/td&gt;&lt;td&gt;&lt;p&gt;The TBM/HU publishes response message to MQTT Broker topic.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;Read Response&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP reads the response message from subscribed MQTT Broker topic.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;interactionContext = get(response.correlationID)&lt;/td&gt;&lt;td&gt;&lt;p&gt;The TBM/HU verifies the correlationId matches the messageId of the sent request and assigns received Response to a required message.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;process Response&lt;/td&gt;&lt;td&gt;&lt;p&gt;TBM/HU process response message .&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;delete(response.correlationID)&lt;/td&gt;&lt;td&gt;&lt;p&gt;TBM/HU reads the message from MQTT Broker.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;/tbody&gt;
     * &lt;/table&gt;
     *  The following Diagram depicts how SDP initiate publish with no response.
     * &lt;img class=img-border src=./images/pubsubfromsdp.png&gt;
     * &lt;table class=sequence-table&gt;&lt;thead&gt;&lt;tr&gt;
     * &lt;td&gt;Title&lt;/td&gt;&lt;td&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;
     * &lt;tbody&gt;
     * &lt;tr&gt;&lt;td&gt;New Publish Interaction&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP starts new Publish interaction to a Topic.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;Create Message &lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP creates Message with required information&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;message.messageID = 0&lt;/td&gt;&lt;td&gt;&lt;p&gt;The Message id is defaulted to 0 as there is no response and no correlation Id from TBM/HU.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;Publish Message&lt;/td&gt;&lt;td&gt;&lt;p&gt;The SDP Publish the message to required Topic through MQTT broker&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;tr&gt;&lt;td&gt;Read Message&lt;/td&gt;&lt;td&gt;&lt;p&gt;TBM/HU reads the message from MQTT Broker.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
     * &lt;/tbody&gt;
     * &lt;/table&gt;
     * </pre>
     *
     * Protobuf type {@code com.fca.uconnect.global.UconnectMessage}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.fca.uconnect.global.UconnectMessage)
        com.fca.uconnect.global.GlobalUconnectControl.UconnectMessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_UconnectMessage_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_UconnectMessage_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage.class, com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage.Builder.class);
      }

      // Construct using com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMessagesFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        sessionId_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        messageId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        correlationId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (messagesBuilder_ == null) {
          messages_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          messagesBuilder_.clear();
        }
        apiVersionId_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_UconnectMessage_descriptor;
      }

      public com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage getDefaultInstanceForType() {
        return com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage.getDefaultInstance();
      }

      public com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage build() {
        com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage buildPartial() {
        com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage result = new com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.timestamp_ = timestamp_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.sessionId_ = sessionId_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.messageId_ = messageId_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.correlationId_ = correlationId_;
        if (messagesBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            messages_ = java.util.Collections.unmodifiableList(messages_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.messages_ = messages_;
        } else {
          result.messages_ = messagesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.apiVersionId_ = apiVersionId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage) {
          return mergeFrom((com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage other) {
        if (other == com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage.getDefaultInstance()) return this;
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        if (other.hasSessionId()) {
          setSessionId(other.getSessionId());
        }
        if (other.hasMessageId()) {
          setMessageId(other.getMessageId());
        }
        if (other.hasCorrelationId()) {
          setCorrelationId(other.getCorrelationId());
        }
        if (messagesBuilder_ == null) {
          if (!other.messages_.isEmpty()) {
            if (messages_.isEmpty()) {
              messages_ = other.messages_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureMessagesIsMutable();
              messages_.addAll(other.messages_);
            }
            onChanged();
          }
        } else {
          if (!other.messages_.isEmpty()) {
            if (messagesBuilder_.isEmpty()) {
              messagesBuilder_.dispose();
              messagesBuilder_ = null;
              messages_ = other.messages_;
              bitField0_ = (bitField0_ & ~0x00000010);
              messagesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMessagesFieldBuilder() : null;
            } else {
              messagesBuilder_.addAllMessages(other.messages_);
            }
          }
        }
        if (other.hasApiVersionId()) {
          setApiVersionId(other.getApiVersionId());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getMessagesCount(); i++) {
          if (!getMessages(i).isInitialized()) {
            return false;
          }
        }
        return true;
      }

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

      private long timestamp_ ;
      /**
       * <pre>
       *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
       * </pre>
       *
       * <code>optional int64 timestamp = 1;</code>
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
       * </pre>
       *
       * <code>optional int64 timestamp = 1;</code>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <pre>
       *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
       * </pre>
       *
       * <code>optional int64 timestamp = 1;</code>
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000001;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
       * </pre>
       *
       * <code>optional int64 timestamp = 1;</code>
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000001);
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString sessionId_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       *&#47; may contain any arbitrary sequence of bytes. Intended for implementations where parties to a session need to share a session identifier. Implementations that do so will be able to use sessionId and messageId to correlate logged messages for diagnostic/debug purposes.
       * </pre>
       *
       * <code>optional bytes sessionId = 2;</code>
       */
      public boolean hasSessionId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       *&#47; may contain any arbitrary sequence of bytes. Intended for implementations where parties to a session need to share a session identifier. Implementations that do so will be able to use sessionId and messageId to correlate logged messages for diagnostic/debug purposes.
       * </pre>
       *
       * <code>optional bytes sessionId = 2;</code>
       */
      public com.google.protobuf.ByteString getSessionId() {
        return sessionId_;
      }
      /**
       * <pre>
       *&#47; may contain any arbitrary sequence of bytes. Intended for implementations where parties to a session need to share a session identifier. Implementations that do so will be able to use sessionId and messageId to correlate logged messages for diagnostic/debug purposes.
       * </pre>
       *
       * <code>optional bytes sessionId = 2;</code>
       */
      public Builder setSessionId(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        sessionId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47; may contain any arbitrary sequence of bytes. Intended for implementations where parties to a session need to share a session identifier. Implementations that do so will be able to use sessionId and messageId to correlate logged messages for diagnostic/debug purposes.
       * </pre>
       *
       * <code>optional bytes sessionId = 2;</code>
       */
      public Builder clearSessionId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        sessionId_ = getDefaultInstance().getSessionId();
        onChanged();
        return this;
      }

      private int messageId_ ;
      /**
       * <pre>
       *&#47; Assigned to each message by the creator, to allow receivers to reply with correlation. Single node clients can use a per application instance global variable that increments with every message, with a range of -2^31-2^31-1. Clients that are clustered should assign a range of messageIds to each node in the cluster, with the full range equally apportioned.
       * </pre>
       *
       * <code>optional int32 messageId = 3;</code>
       */
      public boolean hasMessageId() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       *&#47; Assigned to each message by the creator, to allow receivers to reply with correlation. Single node clients can use a per application instance global variable that increments with every message, with a range of -2^31-2^31-1. Clients that are clustered should assign a range of messageIds to each node in the cluster, with the full range equally apportioned.
       * </pre>
       *
       * <code>optional int32 messageId = 3;</code>
       */
      public int getMessageId() {
        return messageId_;
      }
      /**
       * <pre>
       *&#47; Assigned to each message by the creator, to allow receivers to reply with correlation. Single node clients can use a per application instance global variable that increments with every message, with a range of -2^31-2^31-1. Clients that are clustered should assign a range of messageIds to each node in the cluster, with the full range equally apportioned.
       * </pre>
       *
       * <code>optional int32 messageId = 3;</code>
       */
      public Builder setMessageId(int value) {
        bitField0_ |= 0x00000004;
        messageId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47; Assigned to each message by the creator, to allow receivers to reply with correlation. Single node clients can use a per application instance global variable that increments with every message, with a range of -2^31-2^31-1. Clients that are clustered should assign a range of messageIds to each node in the cluster, with the full range equally apportioned.
       * </pre>
       *
       * <code>optional int32 messageId = 3;</code>
       */
      public Builder clearMessageId() {
        bitField0_ = (bitField0_ & ~0x00000004);
        messageId_ = 0;
        onChanged();
        return this;
      }

      private int correlationId_ ;
      /**
       * <pre>
       *&#47; Must only be set from the messageId of a received message. If there is not a received message being responded to, do not set any value other than the default. Initiators of interactions should never set correlationId, it is for point to point request/response only.
       * </pre>
       *
       * <code>optional int32 correlationId = 4;</code>
       */
      public boolean hasCorrelationId() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       *&#47; Must only be set from the messageId of a received message. If there is not a received message being responded to, do not set any value other than the default. Initiators of interactions should never set correlationId, it is for point to point request/response only.
       * </pre>
       *
       * <code>optional int32 correlationId = 4;</code>
       */
      public int getCorrelationId() {
        return correlationId_;
      }
      /**
       * <pre>
       *&#47; Must only be set from the messageId of a received message. If there is not a received message being responded to, do not set any value other than the default. Initiators of interactions should never set correlationId, it is for point to point request/response only.
       * </pre>
       *
       * <code>optional int32 correlationId = 4;</code>
       */
      public Builder setCorrelationId(int value) {
        bitField0_ |= 0x00000008;
        correlationId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47; Must only be set from the messageId of a received message. If there is not a received message being responded to, do not set any value other than the default. Initiators of interactions should never set correlationId, it is for point to point request/response only.
       * </pre>
       *
       * <code>optional int32 correlationId = 4;</code>
       */
      public Builder clearCorrelationId() {
        bitField0_ = (bitField0_ & ~0x00000008);
        correlationId_ = 0;
        onChanged();
        return this;
      }

      private java.util.List<com.fca.uconnect.global.GlobalUconnectControl.UconnectAny> messages_ =
        java.util.Collections.emptyList();
      private void ensureMessagesIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          messages_ = new java.util.ArrayList<com.fca.uconnect.global.GlobalUconnectControl.UconnectAny>(messages_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.fca.uconnect.global.GlobalUconnectControl.UconnectAny, com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder, com.fca.uconnect.global.GlobalUconnectControl.UconnectAnyOrBuilder> messagesBuilder_;

      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public java.util.List<com.fca.uconnect.global.GlobalUconnectControl.UconnectAny> getMessagesList() {
        if (messagesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(messages_);
        } else {
          return messagesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public int getMessagesCount() {
        if (messagesBuilder_ == null) {
          return messages_.size();
        } else {
          return messagesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public com.fca.uconnect.global.GlobalUconnectControl.UconnectAny getMessages(int index) {
        if (messagesBuilder_ == null) {
          return messages_.get(index);
        } else {
          return messagesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public Builder setMessages(
          int index, com.fca.uconnect.global.GlobalUconnectControl.UconnectAny value) {
        if (messagesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMessagesIsMutable();
          messages_.set(index, value);
          onChanged();
        } else {
          messagesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public Builder setMessages(
          int index, com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder builderForValue) {
        if (messagesBuilder_ == null) {
          ensureMessagesIsMutable();
          messages_.set(index, builderForValue.build());
          onChanged();
        } else {
          messagesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public Builder addMessages(com.fca.uconnect.global.GlobalUconnectControl.UconnectAny value) {
        if (messagesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMessagesIsMutable();
          messages_.add(value);
          onChanged();
        } else {
          messagesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public Builder addMessages(
          int index, com.fca.uconnect.global.GlobalUconnectControl.UconnectAny value) {
        if (messagesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMessagesIsMutable();
          messages_.add(index, value);
          onChanged();
        } else {
          messagesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public Builder addMessages(
          com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder builderForValue) {
        if (messagesBuilder_ == null) {
          ensureMessagesIsMutable();
          messages_.add(builderForValue.build());
          onChanged();
        } else {
          messagesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public Builder addMessages(
          int index, com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder builderForValue) {
        if (messagesBuilder_ == null) {
          ensureMessagesIsMutable();
          messages_.add(index, builderForValue.build());
          onChanged();
        } else {
          messagesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public Builder addAllMessages(
          java.lang.Iterable<? extends com.fca.uconnect.global.GlobalUconnectControl.UconnectAny> values) {
        if (messagesBuilder_ == null) {
          ensureMessagesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, messages_);
          onChanged();
        } else {
          messagesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public Builder clearMessages() {
        if (messagesBuilder_ == null) {
          messages_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          messagesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public Builder removeMessages(int index) {
        if (messagesBuilder_ == null) {
          ensureMessagesIsMutable();
          messages_.remove(index);
          onChanged();
        } else {
          messagesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder getMessagesBuilder(
          int index) {
        return getMessagesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public com.fca.uconnect.global.GlobalUconnectControl.UconnectAnyOrBuilder getMessagesOrBuilder(
          int index) {
        if (messagesBuilder_ == null) {
          return messages_.get(index);  } else {
          return messagesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public java.util.List<? extends com.fca.uconnect.global.GlobalUconnectControl.UconnectAnyOrBuilder> 
           getMessagesOrBuilderList() {
        if (messagesBuilder_ != null) {
          return messagesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(messages_);
        }
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder addMessagesBuilder() {
        return getMessagesFieldBuilder().addBuilder(
            com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.getDefaultInstance());
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder addMessagesBuilder(
          int index) {
        return getMessagesFieldBuilder().addBuilder(
            index, com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.getDefaultInstance());
      }
      /**
       * <pre>
       *&#47; A repeated set of UconnectAny messages supports embedding one or more feature specific messages into a single MQTT message.
       * </pre>
       *
       * <code>repeated .com.fca.uconnect.global.UconnectAny messages = 5;</code>
       */
      public java.util.List<com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder> 
           getMessagesBuilderList() {
        return getMessagesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.fca.uconnect.global.GlobalUconnectControl.UconnectAny, com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder, com.fca.uconnect.global.GlobalUconnectControl.UconnectAnyOrBuilder> 
          getMessagesFieldBuilder() {
        if (messagesBuilder_ == null) {
          messagesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.fca.uconnect.global.GlobalUconnectControl.UconnectAny, com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder, com.fca.uconnect.global.GlobalUconnectControl.UconnectAnyOrBuilder>(
                  messages_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          messages_ = null;
        }
        return messagesBuilder_;
      }

      private com.google.protobuf.ByteString apiVersionId_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       *&#47; The global api version to provide guidance to the backend for message routing in a multi-version environment.
       * </pre>
       *
       * <code>optional bytes apiVersionId = 6;</code>
       */
      public boolean hasApiVersionId() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <pre>
       *&#47; The global api version to provide guidance to the backend for message routing in a multi-version environment.
       * </pre>
       *
       * <code>optional bytes apiVersionId = 6;</code>
       */
      public com.google.protobuf.ByteString getApiVersionId() {
        return apiVersionId_;
      }
      /**
       * <pre>
       *&#47; The global api version to provide guidance to the backend for message routing in a multi-version environment.
       * </pre>
       *
       * <code>optional bytes apiVersionId = 6;</code>
       */
      public Builder setApiVersionId(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        apiVersionId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47; The global api version to provide guidance to the backend for message routing in a multi-version environment.
       * </pre>
       *
       * <code>optional bytes apiVersionId = 6;</code>
       */
      public Builder clearApiVersionId() {
        bitField0_ = (bitField0_ & ~0x00000020);
        apiVersionId_ = getDefaultInstance().getApiVersionId();
        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:com.fca.uconnect.global.UconnectMessage)
    }

    // @@protoc_insertion_point(class_scope:com.fca.uconnect.global.UconnectMessage)
    private static final com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage();
    }

    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.fca.uconnect.global.GlobalUconnectControl.UconnectMessage getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface KeepAliveMessageOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.fca.uconnect.global.KeepAliveMessage)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
     * </pre>
     *
     * <code>optional int64 timestamp = 1;</code>
     */
    boolean hasTimestamp();
    /**
     * <pre>
     *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
     * </pre>
     *
     * <code>optional int64 timestamp = 1;</code>
     */
    long getTimestamp();
  }
  /**
   * <pre>
   **
   * The KeepAliveMessage provides a lightweight alternative to the base MQTT keep alive provided in the client library.  The message will be used in the scenario where the client manages the keep alive instead of letting the MQTT client manage the keep alive.
   * This is different from original MQTT Keep Alive,Imperical testing showed the custom KeepAliveMessage resulted in smaller messages over the network. This is in place as an optional approach to using the default keepalive.
   * </pre>
   *
   * Protobuf type {@code com.fca.uconnect.global.KeepAliveMessage}
   */
  public  static final class KeepAliveMessage extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.fca.uconnect.global.KeepAliveMessage)
      KeepAliveMessageOrBuilder {
    // Use KeepAliveMessage.newBuilder() to construct.
    private KeepAliveMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private KeepAliveMessage() {
      timestamp_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private KeepAliveMessage(
        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;
              timestamp_ = input.readInt64();
              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 com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_KeepAliveMessage_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_KeepAliveMessage_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage.class, com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage.Builder.class);
    }

    private int bitField0_;
    public static final int TIMESTAMP_FIELD_NUMBER = 1;
    private long timestamp_;
    /**
     * <pre>
     *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
     * </pre>
     *
     * <code>optional int64 timestamp = 1;</code>
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
     * </pre>
     *
     * <code>optional int64 timestamp = 1;</code>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    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.writeInt64(1, timestamp_);
      }
      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
          .computeInt64Size(1, timestamp_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage)) {
        return super.equals(obj);
      }
      com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage other = (com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage) obj;

      boolean result = true;
      result = result && (hasTimestamp() == other.hasTimestamp());
      if (hasTimestamp()) {
        result = result && (getTimestamp()
            == other.getTimestamp());
      }
      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) + getDescriptorForType().hashCode();
      if (hasTimestamp()) {
        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getTimestamp());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage 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 com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage 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 com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage 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(com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage 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>
     **
     * The KeepAliveMessage provides a lightweight alternative to the base MQTT keep alive provided in the client library.  The message will be used in the scenario where the client manages the keep alive instead of letting the MQTT client manage the keep alive.
     * This is different from original MQTT Keep Alive,Imperical testing showed the custom KeepAliveMessage resulted in smaller messages over the network. This is in place as an optional approach to using the default keepalive.
     * </pre>
     *
     * Protobuf type {@code com.fca.uconnect.global.KeepAliveMessage}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.fca.uconnect.global.KeepAliveMessage)
        com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_KeepAliveMessage_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_KeepAliveMessage_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage.class, com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage.Builder.class);
      }

      // Construct using com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage.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();
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_KeepAliveMessage_descriptor;
      }

      public com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage getDefaultInstanceForType() {
        return com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage.getDefaultInstance();
      }

      public com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage build() {
        com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage buildPartial() {
        com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage result = new com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.timestamp_ = timestamp_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage) {
          return mergeFrom((com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage other) {
        if (other == com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage.getDefaultInstance()) return this;
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        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 {
        com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long timestamp_ ;
      /**
       * <pre>
       *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
       * </pre>
       *
       * <code>optional int64 timestamp = 1;</code>
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
       * </pre>
       *
       * <code>optional int64 timestamp = 1;</code>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <pre>
       *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
       * </pre>
       *
       * <code>optional int64 timestamp = 1;</code>
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000001;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47;The milliseconds since (Jan 1, 1970 00:00:00 UTC) when the message is created. Should come from the system clock of the sender.
       * </pre>
       *
       * <code>optional int64 timestamp = 1;</code>
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000001);
        timestamp_ = 0L;
        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:com.fca.uconnect.global.KeepAliveMessage)
    }

    // @@protoc_insertion_point(class_scope:com.fca.uconnect.global.KeepAliveMessage)
    private static final com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage();
    }

    public static com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.fca.uconnect.global.GlobalUconnectControl.KeepAliveMessage getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AckMessageOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.fca.uconnect.global.AckMessage)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .com.fca.uconnect.global.AckMessage.ResponseEnum response = 1;</code>
     */
    boolean hasResponse();
    /**
     * <code>optional .com.fca.uconnect.global.AckMessage.ResponseEnum response = 1;</code>
     */
    com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum getResponse();

    /**
     * <pre>
     *&#47; Indicates if the error is transient and to attempt a retry.
     * </pre>
     *
     * <code>optional bool isTransient = 2;</code>
     */
    boolean hasIsTransient();
    /**
     * <pre>
     *&#47; Indicates if the error is transient and to attempt a retry.
     * </pre>
     *
     * <code>optional bool isTransient = 2;</code>
     */
    boolean getIsTransient();

    /**
     * <code>optional int32 failureReasonCode = 3;</code>
     */
    boolean hasFailureReasonCode();
    /**
     * <code>optional int32 failureReasonCode = 3;</code>
     */
    int getFailureReasonCode();
  }
  /**
   * Protobuf type {@code com.fca.uconnect.global.AckMessage}
   */
  public  static final class AckMessage extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.fca.uconnect.global.AckMessage)
      AckMessageOrBuilder {
    // Use AckMessage.newBuilder() to construct.
    private AckMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AckMessage() {
      response_ = 0;
      isTransient_ = false;
      failureReasonCode_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AckMessage(
        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: {
              int rawValue = input.readEnum();
              com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum value = com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                response_ = rawValue;
              }
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              isTransient_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              failureReasonCode_ = input.readInt32();
              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 com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_AckMessage_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_AckMessage_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.fca.uconnect.global.GlobalUconnectControl.AckMessage.class, com.fca.uconnect.global.GlobalUconnectControl.AckMessage.Builder.class);
    }

    /**
     * Protobuf enum {@code com.fca.uconnect.global.AckMessage.ResponseEnum}
     */
    public enum ResponseEnum
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>SUCCESS = 0;</code>
       */
      SUCCESS(0),
      /**
       * <code>FAILURE = 1;</code>
       */
      FAILURE(1),
      ;

      /**
       * <code>SUCCESS = 0;</code>
       */
      public static final int SUCCESS_VALUE = 0;
      /**
       * <code>FAILURE = 1;</code>
       */
      public static final int FAILURE_VALUE = 1;


      public final int getNumber() {
        return value;
      }

      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ResponseEnum valueOf(int value) {
        return forNumber(value);
      }

      public static ResponseEnum forNumber(int value) {
        switch (value) {
          case 0: return SUCCESS;
          case 1: return FAILURE;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<ResponseEnum>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          ResponseEnum> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<ResponseEnum>() {
              public ResponseEnum findValueByNumber(int number) {
                return ResponseEnum.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.fca.uconnect.global.GlobalUconnectControl.AckMessage.getDescriptor().getEnumTypes().get(0);
      }

      private static final ResponseEnum[] VALUES = values();

      public static ResponseEnum valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private ResponseEnum(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:com.fca.uconnect.global.AckMessage.ResponseEnum)
    }

    private int bitField0_;
    public static final int RESPONSE_FIELD_NUMBER = 1;
    private int response_;
    /**
     * <code>optional .com.fca.uconnect.global.AckMessage.ResponseEnum response = 1;</code>
     */
    public boolean hasResponse() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .com.fca.uconnect.global.AckMessage.ResponseEnum response = 1;</code>
     */
    public com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum getResponse() {
      com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum result = com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum.valueOf(response_);
      return result == null ? com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum.SUCCESS : result;
    }

    public static final int ISTRANSIENT_FIELD_NUMBER = 2;
    private boolean isTransient_;
    /**
     * <pre>
     *&#47; Indicates if the error is transient and to attempt a retry.
     * </pre>
     *
     * <code>optional bool isTransient = 2;</code>
     */
    public boolean hasIsTransient() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     *&#47; Indicates if the error is transient and to attempt a retry.
     * </pre>
     *
     * <code>optional bool isTransient = 2;</code>
     */
    public boolean getIsTransient() {
      return isTransient_;
    }

    public static final int FAILUREREASONCODE_FIELD_NUMBER = 3;
    private int failureReasonCode_;
    /**
     * <code>optional int32 failureReasonCode = 3;</code>
     */
    public boolean hasFailureReasonCode() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 failureReasonCode = 3;</code>
     */
    public int getFailureReasonCode() {
      return failureReasonCode_;
    }

    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.writeEnum(1, response_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, isTransient_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, failureReasonCode_);
      }
      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
          .computeEnumSize(1, response_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, isTransient_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, failureReasonCode_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.fca.uconnect.global.GlobalUconnectControl.AckMessage)) {
        return super.equals(obj);
      }
      com.fca.uconnect.global.GlobalUconnectControl.AckMessage other = (com.fca.uconnect.global.GlobalUconnectControl.AckMessage) obj;

      boolean result = true;
      result = result && (hasResponse() == other.hasResponse());
      if (hasResponse()) {
        result = result && response_ == other.response_;
      }
      result = result && (hasIsTransient() == other.hasIsTransient());
      if (hasIsTransient()) {
        result = result && (getIsTransient()
            == other.getIsTransient());
      }
      result = result && (hasFailureReasonCode() == other.hasFailureReasonCode());
      if (hasFailureReasonCode()) {
        result = result && (getFailureReasonCode()
            == other.getFailureReasonCode());
      }
      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) + getDescriptorForType().hashCode();
      if (hasResponse()) {
        hash = (37 * hash) + RESPONSE_FIELD_NUMBER;
        hash = (53 * hash) + response_;
      }
      if (hasIsTransient()) {
        hash = (37 * hash) + ISTRANSIENT_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getIsTransient());
      }
      if (hasFailureReasonCode()) {
        hash = (37 * hash) + FAILUREREASONCODE_FIELD_NUMBER;
        hash = (53 * hash) + getFailureReasonCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.fca.uconnect.global.GlobalUconnectControl.AckMessage parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.AckMessage parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.AckMessage parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.AckMessage parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.AckMessage parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.AckMessage 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 com.fca.uconnect.global.GlobalUconnectControl.AckMessage parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.AckMessage 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 com.fca.uconnect.global.GlobalUconnectControl.AckMessage parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.AckMessage 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(com.fca.uconnect.global.GlobalUconnectControl.AckMessage 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 com.fca.uconnect.global.AckMessage}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.fca.uconnect.global.AckMessage)
        com.fca.uconnect.global.GlobalUconnectControl.AckMessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_AckMessage_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_AckMessage_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.fca.uconnect.global.GlobalUconnectControl.AckMessage.class, com.fca.uconnect.global.GlobalUconnectControl.AckMessage.Builder.class);
      }

      // Construct using com.fca.uconnect.global.GlobalUconnectControl.AckMessage.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();
        response_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        isTransient_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        failureReasonCode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_AckMessage_descriptor;
      }

      public com.fca.uconnect.global.GlobalUconnectControl.AckMessage getDefaultInstanceForType() {
        return com.fca.uconnect.global.GlobalUconnectControl.AckMessage.getDefaultInstance();
      }

      public com.fca.uconnect.global.GlobalUconnectControl.AckMessage build() {
        com.fca.uconnect.global.GlobalUconnectControl.AckMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.fca.uconnect.global.GlobalUconnectControl.AckMessage buildPartial() {
        com.fca.uconnect.global.GlobalUconnectControl.AckMessage result = new com.fca.uconnect.global.GlobalUconnectControl.AckMessage(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.response_ = response_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.isTransient_ = isTransient_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.failureReasonCode_ = failureReasonCode_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.fca.uconnect.global.GlobalUconnectControl.AckMessage) {
          return mergeFrom((com.fca.uconnect.global.GlobalUconnectControl.AckMessage)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.fca.uconnect.global.GlobalUconnectControl.AckMessage other) {
        if (other == com.fca.uconnect.global.GlobalUconnectControl.AckMessage.getDefaultInstance()) return this;
        if (other.hasResponse()) {
          setResponse(other.getResponse());
        }
        if (other.hasIsTransient()) {
          setIsTransient(other.getIsTransient());
        }
        if (other.hasFailureReasonCode()) {
          setFailureReasonCode(other.getFailureReasonCode());
        }
        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 {
        com.fca.uconnect.global.GlobalUconnectControl.AckMessage parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.fca.uconnect.global.GlobalUconnectControl.AckMessage) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int response_ = 0;
      /**
       * <code>optional .com.fca.uconnect.global.AckMessage.ResponseEnum response = 1;</code>
       */
      public boolean hasResponse() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .com.fca.uconnect.global.AckMessage.ResponseEnum response = 1;</code>
       */
      public com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum getResponse() {
        com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum result = com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum.valueOf(response_);
        return result == null ? com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum.SUCCESS : result;
      }
      /**
       * <code>optional .com.fca.uconnect.global.AckMessage.ResponseEnum response = 1;</code>
       */
      public Builder setResponse(com.fca.uconnect.global.GlobalUconnectControl.AckMessage.ResponseEnum value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        response_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .com.fca.uconnect.global.AckMessage.ResponseEnum response = 1;</code>
       */
      public Builder clearResponse() {
        bitField0_ = (bitField0_ & ~0x00000001);
        response_ = 0;
        onChanged();
        return this;
      }

      private boolean isTransient_ ;
      /**
       * <pre>
       *&#47; Indicates if the error is transient and to attempt a retry.
       * </pre>
       *
       * <code>optional bool isTransient = 2;</code>
       */
      public boolean hasIsTransient() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       *&#47; Indicates if the error is transient and to attempt a retry.
       * </pre>
       *
       * <code>optional bool isTransient = 2;</code>
       */
      public boolean getIsTransient() {
        return isTransient_;
      }
      /**
       * <pre>
       *&#47; Indicates if the error is transient and to attempt a retry.
       * </pre>
       *
       * <code>optional bool isTransient = 2;</code>
       */
      public Builder setIsTransient(boolean value) {
        bitField0_ |= 0x00000002;
        isTransient_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *&#47; Indicates if the error is transient and to attempt a retry.
       * </pre>
       *
       * <code>optional bool isTransient = 2;</code>
       */
      public Builder clearIsTransient() {
        bitField0_ = (bitField0_ & ~0x00000002);
        isTransient_ = false;
        onChanged();
        return this;
      }

      private int failureReasonCode_ ;
      /**
       * <code>optional int32 failureReasonCode = 3;</code>
       */
      public boolean hasFailureReasonCode() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 failureReasonCode = 3;</code>
       */
      public int getFailureReasonCode() {
        return failureReasonCode_;
      }
      /**
       * <code>optional int32 failureReasonCode = 3;</code>
       */
      public Builder setFailureReasonCode(int value) {
        bitField0_ |= 0x00000004;
        failureReasonCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 failureReasonCode = 3;</code>
       */
      public Builder clearFailureReasonCode() {
        bitField0_ = (bitField0_ & ~0x00000004);
        failureReasonCode_ = 0;
        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:com.fca.uconnect.global.AckMessage)
    }

    // @@protoc_insertion_point(class_scope:com.fca.uconnect.global.AckMessage)
    private static final com.fca.uconnect.global.GlobalUconnectControl.AckMessage DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.fca.uconnect.global.GlobalUconnectControl.AckMessage();
    }

    public static com.fca.uconnect.global.GlobalUconnectControl.AckMessage getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.fca.uconnect.global.GlobalUconnectControl.AckMessage getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface UconnectAnyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.fca.uconnect.global.UconnectAny)
      com.google.protobuf.GeneratedMessageV3.
          ExtendableMessageOrBuilder<UconnectAny> {
  }
  /**
   * <pre>
   **
   * The UconnectAny message allows for protocol buffer extensions so feature specific messages are decoupled from the top level message.  It is a placeholder to allow a repeated set of extensions.
   * </pre>
   *
   * Protobuf type {@code com.fca.uconnect.global.UconnectAny}
   */
  public  static final class UconnectAny extends
      com.google.protobuf.GeneratedMessageV3.ExtendableMessage<
        UconnectAny> implements
      // @@protoc_insertion_point(message_implements:com.fca.uconnect.global.UconnectAny)
      UconnectAnyOrBuilder {
    // Use UconnectAny.newBuilder() to construct.
    private UconnectAny(com.google.protobuf.GeneratedMessageV3.ExtendableBuilder<com.fca.uconnect.global.GlobalUconnectControl.UconnectAny, ?> builder) {
      super(builder);
    }
    private UconnectAny() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private UconnectAny(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      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;
            }
          }
        }
      } 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 com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_UconnectAny_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_UconnectAny_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.class, com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder.class);
    }

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

      if (!extensionsAreInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      com.google.protobuf.GeneratedMessageV3
        .ExtendableMessage<com.fca.uconnect.global.GlobalUconnectControl.UconnectAny>.ExtensionWriter
          extensionWriter = newExtensionWriter();
      extensionWriter.writeUntil(10001, output);
      unknownFields.writeTo(output);
    }

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

      size = 0;
      size += extensionsSerializedSize();
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.fca.uconnect.global.GlobalUconnectControl.UconnectAny)) {
        return super.equals(obj);
      }
      com.fca.uconnect.global.GlobalUconnectControl.UconnectAny other = (com.fca.uconnect.global.GlobalUconnectControl.UconnectAny) obj;

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

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      hash = hashFields(hash, getExtensionFields());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectAny parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectAny parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectAny parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectAny parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectAny parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectAny 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 com.fca.uconnect.global.GlobalUconnectControl.UconnectAny parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectAny 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 com.fca.uconnect.global.GlobalUconnectControl.UconnectAny parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectAny 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(com.fca.uconnect.global.GlobalUconnectControl.UconnectAny 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>
     **
     * The UconnectAny message allows for protocol buffer extensions so feature specific messages are decoupled from the top level message.  It is a placeholder to allow a repeated set of extensions.
     * </pre>
     *
     * Protobuf type {@code com.fca.uconnect.global.UconnectAny}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.ExtendableBuilder<
          com.fca.uconnect.global.GlobalUconnectControl.UconnectAny, Builder> implements
        // @@protoc_insertion_point(builder_implements:com.fca.uconnect.global.UconnectAny)
        com.fca.uconnect.global.GlobalUconnectControl.UconnectAnyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_UconnectAny_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_UconnectAny_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.class, com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.Builder.class);
      }

      // Construct using com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.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();
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.fca.uconnect.global.GlobalUconnectControl.internal_static_com_fca_uconnect_global_UconnectAny_descriptor;
      }

      public com.fca.uconnect.global.GlobalUconnectControl.UconnectAny getDefaultInstanceForType() {
        return com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.getDefaultInstance();
      }

      public com.fca.uconnect.global.GlobalUconnectControl.UconnectAny build() {
        com.fca.uconnect.global.GlobalUconnectControl.UconnectAny result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.fca.uconnect.global.GlobalUconnectControl.UconnectAny buildPartial() {
        com.fca.uconnect.global.GlobalUconnectControl.UconnectAny result = new com.fca.uconnect.global.GlobalUconnectControl.UconnectAny(this);
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          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, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public <Type> Builder setExtension(
          com.google.protobuf.GeneratedMessage.GeneratedExtension<
              com.fca.uconnect.global.GlobalUconnectControl.UconnectAny, Type> extension,
          Type value) {
        return (Builder) super.setExtension(extension, value);
      }
      public <Type> Builder setExtension(
          com.google.protobuf.GeneratedMessage.GeneratedExtension<
              com.fca.uconnect.global.GlobalUconnectControl.UconnectAny, java.util.List<Type>> extension,
          int index, Type value) {
        return (Builder) super.setExtension(extension, index, value);
      }
      public <Type> Builder addExtension(
          com.google.protobuf.GeneratedMessage.GeneratedExtension<
              com.fca.uconnect.global.GlobalUconnectControl.UconnectAny, java.util.List<Type>> extension,
          Type value) {
        return (Builder) super.addExtension(extension, value);
      }
      public <Type> Builder clearExtension(
          com.google.protobuf.GeneratedMessage.GeneratedExtension<
              com.fca.uconnect.global.GlobalUconnectControl.UconnectAny, ?> extension) {
        return (Builder) super.clearExtension(extension);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.fca.uconnect.global.GlobalUconnectControl.UconnectAny) {
          return mergeFrom((com.fca.uconnect.global.GlobalUconnectControl.UconnectAny)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.fca.uconnect.global.GlobalUconnectControl.UconnectAny other) {
        if (other == com.fca.uconnect.global.GlobalUconnectControl.UconnectAny.getDefaultInstance()) return this;
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        if (!extensionsAreInitialized()) {
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.fca.uconnect.global.GlobalUconnectControl.UconnectAny parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.fca.uconnect.global.GlobalUconnectControl.UconnectAny) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        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:com.fca.uconnect.global.UconnectAny)
    }

    // @@protoc_insertion_point(class_scope:com.fca.uconnect.global.UconnectAny)
    private static final com.fca.uconnect.global.GlobalUconnectControl.UconnectAny DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.fca.uconnect.global.GlobalUconnectControl.UconnectAny();
    }

    public static com.fca.uconnect.global.GlobalUconnectControl.UconnectAny getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.fca.uconnect.global.GlobalUconnectControl.UconnectAny getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_fca_uconnect_global_UconnectMessage_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_fca_uconnect_global_UconnectMessage_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_fca_uconnect_global_KeepAliveMessage_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_fca_uconnect_global_KeepAliveMessage_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_fca_uconnect_global_AckMessage_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_fca_uconnect_global_AckMessage_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_fca_uconnect_global_UconnectAny_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_fca_uconnect_global_UconnectAny_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\035Global_Uconnect_Control.proto\022\027com.fca" +
      ".uconnect.global\"\257\001\n\017UconnectMessage\022\021\n\t" +
      "timestamp\030\001 \001(\003\022\021\n\tsessionId\030\002 \001(\014\022\021\n\tme" +
      "ssageId\030\003 \001(\005\022\025\n\rcorrelationId\030\004 \001(\005\0226\n\010" +
      "messages\030\005 \003(\0132$.com.fca.uconnect.global" +
      ".UconnectAny\022\024\n\014apiVersionId\030\006 \001(\014\"%\n\020Ke" +
      "epAliveMessage\022\021\n\ttimestamp\030\001 \001(\003\"\252\001\n\nAc" +
      "kMessage\022B\n\010response\030\001 \001(\01620.com.fca.uco" +
      "nnect.global.AckMessage.ResponseEnum\022\023\n\013" +
      "isTransient\030\002 \001(\010\022\031\n\021failureReasonCode\030\003",
      " \001(\005\"(\n\014ResponseEnum\022\013\n\007SUCCESS\020\000\022\013\n\007FAI" +
      "LURE\020\001\"\024\n\013UconnectAny*\005\010\n\020\221N"
    };
    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[] {
        }, assigner);
    internal_static_com_fca_uconnect_global_UconnectMessage_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_com_fca_uconnect_global_UconnectMessage_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_fca_uconnect_global_UconnectMessage_descriptor,
        new java.lang.String[] { "Timestamp", "SessionId", "MessageId", "CorrelationId", "Messages", "ApiVersionId", });
    internal_static_com_fca_uconnect_global_KeepAliveMessage_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_com_fca_uconnect_global_KeepAliveMessage_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_fca_uconnect_global_KeepAliveMessage_descriptor,
        new java.lang.String[] { "Timestamp", });
    internal_static_com_fca_uconnect_global_AckMessage_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_com_fca_uconnect_global_AckMessage_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_fca_uconnect_global_AckMessage_descriptor,
        new java.lang.String[] { "Response", "IsTransient", "FailureReasonCode", });
    internal_static_com_fca_uconnect_global_UconnectAny_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_com_fca_uconnect_global_UconnectAny_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_fca_uconnect_global_UconnectAny_descriptor,
        new java.lang.String[] { });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
