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

package dev.slimevr.bridge;

public final class ProtobufMessages {
	private static final com.google.protobuf.Descriptors.Descriptor internal_static_messages_PingPong_descriptor;
	private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_messages_PingPong_fieldAccessorTable;
	private static final com.google.protobuf.Descriptors.Descriptor internal_static_messages_Position_descriptor;
	private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_messages_Position_fieldAccessorTable;
	private static final com.google.protobuf.Descriptors.Descriptor internal_static_messages_UserAction_descriptor;
	private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_messages_UserAction_fieldAccessorTable;
	private static final com.google.protobuf.Descriptors.Descriptor internal_static_messages_UserAction_ActionArgumentsEntry_descriptor;
	private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_messages_UserAction_ActionArgumentsEntry_fieldAccessorTable;
	private static final com.google.protobuf.Descriptors.Descriptor internal_static_messages_TrackerAdded_descriptor;
	private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_messages_TrackerAdded_fieldAccessorTable;
	private static final com.google.protobuf.Descriptors.Descriptor internal_static_messages_TrackerStatus_descriptor;
	private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_messages_TrackerStatus_fieldAccessorTable;
	private static final com.google.protobuf.Descriptors.Descriptor internal_static_messages_TrackerStatus_ExtraEntry_descriptor;
	private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_messages_TrackerStatus_ExtraEntry_fieldAccessorTable;
	private static final com.google.protobuf.Descriptors.Descriptor internal_static_messages_ProtobufMessage_descriptor;
	private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_messages_ProtobufMessage_fieldAccessorTable;
	private static final com.google.protobuf.Descriptors.FileDescriptor descriptor;

	static {
		java.lang.String[] descriptorData = {
			"\n\026ProtobufMessages.proto\022\010messages\"\n\n\010Pi"
				+
				"ngPong\"\223\002\n\010Position\022\022\n\ntracker_id\030\001 \001(\005\022"
				+
				"\016\n\001x\030\002 \001(\002H\000\210\001\001\022\016\n\001y\030\003 \001(\002H\001\210\001\001\022\016\n\001z\030\004 \001"
				+
				"(\002H\002\210\001\001\022\n\n\002qx\030\005 \001(\002\022\n\n\002qy\030\006 \001(\002\022\n\n\002qz\030\007 "
				+
				"\001(\002\022\n\n\002qw\030\010 \001(\002\0227\n\013data_source\030\t \001(\0162\035.m"
				+
				"essages.Position.DataSourceH\003\210\001\001\"8\n\nData"
				+
				"Source\022\010\n\004NONE\020\000\022\007\n\003IMU\020\001\022\r\n\tPRECISION\020\002"
				+
				"\022\010\n\004FULL\020\003B\004\n\002_xB\004\n\002_yB\004\n\002_zB\016\n\014_data_so"
				+
				"urce\"\227\001\n\nUserAction\022\014\n\004name\030\001 \001(\t\022C\n\020act"
				+
				"ion_arguments\030\002 \003(\0132).messages.UserActio"
				+
				"n.ActionArgumentsEntry\0326\n\024ActionArgument"
				+
				"sEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"f"
				+
				"\n\014TrackerAdded\022\022\n\ntracker_id\030\001 \001(\005\022\026\n\016tr"
				+
				"acker_serial\030\002 \001(\t\022\024\n\014tracker_name\030\003 \001(\t"
				+
				"\022\024\n\014tracker_role\030\004 \001(\005\"\374\002\n\rTrackerStatus"
				+
				"\022\022\n\ntracker_id\030\001 \001(\005\022.\n\006status\030\002 \001(\0162\036.m"
				+
				"essages.TrackerStatus.Status\0221\n\005extra\030\003 "
				+
				"\003(\0132\".messages.TrackerStatus.ExtraEntry\022"
				+
				";\n\nconfidence\030\004 \001(\0162\".messages.TrackerSt"
				+
				"atus.ConfidenceH\000\210\001\001\032,\n\nExtraEntry\022\013\n\003ke"
				+
				"y\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"E\n\006Status\022\020\n\014"
				+
				"DISCONNECTED\020\000\022\006\n\002OK\020\001\022\010\n\004BUSY\020\002\022\t\n\005ERRO"
				+
				"R\020\003\022\014\n\010OCCLUDED\020\004\"3\n\nConfidence\022\006\n\002NO\020\000\022"
				+
				"\007\n\003LOW\020\001\022\n\n\006MEDIUM\020\005\022\010\n\004HIGH\020\nB\r\n\013_confi"
				+
				"dence\"\325\001\n\017ProtobufMessage\022&\n\010position\030\001 "
				+
				"\001(\0132\022.messages.PositionH\000\022+\n\013user_action"
				+
				"\030\002 \001(\0132\024.messages.UserActionH\000\022/\n\rtracke"
				+
				"r_added\030\003 \001(\0132\026.messages.TrackerAddedH\000\022"
				+
				"1\n\016tracker_status\030\004 \001(\0132\027.messages.Track"
				+
				"erStatusH\000B\t\n\007messageB&\n\022dev.slimevr.bri"
				+
				"dgeB\020ProtobufMessagesb\006proto3"
		};
		descriptor = com.google.protobuf.Descriptors.FileDescriptor
			.internalBuildGeneratedFileFrom(
				descriptorData,
				new com.google.protobuf.Descriptors.FileDescriptor[] {
				}
			);
		internal_static_messages_PingPong_descriptor = getDescriptor().getMessageTypes().get(0);
		internal_static_messages_PingPong_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
			internal_static_messages_PingPong_descriptor,
			new java.lang.String[] {}
		);
		internal_static_messages_Position_descriptor = getDescriptor().getMessageTypes().get(1);
		internal_static_messages_Position_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
			internal_static_messages_Position_descriptor,
			new java.lang.String[] { "TrackerId", "X", "Y", "Z", "Qx", "Qy", "Qz", "Qw",
				"DataSource", "X", "Y",
				"Z", "DataSource", }
		);
		internal_static_messages_UserAction_descriptor = getDescriptor().getMessageTypes().get(2);
		internal_static_messages_UserAction_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
			internal_static_messages_UserAction_descriptor,
			new java.lang.String[] { "Name", "ActionArguments", }
		);
		internal_static_messages_UserAction_ActionArgumentsEntry_descriptor = internal_static_messages_UserAction_descriptor
			.getNestedTypes()
			.get(0);
		internal_static_messages_UserAction_ActionArgumentsEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
			internal_static_messages_UserAction_ActionArgumentsEntry_descriptor,
			new java.lang.String[] { "Key", "Value", }
		);
		internal_static_messages_TrackerAdded_descriptor = getDescriptor().getMessageTypes().get(3);
		internal_static_messages_TrackerAdded_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
			internal_static_messages_TrackerAdded_descriptor,
			new java.lang.String[] { "TrackerId", "TrackerSerial", "TrackerName", "TrackerRole", }
		);
		internal_static_messages_TrackerStatus_descriptor = getDescriptor()
			.getMessageTypes()
			.get(4);
		internal_static_messages_TrackerStatus_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
			internal_static_messages_TrackerStatus_descriptor,
			new java.lang.String[] { "TrackerId", "Status", "Extra", "Confidence", "Confidence", }
		);
		internal_static_messages_TrackerStatus_ExtraEntry_descriptor = internal_static_messages_TrackerStatus_descriptor
			.getNestedTypes()
			.get(0);
		internal_static_messages_TrackerStatus_ExtraEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
			internal_static_messages_TrackerStatus_ExtraEntry_descriptor,
			new java.lang.String[] { "Key", "Value", }
		);
		internal_static_messages_ProtobufMessage_descriptor = getDescriptor()
			.getMessageTypes()
			.get(5);
		internal_static_messages_ProtobufMessage_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
			internal_static_messages_ProtobufMessage_descriptor,
			new java.lang.String[] { "Position", "UserAction", "TrackerAdded", "TrackerStatus",
				"Message", }
		);
	}

	private ProtobufMessages() {
	}

	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 static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
		return descriptor;
	}

	public interface PingPongOrBuilder extends
		// @@protoc_insertion_point(interface_extends:messages.PingPong)
		com.google.protobuf.MessageOrBuilder {
	}

	public interface PositionOrBuilder extends
		// @@protoc_insertion_point(interface_extends:messages.Position)
		com.google.protobuf.MessageOrBuilder {

		/**
		 * <code>int32 tracker_id = 1;</code>
		 *
		 * @return The trackerId.
		 */
		int getTrackerId();

		/**
		 * <code>float x = 2;</code>
		 *
		 * @return Whether the x field is set.
		 */
		boolean hasX();

		/**
		 * <code>float x = 2;</code>
		 *
		 * @return The x.
		 */
		float getX();

		/**
		 * <code>float y = 3;</code>
		 *
		 * @return Whether the y field is set.
		 */
		boolean hasY();

		/**
		 * <code>float y = 3;</code>
		 *
		 * @return The y.
		 */
		float getY();

		/**
		 * <code>float z = 4;</code>
		 *
		 * @return Whether the z field is set.
		 */
		boolean hasZ();

		/**
		 * <code>float z = 4;</code>
		 *
		 * @return The z.
		 */
		float getZ();

		/**
		 * <code>float qx = 5;</code>
		 *
		 * @return The qx.
		 */
		float getQx();

		/**
		 * <code>float qy = 6;</code>
		 *
		 * @return The qy.
		 */
		float getQy();

		/**
		 * <code>float qz = 7;</code>
		 *
		 * @return The qz.
		 */
		float getQz();

		/**
		 * <code>float qw = 8;</code>
		 *
		 * @return The qw.
		 */
		float getQw();

		/**
		 * <code>.messages.Position.DataSource data_source = 9;</code>
		 *
		 * @return Whether the dataSource field is set.
		 */
		boolean hasDataSource();

		/**
		 * <code>.messages.Position.DataSource data_source = 9;</code>
		 *
		 * @return The enum numeric value on the wire for dataSource.
		 */
		int getDataSourceValue();

		/**
		 * <code>.messages.Position.DataSource data_source = 9;</code>
		 *
		 * @return The dataSource.
		 */
		dev.slimevr.bridge.ProtobufMessages.Position.DataSource getDataSource();
	}

	public interface UserActionOrBuilder extends
		// @@protoc_insertion_point(interface_extends:messages.UserAction)
		com.google.protobuf.MessageOrBuilder {

		/**
		 * <code>string name = 1;</code>
		 *
		 * @return The name.
		 */
		java.lang.String getName();

		/**
		 * <code>string name = 1;</code>
		 *
		 * @return The bytes for name.
		 */
		com.google.protobuf.ByteString getNameBytes();

		/**
		 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
		 */
		int getActionArgumentsCount();

		/**
		 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
		 */
		boolean containsActionArguments(
			java.lang.String key
		);

		/**
		 * Use {@link #getActionArgumentsMap()} instead.
		 */
		@java.lang.Deprecated
		java.util.Map<java.lang.String, java.lang.String> getActionArguments();

		/**
		 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
		 */
		java.util.Map<java.lang.String, java.lang.String> getActionArgumentsMap();

		/**
		 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
		 */

		java.lang.String getActionArgumentsOrDefault(
			java.lang.String key,
			java.lang.String defaultValue
		);

		/**
		 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
		 */

		java.lang.String getActionArgumentsOrThrow(
			java.lang.String key
		);
	}

	public interface TrackerAddedOrBuilder extends
		// @@protoc_insertion_point(interface_extends:messages.TrackerAdded)
		com.google.protobuf.MessageOrBuilder {

		/**
		 * <code>int32 tracker_id = 1;</code>
		 *
		 * @return The trackerId.
		 */
		int getTrackerId();

		/**
		 * <code>string tracker_serial = 2;</code>
		 *
		 * @return The trackerSerial.
		 */
		java.lang.String getTrackerSerial();

		/**
		 * <code>string tracker_serial = 2;</code>
		 *
		 * @return The bytes for trackerSerial.
		 */
		com.google.protobuf.ByteString getTrackerSerialBytes();

		/**
		 * <code>string tracker_name = 3;</code>
		 *
		 * @return The trackerName.
		 */
		java.lang.String getTrackerName();

		/**
		 * <code>string tracker_name = 3;</code>
		 *
		 * @return The bytes for trackerName.
		 */
		com.google.protobuf.ByteString getTrackerNameBytes();

		/**
		 * <code>int32 tracker_role = 4;</code>
		 *
		 * @return The trackerRole.
		 */
		int getTrackerRole();
	}

	public interface TrackerStatusOrBuilder extends
		// @@protoc_insertion_point(interface_extends:messages.TrackerStatus)
		com.google.protobuf.MessageOrBuilder {

		/**
		 * <code>int32 tracker_id = 1;</code>
		 *
		 * @return The trackerId.
		 */
		int getTrackerId();

		/**
		 * <code>.messages.TrackerStatus.Status status = 2;</code>
		 *
		 * @return The enum numeric value on the wire for status.
		 */
		int getStatusValue();

		/**
		 * <code>.messages.TrackerStatus.Status status = 2;</code>
		 *
		 * @return The status.
		 */
		dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status getStatus();

		/**
		 * <code>map&lt;string, string&gt; extra = 3;</code>
		 */
		int getExtraCount();

		/**
		 * <code>map&lt;string, string&gt; extra = 3;</code>
		 */
		boolean containsExtra(
			java.lang.String key
		);

		/**
		 * Use {@link #getExtraMap()} instead.
		 */
		@java.lang.Deprecated
		java.util.Map<java.lang.String, java.lang.String> getExtra();

		/**
		 * <code>map&lt;string, string&gt; extra = 3;</code>
		 */
		java.util.Map<java.lang.String, java.lang.String> getExtraMap();

		/**
		 * <code>map&lt;string, string&gt; extra = 3;</code>
		 */

		java.lang.String getExtraOrDefault(
			java.lang.String key,
			java.lang.String defaultValue
		);

		/**
		 * <code>map&lt;string, string&gt; extra = 3;</code>
		 */

		java.lang.String getExtraOrThrow(
			java.lang.String key
		);

		/**
		 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
		 *
		 * @return Whether the confidence field is set.
		 */
		boolean hasConfidence();

		/**
		 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
		 *
		 * @return The enum numeric value on the wire for confidence.
		 */
		int getConfidenceValue();

		/**
		 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
		 *
		 * @return The confidence.
		 */
		dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence getConfidence();
	}

	public interface ProtobufMessageOrBuilder extends
		// @@protoc_insertion_point(interface_extends:messages.ProtobufMessage)
		com.google.protobuf.MessageOrBuilder {

		/**
		 * <code>.messages.Position position = 1;</code>
		 *
		 * @return Whether the position field is set.
		 */
		boolean hasPosition();

		/**
		 * <code>.messages.Position position = 1;</code>
		 *
		 * @return The position.
		 */
		dev.slimevr.bridge.ProtobufMessages.Position getPosition();

		/**
		 * <code>.messages.Position position = 1;</code>
		 */
		dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder getPositionOrBuilder();

		/**
		 * <code>.messages.UserAction user_action = 2;</code>
		 *
		 * @return Whether the userAction field is set.
		 */
		boolean hasUserAction();

		/**
		 * <code>.messages.UserAction user_action = 2;</code>
		 *
		 * @return The userAction.
		 */
		dev.slimevr.bridge.ProtobufMessages.UserAction getUserAction();

		/**
		 * <code>.messages.UserAction user_action = 2;</code>
		 */
		dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder getUserActionOrBuilder();

		/**
		 * <code>.messages.TrackerAdded tracker_added = 3;</code>
		 *
		 * @return Whether the trackerAdded field is set.
		 */
		boolean hasTrackerAdded();

		/**
		 * <code>.messages.TrackerAdded tracker_added = 3;</code>
		 *
		 * @return The trackerAdded.
		 */
		dev.slimevr.bridge.ProtobufMessages.TrackerAdded getTrackerAdded();

		/**
		 * <code>.messages.TrackerAdded tracker_added = 3;</code>
		 */
		dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder getTrackerAddedOrBuilder();

		/**
		 * <code>.messages.TrackerStatus tracker_status = 4;</code>
		 *
		 * @return Whether the trackerStatus field is set.
		 */
		boolean hasTrackerStatus();

		/**
		 * <code>.messages.TrackerStatus tracker_status = 4;</code>
		 *
		 * @return The trackerStatus.
		 */
		dev.slimevr.bridge.ProtobufMessages.TrackerStatus getTrackerStatus();

		/**
		 * <code>.messages.TrackerStatus tracker_status = 4;</code>
		 */
		dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder getTrackerStatusOrBuilder();

		dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.MessageCase getMessageCase();
	}

	/**
	 * Protobuf type {@code messages.PingPong}
	 */
	public static final class PingPong extends
		com.google.protobuf.GeneratedMessageV3 implements
		// @@protoc_insertion_point(message_implements:messages.PingPong)
		PingPongOrBuilder {
		private static final long serialVersionUID = 0L;
		// @@protoc_insertion_point(class_scope:messages.PingPong)
		private static final dev.slimevr.bridge.ProtobufMessages.PingPong DEFAULT_INSTANCE;
		private static final com.google.protobuf.Parser<PingPong> PARSER = new com.google.protobuf.AbstractParser<PingPong>() {
			@java.lang.Override
			public PingPong parsePartialFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws com.google.protobuf.InvalidProtocolBufferException {
				return new PingPong(input, extensionRegistry);
			}
		};

		static {
			DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.PingPong();
		}

		private byte memoizedIsInitialized = -1;

		// Use PingPong.newBuilder() to construct.
		private PingPong(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
			super(builder);
		}

		private PingPong() {
		}

		private PingPong(
			com.google.protobuf.CodedInputStream input,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			this();
			if (extensionRegistry == null) {
				throw new java.lang.NullPointerException();
			}
			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 dev.slimevr.bridge.ProtobufMessages.internal_static_messages_PingPong_descriptor;
		}

		public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom(
			java.nio.ByteBuffer data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom(
			java.nio.ByteBuffer data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom(
			com.google.protobuf.ByteString data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom(
			com.google.protobuf.ByteString data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom(byte[] data)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom(
			byte[] data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.PingPong 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 dev.slimevr.bridge.ProtobufMessages.PingPong parseDelimitedFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseDelimitedWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.PingPong 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 dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom(
			com.google.protobuf.CodedInputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.PingPong 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 static Builder newBuilder() {
			return DEFAULT_INSTANCE.toBuilder();
		}

		public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.PingPong prototype) {
			return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
		}

		public static dev.slimevr.bridge.ProtobufMessages.PingPong getDefaultInstance() {
			return DEFAULT_INSTANCE;
		}

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

		@java.lang.Override
		@SuppressWarnings({ "unused" })
		protected java.lang.Object newInstance(
			UnusedPrivateParameter unused
		) {
			return new PingPong();
		}

		@java.lang.Override
		public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
			return this.unknownFields;
		}

		@java.lang.Override
		protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
			return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_PingPong_fieldAccessorTable
				.ensureFieldAccessorsInitialized(
					dev.slimevr.bridge.ProtobufMessages.PingPong.class,
					dev.slimevr.bridge.ProtobufMessages.PingPong.Builder.class
				);
		}

		@java.lang.Override
		public final boolean isInitialized() {
			byte isInitialized = memoizedIsInitialized;
			if (isInitialized == 1)
				return true;
			if (isInitialized == 0)
				return false;

			memoizedIsInitialized = 1;
			return true;
		}

		@java.lang.Override
		public void writeTo(com.google.protobuf.CodedOutputStream output)
			throws java.io.IOException {
			unknownFields.writeTo(output);
		}

		@java.lang.Override
		public int getSerializedSize() {
			int size = memoizedSize;
			if (size != -1)
				return size;

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

		@java.lang.Override
		public boolean equals(final java.lang.Object obj) {
			if (obj == this) {
				return true;
			}
			if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.PingPong)) {
				return super.equals(obj);
			}
			dev.slimevr.bridge.ProtobufMessages.PingPong other = (dev.slimevr.bridge.ProtobufMessages.PingPong) obj;

			return unknownFields.equals(other.unknownFields);
		}

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

		@java.lang.Override
		public Builder newBuilderForType() {
			return newBuilder();
		}

		@java.lang.Override
		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;
		}

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

		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.PingPong getDefaultInstanceForType() {
			return DEFAULT_INSTANCE;
		}

		/**
		 * Protobuf type {@code messages.PingPong}
		 */
		public static final class Builder extends
			com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
			// @@protoc_insertion_point(builder_implements:messages.PingPong)
			dev.slimevr.bridge.ProtobufMessages.PingPongOrBuilder {
			// Construct using
			// dev.slimevr.bridge.ProtobufMessages.PingPong.newBuilder()
			private Builder() {
				maybeForceBuilderInitialization();
			}

			private Builder(
				com.google.protobuf.GeneratedMessageV3.BuilderParent parent
			) {
				super(parent);
				maybeForceBuilderInitialization();
			}

			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_PingPong_descriptor;
			}

			@java.lang.Override
			protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_PingPong_fieldAccessorTable
					.ensureFieldAccessorsInitialized(
						dev.slimevr.bridge.ProtobufMessages.PingPong.class,
						dev.slimevr.bridge.ProtobufMessages.PingPong.Builder.class
					);
			}

			private void maybeForceBuilderInitialization() {
				if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
			}

			@java.lang.Override
			public Builder clear() {
				super.clear();
				return this;
			}

			@java.lang.Override
			public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_PingPong_descriptor;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.PingPong getDefaultInstanceForType() {
				return dev.slimevr.bridge.ProtobufMessages.PingPong.getDefaultInstance();
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.PingPong build() {
				dev.slimevr.bridge.ProtobufMessages.PingPong result = buildPartial();
				if (!result.isInitialized()) {
					throw newUninitializedMessageException(result);
				}
				return result;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.PingPong buildPartial() {
				dev.slimevr.bridge.ProtobufMessages.PingPong result = new dev.slimevr.bridge.ProtobufMessages.PingPong(
					this
				);
				onBuilt();
				return result;
			}

			@java.lang.Override
			public Builder clone() {
				return super.clone();
			}

			@java.lang.Override
			public Builder setField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.setField(field, value);
			}

			@java.lang.Override
			public Builder clearField(
				com.google.protobuf.Descriptors.FieldDescriptor field
			) {
				return super.clearField(field);
			}

			@java.lang.Override
			public Builder clearOneof(
				com.google.protobuf.Descriptors.OneofDescriptor oneof
			) {
				return super.clearOneof(oneof);
			}

			@java.lang.Override
			public Builder setRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				int index,
				java.lang.Object value
			) {
				return super.setRepeatedField(field, index, value);
			}

			@java.lang.Override
			public Builder addRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.addRepeatedField(field, value);
			}

			@java.lang.Override
			public Builder mergeFrom(com.google.protobuf.Message other) {
				if (other instanceof dev.slimevr.bridge.ProtobufMessages.PingPong) {
					return mergeFrom((dev.slimevr.bridge.ProtobufMessages.PingPong) other);
				} else {
					super.mergeFrom(other);
					return this;
				}
			}

			public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.PingPong other) {
				if (other == dev.slimevr.bridge.ProtobufMessages.PingPong.getDefaultInstance())
					return this;
				this.mergeUnknownFields(other.unknownFields);
				onChanged();
				return this;
			}

			@java.lang.Override
			public final boolean isInitialized() {
				return true;
			}

			@java.lang.Override
			public Builder mergeFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws java.io.IOException {
				dev.slimevr.bridge.ProtobufMessages.PingPong parsedMessage = null;
				try {
					parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
				} catch (com.google.protobuf.InvalidProtocolBufferException e) {
					parsedMessage = (dev.slimevr.bridge.ProtobufMessages.PingPong) e
						.getUnfinishedMessage();
					throw e.unwrapIOException();
				} finally {
					if (parsedMessage != null) {
						mergeFrom(parsedMessage);
					}
				}
				return this;
			}

			@java.lang.Override
			public final Builder setUnknownFields(
				final com.google.protobuf.UnknownFieldSet unknownFields
			) {
				return super.setUnknownFields(unknownFields);
			}

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

			// @@protoc_insertion_point(builder_scope:messages.PingPong)
		}
	}

	/**
	 * Protobuf type {@code messages.Position}
	 */
	public static final class Position extends
		com.google.protobuf.GeneratedMessageV3 implements
		// @@protoc_insertion_point(message_implements:messages.Position)
		PositionOrBuilder {
		public static final int TRACKER_ID_FIELD_NUMBER = 1;
		public static final int X_FIELD_NUMBER = 2;
		public static final int Y_FIELD_NUMBER = 3;
		public static final int Z_FIELD_NUMBER = 4;
		public static final int QX_FIELD_NUMBER = 5;
		public static final int QY_FIELD_NUMBER = 6;
		public static final int QZ_FIELD_NUMBER = 7;
		public static final int QW_FIELD_NUMBER = 8;
		public static final int DATA_SOURCE_FIELD_NUMBER = 9;
		private static final long serialVersionUID = 0L;
		// @@protoc_insertion_point(class_scope:messages.Position)
		private static final dev.slimevr.bridge.ProtobufMessages.Position DEFAULT_INSTANCE;
		private static final com.google.protobuf.Parser<Position> PARSER = new com.google.protobuf.AbstractParser<Position>() {
			@java.lang.Override
			public Position parsePartialFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws com.google.protobuf.InvalidProtocolBufferException {
				return new Position(input, extensionRegistry);
			}
		};

		static {
			DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.Position();
		}

		private int bitField0_;
		private int trackerId_;
		private float x_;
		private float y_;
		private float z_;
		private float qx_;
		private float qy_;
		private float qz_;
		private float qw_;
		private int dataSource_;
		private byte memoizedIsInitialized = -1;

		// Use Position.newBuilder() to construct.
		private Position(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
			super(builder);
		}

		private Position() {
			dataSource_ = 0;
		}

		private Position(
			com.google.protobuf.CodedInputStream input,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			this();
			if (extensionRegistry == null) {
				throw new java.lang.NullPointerException();
			}
			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;
						case 8: {

							trackerId_ = input.readInt32();
							break;
						}
						case 21: {
							bitField0_ |= 0x00000001;
							x_ = input.readFloat();
							break;
						}
						case 29: {
							bitField0_ |= 0x00000002;
							y_ = input.readFloat();
							break;
						}
						case 37: {
							bitField0_ |= 0x00000004;
							z_ = input.readFloat();
							break;
						}
						case 45: {

							qx_ = input.readFloat();
							break;
						}
						case 53: {

							qy_ = input.readFloat();
							break;
						}
						case 61: {

							qz_ = input.readFloat();
							break;
						}
						case 69: {

							qw_ = input.readFloat();
							break;
						}
						case 72: {
							int rawValue = input.readEnum();
							bitField0_ |= 0x00000008;
							dataSource_ = rawValue;
							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 dev.slimevr.bridge.ProtobufMessages.internal_static_messages_Position_descriptor;
		}

		public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom(
			java.nio.ByteBuffer data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom(
			java.nio.ByteBuffer data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom(
			com.google.protobuf.ByteString data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom(
			com.google.protobuf.ByteString data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom(byte[] data)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom(
			byte[] data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.Position 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 dev.slimevr.bridge.ProtobufMessages.Position parseDelimitedFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseDelimitedWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.Position 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 dev.slimevr.bridge.ProtobufMessages.Position parseFrom(
			com.google.protobuf.CodedInputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.Position 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 static Builder newBuilder() {
			return DEFAULT_INSTANCE.toBuilder();
		}

		public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.Position prototype) {
			return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
		}

		public static dev.slimevr.bridge.ProtobufMessages.Position getDefaultInstance() {
			return DEFAULT_INSTANCE;
		}

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

		@java.lang.Override
		@SuppressWarnings({ "unused" })
		protected java.lang.Object newInstance(
			UnusedPrivateParameter unused
		) {
			return new Position();
		}

		@java.lang.Override
		public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
			return this.unknownFields;
		}

		@java.lang.Override
		protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
			return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_Position_fieldAccessorTable
				.ensureFieldAccessorsInitialized(
					dev.slimevr.bridge.ProtobufMessages.Position.class,
					dev.slimevr.bridge.ProtobufMessages.Position.Builder.class
				);
		}

		/**
		 * <code>int32 tracker_id = 1;</code>
		 *
		 * @return The trackerId.
		 */
		@java.lang.Override
		public int getTrackerId() {
			return trackerId_;
		}

		/**
		 * <code>float x = 2;</code>
		 *
		 * @return Whether the x field is set.
		 */
		@java.lang.Override
		public boolean hasX() {
			return ((bitField0_ & 0x00000001) != 0);
		}

		/**
		 * <code>float x = 2;</code>
		 *
		 * @return The x.
		 */
		@java.lang.Override
		public float getX() {
			return x_;
		}

		/**
		 * <code>float y = 3;</code>
		 *
		 * @return Whether the y field is set.
		 */
		@java.lang.Override
		public boolean hasY() {
			return ((bitField0_ & 0x00000002) != 0);
		}

		/**
		 * <code>float y = 3;</code>
		 *
		 * @return The y.
		 */
		@java.lang.Override
		public float getY() {
			return y_;
		}

		/**
		 * <code>float z = 4;</code>
		 *
		 * @return Whether the z field is set.
		 */
		@java.lang.Override
		public boolean hasZ() {
			return ((bitField0_ & 0x00000004) != 0);
		}

		/**
		 * <code>float z = 4;</code>
		 *
		 * @return The z.
		 */
		@java.lang.Override
		public float getZ() {
			return z_;
		}

		/**
		 * <code>float qx = 5;</code>
		 *
		 * @return The qx.
		 */
		@java.lang.Override
		public float getQx() {
			return qx_;
		}

		/**
		 * <code>float qy = 6;</code>
		 *
		 * @return The qy.
		 */
		@java.lang.Override
		public float getQy() {
			return qy_;
		}

		/**
		 * <code>float qz = 7;</code>
		 *
		 * @return The qz.
		 */
		@java.lang.Override
		public float getQz() {
			return qz_;
		}

		/**
		 * <code>float qw = 8;</code>
		 *
		 * @return The qw.
		 */
		@java.lang.Override
		public float getQw() {
			return qw_;
		}

		/**
		 * <code>.messages.Position.DataSource data_source = 9;</code>
		 *
		 * @return Whether the dataSource field is set.
		 */
		@java.lang.Override
		public boolean hasDataSource() {
			return ((bitField0_ & 0x00000008) != 0);
		}

		/**
		 * <code>.messages.Position.DataSource data_source = 9;</code>
		 *
		 * @return The enum numeric value on the wire for dataSource.
		 */
		@java.lang.Override
		public int getDataSourceValue() {
			return dataSource_;
		}

		/**
		 * <code>.messages.Position.DataSource data_source = 9;</code>
		 *
		 * @return The dataSource.
		 */
		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.Position.DataSource getDataSource() {
			@SuppressWarnings("deprecation")
			dev.slimevr.bridge.ProtobufMessages.Position.DataSource result = dev.slimevr.bridge.ProtobufMessages.Position.DataSource
				.valueOf(dataSource_);
			return result == null
				? dev.slimevr.bridge.ProtobufMessages.Position.DataSource.UNRECOGNIZED
				: result;
		}

		@java.lang.Override
		public final boolean isInitialized() {
			byte isInitialized = memoizedIsInitialized;
			if (isInitialized == 1)
				return true;
			if (isInitialized == 0)
				return false;

			memoizedIsInitialized = 1;
			return true;
		}

		@java.lang.Override
		public void writeTo(com.google.protobuf.CodedOutputStream output)
			throws java.io.IOException {
			if (trackerId_ != 0) {
				output.writeInt32(1, trackerId_);
			}
			if (((bitField0_ & 0x00000001) != 0)) {
				output.writeFloat(2, x_);
			}
			if (((bitField0_ & 0x00000002) != 0)) {
				output.writeFloat(3, y_);
			}
			if (((bitField0_ & 0x00000004) != 0)) {
				output.writeFloat(4, z_);
			}
			if (qx_ != 0F) {
				output.writeFloat(5, qx_);
			}
			if (qy_ != 0F) {
				output.writeFloat(6, qy_);
			}
			if (qz_ != 0F) {
				output.writeFloat(7, qz_);
			}
			if (qw_ != 0F) {
				output.writeFloat(8, qw_);
			}
			if (((bitField0_ & 0x00000008) != 0)) {
				output.writeEnum(9, dataSource_);
			}
			unknownFields.writeTo(output);
		}

		@java.lang.Override
		public int getSerializedSize() {
			int size = memoizedSize;
			if (size != -1)
				return size;

			size = 0;
			if (trackerId_ != 0) {
				size += com.google.protobuf.CodedOutputStream
					.computeInt32Size(1, trackerId_);
			}
			if (((bitField0_ & 0x00000001) != 0)) {
				size += com.google.protobuf.CodedOutputStream
					.computeFloatSize(2, x_);
			}
			if (((bitField0_ & 0x00000002) != 0)) {
				size += com.google.protobuf.CodedOutputStream
					.computeFloatSize(3, y_);
			}
			if (((bitField0_ & 0x00000004) != 0)) {
				size += com.google.protobuf.CodedOutputStream
					.computeFloatSize(4, z_);
			}
			if (qx_ != 0F) {
				size += com.google.protobuf.CodedOutputStream
					.computeFloatSize(5, qx_);
			}
			if (qy_ != 0F) {
				size += com.google.protobuf.CodedOutputStream
					.computeFloatSize(6, qy_);
			}
			if (qz_ != 0F) {
				size += com.google.protobuf.CodedOutputStream
					.computeFloatSize(7, qz_);
			}
			if (qw_ != 0F) {
				size += com.google.protobuf.CodedOutputStream
					.computeFloatSize(8, qw_);
			}
			if (((bitField0_ & 0x00000008) != 0)) {
				size += com.google.protobuf.CodedOutputStream
					.computeEnumSize(9, dataSource_);
			}
			size += unknownFields.getSerializedSize();
			memoizedSize = size;
			return size;
		}

		@java.lang.Override
		public boolean equals(final java.lang.Object obj) {
			if (obj == this) {
				return true;
			}
			if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.Position)) {
				return super.equals(obj);
			}
			dev.slimevr.bridge.ProtobufMessages.Position other = (dev.slimevr.bridge.ProtobufMessages.Position) obj;

			if (getTrackerId() != other.getTrackerId())
				return false;
			if (hasX() != other.hasX())
				return false;
			if (hasX()) {
				if (
					java.lang.Float.floatToIntBits(getX())
						!= java.lang.Float
							.floatToIntBits(
								other.getX()
							)
				)
					return false;
			}
			if (hasY() != other.hasY())
				return false;
			if (hasY()) {
				if (
					java.lang.Float.floatToIntBits(getY())
						!= java.lang.Float
							.floatToIntBits(
								other.getY()
							)
				)
					return false;
			}
			if (hasZ() != other.hasZ())
				return false;
			if (hasZ()) {
				if (
					java.lang.Float.floatToIntBits(getZ())
						!= java.lang.Float
							.floatToIntBits(
								other.getZ()
							)
				)
					return false;
			}
			if (
				java.lang.Float.floatToIntBits(getQx())
					!= java.lang.Float
						.floatToIntBits(
							other.getQx()
						)
			)
				return false;
			if (
				java.lang.Float.floatToIntBits(getQy())
					!= java.lang.Float
						.floatToIntBits(
							other.getQy()
						)
			)
				return false;
			if (
				java.lang.Float.floatToIntBits(getQz())
					!= java.lang.Float
						.floatToIntBits(
							other.getQz()
						)
			)
				return false;
			if (
				java.lang.Float.floatToIntBits(getQw())
					!= java.lang.Float
						.floatToIntBits(
							other.getQw()
						)
			)
				return false;
			if (hasDataSource() != other.hasDataSource())
				return false;
			if (hasDataSource()) {
				if (dataSource_ != other.dataSource_)
					return false;
			}
			return unknownFields.equals(other.unknownFields);
		}

		@java.lang.Override
		public int hashCode() {
			if (memoizedHashCode != 0) {
				return memoizedHashCode;
			}
			int hash = 41;
			hash = (19 * hash) + getDescriptor().hashCode();
			hash = (37 * hash) + TRACKER_ID_FIELD_NUMBER;
			hash = (53 * hash) + getTrackerId();
			if (hasX()) {
				hash = (37 * hash) + X_FIELD_NUMBER;
				hash = (53 * hash)
					+ java.lang.Float
						.floatToIntBits(
							getX()
						);
			}
			if (hasY()) {
				hash = (37 * hash) + Y_FIELD_NUMBER;
				hash = (53 * hash)
					+ java.lang.Float
						.floatToIntBits(
							getY()
						);
			}
			if (hasZ()) {
				hash = (37 * hash) + Z_FIELD_NUMBER;
				hash = (53 * hash)
					+ java.lang.Float
						.floatToIntBits(
							getZ()
						);
			}
			hash = (37 * hash) + QX_FIELD_NUMBER;
			hash = (53 * hash)
				+ java.lang.Float
					.floatToIntBits(
						getQx()
					);
			hash = (37 * hash) + QY_FIELD_NUMBER;
			hash = (53 * hash)
				+ java.lang.Float
					.floatToIntBits(
						getQy()
					);
			hash = (37 * hash) + QZ_FIELD_NUMBER;
			hash = (53 * hash)
				+ java.lang.Float
					.floatToIntBits(
						getQz()
					);
			hash = (37 * hash) + QW_FIELD_NUMBER;
			hash = (53 * hash)
				+ java.lang.Float
					.floatToIntBits(
						getQw()
					);
			if (hasDataSource()) {
				hash = (37 * hash) + DATA_SOURCE_FIELD_NUMBER;
				hash = (53 * hash) + dataSource_;
			}
			hash = (29 * hash) + unknownFields.hashCode();
			memoizedHashCode = hash;
			return hash;
		}

		@java.lang.Override
		public Builder newBuilderForType() {
			return newBuilder();
		}

		@java.lang.Override
		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;
		}

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

		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.Position getDefaultInstanceForType() {
			return DEFAULT_INSTANCE;
		}

		/**
		 * Protobuf enum {@code messages.Position.DataSource}
		 */
		public enum DataSource
			implements com.google.protobuf.ProtocolMessageEnum {
			/**
			 * <code>NONE = 0;</code>
			 */
			NONE(0),
			/**
			 * <code>IMU = 1;</code>
			 */
			IMU(1),
			/**
			 * <code>PRECISION = 2;</code>
			 */
			PRECISION(2),
			/**
			 * <code>FULL = 3;</code>
			 */
			FULL(3),
			UNRECOGNIZED(-1),
			;

			/**
			 * <code>NONE = 0;</code>
			 */
			public static final int NONE_VALUE = 0;
			/**
			 * <code>IMU = 1;</code>
			 */
			public static final int IMU_VALUE = 1;
			/**
			 * <code>PRECISION = 2;</code>
			 */
			public static final int PRECISION_VALUE = 2;
			/**
			 * <code>FULL = 3;</code>
			 */
			public static final int FULL_VALUE = 3;
			private static final com.google.protobuf.Internal.EnumLiteMap<DataSource> internalValueMap = new com.google.protobuf.Internal.EnumLiteMap<DataSource>() {
				@Override
				public DataSource findValueByNumber(int number) {
					return DataSource.forNumber(number);
				}
			};
			private static final DataSource[] VALUES = values();
			private final int value;

			DataSource(int value) {
				this.value = value;
			}

			/**
			 * @param value The numeric wire value of the corresponding enum
			 * entry.
			 * @return The enum associated with the given numeric wire value.
			 * @deprecated Use {@link #forNumber(int)} instead.
			 */
			@java.lang.Deprecated
			public static DataSource valueOf(int value) {
				return forNumber(value);
			}

			/**
			 * @param value The numeric wire value of the corresponding enum
			 * entry.
			 * @return The enum associated with the given numeric wire value.
			 */
			public static DataSource forNumber(int value) {
				switch (value) {
					case 0:
						return NONE;
					case 1:
						return IMU;
					case 2:
						return PRECISION;
					case 3:
						return FULL;
					default:
						return null;
				}
			}

			public static com.google.protobuf.Internal.EnumLiteMap<DataSource> internalGetValueMap() {
				return internalValueMap;
			}

			public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
				return dev.slimevr.bridge.ProtobufMessages.Position
					.getDescriptor()
					.getEnumTypes()
					.get(0);
			}

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

			@Override
			public final int getNumber() {
				if (this == UNRECOGNIZED) {
					throw new java.lang.IllegalArgumentException(
						"Can't get the number of an unknown enum value."
					);
				}
				return value;
			}

			@Override
			public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
				if (this == UNRECOGNIZED) {
					throw new java.lang.IllegalStateException(
						"Can't get the descriptor of an unrecognized enum value."
					);
				}
				return getDescriptor().getValues().get(ordinal());
			}

			@Override
			public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
				return getDescriptor();
			}

			// @@protoc_insertion_point(enum_scope:messages.Position.DataSource)
		}

		/**
		 * Protobuf type {@code messages.Position}
		 */
		public static final class Builder extends
			com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
			// @@protoc_insertion_point(builder_implements:messages.Position)
			dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder {
			private int bitField0_;
			private int trackerId_;
			private float x_;
			private float y_;
			private float z_;
			private float qx_;
			private float qy_;
			private float qz_;
			private float qw_;
			private int dataSource_ = 0;

			// Construct using
			// dev.slimevr.bridge.ProtobufMessages.Position.newBuilder()
			private Builder() {
				maybeForceBuilderInitialization();
			}

			private Builder(
				com.google.protobuf.GeneratedMessageV3.BuilderParent parent
			) {
				super(parent);
				maybeForceBuilderInitialization();
			}

			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_Position_descriptor;
			}

			@java.lang.Override
			protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_Position_fieldAccessorTable
					.ensureFieldAccessorsInitialized(
						dev.slimevr.bridge.ProtobufMessages.Position.class,
						dev.slimevr.bridge.ProtobufMessages.Position.Builder.class
					);
			}

			private void maybeForceBuilderInitialization() {
				if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
			}

			@java.lang.Override
			public Builder clear() {
				super.clear();
				trackerId_ = 0;

				x_ = 0F;
				bitField0_ = (bitField0_ & ~0x00000001);
				y_ = 0F;
				bitField0_ = (bitField0_ & ~0x00000002);
				z_ = 0F;
				bitField0_ = (bitField0_ & ~0x00000004);
				qx_ = 0F;

				qy_ = 0F;

				qz_ = 0F;

				qw_ = 0F;

				dataSource_ = 0;
				bitField0_ = (bitField0_ & ~0x00000008);
				return this;
			}

			@java.lang.Override
			public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_Position_descriptor;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.Position getDefaultInstanceForType() {
				return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance();
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.Position build() {
				dev.slimevr.bridge.ProtobufMessages.Position result = buildPartial();
				if (!result.isInitialized()) {
					throw newUninitializedMessageException(result);
				}
				return result;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.Position buildPartial() {
				dev.slimevr.bridge.ProtobufMessages.Position result = new dev.slimevr.bridge.ProtobufMessages.Position(
					this
				);
				int from_bitField0_ = bitField0_;
				int to_bitField0_ = 0;
				result.trackerId_ = trackerId_;
				if (((from_bitField0_ & 0x00000001) != 0)) {
					result.x_ = x_;
					to_bitField0_ |= 0x00000001;
				}
				if (((from_bitField0_ & 0x00000002) != 0)) {
					result.y_ = y_;
					to_bitField0_ |= 0x00000002;
				}
				if (((from_bitField0_ & 0x00000004) != 0)) {
					result.z_ = z_;
					to_bitField0_ |= 0x00000004;
				}
				result.qx_ = qx_;
				result.qy_ = qy_;
				result.qz_ = qz_;
				result.qw_ = qw_;
				if (((from_bitField0_ & 0x00000008) != 0)) {
					to_bitField0_ |= 0x00000008;
				}
				result.dataSource_ = dataSource_;
				result.bitField0_ = to_bitField0_;
				onBuilt();
				return result;
			}

			@java.lang.Override
			public Builder clone() {
				return super.clone();
			}

			@java.lang.Override
			public Builder setField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.setField(field, value);
			}

			@java.lang.Override
			public Builder clearField(
				com.google.protobuf.Descriptors.FieldDescriptor field
			) {
				return super.clearField(field);
			}

			@java.lang.Override
			public Builder clearOneof(
				com.google.protobuf.Descriptors.OneofDescriptor oneof
			) {
				return super.clearOneof(oneof);
			}

			@java.lang.Override
			public Builder setRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				int index,
				java.lang.Object value
			) {
				return super.setRepeatedField(field, index, value);
			}

			@java.lang.Override
			public Builder addRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.addRepeatedField(field, value);
			}

			@java.lang.Override
			public Builder mergeFrom(com.google.protobuf.Message other) {
				if (other instanceof dev.slimevr.bridge.ProtobufMessages.Position) {
					return mergeFrom((dev.slimevr.bridge.ProtobufMessages.Position) other);
				} else {
					super.mergeFrom(other);
					return this;
				}
			}

			public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.Position other) {
				if (other == dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance())
					return this;
				if (other.getTrackerId() != 0) {
					setTrackerId(other.getTrackerId());
				}
				if (other.hasX()) {
					setX(other.getX());
				}
				if (other.hasY()) {
					setY(other.getY());
				}
				if (other.hasZ()) {
					setZ(other.getZ());
				}
				if (other.getQx() != 0F) {
					setQx(other.getQx());
				}
				if (other.getQy() != 0F) {
					setQy(other.getQy());
				}
				if (other.getQz() != 0F) {
					setQz(other.getQz());
				}
				if (other.getQw() != 0F) {
					setQw(other.getQw());
				}
				if (other.hasDataSource()) {
					setDataSource(other.getDataSource());
				}
				this.mergeUnknownFields(other.unknownFields);
				onChanged();
				return this;
			}

			@java.lang.Override
			public final boolean isInitialized() {
				return true;
			}

			@java.lang.Override
			public Builder mergeFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws java.io.IOException {
				dev.slimevr.bridge.ProtobufMessages.Position parsedMessage = null;
				try {
					parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
				} catch (com.google.protobuf.InvalidProtocolBufferException e) {
					parsedMessage = (dev.slimevr.bridge.ProtobufMessages.Position) e
						.getUnfinishedMessage();
					throw e.unwrapIOException();
				} finally {
					if (parsedMessage != null) {
						mergeFrom(parsedMessage);
					}
				}
				return this;
			}

			/**
			 * <code>int32 tracker_id = 1;</code>
			 *
			 * @return The trackerId.
			 */
			@java.lang.Override
			public int getTrackerId() {
				return trackerId_;
			}

			/**
			 * <code>int32 tracker_id = 1;</code>
			 *
			 * @param value The trackerId to set.
			 * @return This builder for chaining.
			 */
			public Builder setTrackerId(int value) {

				trackerId_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>int32 tracker_id = 1;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearTrackerId() {

				trackerId_ = 0;
				onChanged();
				return this;
			}

			/**
			 * <code>float x = 2;</code>
			 *
			 * @return Whether the x field is set.
			 */
			@java.lang.Override
			public boolean hasX() {
				return ((bitField0_ & 0x00000001) != 0);
			}

			/**
			 * <code>float x = 2;</code>
			 *
			 * @return The x.
			 */
			@java.lang.Override
			public float getX() {
				return x_;
			}

			/**
			 * <code>float x = 2;</code>
			 *
			 * @param value The x to set.
			 * @return This builder for chaining.
			 */
			public Builder setX(float value) {
				bitField0_ |= 0x00000001;
				x_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>float x = 2;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearX() {
				bitField0_ = (bitField0_ & ~0x00000001);
				x_ = 0F;
				onChanged();
				return this;
			}

			/**
			 * <code>float y = 3;</code>
			 *
			 * @return Whether the y field is set.
			 */
			@java.lang.Override
			public boolean hasY() {
				return ((bitField0_ & 0x00000002) != 0);
			}

			/**
			 * <code>float y = 3;</code>
			 *
			 * @return The y.
			 */
			@java.lang.Override
			public float getY() {
				return y_;
			}

			/**
			 * <code>float y = 3;</code>
			 *
			 * @param value The y to set.
			 * @return This builder for chaining.
			 */
			public Builder setY(float value) {
				bitField0_ |= 0x00000002;
				y_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>float y = 3;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearY() {
				bitField0_ = (bitField0_ & ~0x00000002);
				y_ = 0F;
				onChanged();
				return this;
			}

			/**
			 * <code>float z = 4;</code>
			 *
			 * @return Whether the z field is set.
			 */
			@java.lang.Override
			public boolean hasZ() {
				return ((bitField0_ & 0x00000004) != 0);
			}

			/**
			 * <code>float z = 4;</code>
			 *
			 * @return The z.
			 */
			@java.lang.Override
			public float getZ() {
				return z_;
			}

			/**
			 * <code>float z = 4;</code>
			 *
			 * @param value The z to set.
			 * @return This builder for chaining.
			 */
			public Builder setZ(float value) {
				bitField0_ |= 0x00000004;
				z_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>float z = 4;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearZ() {
				bitField0_ = (bitField0_ & ~0x00000004);
				z_ = 0F;
				onChanged();
				return this;
			}

			/**
			 * <code>float qx = 5;</code>
			 *
			 * @return The qx.
			 */
			@java.lang.Override
			public float getQx() {
				return qx_;
			}

			/**
			 * <code>float qx = 5;</code>
			 *
			 * @param value The qx to set.
			 * @return This builder for chaining.
			 */
			public Builder setQx(float value) {

				qx_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>float qx = 5;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearQx() {

				qx_ = 0F;
				onChanged();
				return this;
			}

			/**
			 * <code>float qy = 6;</code>
			 *
			 * @return The qy.
			 */
			@java.lang.Override
			public float getQy() {
				return qy_;
			}

			/**
			 * <code>float qy = 6;</code>
			 *
			 * @param value The qy to set.
			 * @return This builder for chaining.
			 */
			public Builder setQy(float value) {

				qy_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>float qy = 6;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearQy() {

				qy_ = 0F;
				onChanged();
				return this;
			}

			/**
			 * <code>float qz = 7;</code>
			 *
			 * @return The qz.
			 */
			@java.lang.Override
			public float getQz() {
				return qz_;
			}

			/**
			 * <code>float qz = 7;</code>
			 *
			 * @param value The qz to set.
			 * @return This builder for chaining.
			 */
			public Builder setQz(float value) {

				qz_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>float qz = 7;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearQz() {

				qz_ = 0F;
				onChanged();
				return this;
			}

			/**
			 * <code>float qw = 8;</code>
			 *
			 * @return The qw.
			 */
			@java.lang.Override
			public float getQw() {
				return qw_;
			}

			/**
			 * <code>float qw = 8;</code>
			 *
			 * @param value The qw to set.
			 * @return This builder for chaining.
			 */
			public Builder setQw(float value) {

				qw_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>float qw = 8;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearQw() {

				qw_ = 0F;
				onChanged();
				return this;
			}

			/**
			 * <code>.messages.Position.DataSource data_source = 9;</code>
			 *
			 * @return Whether the dataSource field is set.
			 */
			@java.lang.Override
			public boolean hasDataSource() {
				return ((bitField0_ & 0x00000008) != 0);
			}

			/**
			 * <code>.messages.Position.DataSource data_source = 9;</code>
			 *
			 * @return The enum numeric value on the wire for dataSource.
			 */
			@java.lang.Override
			public int getDataSourceValue() {
				return dataSource_;
			}

			/**
			 * <code>.messages.Position.DataSource data_source = 9;</code>
			 *
			 * @param value The enum numeric value on the wire for dataSource to
			 * set.
			 * @return This builder for chaining.
			 */
			public Builder setDataSourceValue(int value) {
				bitField0_ |= 0x00000008;
				dataSource_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>.messages.Position.DataSource data_source = 9;</code>
			 *
			 * @return The dataSource.
			 */
			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.Position.DataSource getDataSource() {
				@SuppressWarnings("deprecation")
				dev.slimevr.bridge.ProtobufMessages.Position.DataSource result = dev.slimevr.bridge.ProtobufMessages.Position.DataSource
					.valueOf(dataSource_);
				return result == null
					? dev.slimevr.bridge.ProtobufMessages.Position.DataSource.UNRECOGNIZED
					: result;
			}

			/**
			 * <code>.messages.Position.DataSource data_source = 9;</code>
			 *
			 * @param value The dataSource to set.
			 * @return This builder for chaining.
			 */
			public Builder setDataSource(
				dev.slimevr.bridge.ProtobufMessages.Position.DataSource value
			) {
				if (value == null) {
					throw new NullPointerException();
				}
				bitField0_ |= 0x00000008;
				dataSource_ = value.getNumber();
				onChanged();
				return this;
			}

			/**
			 * <code>.messages.Position.DataSource data_source = 9;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearDataSource() {
				bitField0_ = (bitField0_ & ~0x00000008);
				dataSource_ = 0;
				onChanged();
				return this;
			}

			@java.lang.Override
			public final Builder setUnknownFields(
				final com.google.protobuf.UnknownFieldSet unknownFields
			) {
				return super.setUnknownFields(unknownFields);
			}

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

			// @@protoc_insertion_point(builder_scope:messages.Position)
		}
	}

	/**
	 * Protobuf type {@code messages.UserAction}
	 */
	public static final class UserAction extends
		com.google.protobuf.GeneratedMessageV3 implements
		// @@protoc_insertion_point(message_implements:messages.UserAction)
		UserActionOrBuilder {
		public static final int NAME_FIELD_NUMBER = 1;
		public static final int ACTION_ARGUMENTS_FIELD_NUMBER = 2;
		private static final long serialVersionUID = 0L;
		// @@protoc_insertion_point(class_scope:messages.UserAction)
		private static final dev.slimevr.bridge.ProtobufMessages.UserAction DEFAULT_INSTANCE;
		private static final com.google.protobuf.Parser<UserAction> PARSER = new com.google.protobuf.AbstractParser<UserAction>() {
			@java.lang.Override
			public UserAction parsePartialFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws com.google.protobuf.InvalidProtocolBufferException {
				return new UserAction(input, extensionRegistry);
			}
		};

		static {
			DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.UserAction();
		}

		private volatile java.lang.Object name_;
		private com.google.protobuf.MapField<java.lang.String, java.lang.String> actionArguments_;
		private byte memoizedIsInitialized = -1;

		// Use UserAction.newBuilder() to construct.
		private UserAction(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
			super(builder);
		}

		private UserAction() {
			name_ = "";
		}

		private UserAction(
			com.google.protobuf.CodedInputStream input,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			this();
			if (extensionRegistry == null) {
				throw new java.lang.NullPointerException();
			}
			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;
						case 10: {
							java.lang.String s = input.readStringRequireUtf8();

							name_ = s;
							break;
						}
						case 18: {
							if (!((mutable_bitField0_ & 0x00000001) != 0)) {
								actionArguments_ = com.google.protobuf.MapField
									.newMapField(
										ActionArgumentsDefaultEntryHolder.defaultEntry
									);
								mutable_bitField0_ |= 0x00000001;
							}
							com.google.protobuf.MapEntry<java.lang.String, java.lang.String> actionArguments__ = input
								.readMessage(
									ActionArgumentsDefaultEntryHolder.defaultEntry
										.getParserForType(),
									extensionRegistry
								);
							actionArguments_
								.getMutableMap()
								.put(
									actionArguments__.getKey(),
									actionArguments__.getValue()
								);
							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 dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_descriptor;
		}

		public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(
			java.nio.ByteBuffer data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(
			java.nio.ByteBuffer data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(
			com.google.protobuf.ByteString data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(
			com.google.protobuf.ByteString data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(byte[] data)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(
			byte[] data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.UserAction 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 dev.slimevr.bridge.ProtobufMessages.UserAction parseDelimitedFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseDelimitedWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.UserAction 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 dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(
			com.google.protobuf.CodedInputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.UserAction 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 static Builder newBuilder() {
			return DEFAULT_INSTANCE.toBuilder();
		}

		public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.UserAction prototype) {
			return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
		}

		public static dev.slimevr.bridge.ProtobufMessages.UserAction getDefaultInstance() {
			return DEFAULT_INSTANCE;
		}

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

		@java.lang.Override
		@SuppressWarnings({ "unused" })
		protected java.lang.Object newInstance(
			UnusedPrivateParameter unused
		) {
			return new UserAction();
		}

		@java.lang.Override
		public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
			return this.unknownFields;
		}

		@SuppressWarnings({ "rawtypes" })
		@java.lang.Override
		protected com.google.protobuf.MapField internalGetMapField(
			int number
		) {
			switch (number) {
				case 2:
					return internalGetActionArguments();
				default:
					throw new RuntimeException(
						"Invalid map field number: " + number
					);
			}
		}

		@java.lang.Override
		protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
			return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_fieldAccessorTable
				.ensureFieldAccessorsInitialized(
					dev.slimevr.bridge.ProtobufMessages.UserAction.class,
					dev.slimevr.bridge.ProtobufMessages.UserAction.Builder.class
				);
		}

		/**
		 * <code>string name = 1;</code>
		 *
		 * @return The name.
		 */
		@java.lang.Override
		public java.lang.String getName() {
			java.lang.Object ref = name_;
			if (ref instanceof java.lang.String) {
				return (java.lang.String) ref;
			} else {
				com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
				java.lang.String s = bs.toStringUtf8();
				name_ = s;
				return s;
			}
		}

		/**
		 * <code>string name = 1;</code>
		 *
		 * @return The bytes for name.
		 */
		@java.lang.Override
		public com.google.protobuf.ByteString getNameBytes() {
			java.lang.Object ref = name_;
			if (ref instanceof java.lang.String) {
				com.google.protobuf.ByteString b = com.google.protobuf.ByteString
					.copyFromUtf8(
						(java.lang.String) ref
					);
				name_ = b;
				return b;
			} else {
				return (com.google.protobuf.ByteString) ref;
			}
		}

		private com.google.protobuf.MapField<java.lang.String, java.lang.String> internalGetActionArguments() {
			if (actionArguments_ == null) {
				return com.google.protobuf.MapField
					.emptyMapField(
						ActionArgumentsDefaultEntryHolder.defaultEntry
					);
			}
			return actionArguments_;
		}

		@Override
		public int getActionArgumentsCount() {
			return internalGetActionArguments().getMap().size();
		}

		/**
		 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
		 */

		@java.lang.Override
		public boolean containsActionArguments(
			java.lang.String key
		) {
			if (key == null) {
				throw new java.lang.NullPointerException();
			}
			return internalGetActionArguments().getMap().containsKey(key);
		}

		/**
		 * Use {@link #getActionArgumentsMap()} instead.
		 */
		@java.lang.Override
		@java.lang.Deprecated
		public java.util.Map<java.lang.String, java.lang.String> getActionArguments() {
			return getActionArgumentsMap();
		}

		/**
		 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
		 */
		@java.lang.Override

		public java.util.Map<java.lang.String, java.lang.String> getActionArgumentsMap() {
			return internalGetActionArguments().getMap();
		}

		/**
		 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
		 */
		@java.lang.Override

		public java.lang.String getActionArgumentsOrDefault(
			java.lang.String key,
			java.lang.String defaultValue
		) {
			if (key == null) {
				throw new java.lang.NullPointerException();
			}
			java.util.Map<java.lang.String, java.lang.String> map = internalGetActionArguments()
				.getMap();
			return map.containsKey(key) ? map.get(key) : defaultValue;
		}

		/**
		 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
		 */
		@java.lang.Override

		public java.lang.String getActionArgumentsOrThrow(
			java.lang.String key
		) {
			if (key == null) {
				throw new java.lang.NullPointerException();
			}
			java.util.Map<java.lang.String, java.lang.String> map = internalGetActionArguments()
				.getMap();
			if (!map.containsKey(key)) {
				throw new java.lang.IllegalArgumentException();
			}
			return map.get(key);
		}

		@java.lang.Override
		public final boolean isInitialized() {
			byte isInitialized = memoizedIsInitialized;
			if (isInitialized == 1)
				return true;
			if (isInitialized == 0)
				return false;

			memoizedIsInitialized = 1;
			return true;
		}

		@java.lang.Override
		public void writeTo(com.google.protobuf.CodedOutputStream output)
			throws java.io.IOException {
			if (!getNameBytes().isEmpty()) {
				com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
			}
			com.google.protobuf.GeneratedMessageV3
				.serializeStringMapTo(
					output,
					internalGetActionArguments(),
					ActionArgumentsDefaultEntryHolder.defaultEntry,
					2
				);
			unknownFields.writeTo(output);
		}

		@java.lang.Override
		public int getSerializedSize() {
			int size = memoizedSize;
			if (size != -1)
				return size;

			size = 0;
			if (!getNameBytes().isEmpty()) {
				size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
			}
			for (
				java.util.Map.Entry<java.lang.String, java.lang.String> entry : internalGetActionArguments()
					.getMap()
					.entrySet()
			) {
				com.google.protobuf.MapEntry<java.lang.String, java.lang.String> actionArguments__ = ActionArgumentsDefaultEntryHolder.defaultEntry
					.newBuilderForType()
					.setKey(entry.getKey())
					.setValue(entry.getValue())
					.build();
				size += com.google.protobuf.CodedOutputStream
					.computeMessageSize(2, actionArguments__);
			}
			size += unknownFields.getSerializedSize();
			memoizedSize = size;
			return size;
		}

		@java.lang.Override
		public boolean equals(final java.lang.Object obj) {
			if (obj == this) {
				return true;
			}
			if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.UserAction)) {
				return super.equals(obj);
			}
			dev.slimevr.bridge.ProtobufMessages.UserAction other = (dev.slimevr.bridge.ProtobufMessages.UserAction) obj;

			if (
				!getName()
					.equals(other.getName())
			)
				return false;
			if (
				!internalGetActionArguments()
					.equals(
						other.internalGetActionArguments()
					)
			)
				return false;
			return unknownFields.equals(other.unknownFields);
		}

		@java.lang.Override
		public int hashCode() {
			if (memoizedHashCode != 0) {
				return memoizedHashCode;
			}
			int hash = 41;
			hash = (19 * hash) + getDescriptor().hashCode();
			hash = (37 * hash) + NAME_FIELD_NUMBER;
			hash = (53 * hash) + getName().hashCode();
			if (!internalGetActionArguments().getMap().isEmpty()) {
				hash = (37 * hash) + ACTION_ARGUMENTS_FIELD_NUMBER;
				hash = (53 * hash) + internalGetActionArguments().hashCode();
			}
			hash = (29 * hash) + unknownFields.hashCode();
			memoizedHashCode = hash;
			return hash;
		}

		@java.lang.Override
		public Builder newBuilderForType() {
			return newBuilder();
		}

		@java.lang.Override
		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;
		}

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

		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.UserAction getDefaultInstanceForType() {
			return DEFAULT_INSTANCE;
		}

		private static final class ActionArgumentsDefaultEntryHolder {
			static final com.google.protobuf.MapEntry<java.lang.String, java.lang.String> defaultEntry = com.google.protobuf.MapEntry
				.newDefaultInstance(
					dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_ActionArgumentsEntry_descriptor,
					com.google.protobuf.WireFormat.FieldType.STRING,
					"",
					com.google.protobuf.WireFormat.FieldType.STRING,
					""
				);
		}

		/**
		 * Protobuf type {@code messages.UserAction}
		 */
		public static final class Builder extends
			com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
			// @@protoc_insertion_point(builder_implements:messages.UserAction)
			dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder {
			private int bitField0_;
			private java.lang.Object name_ = "";
			private com.google.protobuf.MapField<java.lang.String, java.lang.String> actionArguments_;

			// Construct using
			// dev.slimevr.bridge.ProtobufMessages.UserAction.newBuilder()
			private Builder() {
				maybeForceBuilderInitialization();
			}

			private Builder(
				com.google.protobuf.GeneratedMessageV3.BuilderParent parent
			) {
				super(parent);
				maybeForceBuilderInitialization();
			}

			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_descriptor;
			}

			@Override
			@SuppressWarnings({ "rawtypes" })
			protected com.google.protobuf.MapField internalGetMapField(
				int number
			) {
				switch (number) {
					case 2:
						return internalGetActionArguments();
					default:
						throw new RuntimeException(
							"Invalid map field number: " + number
						);
				}
			}

			@Override
			@SuppressWarnings({ "rawtypes" })
			protected com.google.protobuf.MapField internalGetMutableMapField(
				int number
			) {
				switch (number) {
					case 2:
						return internalGetMutableActionArguments();
					default:
						throw new RuntimeException(
							"Invalid map field number: " + number
						);
				}
			}

			@java.lang.Override
			protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_fieldAccessorTable
					.ensureFieldAccessorsInitialized(
						dev.slimevr.bridge.ProtobufMessages.UserAction.class,
						dev.slimevr.bridge.ProtobufMessages.UserAction.Builder.class
					);
			}

			private void maybeForceBuilderInitialization() {
				if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
			}

			@java.lang.Override
			public Builder clear() {
				super.clear();
				name_ = "";

				internalGetMutableActionArguments().clear();
				return this;
			}

			@java.lang.Override
			public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_descriptor;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.UserAction getDefaultInstanceForType() {
				return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance();
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.UserAction build() {
				dev.slimevr.bridge.ProtobufMessages.UserAction result = buildPartial();
				if (!result.isInitialized()) {
					throw newUninitializedMessageException(result);
				}
				return result;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.UserAction buildPartial() {
				dev.slimevr.bridge.ProtobufMessages.UserAction result = new dev.slimevr.bridge.ProtobufMessages.UserAction(
					this
				);
				int from_bitField0_ = bitField0_;
				result.name_ = name_;
				result.actionArguments_ = internalGetActionArguments();
				result.actionArguments_.makeImmutable();
				onBuilt();
				return result;
			}

			@java.lang.Override
			public Builder clone() {
				return super.clone();
			}

			@java.lang.Override
			public Builder setField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.setField(field, value);
			}

			@java.lang.Override
			public Builder clearField(
				com.google.protobuf.Descriptors.FieldDescriptor field
			) {
				return super.clearField(field);
			}

			@java.lang.Override
			public Builder clearOneof(
				com.google.protobuf.Descriptors.OneofDescriptor oneof
			) {
				return super.clearOneof(oneof);
			}

			@java.lang.Override
			public Builder setRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				int index,
				java.lang.Object value
			) {
				return super.setRepeatedField(field, index, value);
			}

			@java.lang.Override
			public Builder addRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.addRepeatedField(field, value);
			}

			@java.lang.Override
			public Builder mergeFrom(com.google.protobuf.Message other) {
				if (other instanceof dev.slimevr.bridge.ProtobufMessages.UserAction) {
					return mergeFrom((dev.slimevr.bridge.ProtobufMessages.UserAction) other);
				} else {
					super.mergeFrom(other);
					return this;
				}
			}

			public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.UserAction other) {
				if (other == dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance())
					return this;
				if (!other.getName().isEmpty()) {
					name_ = other.name_;
					onChanged();
				}
				internalGetMutableActionArguments()
					.mergeFrom(
						other.internalGetActionArguments()
					);
				this.mergeUnknownFields(other.unknownFields);
				onChanged();
				return this;
			}

			@java.lang.Override
			public final boolean isInitialized() {
				return true;
			}

			@java.lang.Override
			public Builder mergeFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws java.io.IOException {
				dev.slimevr.bridge.ProtobufMessages.UserAction parsedMessage = null;
				try {
					parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
				} catch (com.google.protobuf.InvalidProtocolBufferException e) {
					parsedMessage = (dev.slimevr.bridge.ProtobufMessages.UserAction) e
						.getUnfinishedMessage();
					throw e.unwrapIOException();
				} finally {
					if (parsedMessage != null) {
						mergeFrom(parsedMessage);
					}
				}
				return this;
			}

			/**
			 * <code>string name = 1;</code>
			 *
			 * @return The name.
			 */
			@Override
			public java.lang.String getName() {
				java.lang.Object ref = name_;
				if (!(ref instanceof java.lang.String)) {
					com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
					java.lang.String s = bs.toStringUtf8();
					name_ = s;
					return s;
				} else {
					return (java.lang.String) ref;
				}
			}

			/**
			 * <code>string name = 1;</code>
			 *
			 * @param value The name to set.
			 * @return This builder for chaining.
			 */
			public Builder setName(
				java.lang.String value
			) {
				if (value == null) {
					throw new NullPointerException();
				}

				name_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>string name = 1;</code>
			 *
			 * @return The bytes for name.
			 */
			@Override
			public com.google.protobuf.ByteString getNameBytes() {
				java.lang.Object ref = name_;
				if (ref instanceof String) {
					com.google.protobuf.ByteString b = com.google.protobuf.ByteString
						.copyFromUtf8(
							(java.lang.String) ref
						);
					name_ = b;
					return b;
				} else {
					return (com.google.protobuf.ByteString) ref;
				}
			}

			/**
			 * <code>string name = 1;</code>
			 *
			 * @param value The bytes for name to set.
			 * @return This builder for chaining.
			 */
			public Builder setNameBytes(
				com.google.protobuf.ByteString value
			) {
				if (value == null) {
					throw new NullPointerException();
				}
				checkByteStringIsUtf8(value);

				name_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>string name = 1;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearName() {

				name_ = getDefaultInstance().getName();
				onChanged();
				return this;
			}

			private com.google.protobuf.MapField<java.lang.String, java.lang.String> internalGetActionArguments() {
				if (actionArguments_ == null) {
					return com.google.protobuf.MapField
						.emptyMapField(
							ActionArgumentsDefaultEntryHolder.defaultEntry
						);
				}
				return actionArguments_;
			}

			private com.google.protobuf.MapField<java.lang.String, java.lang.String> internalGetMutableActionArguments() {
				onChanged();
				if (actionArguments_ == null) {
					actionArguments_ = com.google.protobuf.MapField
						.newMapField(
							ActionArgumentsDefaultEntryHolder.defaultEntry
						);
				}
				if (!actionArguments_.isMutable()) {
					actionArguments_ = actionArguments_.copy();
				}
				return actionArguments_;
			}

			@Override
			public int getActionArgumentsCount() {
				return internalGetActionArguments().getMap().size();
			}

			/**
			 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
			 */

			@java.lang.Override
			public boolean containsActionArguments(
				java.lang.String key
			) {
				if (key == null) {
					throw new java.lang.NullPointerException();
				}
				return internalGetActionArguments().getMap().containsKey(key);
			}

			/**
			 * Use {@link #getActionArgumentsMap()} instead.
			 */
			@java.lang.Override
			@java.lang.Deprecated
			public java.util.Map<java.lang.String, java.lang.String> getActionArguments() {
				return getActionArgumentsMap();
			}

			/**
			 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
			 */
			@java.lang.Override

			public java.util.Map<java.lang.String, java.lang.String> getActionArgumentsMap() {
				return internalGetActionArguments().getMap();
			}

			/**
			 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
			 */
			@java.lang.Override

			public java.lang.String getActionArgumentsOrDefault(
				java.lang.String key,
				java.lang.String defaultValue
			) {
				if (key == null) {
					throw new java.lang.NullPointerException();
				}
				java.util.Map<java.lang.String, java.lang.String> map = internalGetActionArguments()
					.getMap();
				return map.containsKey(key) ? map.get(key) : defaultValue;
			}

			/**
			 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
			 */
			@java.lang.Override

			public java.lang.String getActionArgumentsOrThrow(
				java.lang.String key
			) {
				if (key == null) {
					throw new java.lang.NullPointerException();
				}
				java.util.Map<java.lang.String, java.lang.String> map = internalGetActionArguments()
					.getMap();
				if (!map.containsKey(key)) {
					throw new java.lang.IllegalArgumentException();
				}
				return map.get(key);
			}

			public Builder clearActionArguments() {
				internalGetMutableActionArguments()
					.getMutableMap()
					.clear();
				return this;
			}

			/**
			 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
			 */

			public Builder removeActionArguments(
				java.lang.String key
			) {
				if (key == null) {
					throw new java.lang.NullPointerException();
				}
				internalGetMutableActionArguments()
					.getMutableMap()
					.remove(key);
				return this;
			}

			/**
			 * Use alternate mutation accessors instead.
			 */
			@java.lang.Deprecated
			public java.util.Map<java.lang.String, java.lang.String> getMutableActionArguments() {
				return internalGetMutableActionArguments().getMutableMap();
			}

			/**
			 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
			 */
			public Builder putActionArguments(
				java.lang.String key,
				java.lang.String value
			) {
				if (key == null) {
					throw new java.lang.NullPointerException();
				}
				if (value == null) {
					throw new java.lang.NullPointerException();
				}
				internalGetMutableActionArguments()
					.getMutableMap()
					.put(key, value);
				return this;
			}

			/**
			 * <code>map&lt;string, string&gt; action_arguments = 2;</code>
			 */

			public Builder putAllActionArguments(
				java.util.Map<java.lang.String, java.lang.String> values
			) {
				internalGetMutableActionArguments()
					.getMutableMap()
					.putAll(values);
				return this;
			}

			@java.lang.Override
			public final Builder setUnknownFields(
				final com.google.protobuf.UnknownFieldSet unknownFields
			) {
				return super.setUnknownFields(unknownFields);
			}

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

			// @@protoc_insertion_point(builder_scope:messages.UserAction)
		}
	}

	/**
	 * Protobuf type {@code messages.TrackerAdded}
	 */
	public static final class TrackerAdded extends
		com.google.protobuf.GeneratedMessageV3 implements
		// @@protoc_insertion_point(message_implements:messages.TrackerAdded)
		TrackerAddedOrBuilder {
		public static final int TRACKER_ID_FIELD_NUMBER = 1;
		public static final int TRACKER_SERIAL_FIELD_NUMBER = 2;
		public static final int TRACKER_NAME_FIELD_NUMBER = 3;
		public static final int TRACKER_ROLE_FIELD_NUMBER = 4;
		private static final long serialVersionUID = 0L;
		// @@protoc_insertion_point(class_scope:messages.TrackerAdded)
		private static final dev.slimevr.bridge.ProtobufMessages.TrackerAdded DEFAULT_INSTANCE;
		private static final com.google.protobuf.Parser<TrackerAdded> PARSER = new com.google.protobuf.AbstractParser<TrackerAdded>() {
			@java.lang.Override
			public TrackerAdded parsePartialFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws com.google.protobuf.InvalidProtocolBufferException {
				return new TrackerAdded(input, extensionRegistry);
			}
		};

		static {
			DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.TrackerAdded();
		}

		private int trackerId_;
		private volatile java.lang.Object trackerSerial_;
		private volatile java.lang.Object trackerName_;
		private int trackerRole_;
		private byte memoizedIsInitialized = -1;

		// Use TrackerAdded.newBuilder() to construct.
		private TrackerAdded(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
			super(builder);
		}

		private TrackerAdded() {
			trackerSerial_ = "";
			trackerName_ = "";
		}

		private TrackerAdded(
			com.google.protobuf.CodedInputStream input,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			this();
			if (extensionRegistry == null) {
				throw new java.lang.NullPointerException();
			}
			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;
						case 8: {

							trackerId_ = input.readInt32();
							break;
						}
						case 18: {
							java.lang.String s = input.readStringRequireUtf8();

							trackerSerial_ = s;
							break;
						}
						case 26: {
							java.lang.String s = input.readStringRequireUtf8();

							trackerName_ = s;
							break;
						}
						case 32: {

							trackerRole_ = input.readInt32();
							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 dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerAdded_descriptor;
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(
			java.nio.ByteBuffer data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(
			java.nio.ByteBuffer data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(
			com.google.protobuf.ByteString data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(
			com.google.protobuf.ByteString data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(byte[] data)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(
			byte[] data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded 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 dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseDelimitedFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseDelimitedWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded 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 dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(
			com.google.protobuf.CodedInputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded 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 static Builder newBuilder() {
			return DEFAULT_INSTANCE.toBuilder();
		}

		public static Builder newBuilder(
			dev.slimevr.bridge.ProtobufMessages.TrackerAdded prototype
		) {
			return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded getDefaultInstance() {
			return DEFAULT_INSTANCE;
		}

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

		@java.lang.Override
		@SuppressWarnings({ "unused" })
		protected java.lang.Object newInstance(
			UnusedPrivateParameter unused
		) {
			return new TrackerAdded();
		}

		@java.lang.Override
		public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
			return this.unknownFields;
		}

		@java.lang.Override
		protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
			return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerAdded_fieldAccessorTable
				.ensureFieldAccessorsInitialized(
					dev.slimevr.bridge.ProtobufMessages.TrackerAdded.class,
					dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder.class
				);
		}

		/**
		 * <code>int32 tracker_id = 1;</code>
		 *
		 * @return The trackerId.
		 */
		@java.lang.Override
		public int getTrackerId() {
			return trackerId_;
		}

		/**
		 * <code>string tracker_serial = 2;</code>
		 *
		 * @return The trackerSerial.
		 */
		@java.lang.Override
		public java.lang.String getTrackerSerial() {
			java.lang.Object ref = trackerSerial_;
			if (ref instanceof java.lang.String) {
				return (java.lang.String) ref;
			} else {
				com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
				java.lang.String s = bs.toStringUtf8();
				trackerSerial_ = s;
				return s;
			}
		}

		/**
		 * <code>string tracker_serial = 2;</code>
		 *
		 * @return The bytes for trackerSerial.
		 */
		@java.lang.Override
		public com.google.protobuf.ByteString getTrackerSerialBytes() {
			java.lang.Object ref = trackerSerial_;
			if (ref instanceof java.lang.String) {
				com.google.protobuf.ByteString b = com.google.protobuf.ByteString
					.copyFromUtf8(
						(java.lang.String) ref
					);
				trackerSerial_ = b;
				return b;
			} else {
				return (com.google.protobuf.ByteString) ref;
			}
		}

		/**
		 * <code>string tracker_name = 3;</code>
		 *
		 * @return The trackerName.
		 */
		@java.lang.Override
		public java.lang.String getTrackerName() {
			java.lang.Object ref = trackerName_;
			if (ref instanceof java.lang.String) {
				return (java.lang.String) ref;
			} else {
				com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
				java.lang.String s = bs.toStringUtf8();
				trackerName_ = s;
				return s;
			}
		}

		/**
		 * <code>string tracker_name = 3;</code>
		 *
		 * @return The bytes for trackerName.
		 */
		@java.lang.Override
		public com.google.protobuf.ByteString getTrackerNameBytes() {
			java.lang.Object ref = trackerName_;
			if (ref instanceof java.lang.String) {
				com.google.protobuf.ByteString b = com.google.protobuf.ByteString
					.copyFromUtf8(
						(java.lang.String) ref
					);
				trackerName_ = b;
				return b;
			} else {
				return (com.google.protobuf.ByteString) ref;
			}
		}

		/**
		 * <code>int32 tracker_role = 4;</code>
		 *
		 * @return The trackerRole.
		 */
		@java.lang.Override
		public int getTrackerRole() {
			return trackerRole_;
		}

		@java.lang.Override
		public final boolean isInitialized() {
			byte isInitialized = memoizedIsInitialized;
			if (isInitialized == 1)
				return true;
			if (isInitialized == 0)
				return false;

			memoizedIsInitialized = 1;
			return true;
		}

		@java.lang.Override
		public void writeTo(com.google.protobuf.CodedOutputStream output)
			throws java.io.IOException {
			if (trackerId_ != 0) {
				output.writeInt32(1, trackerId_);
			}
			if (!getTrackerSerialBytes().isEmpty()) {
				com.google.protobuf.GeneratedMessageV3.writeString(output, 2, trackerSerial_);
			}
			if (!getTrackerNameBytes().isEmpty()) {
				com.google.protobuf.GeneratedMessageV3.writeString(output, 3, trackerName_);
			}
			if (trackerRole_ != 0) {
				output.writeInt32(4, trackerRole_);
			}
			unknownFields.writeTo(output);
		}

		@java.lang.Override
		public int getSerializedSize() {
			int size = memoizedSize;
			if (size != -1)
				return size;

			size = 0;
			if (trackerId_ != 0) {
				size += com.google.protobuf.CodedOutputStream
					.computeInt32Size(1, trackerId_);
			}
			if (!getTrackerSerialBytes().isEmpty()) {
				size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, trackerSerial_);
			}
			if (!getTrackerNameBytes().isEmpty()) {
				size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, trackerName_);
			}
			if (trackerRole_ != 0) {
				size += com.google.protobuf.CodedOutputStream
					.computeInt32Size(4, trackerRole_);
			}
			size += unknownFields.getSerializedSize();
			memoizedSize = size;
			return size;
		}

		@java.lang.Override
		public boolean equals(final java.lang.Object obj) {
			if (obj == this) {
				return true;
			}
			if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.TrackerAdded)) {
				return super.equals(obj);
			}
			dev.slimevr.bridge.ProtobufMessages.TrackerAdded other = (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) obj;

			if (getTrackerId() != other.getTrackerId())
				return false;
			if (
				!getTrackerSerial()
					.equals(other.getTrackerSerial())
			)
				return false;
			if (
				!getTrackerName()
					.equals(other.getTrackerName())
			)
				return false;
			if (getTrackerRole() != other.getTrackerRole())
				return false;
			return unknownFields.equals(other.unknownFields);
		}

		@java.lang.Override
		public int hashCode() {
			if (memoizedHashCode != 0) {
				return memoizedHashCode;
			}
			int hash = 41;
			hash = (19 * hash) + getDescriptor().hashCode();
			hash = (37 * hash) + TRACKER_ID_FIELD_NUMBER;
			hash = (53 * hash) + getTrackerId();
			hash = (37 * hash) + TRACKER_SERIAL_FIELD_NUMBER;
			hash = (53 * hash) + getTrackerSerial().hashCode();
			hash = (37 * hash) + TRACKER_NAME_FIELD_NUMBER;
			hash = (53 * hash) + getTrackerName().hashCode();
			hash = (37 * hash) + TRACKER_ROLE_FIELD_NUMBER;
			hash = (53 * hash) + getTrackerRole();
			hash = (29 * hash) + unknownFields.hashCode();
			memoizedHashCode = hash;
			return hash;
		}

		@java.lang.Override
		public Builder newBuilderForType() {
			return newBuilder();
		}

		@java.lang.Override
		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;
		}

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

		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.TrackerAdded getDefaultInstanceForType() {
			return DEFAULT_INSTANCE;
		}

		/**
		 * Protobuf type {@code messages.TrackerAdded}
		 */
		public static final class Builder extends
			com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
			// @@protoc_insertion_point(builder_implements:messages.TrackerAdded)
			dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder {
			private int trackerId_;
			private java.lang.Object trackerSerial_ = "";
			private java.lang.Object trackerName_ = "";
			private int trackerRole_;

			// Construct using
			// dev.slimevr.bridge.ProtobufMessages.TrackerAdded.newBuilder()
			private Builder() {
				maybeForceBuilderInitialization();
			}

			private Builder(
				com.google.protobuf.GeneratedMessageV3.BuilderParent parent
			) {
				super(parent);
				maybeForceBuilderInitialization();
			}

			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerAdded_descriptor;
			}

			@java.lang.Override
			protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerAdded_fieldAccessorTable
					.ensureFieldAccessorsInitialized(
						dev.slimevr.bridge.ProtobufMessages.TrackerAdded.class,
						dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder.class
					);
			}

			private void maybeForceBuilderInitialization() {
				if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
			}

			@java.lang.Override
			public Builder clear() {
				super.clear();
				trackerId_ = 0;

				trackerSerial_ = "";

				trackerName_ = "";

				trackerRole_ = 0;

				return this;
			}

			@java.lang.Override
			public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerAdded_descriptor;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerAdded getDefaultInstanceForType() {
				return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance();
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerAdded build() {
				dev.slimevr.bridge.ProtobufMessages.TrackerAdded result = buildPartial();
				if (!result.isInitialized()) {
					throw newUninitializedMessageException(result);
				}
				return result;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerAdded buildPartial() {
				dev.slimevr.bridge.ProtobufMessages.TrackerAdded result = new dev.slimevr.bridge.ProtobufMessages.TrackerAdded(
					this
				);
				result.trackerId_ = trackerId_;
				result.trackerSerial_ = trackerSerial_;
				result.trackerName_ = trackerName_;
				result.trackerRole_ = trackerRole_;
				onBuilt();
				return result;
			}

			@java.lang.Override
			public Builder clone() {
				return super.clone();
			}

			@java.lang.Override
			public Builder setField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.setField(field, value);
			}

			@java.lang.Override
			public Builder clearField(
				com.google.protobuf.Descriptors.FieldDescriptor field
			) {
				return super.clearField(field);
			}

			@java.lang.Override
			public Builder clearOneof(
				com.google.protobuf.Descriptors.OneofDescriptor oneof
			) {
				return super.clearOneof(oneof);
			}

			@java.lang.Override
			public Builder setRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				int index,
				java.lang.Object value
			) {
				return super.setRepeatedField(field, index, value);
			}

			@java.lang.Override
			public Builder addRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.addRepeatedField(field, value);
			}

			@java.lang.Override
			public Builder mergeFrom(com.google.protobuf.Message other) {
				if (other instanceof dev.slimevr.bridge.ProtobufMessages.TrackerAdded) {
					return mergeFrom((dev.slimevr.bridge.ProtobufMessages.TrackerAdded) other);
				} else {
					super.mergeFrom(other);
					return this;
				}
			}

			public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.TrackerAdded other) {
				if (other == dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance())
					return this;
				if (other.getTrackerId() != 0) {
					setTrackerId(other.getTrackerId());
				}
				if (!other.getTrackerSerial().isEmpty()) {
					trackerSerial_ = other.trackerSerial_;
					onChanged();
				}
				if (!other.getTrackerName().isEmpty()) {
					trackerName_ = other.trackerName_;
					onChanged();
				}
				if (other.getTrackerRole() != 0) {
					setTrackerRole(other.getTrackerRole());
				}
				this.mergeUnknownFields(other.unknownFields);
				onChanged();
				return this;
			}

			@java.lang.Override
			public final boolean isInitialized() {
				return true;
			}

			@java.lang.Override
			public Builder mergeFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws java.io.IOException {
				dev.slimevr.bridge.ProtobufMessages.TrackerAdded parsedMessage = null;
				try {
					parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
				} catch (com.google.protobuf.InvalidProtocolBufferException e) {
					parsedMessage = (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) e
						.getUnfinishedMessage();
					throw e.unwrapIOException();
				} finally {
					if (parsedMessage != null) {
						mergeFrom(parsedMessage);
					}
				}
				return this;
			}

			/**
			 * <code>int32 tracker_id = 1;</code>
			 *
			 * @return The trackerId.
			 */
			@java.lang.Override
			public int getTrackerId() {
				return trackerId_;
			}

			/**
			 * <code>int32 tracker_id = 1;</code>
			 *
			 * @param value The trackerId to set.
			 * @return This builder for chaining.
			 */
			public Builder setTrackerId(int value) {

				trackerId_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>int32 tracker_id = 1;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearTrackerId() {

				trackerId_ = 0;
				onChanged();
				return this;
			}

			/**
			 * <code>string tracker_serial = 2;</code>
			 *
			 * @return The trackerSerial.
			 */
			@Override
			public java.lang.String getTrackerSerial() {
				java.lang.Object ref = trackerSerial_;
				if (!(ref instanceof java.lang.String)) {
					com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
					java.lang.String s = bs.toStringUtf8();
					trackerSerial_ = s;
					return s;
				} else {
					return (java.lang.String) ref;
				}
			}

			/**
			 * <code>string tracker_serial = 2;</code>
			 *
			 * @param value The trackerSerial to set.
			 * @return This builder for chaining.
			 */
			public Builder setTrackerSerial(
				java.lang.String value
			) {
				if (value == null) {
					throw new NullPointerException();
				}

				trackerSerial_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>string tracker_serial = 2;</code>
			 *
			 * @return The bytes for trackerSerial.
			 */
			@Override
			public com.google.protobuf.ByteString getTrackerSerialBytes() {
				java.lang.Object ref = trackerSerial_;
				if (ref instanceof String) {
					com.google.protobuf.ByteString b = com.google.protobuf.ByteString
						.copyFromUtf8(
							(java.lang.String) ref
						);
					trackerSerial_ = b;
					return b;
				} else {
					return (com.google.protobuf.ByteString) ref;
				}
			}

			/**
			 * <code>string tracker_serial = 2;</code>
			 *
			 * @param value The bytes for trackerSerial to set.
			 * @return This builder for chaining.
			 */
			public Builder setTrackerSerialBytes(
				com.google.protobuf.ByteString value
			) {
				if (value == null) {
					throw new NullPointerException();
				}
				checkByteStringIsUtf8(value);

				trackerSerial_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>string tracker_serial = 2;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearTrackerSerial() {

				trackerSerial_ = getDefaultInstance().getTrackerSerial();
				onChanged();
				return this;
			}

			/**
			 * <code>string tracker_name = 3;</code>
			 *
			 * @return The trackerName.
			 */
			@Override
			public java.lang.String getTrackerName() {
				java.lang.Object ref = trackerName_;
				if (!(ref instanceof java.lang.String)) {
					com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
					java.lang.String s = bs.toStringUtf8();
					trackerName_ = s;
					return s;
				} else {
					return (java.lang.String) ref;
				}
			}

			/**
			 * <code>string tracker_name = 3;</code>
			 *
			 * @param value The trackerName to set.
			 * @return This builder for chaining.
			 */
			public Builder setTrackerName(
				java.lang.String value
			) {
				if (value == null) {
					throw new NullPointerException();
				}

				trackerName_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>string tracker_name = 3;</code>
			 *
			 * @return The bytes for trackerName.
			 */
			@Override
			public com.google.protobuf.ByteString getTrackerNameBytes() {
				java.lang.Object ref = trackerName_;
				if (ref instanceof String) {
					com.google.protobuf.ByteString b = com.google.protobuf.ByteString
						.copyFromUtf8(
							(java.lang.String) ref
						);
					trackerName_ = b;
					return b;
				} else {
					return (com.google.protobuf.ByteString) ref;
				}
			}

			/**
			 * <code>string tracker_name = 3;</code>
			 *
			 * @param value The bytes for trackerName to set.
			 * @return This builder for chaining.
			 */
			public Builder setTrackerNameBytes(
				com.google.protobuf.ByteString value
			) {
				if (value == null) {
					throw new NullPointerException();
				}
				checkByteStringIsUtf8(value);

				trackerName_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>string tracker_name = 3;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearTrackerName() {

				trackerName_ = getDefaultInstance().getTrackerName();
				onChanged();
				return this;
			}

			/**
			 * <code>int32 tracker_role = 4;</code>
			 *
			 * @return The trackerRole.
			 */
			@java.lang.Override
			public int getTrackerRole() {
				return trackerRole_;
			}

			/**
			 * <code>int32 tracker_role = 4;</code>
			 *
			 * @param value The trackerRole to set.
			 * @return This builder for chaining.
			 */
			public Builder setTrackerRole(int value) {

				trackerRole_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>int32 tracker_role = 4;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearTrackerRole() {

				trackerRole_ = 0;
				onChanged();
				return this;
			}

			@java.lang.Override
			public final Builder setUnknownFields(
				final com.google.protobuf.UnknownFieldSet unknownFields
			) {
				return super.setUnknownFields(unknownFields);
			}

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

			// @@protoc_insertion_point(builder_scope:messages.TrackerAdded)
		}
	}

	/**
	 * Protobuf type {@code messages.TrackerStatus}
	 */
	public static final class TrackerStatus extends
		com.google.protobuf.GeneratedMessageV3 implements
		// @@protoc_insertion_point(message_implements:messages.TrackerStatus)
		TrackerStatusOrBuilder {
		public static final int TRACKER_ID_FIELD_NUMBER = 1;
		public static final int STATUS_FIELD_NUMBER = 2;
		public static final int EXTRA_FIELD_NUMBER = 3;
		public static final int CONFIDENCE_FIELD_NUMBER = 4;
		private static final long serialVersionUID = 0L;
		// @@protoc_insertion_point(class_scope:messages.TrackerStatus)
		private static final dev.slimevr.bridge.ProtobufMessages.TrackerStatus DEFAULT_INSTANCE;
		private static final com.google.protobuf.Parser<TrackerStatus> PARSER = new com.google.protobuf.AbstractParser<TrackerStatus>() {
			@java.lang.Override
			public TrackerStatus parsePartialFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws com.google.protobuf.InvalidProtocolBufferException {
				return new TrackerStatus(input, extensionRegistry);
			}
		};

		static {
			DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.TrackerStatus();
		}

		private int bitField0_;
		private int trackerId_;
		private int status_;
		private com.google.protobuf.MapField<java.lang.String, java.lang.String> extra_;
		private int confidence_;
		private byte memoizedIsInitialized = -1;

		// Use TrackerStatus.newBuilder() to construct.
		private TrackerStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
			super(builder);
		}

		private TrackerStatus() {
			status_ = 0;
			confidence_ = 0;
		}

		private TrackerStatus(
			com.google.protobuf.CodedInputStream input,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			this();
			if (extensionRegistry == null) {
				throw new java.lang.NullPointerException();
			}
			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;
						case 8: {

							trackerId_ = input.readInt32();
							break;
						}
						case 16: {
							int rawValue = input.readEnum();

							status_ = rawValue;
							break;
						}
						case 26: {
							if (!((mutable_bitField0_ & 0x00000001) != 0)) {
								extra_ = com.google.protobuf.MapField
									.newMapField(
										ExtraDefaultEntryHolder.defaultEntry
									);
								mutable_bitField0_ |= 0x00000001;
							}
							com.google.protobuf.MapEntry<java.lang.String, java.lang.String> extra__ = input
								.readMessage(
									ExtraDefaultEntryHolder.defaultEntry.getParserForType(),
									extensionRegistry
								);
							extra_
								.getMutableMap()
								.put(
									extra__.getKey(),
									extra__.getValue()
								);
							break;
						}
						case 32: {
							int rawValue = input.readEnum();
							bitField0_ |= 0x00000001;
							confidence_ = rawValue;
							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 dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_descriptor;
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(
			java.nio.ByteBuffer data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(
			java.nio.ByteBuffer data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(
			com.google.protobuf.ByteString data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(
			com.google.protobuf.ByteString data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(byte[] data)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(
			byte[] data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus 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 dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseDelimitedFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseDelimitedWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus 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 dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(
			com.google.protobuf.CodedInputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus 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 static Builder newBuilder() {
			return DEFAULT_INSTANCE.toBuilder();
		}

		public static Builder newBuilder(
			dev.slimevr.bridge.ProtobufMessages.TrackerStatus prototype
		) {
			return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
		}

		public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus getDefaultInstance() {
			return DEFAULT_INSTANCE;
		}

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

		@java.lang.Override
		@SuppressWarnings({ "unused" })
		protected java.lang.Object newInstance(
			UnusedPrivateParameter unused
		) {
			return new TrackerStatus();
		}

		@java.lang.Override
		public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
			return this.unknownFields;
		}

		@SuppressWarnings({ "rawtypes" })
		@java.lang.Override
		protected com.google.protobuf.MapField internalGetMapField(
			int number
		) {
			switch (number) {
				case 3:
					return internalGetExtra();
				default:
					throw new RuntimeException(
						"Invalid map field number: " + number
					);
			}
		}

		@java.lang.Override
		protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
			return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_fieldAccessorTable
				.ensureFieldAccessorsInitialized(
					dev.slimevr.bridge.ProtobufMessages.TrackerStatus.class,
					dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder.class
				);
		}

		/**
		 * <code>int32 tracker_id = 1;</code>
		 *
		 * @return The trackerId.
		 */
		@java.lang.Override
		public int getTrackerId() {
			return trackerId_;
		}

		/**
		 * <code>.messages.TrackerStatus.Status status = 2;</code>
		 *
		 * @return The enum numeric value on the wire for status.
		 */
		@java.lang.Override
		public int getStatusValue() {
			return status_;
		}

		/**
		 * <code>.messages.TrackerStatus.Status status = 2;</code>
		 *
		 * @return The status.
		 */
		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status getStatus() {
			@SuppressWarnings("deprecation")
			dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status
				.valueOf(status_);
			return result == null
				? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.UNRECOGNIZED
				: result;
		}

		private com.google.protobuf.MapField<java.lang.String, java.lang.String> internalGetExtra() {
			if (extra_ == null) {
				return com.google.protobuf.MapField
					.emptyMapField(
						ExtraDefaultEntryHolder.defaultEntry
					);
			}
			return extra_;
		}

		@Override
		public int getExtraCount() {
			return internalGetExtra().getMap().size();
		}

		/**
		 * <code>map&lt;string, string&gt; extra = 3;</code>
		 */

		@java.lang.Override
		public boolean containsExtra(
			java.lang.String key
		) {
			if (key == null) {
				throw new java.lang.NullPointerException();
			}
			return internalGetExtra().getMap().containsKey(key);
		}

		/**
		 * Use {@link #getExtraMap()} instead.
		 */
		@java.lang.Override
		@java.lang.Deprecated
		public java.util.Map<java.lang.String, java.lang.String> getExtra() {
			return getExtraMap();
		}

		/**
		 * <code>map&lt;string, string&gt; extra = 3;</code>
		 */
		@java.lang.Override

		public java.util.Map<java.lang.String, java.lang.String> getExtraMap() {
			return internalGetExtra().getMap();
		}

		/**
		 * <code>map&lt;string, string&gt; extra = 3;</code>
		 */
		@java.lang.Override

		public java.lang.String getExtraOrDefault(
			java.lang.String key,
			java.lang.String defaultValue
		) {
			if (key == null) {
				throw new java.lang.NullPointerException();
			}
			java.util.Map<java.lang.String, java.lang.String> map = internalGetExtra().getMap();
			return map.containsKey(key) ? map.get(key) : defaultValue;
		}

		/**
		 * <code>map&lt;string, string&gt; extra = 3;</code>
		 */
		@java.lang.Override

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

		/**
		 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
		 *
		 * @return Whether the confidence field is set.
		 */
		@java.lang.Override
		public boolean hasConfidence() {
			return ((bitField0_ & 0x00000001) != 0);
		}

		/**
		 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
		 *
		 * @return The enum numeric value on the wire for confidence.
		 */
		@java.lang.Override
		public int getConfidenceValue() {
			return confidence_;
		}

		/**
		 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
		 *
		 * @return The confidence.
		 */
		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence getConfidence() {
			@SuppressWarnings("deprecation")
			dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence
				.valueOf(confidence_);
			return result == null
				? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence.UNRECOGNIZED
				: result;
		}

		@java.lang.Override
		public final boolean isInitialized() {
			byte isInitialized = memoizedIsInitialized;
			if (isInitialized == 1)
				return true;
			if (isInitialized == 0)
				return false;

			memoizedIsInitialized = 1;
			return true;
		}

		@java.lang.Override
		public void writeTo(com.google.protobuf.CodedOutputStream output)
			throws java.io.IOException {
			if (trackerId_ != 0) {
				output.writeInt32(1, trackerId_);
			}
			if (
				status_
					!= dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.DISCONNECTED
						.getNumber()
			) {
				output.writeEnum(2, status_);
			}
			com.google.protobuf.GeneratedMessageV3
				.serializeStringMapTo(
					output,
					internalGetExtra(),
					ExtraDefaultEntryHolder.defaultEntry,
					3
				);
			if (((bitField0_ & 0x00000001) != 0)) {
				output.writeEnum(4, confidence_);
			}
			unknownFields.writeTo(output);
		}

		@java.lang.Override
		public int getSerializedSize() {
			int size = memoizedSize;
			if (size != -1)
				return size;

			size = 0;
			if (trackerId_ != 0) {
				size += com.google.protobuf.CodedOutputStream
					.computeInt32Size(1, trackerId_);
			}
			if (
				status_
					!= dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.DISCONNECTED
						.getNumber()
			) {
				size += com.google.protobuf.CodedOutputStream
					.computeEnumSize(2, status_);
			}
			for (
				java.util.Map.Entry<java.lang.String, java.lang.String> entry : internalGetExtra()
					.getMap()
					.entrySet()
			) {
				com.google.protobuf.MapEntry<java.lang.String, java.lang.String> extra__ = ExtraDefaultEntryHolder.defaultEntry
					.newBuilderForType()
					.setKey(entry.getKey())
					.setValue(entry.getValue())
					.build();
				size += com.google.protobuf.CodedOutputStream
					.computeMessageSize(3, extra__);
			}
			if (((bitField0_ & 0x00000001) != 0)) {
				size += com.google.protobuf.CodedOutputStream
					.computeEnumSize(4, confidence_);
			}
			size += unknownFields.getSerializedSize();
			memoizedSize = size;
			return size;
		}

		@java.lang.Override
		public boolean equals(final java.lang.Object obj) {
			if (obj == this) {
				return true;
			}
			if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.TrackerStatus)) {
				return super.equals(obj);
			}
			dev.slimevr.bridge.ProtobufMessages.TrackerStatus other = (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) obj;

			if (getTrackerId() != other.getTrackerId())
				return false;
			if (status_ != other.status_)
				return false;
			if (
				!internalGetExtra()
					.equals(
						other.internalGetExtra()
					)
			)
				return false;
			if (hasConfidence() != other.hasConfidence())
				return false;
			if (hasConfidence()) {
				if (confidence_ != other.confidence_)
					return false;
			}
			return unknownFields.equals(other.unknownFields);
		}

		@java.lang.Override
		public int hashCode() {
			if (memoizedHashCode != 0) {
				return memoizedHashCode;
			}
			int hash = 41;
			hash = (19 * hash) + getDescriptor().hashCode();
			hash = (37 * hash) + TRACKER_ID_FIELD_NUMBER;
			hash = (53 * hash) + getTrackerId();
			hash = (37 * hash) + STATUS_FIELD_NUMBER;
			hash = (53 * hash) + status_;
			if (!internalGetExtra().getMap().isEmpty()) {
				hash = (37 * hash) + EXTRA_FIELD_NUMBER;
				hash = (53 * hash) + internalGetExtra().hashCode();
			}
			if (hasConfidence()) {
				hash = (37 * hash) + CONFIDENCE_FIELD_NUMBER;
				hash = (53 * hash) + confidence_;
			}
			hash = (29 * hash) + unknownFields.hashCode();
			memoizedHashCode = hash;
			return hash;
		}

		@java.lang.Override
		public Builder newBuilderForType() {
			return newBuilder();
		}

		@java.lang.Override
		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;
		}

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

		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.TrackerStatus getDefaultInstanceForType() {
			return DEFAULT_INSTANCE;
		}

		/**
		 * Protobuf enum {@code messages.TrackerStatus.Status}
		 */
		public enum Status
			implements com.google.protobuf.ProtocolMessageEnum {
			/**
			 * <code>DISCONNECTED = 0;</code>
			 */
			DISCONNECTED(0),
			/**
			 * <code>OK = 1;</code>
			 */
			OK(1),
			/**
			 * <code>BUSY = 2;</code>
			 */
			BUSY(2),
			/**
			 * <code>ERROR = 3;</code>
			 */
			ERROR(3),
			/**
			 * <code>OCCLUDED = 4;</code>
			 */
			OCCLUDED(4),
			UNRECOGNIZED(-1),
			;

			/**
			 * <code>DISCONNECTED = 0;</code>
			 */
			public static final int DISCONNECTED_VALUE = 0;
			/**
			 * <code>OK = 1;</code>
			 */
			public static final int OK_VALUE = 1;
			/**
			 * <code>BUSY = 2;</code>
			 */
			public static final int BUSY_VALUE = 2;
			/**
			 * <code>ERROR = 3;</code>
			 */
			public static final int ERROR_VALUE = 3;
			/**
			 * <code>OCCLUDED = 4;</code>
			 */
			public static final int OCCLUDED_VALUE = 4;
			private static final com.google.protobuf.Internal.EnumLiteMap<Status> internalValueMap = new com.google.protobuf.Internal.EnumLiteMap<Status>() {
				@Override
				public Status findValueByNumber(int number) {
					return Status.forNumber(number);
				}
			};
			private static final Status[] VALUES = values();
			private final int value;

			Status(int value) {
				this.value = value;
			}

			/**
			 * @param value The numeric wire value of the corresponding enum
			 * entry.
			 * @return The enum associated with the given numeric wire value.
			 * @deprecated Use {@link #forNumber(int)} instead.
			 */
			@java.lang.Deprecated
			public static Status valueOf(int value) {
				return forNumber(value);
			}

			/**
			 * @param value The numeric wire value of the corresponding enum
			 * entry.
			 * @return The enum associated with the given numeric wire value.
			 */
			public static Status forNumber(int value) {
				switch (value) {
					case 0:
						return DISCONNECTED;
					case 1:
						return OK;
					case 2:
						return BUSY;
					case 3:
						return ERROR;
					case 4:
						return OCCLUDED;
					default:
						return null;
				}
			}

			public static com.google.protobuf.Internal.EnumLiteMap<Status> internalGetValueMap() {
				return internalValueMap;
			}

			public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
				return dev.slimevr.bridge.ProtobufMessages.TrackerStatus
					.getDescriptor()
					.getEnumTypes()
					.get(0);
			}

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

			@Override
			public final int getNumber() {
				if (this == UNRECOGNIZED) {
					throw new java.lang.IllegalArgumentException(
						"Can't get the number of an unknown enum value."
					);
				}
				return value;
			}

			@Override
			public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
				if (this == UNRECOGNIZED) {
					throw new java.lang.IllegalStateException(
						"Can't get the descriptor of an unrecognized enum value."
					);
				}
				return getDescriptor().getValues().get(ordinal());
			}

			@Override
			public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
				return getDescriptor();
			}

			// @@protoc_insertion_point(enum_scope:messages.TrackerStatus.Status)
		}

		/**
		 * Protobuf enum {@code messages.TrackerStatus.Confidence}
		 */
		public enum Confidence
			implements com.google.protobuf.ProtocolMessageEnum {
			/**
			 * <code>NO = 0;</code>
			 */
			NO(0),
			/**
			 * <code>LOW = 1;</code>
			 */
			LOW(1),
			/**
			 * <code>MEDIUM = 5;</code>
			 */
			MEDIUM(5),
			/**
			 * <code>HIGH = 10;</code>
			 */
			HIGH(10),
			UNRECOGNIZED(-1),
			;

			/**
			 * <code>NO = 0;</code>
			 */
			public static final int NO_VALUE = 0;
			/**
			 * <code>LOW = 1;</code>
			 */
			public static final int LOW_VALUE = 1;
			/**
			 * <code>MEDIUM = 5;</code>
			 */
			public static final int MEDIUM_VALUE = 5;
			/**
			 * <code>HIGH = 10;</code>
			 */
			public static final int HIGH_VALUE = 10;
			private static final com.google.protobuf.Internal.EnumLiteMap<Confidence> internalValueMap = new com.google.protobuf.Internal.EnumLiteMap<Confidence>() {
				@Override
				public Confidence findValueByNumber(int number) {
					return Confidence.forNumber(number);
				}
			};
			private static final Confidence[] VALUES = values();
			private final int value;

			Confidence(int value) {
				this.value = value;
			}

			/**
			 * @param value The numeric wire value of the corresponding enum
			 * entry.
			 * @return The enum associated with the given numeric wire value.
			 * @deprecated Use {@link #forNumber(int)} instead.
			 */
			@java.lang.Deprecated
			public static Confidence valueOf(int value) {
				return forNumber(value);
			}

			/**
			 * @param value The numeric wire value of the corresponding enum
			 * entry.
			 * @return The enum associated with the given numeric wire value.
			 */
			public static Confidence forNumber(int value) {
				switch (value) {
					case 0:
						return NO;
					case 1:
						return LOW;
					case 5:
						return MEDIUM;
					case 10:
						return HIGH;
					default:
						return null;
				}
			}

			public static com.google.protobuf.Internal.EnumLiteMap<Confidence> internalGetValueMap() {
				return internalValueMap;
			}

			public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
				return dev.slimevr.bridge.ProtobufMessages.TrackerStatus
					.getDescriptor()
					.getEnumTypes()
					.get(1);
			}

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

			@Override
			public final int getNumber() {
				if (this == UNRECOGNIZED) {
					throw new java.lang.IllegalArgumentException(
						"Can't get the number of an unknown enum value."
					);
				}
				return value;
			}

			@Override
			public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
				if (this == UNRECOGNIZED) {
					throw new java.lang.IllegalStateException(
						"Can't get the descriptor of an unrecognized enum value."
					);
				}
				return getDescriptor().getValues().get(ordinal());
			}

			@Override
			public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
				return getDescriptor();
			}

			// @@protoc_insertion_point(enum_scope:messages.TrackerStatus.Confidence)
		}

		private static final class ExtraDefaultEntryHolder {
			static final com.google.protobuf.MapEntry<java.lang.String, java.lang.String> defaultEntry = com.google.protobuf.MapEntry
				.newDefaultInstance(
					dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_ExtraEntry_descriptor,
					com.google.protobuf.WireFormat.FieldType.STRING,
					"",
					com.google.protobuf.WireFormat.FieldType.STRING,
					""
				);
		}

		/**
		 * Protobuf type {@code messages.TrackerStatus}
		 */
		public static final class Builder extends
			com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
			// @@protoc_insertion_point(builder_implements:messages.TrackerStatus)
			dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder {
			private int bitField0_;
			private int trackerId_;
			private int status_ = 0;
			private com.google.protobuf.MapField<java.lang.String, java.lang.String> extra_;
			private int confidence_ = 0;

			// Construct using
			// dev.slimevr.bridge.ProtobufMessages.TrackerStatus.newBuilder()
			private Builder() {
				maybeForceBuilderInitialization();
			}

			private Builder(
				com.google.protobuf.GeneratedMessageV3.BuilderParent parent
			) {
				super(parent);
				maybeForceBuilderInitialization();
			}

			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_descriptor;
			}

			@Override
			@SuppressWarnings({ "rawtypes" })
			protected com.google.protobuf.MapField internalGetMapField(
				int number
			) {
				switch (number) {
					case 3:
						return internalGetExtra();
					default:
						throw new RuntimeException(
							"Invalid map field number: " + number
						);
				}
			}

			@Override
			@SuppressWarnings({ "rawtypes" })
			protected com.google.protobuf.MapField internalGetMutableMapField(
				int number
			) {
				switch (number) {
					case 3:
						return internalGetMutableExtra();
					default:
						throw new RuntimeException(
							"Invalid map field number: " + number
						);
				}
			}

			@java.lang.Override
			protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_fieldAccessorTable
					.ensureFieldAccessorsInitialized(
						dev.slimevr.bridge.ProtobufMessages.TrackerStatus.class,
						dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder.class
					);
			}

			private void maybeForceBuilderInitialization() {
				if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
			}

			@java.lang.Override
			public Builder clear() {
				super.clear();
				trackerId_ = 0;

				status_ = 0;

				internalGetMutableExtra().clear();
				confidence_ = 0;
				bitField0_ = (bitField0_ & ~0x00000002);
				return this;
			}

			@java.lang.Override
			public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_descriptor;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerStatus getDefaultInstanceForType() {
				return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance();
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerStatus build() {
				dev.slimevr.bridge.ProtobufMessages.TrackerStatus result = buildPartial();
				if (!result.isInitialized()) {
					throw newUninitializedMessageException(result);
				}
				return result;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerStatus buildPartial() {
				dev.slimevr.bridge.ProtobufMessages.TrackerStatus result = new dev.slimevr.bridge.ProtobufMessages.TrackerStatus(
					this
				);
				int from_bitField0_ = bitField0_;
				int to_bitField0_ = 0;
				result.trackerId_ = trackerId_;
				result.status_ = status_;
				result.extra_ = internalGetExtra();
				result.extra_.makeImmutable();
				if (((from_bitField0_ & 0x00000002) != 0)) {
					to_bitField0_ |= 0x00000001;
				}
				result.confidence_ = confidence_;
				result.bitField0_ = to_bitField0_;
				onBuilt();
				return result;
			}

			@java.lang.Override
			public Builder clone() {
				return super.clone();
			}

			@java.lang.Override
			public Builder setField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.setField(field, value);
			}

			@java.lang.Override
			public Builder clearField(
				com.google.protobuf.Descriptors.FieldDescriptor field
			) {
				return super.clearField(field);
			}

			@java.lang.Override
			public Builder clearOneof(
				com.google.protobuf.Descriptors.OneofDescriptor oneof
			) {
				return super.clearOneof(oneof);
			}

			@java.lang.Override
			public Builder setRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				int index,
				java.lang.Object value
			) {
				return super.setRepeatedField(field, index, value);
			}

			@java.lang.Override
			public Builder addRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.addRepeatedField(field, value);
			}

			@java.lang.Override
			public Builder mergeFrom(com.google.protobuf.Message other) {
				if (other instanceof dev.slimevr.bridge.ProtobufMessages.TrackerStatus) {
					return mergeFrom((dev.slimevr.bridge.ProtobufMessages.TrackerStatus) other);
				} else {
					super.mergeFrom(other);
					return this;
				}
			}

			public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.TrackerStatus other) {
				if (other == dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance())
					return this;
				if (other.getTrackerId() != 0) {
					setTrackerId(other.getTrackerId());
				}
				if (other.status_ != 0) {
					setStatusValue(other.getStatusValue());
				}
				internalGetMutableExtra()
					.mergeFrom(
						other.internalGetExtra()
					);
				if (other.hasConfidence()) {
					setConfidence(other.getConfidence());
				}
				this.mergeUnknownFields(other.unknownFields);
				onChanged();
				return this;
			}

			@java.lang.Override
			public final boolean isInitialized() {
				return true;
			}

			@java.lang.Override
			public Builder mergeFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws java.io.IOException {
				dev.slimevr.bridge.ProtobufMessages.TrackerStatus parsedMessage = null;
				try {
					parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
				} catch (com.google.protobuf.InvalidProtocolBufferException e) {
					parsedMessage = (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) e
						.getUnfinishedMessage();
					throw e.unwrapIOException();
				} finally {
					if (parsedMessage != null) {
						mergeFrom(parsedMessage);
					}
				}
				return this;
			}

			/**
			 * <code>int32 tracker_id = 1;</code>
			 *
			 * @return The trackerId.
			 */
			@java.lang.Override
			public int getTrackerId() {
				return trackerId_;
			}

			/**
			 * <code>int32 tracker_id = 1;</code>
			 *
			 * @param value The trackerId to set.
			 * @return This builder for chaining.
			 */
			public Builder setTrackerId(int value) {

				trackerId_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>int32 tracker_id = 1;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearTrackerId() {

				trackerId_ = 0;
				onChanged();
				return this;
			}

			/**
			 * <code>.messages.TrackerStatus.Status status = 2;</code>
			 *
			 * @return The enum numeric value on the wire for status.
			 */
			@java.lang.Override
			public int getStatusValue() {
				return status_;
			}

			/**
			 * <code>.messages.TrackerStatus.Status status = 2;</code>
			 *
			 * @param value The enum numeric value on the wire for status to
			 * set.
			 * @return This builder for chaining.
			 */
			public Builder setStatusValue(int value) {

				status_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>.messages.TrackerStatus.Status status = 2;</code>
			 *
			 * @return The status.
			 */
			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status getStatus() {
				@SuppressWarnings("deprecation")
				dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status
					.valueOf(status_);
				return result == null
					? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.UNRECOGNIZED
					: result;
			}

			/**
			 * <code>.messages.TrackerStatus.Status status = 2;</code>
			 *
			 * @param value The status to set.
			 * @return This builder for chaining.
			 */
			public Builder setStatus(
				dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status value
			) {
				if (value == null) {
					throw new NullPointerException();
				}

				status_ = value.getNumber();
				onChanged();
				return this;
			}

			/**
			 * <code>.messages.TrackerStatus.Status status = 2;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearStatus() {

				status_ = 0;
				onChanged();
				return this;
			}

			private com.google.protobuf.MapField<java.lang.String, java.lang.String> internalGetExtra() {
				if (extra_ == null) {
					return com.google.protobuf.MapField
						.emptyMapField(
							ExtraDefaultEntryHolder.defaultEntry
						);
				}
				return extra_;
			}

			private com.google.protobuf.MapField<java.lang.String, java.lang.String> internalGetMutableExtra() {
				onChanged();
				if (extra_ == null) {
					extra_ = com.google.protobuf.MapField
						.newMapField(
							ExtraDefaultEntryHolder.defaultEntry
						);
				}
				if (!extra_.isMutable()) {
					extra_ = extra_.copy();
				}
				return extra_;
			}

			@Override
			public int getExtraCount() {
				return internalGetExtra().getMap().size();
			}

			/**
			 * <code>map&lt;string, string&gt; extra = 3;</code>
			 */

			@java.lang.Override
			public boolean containsExtra(
				java.lang.String key
			) {
				if (key == null) {
					throw new java.lang.NullPointerException();
				}
				return internalGetExtra().getMap().containsKey(key);
			}

			/**
			 * Use {@link #getExtraMap()} instead.
			 */
			@java.lang.Override
			@java.lang.Deprecated
			public java.util.Map<java.lang.String, java.lang.String> getExtra() {
				return getExtraMap();
			}

			/**
			 * <code>map&lt;string, string&gt; extra = 3;</code>
			 */
			@java.lang.Override

			public java.util.Map<java.lang.String, java.lang.String> getExtraMap() {
				return internalGetExtra().getMap();
			}

			/**
			 * <code>map&lt;string, string&gt; extra = 3;</code>
			 */
			@java.lang.Override

			public java.lang.String getExtraOrDefault(
				java.lang.String key,
				java.lang.String defaultValue
			) {
				if (key == null) {
					throw new java.lang.NullPointerException();
				}
				java.util.Map<java.lang.String, java.lang.String> map = internalGetExtra().getMap();
				return map.containsKey(key) ? map.get(key) : defaultValue;
			}

			/**
			 * <code>map&lt;string, string&gt; extra = 3;</code>
			 */
			@java.lang.Override

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

			public Builder clearExtra() {
				internalGetMutableExtra()
					.getMutableMap()
					.clear();
				return this;
			}

			/**
			 * <code>map&lt;string, string&gt; extra = 3;</code>
			 */

			public Builder removeExtra(
				java.lang.String key
			) {
				if (key == null) {
					throw new java.lang.NullPointerException();
				}
				internalGetMutableExtra()
					.getMutableMap()
					.remove(key);
				return this;
			}

			/**
			 * Use alternate mutation accessors instead.
			 */
			@java.lang.Deprecated
			public java.util.Map<java.lang.String, java.lang.String> getMutableExtra() {
				return internalGetMutableExtra().getMutableMap();
			}

			/**
			 * <code>map&lt;string, string&gt; extra = 3;</code>
			 */
			public Builder putExtra(
				java.lang.String key,
				java.lang.String value
			) {
				if (key == null) {
					throw new java.lang.NullPointerException();
				}
				if (value == null) {
					throw new java.lang.NullPointerException();
				}
				internalGetMutableExtra()
					.getMutableMap()
					.put(key, value);
				return this;
			}

			/**
			 * <code>map&lt;string, string&gt; extra = 3;</code>
			 */

			public Builder putAllExtra(
				java.util.Map<java.lang.String, java.lang.String> values
			) {
				internalGetMutableExtra()
					.getMutableMap()
					.putAll(values);
				return this;
			}

			/**
			 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
			 *
			 * @return Whether the confidence field is set.
			 */
			@java.lang.Override
			public boolean hasConfidence() {
				return ((bitField0_ & 0x00000002) != 0);
			}

			/**
			 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
			 *
			 * @return The enum numeric value on the wire for confidence.
			 */
			@java.lang.Override
			public int getConfidenceValue() {
				return confidence_;
			}

			/**
			 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
			 *
			 * @param value The enum numeric value on the wire for confidence to
			 * set.
			 * @return This builder for chaining.
			 */
			public Builder setConfidenceValue(int value) {
				bitField0_ |= 0x00000002;
				confidence_ = value;
				onChanged();
				return this;
			}

			/**
			 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
			 *
			 * @return The confidence.
			 */
			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence getConfidence() {
				@SuppressWarnings("deprecation")
				dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence
					.valueOf(confidence_);
				return result == null
					? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence.UNRECOGNIZED
					: result;
			}

			/**
			 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
			 *
			 * @param value The confidence to set.
			 * @return This builder for chaining.
			 */
			public Builder setConfidence(
				dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence value
			) {
				if (value == null) {
					throw new NullPointerException();
				}
				bitField0_ |= 0x00000002;
				confidence_ = value.getNumber();
				onChanged();
				return this;
			}

			/**
			 * <code>.messages.TrackerStatus.Confidence confidence = 4;</code>
			 *
			 * @return This builder for chaining.
			 */
			public Builder clearConfidence() {
				bitField0_ = (bitField0_ & ~0x00000002);
				confidence_ = 0;
				onChanged();
				return this;
			}

			@java.lang.Override
			public final Builder setUnknownFields(
				final com.google.protobuf.UnknownFieldSet unknownFields
			) {
				return super.setUnknownFields(unknownFields);
			}

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

			// @@protoc_insertion_point(builder_scope:messages.TrackerStatus)
		}
	}

	/**
	 * Protobuf type {@code messages.ProtobufMessage}
	 */
	public static final class ProtobufMessage extends
		com.google.protobuf.GeneratedMessageV3 implements
		// @@protoc_insertion_point(message_implements:messages.ProtobufMessage)
		ProtobufMessageOrBuilder {
		public static final int POSITION_FIELD_NUMBER = 1;
		public static final int USER_ACTION_FIELD_NUMBER = 2;
		public static final int TRACKER_ADDED_FIELD_NUMBER = 3;
		public static final int TRACKER_STATUS_FIELD_NUMBER = 4;
		private static final long serialVersionUID = 0L;
		// @@protoc_insertion_point(class_scope:messages.ProtobufMessage)
		private static final dev.slimevr.bridge.ProtobufMessages.ProtobufMessage DEFAULT_INSTANCE;
		private static final com.google.protobuf.Parser<ProtobufMessage> PARSER = new com.google.protobuf.AbstractParser<ProtobufMessage>() {
			@java.lang.Override
			public ProtobufMessage parsePartialFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws com.google.protobuf.InvalidProtocolBufferException {
				return new ProtobufMessage(input, extensionRegistry);
			}
		};

		static {
			DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.ProtobufMessage();
		}

		private int messageCase_ = 0;
		private java.lang.Object message_;
		private byte memoizedIsInitialized = -1;

		// Use ProtobufMessage.newBuilder() to construct.
		private ProtobufMessage(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
			super(builder);
		}

		private ProtobufMessage() {
		}

		private ProtobufMessage(
			com.google.protobuf.CodedInputStream input,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			this();
			if (extensionRegistry == null) {
				throw new java.lang.NullPointerException();
			}
			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;
						case 10: {
							dev.slimevr.bridge.ProtobufMessages.Position.Builder subBuilder = null;
							if (messageCase_ == 1) {
								subBuilder = ((dev.slimevr.bridge.ProtobufMessages.Position) message_)
									.toBuilder();
							}
							message_ = input
								.readMessage(
									dev.slimevr.bridge.ProtobufMessages.Position.parser(),
									extensionRegistry
								);
							if (subBuilder != null) {
								subBuilder
									.mergeFrom(
										(dev.slimevr.bridge.ProtobufMessages.Position) message_
									);
								message_ = subBuilder.buildPartial();
							}
							messageCase_ = 1;
							break;
						}
						case 18: {
							dev.slimevr.bridge.ProtobufMessages.UserAction.Builder subBuilder = null;
							if (messageCase_ == 2) {
								subBuilder = ((dev.slimevr.bridge.ProtobufMessages.UserAction) message_)
									.toBuilder();
							}
							message_ = input
								.readMessage(
									dev.slimevr.bridge.ProtobufMessages.UserAction.parser(),
									extensionRegistry
								);
							if (subBuilder != null) {
								subBuilder
									.mergeFrom(
										(dev.slimevr.bridge.ProtobufMessages.UserAction) message_
									);
								message_ = subBuilder.buildPartial();
							}
							messageCase_ = 2;
							break;
						}
						case 26: {
							dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder subBuilder = null;
							if (messageCase_ == 3) {
								subBuilder = ((dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_)
									.toBuilder();
							}
							message_ = input
								.readMessage(
									dev.slimevr.bridge.ProtobufMessages.TrackerAdded.parser(),
									extensionRegistry
								);
							if (subBuilder != null) {
								subBuilder
									.mergeFrom(
										(dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_
									);
								message_ = subBuilder.buildPartial();
							}
							messageCase_ = 3;
							break;
						}
						case 34: {
							dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder subBuilder = null;
							if (messageCase_ == 4) {
								subBuilder = ((dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_)
									.toBuilder();
							}
							message_ = input
								.readMessage(
									dev.slimevr.bridge.ProtobufMessages.TrackerStatus.parser(),
									extensionRegistry
								);
							if (subBuilder != null) {
								subBuilder
									.mergeFrom(
										(dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_
									);
								message_ = subBuilder.buildPartial();
							}
							messageCase_ = 4;
							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 dev.slimevr.bridge.ProtobufMessages.internal_static_messages_ProtobufMessage_descriptor;
		}

		public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom(
			java.nio.ByteBuffer data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom(
			java.nio.ByteBuffer data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom(
			com.google.protobuf.ByteString data
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom(
			com.google.protobuf.ByteString data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom(byte[] data)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data);
		}

		public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom(
			byte[] data,
			com.google.protobuf.ExtensionRegistryLite extensionRegistry
		)
			throws com.google.protobuf.InvalidProtocolBufferException {
			return PARSER.parseFrom(data, extensionRegistry);
		}

		public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage 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 dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseDelimitedFrom(
			java.io.InputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseDelimitedWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage 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 dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom(
			com.google.protobuf.CodedInputStream input
		)
			throws java.io.IOException {
			return com.google.protobuf.GeneratedMessageV3
				.parseWithIOException(PARSER, input);
		}

		public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage 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 static Builder newBuilder() {
			return DEFAULT_INSTANCE.toBuilder();
		}

		public static Builder newBuilder(
			dev.slimevr.bridge.ProtobufMessages.ProtobufMessage prototype
		) {
			return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
		}

		public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage getDefaultInstance() {
			return DEFAULT_INSTANCE;
		}

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

		@java.lang.Override
		@SuppressWarnings({ "unused" })
		protected java.lang.Object newInstance(
			UnusedPrivateParameter unused
		) {
			return new ProtobufMessage();
		}

		@java.lang.Override
		public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
			return this.unknownFields;
		}

		@java.lang.Override
		protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
			return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_ProtobufMessage_fieldAccessorTable
				.ensureFieldAccessorsInitialized(
					dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.class,
					dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.Builder.class
				);
		}

		@Override
		public MessageCase getMessageCase() {
			return MessageCase
				.forNumber(
					messageCase_
				);
		}

		/**
		 * <code>.messages.Position position = 1;</code>
		 *
		 * @return Whether the position field is set.
		 */
		@java.lang.Override
		public boolean hasPosition() {
			return messageCase_ == 1;
		}

		/**
		 * <code>.messages.Position position = 1;</code>
		 *
		 * @return The position.
		 */
		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.Position getPosition() {
			if (messageCase_ == 1) {
				return (dev.slimevr.bridge.ProtobufMessages.Position) message_;
			}
			return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance();
		}

		/**
		 * <code>.messages.Position position = 1;</code>
		 */
		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder getPositionOrBuilder() {
			if (messageCase_ == 1) {
				return (dev.slimevr.bridge.ProtobufMessages.Position) message_;
			}
			return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance();
		}

		/**
		 * <code>.messages.UserAction user_action = 2;</code>
		 *
		 * @return Whether the userAction field is set.
		 */
		@java.lang.Override
		public boolean hasUserAction() {
			return messageCase_ == 2;
		}

		/**
		 * <code>.messages.UserAction user_action = 2;</code>
		 *
		 * @return The userAction.
		 */
		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.UserAction getUserAction() {
			if (messageCase_ == 2) {
				return (dev.slimevr.bridge.ProtobufMessages.UserAction) message_;
			}
			return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance();
		}

		/**
		 * <code>.messages.UserAction user_action = 2;</code>
		 */
		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder getUserActionOrBuilder() {
			if (messageCase_ == 2) {
				return (dev.slimevr.bridge.ProtobufMessages.UserAction) message_;
			}
			return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance();
		}

		/**
		 * <code>.messages.TrackerAdded tracker_added = 3;</code>
		 *
		 * @return Whether the trackerAdded field is set.
		 */
		@java.lang.Override
		public boolean hasTrackerAdded() {
			return messageCase_ == 3;
		}

		/**
		 * <code>.messages.TrackerAdded tracker_added = 3;</code>
		 *
		 * @return The trackerAdded.
		 */
		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.TrackerAdded getTrackerAdded() {
			if (messageCase_ == 3) {
				return (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_;
			}
			return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance();
		}

		/**
		 * <code>.messages.TrackerAdded tracker_added = 3;</code>
		 */
		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder getTrackerAddedOrBuilder() {
			if (messageCase_ == 3) {
				return (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_;
			}
			return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance();
		}

		/**
		 * <code>.messages.TrackerStatus tracker_status = 4;</code>
		 *
		 * @return Whether the trackerStatus field is set.
		 */
		@java.lang.Override
		public boolean hasTrackerStatus() {
			return messageCase_ == 4;
		}

		/**
		 * <code>.messages.TrackerStatus tracker_status = 4;</code>
		 *
		 * @return The trackerStatus.
		 */
		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.TrackerStatus getTrackerStatus() {
			if (messageCase_ == 4) {
				return (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_;
			}
			return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance();
		}

		/**
		 * <code>.messages.TrackerStatus tracker_status = 4;</code>
		 */
		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder getTrackerStatusOrBuilder() {
			if (messageCase_ == 4) {
				return (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_;
			}
			return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance();
		}

		@java.lang.Override
		public final boolean isInitialized() {
			byte isInitialized = memoizedIsInitialized;
			if (isInitialized == 1)
				return true;
			if (isInitialized == 0)
				return false;

			memoizedIsInitialized = 1;
			return true;
		}

		@java.lang.Override
		public void writeTo(com.google.protobuf.CodedOutputStream output)
			throws java.io.IOException {
			if (messageCase_ == 1) {
				output.writeMessage(1, (dev.slimevr.bridge.ProtobufMessages.Position) message_);
			}
			if (messageCase_ == 2) {
				output.writeMessage(2, (dev.slimevr.bridge.ProtobufMessages.UserAction) message_);
			}
			if (messageCase_ == 3) {
				output.writeMessage(3, (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_);
			}
			if (messageCase_ == 4) {
				output
					.writeMessage(4, (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_);
			}
			unknownFields.writeTo(output);
		}

		@java.lang.Override
		public int getSerializedSize() {
			int size = memoizedSize;
			if (size != -1)
				return size;

			size = 0;
			if (messageCase_ == 1) {
				size += com.google.protobuf.CodedOutputStream
					.computeMessageSize(1, (dev.slimevr.bridge.ProtobufMessages.Position) message_);
			}
			if (messageCase_ == 2) {
				size += com.google.protobuf.CodedOutputStream
					.computeMessageSize(
						2,
						(dev.slimevr.bridge.ProtobufMessages.UserAction) message_
					);
			}
			if (messageCase_ == 3) {
				size += com.google.protobuf.CodedOutputStream
					.computeMessageSize(
						3,
						(dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_
					);
			}
			if (messageCase_ == 4) {
				size += com.google.protobuf.CodedOutputStream
					.computeMessageSize(
						4,
						(dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_
					);
			}
			size += unknownFields.getSerializedSize();
			memoizedSize = size;
			return size;
		}

		@java.lang.Override
		public boolean equals(final java.lang.Object obj) {
			if (obj == this) {
				return true;
			}
			if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.ProtobufMessage)) {
				return super.equals(obj);
			}
			dev.slimevr.bridge.ProtobufMessages.ProtobufMessage other = (dev.slimevr.bridge.ProtobufMessages.ProtobufMessage) obj;

			if (!getMessageCase().equals(other.getMessageCase()))
				return false;
			switch (messageCase_) {
				case 1:
					if (
						!getPosition()
							.equals(other.getPosition())
					)
						return false;
					break;
				case 2:
					if (
						!getUserAction()
							.equals(other.getUserAction())
					)
						return false;
					break;
				case 3:
					if (
						!getTrackerAdded()
							.equals(other.getTrackerAdded())
					)
						return false;
					break;
				case 4:
					if (
						!getTrackerStatus()
							.equals(other.getTrackerStatus())
					)
						return false;
					break;
				case 0:
				default:
			}
			return unknownFields.equals(other.unknownFields);
		}

		@java.lang.Override
		public int hashCode() {
			if (memoizedHashCode != 0) {
				return memoizedHashCode;
			}
			int hash = 41;
			hash = (19 * hash) + getDescriptor().hashCode();
			switch (messageCase_) {
				case 1:
					hash = (37 * hash) + POSITION_FIELD_NUMBER;
					hash = (53 * hash) + getPosition().hashCode();
					break;
				case 2:
					hash = (37 * hash) + USER_ACTION_FIELD_NUMBER;
					hash = (53 * hash) + getUserAction().hashCode();
					break;
				case 3:
					hash = (37 * hash) + TRACKER_ADDED_FIELD_NUMBER;
					hash = (53 * hash) + getTrackerAdded().hashCode();
					break;
				case 4:
					hash = (37 * hash) + TRACKER_STATUS_FIELD_NUMBER;
					hash = (53 * hash) + getTrackerStatus().hashCode();
					break;
				case 0:
				default:
			}
			hash = (29 * hash) + unknownFields.hashCode();
			memoizedHashCode = hash;
			return hash;
		}

		@java.lang.Override
		public Builder newBuilderForType() {
			return newBuilder();
		}

		@java.lang.Override
		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;
		}

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

		@java.lang.Override
		public dev.slimevr.bridge.ProtobufMessages.ProtobufMessage getDefaultInstanceForType() {
			return DEFAULT_INSTANCE;
		}

		public enum MessageCase
			implements com.google.protobuf.Internal.EnumLite,
			com.google.protobuf.AbstractMessage.InternalOneOfEnum {
			POSITION(1),
			USER_ACTION(2),
			TRACKER_ADDED(3),
			TRACKER_STATUS(4),
			MESSAGE_NOT_SET(0);

			private final int value;

			MessageCase(int value) {
				this.value = value;
			}

			/**
			 * @param value The number of the enum to look for.
			 * @return The enum associated with the given number.
			 * @deprecated Use {@link #forNumber(int)} instead.
			 */
			@java.lang.Deprecated
			public static MessageCase valueOf(int value) {
				return forNumber(value);
			}

			public static MessageCase forNumber(int value) {
				switch (value) {
					case 1:
						return POSITION;
					case 2:
						return USER_ACTION;
					case 3:
						return TRACKER_ADDED;
					case 4:
						return TRACKER_STATUS;
					case 0:
						return MESSAGE_NOT_SET;
					default:
						return null;
				}
			}

			@Override
			public int getNumber() {
				return this.value;
			}
		}

		/**
		 * Protobuf type {@code messages.ProtobufMessage}
		 */
		public static final class Builder extends
			com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
			// @@protoc_insertion_point(builder_implements:messages.ProtobufMessage)
			dev.slimevr.bridge.ProtobufMessages.ProtobufMessageOrBuilder {
			private int messageCase_ = 0;
			private java.lang.Object message_;
			private com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.Position, dev.slimevr.bridge.ProtobufMessages.Position.Builder, dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder> positionBuilder_;
			private com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.UserAction, dev.slimevr.bridge.ProtobufMessages.UserAction.Builder, dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder> userActionBuilder_;
			private com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.TrackerAdded, dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder> trackerAddedBuilder_;
			private com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.TrackerStatus, dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder> trackerStatusBuilder_;

			// Construct using
			// dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.newBuilder()
			private Builder() {
				maybeForceBuilderInitialization();
			}

			private Builder(
				com.google.protobuf.GeneratedMessageV3.BuilderParent parent
			) {
				super(parent);
				maybeForceBuilderInitialization();
			}

			public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_ProtobufMessage_descriptor;
			}

			@java.lang.Override
			protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_ProtobufMessage_fieldAccessorTable
					.ensureFieldAccessorsInitialized(
						dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.class,
						dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.Builder.class
					);
			}

			private void maybeForceBuilderInitialization() {
				if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
			}

			@java.lang.Override
			public Builder clear() {
				super.clear();
				messageCase_ = 0;
				message_ = null;
				return this;
			}

			@java.lang.Override
			public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
				return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_ProtobufMessage_descriptor;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.ProtobufMessage getDefaultInstanceForType() {
				return dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.getDefaultInstance();
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.ProtobufMessage build() {
				dev.slimevr.bridge.ProtobufMessages.ProtobufMessage result = buildPartial();
				if (!result.isInitialized()) {
					throw newUninitializedMessageException(result);
				}
				return result;
			}

			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.ProtobufMessage buildPartial() {
				dev.slimevr.bridge.ProtobufMessages.ProtobufMessage result = new dev.slimevr.bridge.ProtobufMessages.ProtobufMessage(
					this
				);
				if (messageCase_ == 1) {
					if (positionBuilder_ == null) {
						result.message_ = message_;
					} else {
						result.message_ = positionBuilder_.build();
					}
				}
				if (messageCase_ == 2) {
					if (userActionBuilder_ == null) {
						result.message_ = message_;
					} else {
						result.message_ = userActionBuilder_.build();
					}
				}
				if (messageCase_ == 3) {
					if (trackerAddedBuilder_ == null) {
						result.message_ = message_;
					} else {
						result.message_ = trackerAddedBuilder_.build();
					}
				}
				if (messageCase_ == 4) {
					if (trackerStatusBuilder_ == null) {
						result.message_ = message_;
					} else {
						result.message_ = trackerStatusBuilder_.build();
					}
				}
				result.messageCase_ = messageCase_;
				onBuilt();
				return result;
			}

			@java.lang.Override
			public Builder clone() {
				return super.clone();
			}

			@java.lang.Override
			public Builder setField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.setField(field, value);
			}

			@java.lang.Override
			public Builder clearField(
				com.google.protobuf.Descriptors.FieldDescriptor field
			) {
				return super.clearField(field);
			}

			@java.lang.Override
			public Builder clearOneof(
				com.google.protobuf.Descriptors.OneofDescriptor oneof
			) {
				return super.clearOneof(oneof);
			}

			@java.lang.Override
			public Builder setRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				int index,
				java.lang.Object value
			) {
				return super.setRepeatedField(field, index, value);
			}

			@java.lang.Override
			public Builder addRepeatedField(
				com.google.protobuf.Descriptors.FieldDescriptor field,
				java.lang.Object value
			) {
				return super.addRepeatedField(field, value);
			}

			@java.lang.Override
			public Builder mergeFrom(com.google.protobuf.Message other) {
				if (other instanceof dev.slimevr.bridge.ProtobufMessages.ProtobufMessage) {
					return mergeFrom((dev.slimevr.bridge.ProtobufMessages.ProtobufMessage) other);
				} else {
					super.mergeFrom(other);
					return this;
				}
			}

			public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.ProtobufMessage other) {
				if (
					other
						== dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.getDefaultInstance()
				)
					return this;
				switch (other.getMessageCase()) {
					case POSITION: {
						mergePosition(other.getPosition());
						break;
					}
					case USER_ACTION: {
						mergeUserAction(other.getUserAction());
						break;
					}
					case TRACKER_ADDED: {
						mergeTrackerAdded(other.getTrackerAdded());
						break;
					}
					case TRACKER_STATUS: {
						mergeTrackerStatus(other.getTrackerStatus());
						break;
					}
					case MESSAGE_NOT_SET: {
						break;
					}
				}
				this.mergeUnknownFields(other.unknownFields);
				onChanged();
				return this;
			}

			@java.lang.Override
			public final boolean isInitialized() {
				return true;
			}

			@java.lang.Override
			public Builder mergeFrom(
				com.google.protobuf.CodedInputStream input,
				com.google.protobuf.ExtensionRegistryLite extensionRegistry
			)
				throws java.io.IOException {
				dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parsedMessage = null;
				try {
					parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
				} catch (com.google.protobuf.InvalidProtocolBufferException e) {
					parsedMessage = (dev.slimevr.bridge.ProtobufMessages.ProtobufMessage) e
						.getUnfinishedMessage();
					throw e.unwrapIOException();
				} finally {
					if (parsedMessage != null) {
						mergeFrom(parsedMessage);
					}
				}
				return this;
			}

			@Override
			public MessageCase getMessageCase() {
				return MessageCase
					.forNumber(
						messageCase_
					);
			}

			public Builder clearMessage() {
				messageCase_ = 0;
				message_ = null;
				onChanged();
				return this;
			}

			/**
			 * <code>.messages.Position position = 1;</code>
			 *
			 * @return Whether the position field is set.
			 */
			@java.lang.Override
			public boolean hasPosition() {
				return messageCase_ == 1;
			}

			/**
			 * <code>.messages.Position position = 1;</code>
			 *
			 * @return The position.
			 */
			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.Position getPosition() {
				if (positionBuilder_ == null) {
					if (messageCase_ == 1) {
						return (dev.slimevr.bridge.ProtobufMessages.Position) message_;
					}
					return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance();
				} else {
					if (messageCase_ == 1) {
						return positionBuilder_.getMessage();
					}
					return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance();
				}
			}

			/**
			 * <code>.messages.Position position = 1;</code>
			 */
			public Builder setPosition(dev.slimevr.bridge.ProtobufMessages.Position value) {
				if (positionBuilder_ == null) {
					if (value == null) {
						throw new NullPointerException();
					}
					message_ = value;
					onChanged();
				} else {
					positionBuilder_.setMessage(value);
				}
				messageCase_ = 1;
				return this;
			}

			/**
			 * <code>.messages.Position position = 1;</code>
			 */
			public Builder setPosition(
				dev.slimevr.bridge.ProtobufMessages.Position.Builder builderForValue
			) {
				if (positionBuilder_ == null) {
					message_ = builderForValue.build();
					onChanged();
				} else {
					positionBuilder_.setMessage(builderForValue.build());
				}
				messageCase_ = 1;
				return this;
			}

			/**
			 * <code>.messages.Position position = 1;</code>
			 */
			public Builder mergePosition(dev.slimevr.bridge.ProtobufMessages.Position value) {
				if (positionBuilder_ == null) {
					if (
						messageCase_ == 1
							&&
							message_
								!= dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance()
					) {
						message_ = dev.slimevr.bridge.ProtobufMessages.Position
							.newBuilder((dev.slimevr.bridge.ProtobufMessages.Position) message_)
							.mergeFrom(value)
							.buildPartial();
					} else {
						message_ = value;
					}
					onChanged();
				} else {
					if (messageCase_ == 1) {
						positionBuilder_.mergeFrom(value);
					}
					positionBuilder_.setMessage(value);
				}
				messageCase_ = 1;
				return this;
			}

			/**
			 * <code>.messages.Position position = 1;</code>
			 */
			public Builder clearPosition() {
				if (positionBuilder_ == null) {
					if (messageCase_ == 1) {
						messageCase_ = 0;
						message_ = null;
						onChanged();
					}
				} else {
					if (messageCase_ == 1) {
						messageCase_ = 0;
						message_ = null;
					}
					positionBuilder_.clear();
				}
				return this;
			}

			/**
			 * <code>.messages.Position position = 1;</code>
			 */
			public dev.slimevr.bridge.ProtobufMessages.Position.Builder getPositionBuilder() {
				return getPositionFieldBuilder().getBuilder();
			}

			/**
			 * <code>.messages.Position position = 1;</code>
			 */
			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder getPositionOrBuilder() {
				if ((messageCase_ == 1) && (positionBuilder_ != null)) {
					return positionBuilder_.getMessageOrBuilder();
				} else {
					if (messageCase_ == 1) {
						return (dev.slimevr.bridge.ProtobufMessages.Position) message_;
					}
					return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance();
				}
			}

			/**
			 * <code>.messages.Position position = 1;</code>
			 */
			private com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.Position, dev.slimevr.bridge.ProtobufMessages.Position.Builder, dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder> getPositionFieldBuilder() {
				if (positionBuilder_ == null) {
					if (!(messageCase_ == 1)) {
						message_ = dev.slimevr.bridge.ProtobufMessages.Position
							.getDefaultInstance();
					}
					positionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.Position, dev.slimevr.bridge.ProtobufMessages.Position.Builder, dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder>(
						(dev.slimevr.bridge.ProtobufMessages.Position) message_,
						getParentForChildren(),
						isClean()
					);
					message_ = null;
				}
				messageCase_ = 1;
				onChanged();
				return positionBuilder_;
			}

			/**
			 * <code>.messages.UserAction user_action = 2;</code>
			 *
			 * @return Whether the userAction field is set.
			 */
			@java.lang.Override
			public boolean hasUserAction() {
				return messageCase_ == 2;
			}

			/**
			 * <code>.messages.UserAction user_action = 2;</code>
			 *
			 * @return The userAction.
			 */
			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.UserAction getUserAction() {
				if (userActionBuilder_ == null) {
					if (messageCase_ == 2) {
						return (dev.slimevr.bridge.ProtobufMessages.UserAction) message_;
					}
					return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance();
				} else {
					if (messageCase_ == 2) {
						return userActionBuilder_.getMessage();
					}
					return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance();
				}
			}

			/**
			 * <code>.messages.UserAction user_action = 2;</code>
			 */
			public Builder setUserAction(dev.slimevr.bridge.ProtobufMessages.UserAction value) {
				if (userActionBuilder_ == null) {
					if (value == null) {
						throw new NullPointerException();
					}
					message_ = value;
					onChanged();
				} else {
					userActionBuilder_.setMessage(value);
				}
				messageCase_ = 2;
				return this;
			}

			/**
			 * <code>.messages.UserAction user_action = 2;</code>
			 */
			public Builder setUserAction(
				dev.slimevr.bridge.ProtobufMessages.UserAction.Builder builderForValue
			) {
				if (userActionBuilder_ == null) {
					message_ = builderForValue.build();
					onChanged();
				} else {
					userActionBuilder_.setMessage(builderForValue.build());
				}
				messageCase_ = 2;
				return this;
			}

			/**
			 * <code>.messages.UserAction user_action = 2;</code>
			 */
			public Builder mergeUserAction(dev.slimevr.bridge.ProtobufMessages.UserAction value) {
				if (userActionBuilder_ == null) {
					if (
						messageCase_ == 2
							&&
							message_
								!= dev.slimevr.bridge.ProtobufMessages.UserAction
									.getDefaultInstance()
					) {
						message_ = dev.slimevr.bridge.ProtobufMessages.UserAction
							.newBuilder((dev.slimevr.bridge.ProtobufMessages.UserAction) message_)
							.mergeFrom(value)
							.buildPartial();
					} else {
						message_ = value;
					}
					onChanged();
				} else {
					if (messageCase_ == 2) {
						userActionBuilder_.mergeFrom(value);
					}
					userActionBuilder_.setMessage(value);
				}
				messageCase_ = 2;
				return this;
			}

			/**
			 * <code>.messages.UserAction user_action = 2;</code>
			 */
			public Builder clearUserAction() {
				if (userActionBuilder_ == null) {
					if (messageCase_ == 2) {
						messageCase_ = 0;
						message_ = null;
						onChanged();
					}
				} else {
					if (messageCase_ == 2) {
						messageCase_ = 0;
						message_ = null;
					}
					userActionBuilder_.clear();
				}
				return this;
			}

			/**
			 * <code>.messages.UserAction user_action = 2;</code>
			 */
			public dev.slimevr.bridge.ProtobufMessages.UserAction.Builder getUserActionBuilder() {
				return getUserActionFieldBuilder().getBuilder();
			}

			/**
			 * <code>.messages.UserAction user_action = 2;</code>
			 */
			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder getUserActionOrBuilder() {
				if ((messageCase_ == 2) && (userActionBuilder_ != null)) {
					return userActionBuilder_.getMessageOrBuilder();
				} else {
					if (messageCase_ == 2) {
						return (dev.slimevr.bridge.ProtobufMessages.UserAction) message_;
					}
					return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance();
				}
			}

			/**
			 * <code>.messages.UserAction user_action = 2;</code>
			 */
			private com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.UserAction, dev.slimevr.bridge.ProtobufMessages.UserAction.Builder, dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder> getUserActionFieldBuilder() {
				if (userActionBuilder_ == null) {
					if (!(messageCase_ == 2)) {
						message_ = dev.slimevr.bridge.ProtobufMessages.UserAction
							.getDefaultInstance();
					}
					userActionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.UserAction, dev.slimevr.bridge.ProtobufMessages.UserAction.Builder, dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder>(
						(dev.slimevr.bridge.ProtobufMessages.UserAction) message_,
						getParentForChildren(),
						isClean()
					);
					message_ = null;
				}
				messageCase_ = 2;
				onChanged();
				return userActionBuilder_;
			}

			/**
			 * <code>.messages.TrackerAdded tracker_added = 3;</code>
			 *
			 * @return Whether the trackerAdded field is set.
			 */
			@java.lang.Override
			public boolean hasTrackerAdded() {
				return messageCase_ == 3;
			}

			/**
			 * <code>.messages.TrackerAdded tracker_added = 3;</code>
			 *
			 * @return The trackerAdded.
			 */
			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerAdded getTrackerAdded() {
				if (trackerAddedBuilder_ == null) {
					if (messageCase_ == 3) {
						return (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_;
					}
					return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance();
				} else {
					if (messageCase_ == 3) {
						return trackerAddedBuilder_.getMessage();
					}
					return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance();
				}
			}

			/**
			 * <code>.messages.TrackerAdded tracker_added = 3;</code>
			 */
			public Builder setTrackerAdded(dev.slimevr.bridge.ProtobufMessages.TrackerAdded value) {
				if (trackerAddedBuilder_ == null) {
					if (value == null) {
						throw new NullPointerException();
					}
					message_ = value;
					onChanged();
				} else {
					trackerAddedBuilder_.setMessage(value);
				}
				messageCase_ = 3;
				return this;
			}

			/**
			 * <code>.messages.TrackerAdded tracker_added = 3;</code>
			 */
			public Builder setTrackerAdded(
				dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder builderForValue
			) {
				if (trackerAddedBuilder_ == null) {
					message_ = builderForValue.build();
					onChanged();
				} else {
					trackerAddedBuilder_.setMessage(builderForValue.build());
				}
				messageCase_ = 3;
				return this;
			}

			/**
			 * <code>.messages.TrackerAdded tracker_added = 3;</code>
			 */
			public Builder mergeTrackerAdded(
				dev.slimevr.bridge.ProtobufMessages.TrackerAdded value
			) {
				if (trackerAddedBuilder_ == null) {
					if (
						messageCase_ == 3
							&&
							message_
								!= dev.slimevr.bridge.ProtobufMessages.TrackerAdded
									.getDefaultInstance()
					) {
						message_ = dev.slimevr.bridge.ProtobufMessages.TrackerAdded
							.newBuilder((dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_)
							.mergeFrom(value)
							.buildPartial();
					} else {
						message_ = value;
					}
					onChanged();
				} else {
					if (messageCase_ == 3) {
						trackerAddedBuilder_.mergeFrom(value);
					}
					trackerAddedBuilder_.setMessage(value);
				}
				messageCase_ = 3;
				return this;
			}

			/**
			 * <code>.messages.TrackerAdded tracker_added = 3;</code>
			 */
			public Builder clearTrackerAdded() {
				if (trackerAddedBuilder_ == null) {
					if (messageCase_ == 3) {
						messageCase_ = 0;
						message_ = null;
						onChanged();
					}
				} else {
					if (messageCase_ == 3) {
						messageCase_ = 0;
						message_ = null;
					}
					trackerAddedBuilder_.clear();
				}
				return this;
			}

			/**
			 * <code>.messages.TrackerAdded tracker_added = 3;</code>
			 */
			public dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder getTrackerAddedBuilder() {
				return getTrackerAddedFieldBuilder().getBuilder();
			}

			/**
			 * <code>.messages.TrackerAdded tracker_added = 3;</code>
			 */
			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder getTrackerAddedOrBuilder() {
				if ((messageCase_ == 3) && (trackerAddedBuilder_ != null)) {
					return trackerAddedBuilder_.getMessageOrBuilder();
				} else {
					if (messageCase_ == 3) {
						return (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_;
					}
					return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance();
				}
			}

			/**
			 * <code>.messages.TrackerAdded tracker_added = 3;</code>
			 */
			private com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.TrackerAdded, dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder> getTrackerAddedFieldBuilder() {
				if (trackerAddedBuilder_ == null) {
					if (!(messageCase_ == 3)) {
						message_ = dev.slimevr.bridge.ProtobufMessages.TrackerAdded
							.getDefaultInstance();
					}
					trackerAddedBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.TrackerAdded, dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder>(
						(dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_,
						getParentForChildren(),
						isClean()
					);
					message_ = null;
				}
				messageCase_ = 3;
				onChanged();
				return trackerAddedBuilder_;
			}

			/**
			 * <code>.messages.TrackerStatus tracker_status = 4;</code>
			 *
			 * @return Whether the trackerStatus field is set.
			 */
			@java.lang.Override
			public boolean hasTrackerStatus() {
				return messageCase_ == 4;
			}

			/**
			 * <code>.messages.TrackerStatus tracker_status = 4;</code>
			 *
			 * @return The trackerStatus.
			 */
			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerStatus getTrackerStatus() {
				if (trackerStatusBuilder_ == null) {
					if (messageCase_ == 4) {
						return (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_;
					}
					return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance();
				} else {
					if (messageCase_ == 4) {
						return trackerStatusBuilder_.getMessage();
					}
					return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance();
				}
			}

			/**
			 * <code>.messages.TrackerStatus tracker_status = 4;</code>
			 */
			public Builder setTrackerStatus(
				dev.slimevr.bridge.ProtobufMessages.TrackerStatus value
			) {
				if (trackerStatusBuilder_ == null) {
					if (value == null) {
						throw new NullPointerException();
					}
					message_ = value;
					onChanged();
				} else {
					trackerStatusBuilder_.setMessage(value);
				}
				messageCase_ = 4;
				return this;
			}

			/**
			 * <code>.messages.TrackerStatus tracker_status = 4;</code>
			 */
			public Builder setTrackerStatus(
				dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder builderForValue
			) {
				if (trackerStatusBuilder_ == null) {
					message_ = builderForValue.build();
					onChanged();
				} else {
					trackerStatusBuilder_.setMessage(builderForValue.build());
				}
				messageCase_ = 4;
				return this;
			}

			/**
			 * <code>.messages.TrackerStatus tracker_status = 4;</code>
			 */
			public Builder mergeTrackerStatus(
				dev.slimevr.bridge.ProtobufMessages.TrackerStatus value
			) {
				if (trackerStatusBuilder_ == null) {
					if (
						messageCase_ == 4
							&&
							message_
								!= dev.slimevr.bridge.ProtobufMessages.TrackerStatus
									.getDefaultInstance()
					) {
						message_ = dev.slimevr.bridge.ProtobufMessages.TrackerStatus
							.newBuilder(
								(dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_
							)
							.mergeFrom(value)
							.buildPartial();
					} else {
						message_ = value;
					}
					onChanged();
				} else {
					if (messageCase_ == 4) {
						trackerStatusBuilder_.mergeFrom(value);
					}
					trackerStatusBuilder_.setMessage(value);
				}
				messageCase_ = 4;
				return this;
			}

			/**
			 * <code>.messages.TrackerStatus tracker_status = 4;</code>
			 */
			public Builder clearTrackerStatus() {
				if (trackerStatusBuilder_ == null) {
					if (messageCase_ == 4) {
						messageCase_ = 0;
						message_ = null;
						onChanged();
					}
				} else {
					if (messageCase_ == 4) {
						messageCase_ = 0;
						message_ = null;
					}
					trackerStatusBuilder_.clear();
				}
				return this;
			}

			/**
			 * <code>.messages.TrackerStatus tracker_status = 4;</code>
			 */
			public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder getTrackerStatusBuilder() {
				return getTrackerStatusFieldBuilder().getBuilder();
			}

			/**
			 * <code>.messages.TrackerStatus tracker_status = 4;</code>
			 */
			@java.lang.Override
			public dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder getTrackerStatusOrBuilder() {
				if ((messageCase_ == 4) && (trackerStatusBuilder_ != null)) {
					return trackerStatusBuilder_.getMessageOrBuilder();
				} else {
					if (messageCase_ == 4) {
						return (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_;
					}
					return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance();
				}
			}

			/**
			 * <code>.messages.TrackerStatus tracker_status = 4;</code>
			 */
			private com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.TrackerStatus, dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder> getTrackerStatusFieldBuilder() {
				if (trackerStatusBuilder_ == null) {
					if (!(messageCase_ == 4)) {
						message_ = dev.slimevr.bridge.ProtobufMessages.TrackerStatus
							.getDefaultInstance();
					}
					trackerStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<dev.slimevr.bridge.ProtobufMessages.TrackerStatus, dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder>(
						(dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_,
						getParentForChildren(),
						isClean()
					);
					message_ = null;
				}
				messageCase_ = 4;
				onChanged();
				return trackerStatusBuilder_;
			}

			@java.lang.Override
			public final Builder setUnknownFields(
				final com.google.protobuf.UnknownFieldSet unknownFields
			) {
				return super.setUnknownFields(unknownFields);
			}

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

			// @@protoc_insertion_point(builder_scope:messages.ProtobufMessage)
		}
	}

	// @@protoc_insertion_point(outer_class_scope)
}
