using System;


namespace Impinj.STP
{
    public class ByteArray
    {
        public class MalformedHexStringException : System.Exception
        {
            public MalformedHexStringException(string message):
                    base(message)
            {
            }
        }

        public ByteArray()
        {
            this._value = new byte[0];
        }
        
        public ByteArray(string hexStringValue)
        {
            if (0 != hexStringValue.Length % 2)
            {
                throw new MalformedHexStringException(
                    "hex string must be a multiple of 2 long");
            }

            this._value = new byte[hexStringValue.Length / 2];
            for (int i = 0; i < hexStringValue.Length / 2; i++)
            {
                this._value[i] = byte.Parse(hexStringValue.Substring(i*2, 2),
                        System.Globalization.NumberStyles.HexNumber);
            }
        }

        public ByteArray(byte[] byteValue)
        {
            this._value = (byte[])byteValue.Clone();
        }

        public string ToHexString()
        {
            return BitConverter.ToString(this._value).Replace("-", "");
        }

        public override string ToString()
        {
            return this.ToHexString();
        }

        public byte[] ToBytes()
        {
            return (byte[])this._value.Clone();
        }

        public byte[] Bytes
        {
            set { this._value = value; }
            get { return this._value; }
        }

        private byte[] _value;
    }

    public class RequiredFieldMissingException : System.Exception
    {
        public RequiredFieldMissingException(string message):
                base(message)
        {
        }
    }

    #region Messages
    
    /// <summary>
    /// A response sent by all commands. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"Reply")]
    public class Reply
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"ErrorCode",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ErrorCode? _ErrorCode = null;
        public ErrorCode? ErrorCode
        {
            get { return this._ErrorCode; }
            set { this._ErrorCode = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"ErrorString",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _ErrorString = null;
        /// <summary>
        /// Human-readable text describing what happened. 
        /// </summary>
        public string ErrorString
        {
            get { return this._ErrorString; }
            set { this._ErrorString = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Reply");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.ErrorCode)
            {
                stringBuilder.Append(labelIndent + "ErrorCode:");
                stringBuilder.AppendLine(subIndent + this.ErrorCode.ToString());
            }
            if (null != this.ErrorString)
            {
                stringBuilder.Append(labelIndent + "ErrorString:");
                stringBuilder.AppendLine(subIndent + this.ErrorString.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._ErrorCode)
            {
                throw new RequiredFieldMissingException("ErrorCode is required in Reply");
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// The health or fault state of the device. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"DeviceState")]
    public class DeviceState
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"DeviceOperatingState",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private DeviceOperatingState? _DeviceOperatingState = null;
        public DeviceOperatingState? DeviceOperatingState
        {
            get { return this._DeviceOperatingState; }
            set { this._DeviceOperatingState = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"DeviceFault",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private DeviceFaultType? _DeviceFault = null;
        public DeviceFaultType? DeviceFault
        {
            get { return this._DeviceFault; }
            set { this._DeviceFault = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"FaultDetails",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _FaultDetails = null;
        public string FaultDetails
        {
            get { return this._FaultDetails; }
            set { this._FaultDetails = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "DeviceState");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.DeviceOperatingState)
            {
                stringBuilder.Append(labelIndent + "DeviceOperatingState:");
                stringBuilder.AppendLine(subIndent + this.DeviceOperatingState.ToString());
            }
            if (null != this.DeviceFault)
            {
                stringBuilder.Append(labelIndent + "DeviceFault:");
                stringBuilder.AppendLine(subIndent + this.DeviceFault.ToString());
            }
            if (null != this.FaultDetails)
            {
                stringBuilder.Append(labelIndent + "FaultDetails:");
                stringBuilder.AppendLine(subIndent + this.FaultDetails.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// A version of part of the system. The version number is usually in the form "major.minor.maintenance.build-ident". 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"Version")]
    public class Version
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"VersionId",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private VersionType? _VersionId = null;
        public VersionType? VersionId
        {
            get { return this._VersionId; }
            set { this._VersionId = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"Major",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _Major = null;
        /// <summary>
        /// Also used for single number versions. 
        /// </summary>
        public uint? Major
        {
            get { return this._Major; }
            set { this._Major = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"Minor",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _Minor = null;
        public uint? Minor
        {
            get { return this._Minor; }
            set { this._Minor = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"Maintenance",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _Maintenance = null;
        public uint? Maintenance
        {
            get { return this._Maintenance; }
            set { this._Maintenance = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"Build",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _Build = null;
        public uint? Build
        {
            get { return this._Build; }
            set { this._Build = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"Ident",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _Ident = null;
        /// <summary>
        /// A semicolon-separated list of additional version information, such as the name of the component and if a "Final" or "Dev" build was done. 
        /// </summary>
        public string Ident
        {
            get { return this._Ident; }
            set { this._Ident = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Version");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.VersionId)
            {
                stringBuilder.Append(labelIndent + "VersionId:");
                stringBuilder.AppendLine(subIndent + this.VersionId.ToString());
            }
            if (null != this.Major)
            {
                stringBuilder.Append(labelIndent + "Major:");
                stringBuilder.AppendLine(subIndent + this.Major.ToString());
            }
            if (null != this.Minor)
            {
                stringBuilder.Append(labelIndent + "Minor:");
                stringBuilder.AppendLine(subIndent + this.Minor.ToString());
            }
            if (null != this.Maintenance)
            {
                stringBuilder.Append(labelIndent + "Maintenance:");
                stringBuilder.AppendLine(subIndent + this.Maintenance.ToString());
            }
            if (null != this.Build)
            {
                stringBuilder.Append(labelIndent + "Build:");
                stringBuilder.AppendLine(subIndent + this.Build.ToString());
            }
            if (null != this.Ident)
            {
                stringBuilder.Append(labelIndent + "Ident:");
                stringBuilder.AppendLine(subIndent + this.Ident.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._VersionId)
            {
                throw new RequiredFieldMissingException("VersionId is required in Version");
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// A list of local API library and device versions. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"Versions")]
    public class Versions
    {
        [global::ProtoBuf.ProtoMember(1,Name=@"VersionList",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<Version> _VersionList = new global::System.Collections.Generic.List<Version>();
        public global::System.Collections.Generic.List<Version> VersionList
        {
            get { return this._VersionList; }
            set { this._VersionList = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Versions");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            for(int i = 0; i < this.VersionList.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("VersionList[{0}]:", i));
                stringBuilder.AppendLine(this.VersionList[i].ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            foreach (var message in this.VersionList)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// API description sent as part of the connection. The client app does not need to create or send this message. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"HandShake")]
    public class HandShake
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"ApiName",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _ApiName = null;
        public string ApiName
        {
            get { return this._ApiName; }
            set { this._ApiName = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = true,Name=@"ApiVersion",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _ApiVersion = null;
        public uint? ApiVersion
        {
            get { return this._ApiVersion; }
            set { this._ApiVersion = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "HandShake");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.ApiName)
            {
                stringBuilder.Append(labelIndent + "ApiName:");
                stringBuilder.AppendLine(subIndent + this.ApiName.ToString());
            }
            if (null != this.ApiVersion)
            {
                stringBuilder.Append(labelIndent + "ApiVersion:");
                stringBuilder.AppendLine(subIndent + this.ApiVersion.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._ApiName)
            {
                throw new RequiredFieldMissingException("ApiName is required in HandShake");
            }
            
            if (null == this._ApiVersion)
            {
                throw new RequiredFieldMissingException("ApiVersion is required in HandShake");
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Details needed to specify all region parameters. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"Region")]
    public class Region
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"RegionId",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private RegulatoryRegion? _RegionId = null;
        public RegulatoryRegion? RegionId
        {
            get { return this._RegionId; }
            set { this._RegionId = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,Name=@"FixedFrequencyList",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private global::System.Collections.Generic.List<uint> _FixedFrequencyList = new global::System.Collections.Generic.List<uint>();
        public global::System.Collections.Generic.List<uint> FixedFrequencyList
        {
            get { return this._FixedFrequencyList; }
            set { this._FixedFrequencyList = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Region");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.RegionId)
            {
                stringBuilder.Append(labelIndent + "RegionId:");
                stringBuilder.AppendLine(subIndent + this.RegionId.ToString());
            }
            for(int i = 0; i < this.FixedFrequencyList.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("FixedFrequencyList[{0}]:", i));
                stringBuilder.AppendLine(subIndent + this.FixedFrequencyList[i].ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._RegionId)
            {
                throw new RequiredFieldMissingException("RegionId is required in Region");
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// The time that an event happened on the device.  Used in reports so a client application knows when tag operations occur. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"Timestamp")]
    public class Timestamp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"UsecondsSinceEpoch",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _UsecondsSinceEpoch = null;
        /// <summary>
        /// Microseconds since Jan. 1 1970. 
        /// </summary>
        public ulong? UsecondsSinceEpoch
        {
            get { return this._UsecondsSinceEpoch; }
            set { this._UsecondsSinceEpoch = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Timestamp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.UsecondsSinceEpoch)
            {
                stringBuilder.Append(labelIndent + "UsecondsSinceEpoch:");
                stringBuilder.AppendLine(subIndent + this.UsecondsSinceEpoch.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Sent on the initial device connection to verify the health of the channel. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"ConnectCommand")]
    public class ConnectCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"HandShake",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private HandShake _HandShake = null;
        public HandShake HandShake
        {
            get { return this._HandShake; }
            set { this._HandShake = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "ConnectCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.HandShake)
            {
                stringBuilder.Append(labelIndent + "HandShake:");
                stringBuilder.AppendLine(this.HandShake.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._HandShake)
            {
                this._HandShake.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Request the health of the device. See GetDeviceStateResp_ 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GetDeviceStateCommand")]
    public class GetDeviceStateCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reserved",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Reserved = null;
        public bool? Reserved
        {
            get { return this._Reserved; }
            set { this._Reserved = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GetDeviceStateCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reserved)
            {
                stringBuilder.Append(labelIndent + "Reserved:");
                stringBuilder.AppendLine(subIndent + this.Reserved.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Get versions of device firmware, API.  See GetVersionsReaderResp_ 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GetVersionsReaderCommand")]
    public class GetVersionsReaderCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reserved",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Reserved = null;
        public bool? Reserved
        {
            get { return this._Reserved; }
            set { this._Reserved = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GetVersionsReaderCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reserved)
            {
                stringBuilder.Append(labelIndent + "Reserved:");
                stringBuilder.AppendLine(subIndent + this.Reserved.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Stop the current device encode or inventory operation. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"StopCommand")]
    public class StopCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reserved",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Reserved = null;
        public bool? Reserved
        {
            get { return this._Reserved; }
            set { this._Reserved = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "StopCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reserved)
            {
                stringBuilder.Append(labelIndent + "Reserved:");
                stringBuilder.AppendLine(subIndent + this.Reserved.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Indicates that the connection was successful. See ConnectCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"ConnectResp")]
    public class ConnectResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"HandShake",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private HandShake _HandShake = null;
        public HandShake HandShake
        {
            get { return this._HandShake; }
            set { this._HandShake = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "ConnectResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }
            if (null != this.HandShake)
            {
                stringBuilder.Append(labelIndent + "HandShake:");
                stringBuilder.AppendLine(this.HandShake.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._HandShake)
            {
                this._HandShake.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// The health of the device.  See GetDeviceStateCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GetDeviceStateResp")]
    public class GetDeviceStateResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"DeviceState",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private DeviceState _DeviceState = null;
        public DeviceState DeviceState
        {
            get { return this._DeviceState; }
            set { this._DeviceState = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GetDeviceStateResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }
            if (null != this.DeviceState)
            {
                stringBuilder.Append(labelIndent + "DeviceState:");
                stringBuilder.AppendLine(this.DeviceState.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._DeviceState)
            {
                this._DeviceState.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// The device firmware and API versions. See GetVersionsReaderCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GetVersionsReaderResp")]
    public class GetVersionsReaderResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"Versions",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Versions _Versions = null;
        /// <summary>
        /// A list of remote device API and firmware versions. 
        /// </summary>
        public Versions Versions
        {
            get { return this._Versions; }
            set { this._Versions = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GetVersionsReaderResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }
            if (null != this.Versions)
            {
                stringBuilder.Append(labelIndent + "Versions:");
                stringBuilder.AppendLine(this.Versions.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Versions)
            {
                this._Versions.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// The command sent to the device was not recognized as valid. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"InvalidResp")]
    public class InvalidResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reserved",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Reserved = null;
        public bool? Reserved
        {
            get { return this._Reserved; }
            set { this._Reserved = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "InvalidResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reserved)
            {
                stringBuilder.Append(labelIndent + "Reserved:");
                stringBuilder.AppendLine(subIndent + this.Reserved.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// See StopCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"StopResp")]
    public class StopResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "StopResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Defines the behavior of the device. See SetDeviceConfigResp_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"DeviceConfig")]
    public class DeviceConfig
    {
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"Region",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Region _Region = null;
        public Region Region
        {
            get { return this._Region; }
            set { this._Region = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = true,Name=@"DeviceMode",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private DeviceMode? _DeviceMode = null;
        public DeviceMode? DeviceMode
        {
            get { return this._DeviceMode; }
            set { this._DeviceMode = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = true,Name=@"OperationMode",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private OperationMode? _OperationMode = null;
        public OperationMode? OperationMode
        {
            get { return this._OperationMode; }
            set { this._OperationMode = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"OperationResponsibility",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private OperationResponsibility _OperationResponsibility = null;
        public OperationResponsibility OperationResponsibility
        {
            get { return this._OperationResponsibility; }
            set { this._OperationResponsibility = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"TriggerConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TriggerConfig _TriggerConfig = null;
        public TriggerConfig TriggerConfig
        {
            get { return this._TriggerConfig; }
            set { this._TriggerConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"GpiConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GpiConfig _GpiConfig = null;
        public GpiConfig GpiConfig
        {
            get { return this._GpiConfig; }
            set { this._GpiConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(8,IsRequired = false,Name=@"GpoConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GpoConfig _GpoConfig = null;
        public GpoConfig GpoConfig
        {
            get { return this._GpoConfig; }
            set { this._GpoConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(9,IsRequired = false,Name=@"ReportConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private ReportConfig _ReportConfig = null;
        public ReportConfig ReportConfig
        {
            get { return this._ReportConfig; }
            set { this._ReportConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "DeviceConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Region)
            {
                stringBuilder.Append(labelIndent + "Region:");
                stringBuilder.AppendLine(this.Region.ToString(subIndent));
            }
            if (null != this.DeviceMode)
            {
                stringBuilder.Append(labelIndent + "DeviceMode:");
                stringBuilder.AppendLine(subIndent + this.DeviceMode.ToString());
            }
            if (null != this.OperationMode)
            {
                stringBuilder.Append(labelIndent + "OperationMode:");
                stringBuilder.AppendLine(subIndent + this.OperationMode.ToString());
            }
            if (null != this.OperationResponsibility)
            {
                stringBuilder.Append(labelIndent + "OperationResponsibility:");
                stringBuilder.AppendLine(this.OperationResponsibility.ToString(subIndent));
            }
            if (null != this.TriggerConfig)
            {
                stringBuilder.Append(labelIndent + "TriggerConfig:");
                stringBuilder.AppendLine(this.TriggerConfig.ToString(subIndent));
            }
            if (null != this.GpiConfig)
            {
                stringBuilder.Append(labelIndent + "GpiConfig:");
                stringBuilder.AppendLine(this.GpiConfig.ToString(subIndent));
            }
            if (null != this.GpoConfig)
            {
                stringBuilder.Append(labelIndent + "GpoConfig:");
                stringBuilder.AppendLine(this.GpoConfig.ToString(subIndent));
            }
            if (null != this.ReportConfig)
            {
                stringBuilder.Append(labelIndent + "ReportConfig:");
                stringBuilder.AppendLine(this.ReportConfig.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._DeviceMode)
            {
                throw new RequiredFieldMissingException("DeviceMode is required in DeviceConfig");
            }
            
            if (null == this._OperationMode)
            {
                throw new RequiredFieldMissingException("OperationMode is required in DeviceConfig");
            }
            
            if (null != this._Region)
            {
                this._Region.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._OperationResponsibility)
            {
                this._OperationResponsibility.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._TriggerConfig)
            {
                this._TriggerConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GpiConfig)
            {
                this._GpiConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GpoConfig)
            {
                this._GpoConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._ReportConfig)
            {
                this._ReportConfig.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Define how GPI signals affect operations start and stop. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"TriggerConfig")]
    public class TriggerConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"StartTriggerConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private StartTriggerConfig _StartTriggerConfig = null;
        public StartTriggerConfig StartTriggerConfig
        {
            get { return this._StartTriggerConfig; }
            set { this._StartTriggerConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"StopTriggerConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private StopTriggerConfig _StopTriggerConfig = null;
        public StopTriggerConfig StopTriggerConfig
        {
            get { return this._StopTriggerConfig; }
            set { this._StopTriggerConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "TriggerConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.StartTriggerConfig)
            {
                stringBuilder.Append(labelIndent + "StartTriggerConfig:");
                stringBuilder.AppendLine(this.StartTriggerConfig.ToString(subIndent));
            }
            if (null != this.StopTriggerConfig)
            {
                stringBuilder.Append(labelIndent + "StopTriggerConfig:");
                stringBuilder.AppendLine(this.StopTriggerConfig.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._StartTriggerConfig)
            {
                this._StartTriggerConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._StopTriggerConfig)
            {
                this._StopTriggerConfig.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Always accept the start command from the client or optionally a GPI start trigger. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"StartTriggerConfig")]
    public class StartTriggerConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"EnableGpiStartTrigger",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableGpiStartTrigger = null;
        public bool? EnableGpiStartTrigger
        {
            get { return this._EnableGpiStartTrigger; }
            set { this._EnableGpiStartTrigger = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "StartTriggerConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EnableGpiStartTrigger)
            {
                stringBuilder.Append(labelIndent + "EnableGpiStartTrigger:");
                stringBuilder.AppendLine(subIndent + this.EnableGpiStartTrigger.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Always accept stop command from the client or optionally from GPI, count, or timeout. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"StopTriggerConfig")]
    public class StopTriggerConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"EnableGpiStopTrigger",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableGpiStopTrigger = null;
        public bool? EnableGpiStopTrigger
        {
            get { return this._EnableGpiStopTrigger; }
            set { this._EnableGpiStopTrigger = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"Timeout",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _Timeout = null;
        /// <summary>
        /// Timeout in milliseconds. 0 = no timeout. 
        /// </summary>
        public uint? Timeout
        {
            get { return this._Timeout; }
            set { this._Timeout = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "StopTriggerConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EnableGpiStopTrigger)
            {
                stringBuilder.Append(labelIndent + "EnableGpiStopTrigger:");
                stringBuilder.AppendLine(subIndent + this.EnableGpiStopTrigger.ToString());
            }
            if (null != this.Timeout)
            {
                stringBuilder.Append(labelIndent + "Timeout:");
                stringBuilder.AppendLine(subIndent + this.Timeout.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Define how input functions map to signal lines and defines input polarities. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GpiConfig")]
    public class GpiConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"SignalingMode",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private GpioSignalMode? _SignalingMode = null;
        public GpioSignalMode? SignalingMode
        {
            get { return this._SignalingMode; }
            set { this._SignalingMode = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"Gpi1Polarity",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private GpioPolarity? _Gpi1Polarity = null;
        public GpioPolarity? Gpi1Polarity
        {
            get { return this._Gpi1Polarity; }
            set { this._Gpi1Polarity = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"Gpi2Polarity",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private GpioPolarity? _Gpi2Polarity = null;
        public GpioPolarity? Gpi2Polarity
        {
            get { return this._Gpi2Polarity; }
            set { this._Gpi2Polarity = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"Gpi3Polarity",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private GpioPolarity? _Gpi3Polarity = null;
        public GpioPolarity? Gpi3Polarity
        {
            get { return this._Gpi3Polarity; }
            set { this._Gpi3Polarity = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GpiConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.SignalingMode)
            {
                stringBuilder.Append(labelIndent + "SignalingMode:");
                stringBuilder.AppendLine(subIndent + this.SignalingMode.ToString());
            }
            if (null != this.Gpi1Polarity)
            {
                stringBuilder.Append(labelIndent + "Gpi1Polarity:");
                stringBuilder.AppendLine(subIndent + this.Gpi1Polarity.ToString());
            }
            if (null != this.Gpi2Polarity)
            {
                stringBuilder.Append(labelIndent + "Gpi2Polarity:");
                stringBuilder.AppendLine(subIndent + this.Gpi2Polarity.ToString());
            }
            if (null != this.Gpi3Polarity)
            {
                stringBuilder.Append(labelIndent + "Gpi3Polarity:");
                stringBuilder.AppendLine(subIndent + this.Gpi3Polarity.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Define how output functions map to signal lines and defines output polarities. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GpoConfig")]
    public class GpoConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"SignalingMode",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private GpioSignalMode? _SignalingMode = null;
        /// <summary>
        /// Operation pass/fail on the same GPO or separate GPOs. 
        /// </summary>
        public GpioSignalMode? SignalingMode
        {
            get { return this._SignalingMode; }
            set { this._SignalingMode = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"Gpo1Polarity",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private GpioPolarity? _Gpo1Polarity = null;
        /// <summary>
        /// Operation Status - Start and Complete 
        /// </summary>
        public GpioPolarity? Gpo1Polarity
        {
            get { return this._Gpo1Polarity; }
            set { this._Gpo1Polarity = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"Gpo2Polarity",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private GpioPolarity? _Gpo2Polarity = null;
        /// <summary>
        /// In separate output mode, GPO2 will indicate with this polarity that the operation passed. In combined mode when the operation clock transitions, this setting indicates pass and the opposite polarity failure. 
        /// </summary>
        public GpioPolarity? Gpo2Polarity
        {
            get { return this._Gpo2Polarity; }
            set { this._Gpo2Polarity = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"Gpo3Polarity",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private GpioPolarity? _Gpo3Polarity = null;
        /// <summary>
        /// In separate output mode, a failure will set GPO3 low or high depending on this setting. 
        /// </summary>
        public GpioPolarity? Gpo3Polarity
        {
            get { return this._Gpo3Polarity; }
            set { this._Gpo3Polarity = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"GpoPulseDuration",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _GpoPulseDuration = null;
        /// <summary>
        /// The output pulse duration in milliseconds. A value of zero means toggle as fast as possible. 
        /// </summary>
        public uint? GpoPulseDuration
        {
            get { return this._GpoPulseDuration; }
            set { this._GpoPulseDuration = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"EnableOperationResultGpo",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableOperationResultGpo = null;
        /// <summary>
        /// If set to true, the GPO will change when the operation is complete. If false the client may set pass/fail with the set_operation_result_gpo command. 
        /// </summary>
        public bool? EnableOperationResultGpo
        {
            get { return this._EnableOperationResultGpo; }
            set { this._EnableOperationResultGpo = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GpoConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.SignalingMode)
            {
                stringBuilder.Append(labelIndent + "SignalingMode:");
                stringBuilder.AppendLine(subIndent + this.SignalingMode.ToString());
            }
            if (null != this.Gpo1Polarity)
            {
                stringBuilder.Append(labelIndent + "Gpo1Polarity:");
                stringBuilder.AppendLine(subIndent + this.Gpo1Polarity.ToString());
            }
            if (null != this.Gpo2Polarity)
            {
                stringBuilder.Append(labelIndent + "Gpo2Polarity:");
                stringBuilder.AppendLine(subIndent + this.Gpo2Polarity.ToString());
            }
            if (null != this.Gpo3Polarity)
            {
                stringBuilder.Append(labelIndent + "Gpo3Polarity:");
                stringBuilder.AppendLine(subIndent + this.Gpo3Polarity.ToString());
            }
            if (null != this.GpoPulseDuration)
            {
                stringBuilder.Append(labelIndent + "GpoPulseDuration:");
                stringBuilder.AppendLine(subIndent + this.GpoPulseDuration.ToString());
            }
            if (null != this.EnableOperationResultGpo)
            {
                stringBuilder.Append(labelIndent + "EnableOperationResultGpo:");
                stringBuilder.AppendLine(subIndent + this.EnableOperationResultGpo.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"STPDevice")]
    public class STPDevice
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"Hostname",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _Hostname = null;
        /// <summary>
        /// This must be an IP address (for now) in the format 'ddd.ddd.ddd.ddd', for example: 192.168.1.10 
        /// </summary>
        public string Hostname
        {
            get { return this._Hostname; }
            set { this._Hostname = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "STPDevice");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Hostname)
            {
                stringBuilder.Append(labelIndent + "Hostname:");
                stringBuilder.AppendLine(subIndent + this.Hostname.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._Hostname)
            {
                throw new RequiredFieldMissingException("Hostname is required in STPDevice");
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Define which areas of tag memory this device is responsible for writing and which operations to perform. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"OperationResponsibility")]
    public class OperationResponsibility
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"EpcMemoryMask",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireEpcMemoryMask = null;
        private ByteArray _EpcMemoryMask = null;
        /// <summary>
        /// Hex representation of 32-bit Blocks (F = 1111 = encode 4 32-bitblocks). 
        /// </summary>
        public ByteArray EpcMemoryMask
        {
            get { return this._EpcMemoryMask; }
            set { this._EpcMemoryMask = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"EpcMemoryPcWord",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EpcMemoryPcWord = null;
        /// <summary>
        /// Encode or verify configured PC Word 
        /// </summary>
        public bool? EpcMemoryPcWord
        {
            get { return this._EpcMemoryPcWord; }
            set { this._EpcMemoryPcWord = value; }
        }
        
        [global::ProtoBuf.ProtoMember(18,IsRequired = false,Name=@"TidConfigWord",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _TidConfigWord = null;
        /// <summary>
        /// Write TID config word 
        /// </summary>
        public bool? TidConfigWord
        {
            get { return this._TidConfigWord; }
            set { this._TidConfigWord = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"UserMemoryMask",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireUserMemoryMask = null;
        private ByteArray _UserMemoryMask = null;
        /// <summary>
        /// Hex representation of 32-bit Blocks (F = 1111 = encode 4 32-bit blocks) 
        /// </summary>
        public ByteArray UserMemoryMask
        {
            get { return this._UserMemoryMask; }
            set { this._UserMemoryMask = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"SecurePassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _SecurePassword = null;
        /// <summary>
        /// If true, use the secured password to move tag to secure state on this device. 
        /// </summary>
        public bool? SecurePassword
        {
            get { return this._SecurePassword; }
            set { this._SecurePassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"AccessPassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _AccessPassword = null;
        /// <summary>
        /// Encode or verify configured 32-bit Access password 
        /// </summary>
        public bool? AccessPassword
        {
            get { return this._AccessPassword; }
            set { this._AccessPassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"KillPassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _KillPassword = null;
        /// <summary>
        /// Encode or verify configured 32-bit Kill password 
        /// </summary>
        public bool? KillPassword
        {
            get { return this._KillPassword; }
            set { this._KillPassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"LockConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _LockConfig = null;
        /// <summary>
        /// Set or verify (read reserved memory) Lock config 
        /// </summary>
        public bool? LockConfig
        {
            get { return this._LockConfig; }
            set { this._LockConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(8,IsRequired = false,Name=@"BlockpermalockConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _BlockpermalockConfig = null;
        /// <summary>
        /// Set or verify (read reserved memory) BlockPermalock config 
        /// </summary>
        public bool? BlockpermalockConfig
        {
            get { return this._BlockpermalockConfig; }
            set { this._BlockpermalockConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(10,IsRequired = false,Name=@"KillTag",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _KillTag = null;
        public bool? KillTag
        {
            get { return this._KillTag; }
            set { this._KillTag = value; }
        }
        
        [global::ProtoBuf.ProtoMember(17,IsRequired = false,Name=@"TagSpecificFeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _TagSpecificFeatureConfig = null;
        /// <summary>
        /// Tag specific feature configuration for Monza 6 (and possibly) later tags 
        /// </summary>
        public bool? TagSpecificFeatureConfig
        {
            get { return this._TagSpecificFeatureConfig; }
            set { this._TagSpecificFeatureConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(11,IsRequired = false,Name=@"TagsInViewCount",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _TagsInViewCount = null;
        /// <summary>
        /// The approximate number of tags in the field of view.  This parameter is only valid In continuous mode; a report will be sent when a tagis removed from a list of this size. A larger number will delay reports, butallow retries if a tag remains in view. 
        /// </summary>
        public uint? TagsInViewCount
        {
            get { return this._TagsInViewCount; }
            set { this._TagsInViewCount = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12,IsRequired = false,Name=@"TagsInPipelineViewCount",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _TagsInPipelineViewCount = null;
        /// <summary>
        /// The approximate number of total tags expected in the STP pipeline.  This parameter is only significant in systems that have multipledevices working together to pipeline the encoding process, the value shouldbe set to exceed the total number of tags between the first and last STP devices. By default this is set to 0 (disabling the feature). 
        /// </summary>
        public uint? TagsInPipelineViewCount
        {
            get { return this._TagsInPipelineViewCount; }
            set { this._TagsInPipelineViewCount = value; }
        }
        
        [global::ProtoBuf.ProtoMember(13,Name=@"DownstreamPipelineDevices",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<STPDevice> _DownstreamPipelineDevices = new global::System.Collections.Generic.List<STPDevice>();
        /// <summary>
        /// A list of downstream STP devices in pipeline which will be sent operation notifications, only necessary when 'tags_in_pipeline_view_count' is used.  The order the devices will determine the order the notifications are sent.
        /// </summary>
        public global::System.Collections.Generic.List<STPDevice> DownstreamPipelineDevices
        {
            get { return this._DownstreamPipelineDevices; }
            set { this._DownstreamPipelineDevices = value; }
        }
        
        [global::ProtoBuf.ProtoMember(14,IsRequired = false,Name=@"DeviceOfRecord",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private STPDevice _DeviceOfRecord = null;
        /// <summary>
        /// Downstream STP device that allows non Monza encoding 
        /// </summary>
        public STPDevice DeviceOfRecord
        {
            get { return this._DeviceOfRecord; }
            set { this._DeviceOfRecord = value; }
        }
        
        [global::ProtoBuf.ProtoMember(15,IsRequired = false,Name=@"VoyanticTagsuranceTestResultsCacheSize",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _VoyanticTagsuranceTestResultsCacheSize = null;
        /// <summary>
        /// The approximate number of tags expected in the pipeline betweena third party tester and the first ItemEncode device.  Setting this to 0disables the listening feature.  Setting this to any other value indicatesthat this ItemEncode device should expect rf performance reports for everytag it sees 
        /// </summary>
        public uint? VoyanticTagsuranceTestResultsCacheSize
        {
            get { return this._VoyanticTagsuranceTestResultsCacheSize; }
            set { this._VoyanticTagsuranceTestResultsCacheSize = value; }
        }
        
        [global::ProtoBuf.ProtoMember(16,IsRequired = false,Name=@"VoidTagResponsibility",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private VoidTagResponsibility _VoidTagResponsibility = null;
        /// <summary>
        /// In cases where there is voiding possible, this is how the userspecifies the responsibility of this device 
        /// </summary>
        public VoidTagResponsibility VoidTagResponsibility
        {
            get { return this._VoidTagResponsibility; }
            set { this._VoidTagResponsibility = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "OperationResponsibility");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EpcMemoryMask)
            {
                stringBuilder.Append(labelIndent + "EpcMemoryMask:");
                stringBuilder.AppendLine(subIndent + this.EpcMemoryMask.ToString());
            }
            if (null != this.EpcMemoryPcWord)
            {
                stringBuilder.Append(labelIndent + "EpcMemoryPcWord:");
                stringBuilder.AppendLine(subIndent + this.EpcMemoryPcWord.ToString());
            }
            if (null != this.TidConfigWord)
            {
                stringBuilder.Append(labelIndent + "TidConfigWord:");
                stringBuilder.AppendLine(subIndent + this.TidConfigWord.ToString());
            }
            if (null != this.UserMemoryMask)
            {
                stringBuilder.Append(labelIndent + "UserMemoryMask:");
                stringBuilder.AppendLine(subIndent + this.UserMemoryMask.ToString());
            }
            if (null != this.SecurePassword)
            {
                stringBuilder.Append(labelIndent + "SecurePassword:");
                stringBuilder.AppendLine(subIndent + this.SecurePassword.ToString());
            }
            if (null != this.AccessPassword)
            {
                stringBuilder.Append(labelIndent + "AccessPassword:");
                stringBuilder.AppendLine(subIndent + this.AccessPassword.ToString());
            }
            if (null != this.KillPassword)
            {
                stringBuilder.Append(labelIndent + "KillPassword:");
                stringBuilder.AppendLine(subIndent + this.KillPassword.ToString());
            }
            if (null != this.LockConfig)
            {
                stringBuilder.Append(labelIndent + "LockConfig:");
                stringBuilder.AppendLine(subIndent + this.LockConfig.ToString());
            }
            if (null != this.BlockpermalockConfig)
            {
                stringBuilder.Append(labelIndent + "BlockpermalockConfig:");
                stringBuilder.AppendLine(subIndent + this.BlockpermalockConfig.ToString());
            }
            if (null != this.KillTag)
            {
                stringBuilder.Append(labelIndent + "KillTag:");
                stringBuilder.AppendLine(subIndent + this.KillTag.ToString());
            }
            if (null != this.TagSpecificFeatureConfig)
            {
                stringBuilder.Append(labelIndent + "TagSpecificFeatureConfig:");
                stringBuilder.AppendLine(subIndent + this.TagSpecificFeatureConfig.ToString());
            }
            if (null != this.TagsInViewCount)
            {
                stringBuilder.Append(labelIndent + "TagsInViewCount:");
                stringBuilder.AppendLine(subIndent + this.TagsInViewCount.ToString());
            }
            if (null != this.TagsInPipelineViewCount)
            {
                stringBuilder.Append(labelIndent + "TagsInPipelineViewCount:");
                stringBuilder.AppendLine(subIndent + this.TagsInPipelineViewCount.ToString());
            }
            for(int i = 0; i < this.DownstreamPipelineDevices.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("DownstreamPipelineDevices[{0}]:", i));
                stringBuilder.AppendLine(this.DownstreamPipelineDevices[i].ToString(subIndent));
            }
            if (null != this.DeviceOfRecord)
            {
                stringBuilder.Append(labelIndent + "DeviceOfRecord:");
                stringBuilder.AppendLine(this.DeviceOfRecord.ToString(subIndent));
            }
            if (null != this.VoyanticTagsuranceTestResultsCacheSize)
            {
                stringBuilder.Append(labelIndent + "VoyanticTagsuranceTestResultsCacheSize:");
                stringBuilder.AppendLine(subIndent + this.VoyanticTagsuranceTestResultsCacheSize.ToString());
            }
            if (null != this.VoidTagResponsibility)
            {
                stringBuilder.Append(labelIndent + "VoidTagResponsibility:");
                stringBuilder.AppendLine(this.VoidTagResponsibility.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._DeviceOfRecord)
            {
                this._DeviceOfRecord.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._VoidTagResponsibility)
            {
                this._VoidTagResponsibility.EnsureRequiredFieldsArePresent();
            }
            
            foreach (var message in this.DownstreamPipelineDevices)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireEpcMemoryMask)
            {
                this._EpcMemoryMask = new ByteArray(this._wireEpcMemoryMask);
            }
            if (null != this._wireUserMemoryMask)
            {
                this._UserMemoryMask = new ByteArray(this._wireUserMemoryMask);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._EpcMemoryMask)
            {
                this._wireEpcMemoryMask = this._EpcMemoryMask.Bytes;
            }
            if (null != this._UserMemoryMask)
            {
                this._wireUserMemoryMask = this._UserMemoryMask.Bytes;
            }
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"VoidTagResponsibility")]
    public class VoidTagResponsibility
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"PcWordToZero",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _PcWordToZero = null;
        /// <summary>
        /// Set EPC Length to 0. 
        /// </summary>
        public bool? PcWordToZero
        {
            get { return this._PcWordToZero; }
            set { this._PcWordToZero = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"FirstEpcWords",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _FirstEpcWords = null;
        /// <summary>
        /// Encode first two EPC words to DEAD DEAD. 
        /// </summary>
        public bool? FirstEpcWords
        {
            get { return this._FirstEpcWords; }
            set { this._FirstEpcWords = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"Permalock",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Permalock = null;
        /// <summary>
        /// Permalock the entire tag. 
        /// </summary>
        public bool? Permalock
        {
            get { return this._Permalock; }
            set { this._Permalock = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"Kill",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Kill = null;
        /// <summary>
        /// Kill the tag. 
        /// </summary>
        public bool? Kill
        {
            get { return this._Kill; }
            set { this._Kill = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "VoidTagResponsibility");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.PcWordToZero)
            {
                stringBuilder.Append(labelIndent + "PcWordToZero:");
                stringBuilder.AppendLine(subIndent + this.PcWordToZero.ToString());
            }
            if (null != this.FirstEpcWords)
            {
                stringBuilder.Append(labelIndent + "FirstEpcWords:");
                stringBuilder.AppendLine(subIndent + this.FirstEpcWords.ToString());
            }
            if (null != this.Permalock)
            {
                stringBuilder.Append(labelIndent + "Permalock:");
                stringBuilder.AppendLine(subIndent + this.Permalock.ToString());
            }
            if (null != this.Kill)
            {
                stringBuilder.Append(labelIndent + "Kill:");
                stringBuilder.AppendLine(subIndent + this.Kill.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Enable a summary report at the end of the device operation. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"OperationSummaryReportConfig")]
    public class OperationSummaryReportConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"EnableOperationSummaryReports",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableOperationSummaryReports = null;
        public bool? EnableOperationSummaryReports
        {
            get { return this._EnableOperationSummaryReports; }
            set { this._EnableOperationSummaryReports = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "OperationSummaryReportConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EnableOperationSummaryReports)
            {
                stringBuilder.Append(labelIndent + "EnableOperationSummaryReports:");
                stringBuilder.AppendLine(subIndent + this.EnableOperationSummaryReports.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._EnableOperationSummaryReports)
            {
                throw new RequiredFieldMissingException("EnableOperationSummaryReports is required in OperationSummaryReportConfig");
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Configure what types of reports to send from the device. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"TagOperationReportConfig")]
    public class TagOperationReportConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"EnableTagOperationReports",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableTagOperationReports = null;
        public bool? EnableTagOperationReports
        {
            get { return this._EnableTagOperationReports; }
            set { this._EnableTagOperationReports = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"EnableTagOperationRetryReports",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableTagOperationRetryReports = null;
        public bool? EnableTagOperationRetryReports
        {
            get { return this._EnableTagOperationRetryReports; }
            set { this._EnableTagOperationRetryReports = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"TagOperationReportTrigger",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private TagOperationReportTrigger? _TagOperationReportTrigger = null;
        public TagOperationReportTrigger? TagOperationReportTrigger
        {
            get { return this._TagOperationReportTrigger; }
            set { this._TagOperationReportTrigger = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"EnableReportingOverSerialPort",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableReportingOverSerialPort = null;
        /// <summary>
        /// Send a brief one-line ASCII report over the device's serial port. Only used for single operating mode.  See OperationMode_.
        /// </summary>
        public bool? EnableReportingOverSerialPort
        {
            get { return this._EnableReportingOverSerialPort; }
            set { this._EnableReportingOverSerialPort = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"SendSerialReportAfterGpoDeassert",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _SendSerialReportAfterGpoDeassert = null;
        /// <summary>
        /// Send after GPO pass/fail assert or deassert. 
        /// </summary>
        public bool? SendSerialReportAfterGpoDeassert
        {
            get { return this._SendSerialReportAfterGpoDeassert; }
            set { this._SendSerialReportAfterGpoDeassert = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"EnableEpcInSerialReport",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableEpcInSerialReport = null;
        /// <summary>
        /// This only has meaning if enable_reporting_over_serial_port istrue.  When this is false, the EPC reported in the serial tag report isthe empty string instead of the actual EPC read.  This is useful forreducing the amount of traffic over the serial port if the EPC is notuseful for a particular application. 
        /// </summary>
        public bool? EnableEpcInSerialReport
        {
            get { return this._EnableEpcInSerialReport; }
            set { this._EnableEpcInSerialReport = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"EnableTagOperationPassAlreadyDoneReports",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableTagOperationPassAlreadyDoneReports = null;
        public bool? EnableTagOperationPassAlreadyDoneReports
        {
            get { return this._EnableTagOperationPassAlreadyDoneReports; }
            set { this._EnableTagOperationPassAlreadyDoneReports = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "TagOperationReportConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EnableTagOperationReports)
            {
                stringBuilder.Append(labelIndent + "EnableTagOperationReports:");
                stringBuilder.AppendLine(subIndent + this.EnableTagOperationReports.ToString());
            }
            if (null != this.EnableTagOperationRetryReports)
            {
                stringBuilder.Append(labelIndent + "EnableTagOperationRetryReports:");
                stringBuilder.AppendLine(subIndent + this.EnableTagOperationRetryReports.ToString());
            }
            if (null != this.TagOperationReportTrigger)
            {
                stringBuilder.Append(labelIndent + "TagOperationReportTrigger:");
                stringBuilder.AppendLine(subIndent + this.TagOperationReportTrigger.ToString());
            }
            if (null != this.EnableReportingOverSerialPort)
            {
                stringBuilder.Append(labelIndent + "EnableReportingOverSerialPort:");
                stringBuilder.AppendLine(subIndent + this.EnableReportingOverSerialPort.ToString());
            }
            if (null != this.SendSerialReportAfterGpoDeassert)
            {
                stringBuilder.Append(labelIndent + "SendSerialReportAfterGpoDeassert:");
                stringBuilder.AppendLine(subIndent + this.SendSerialReportAfterGpoDeassert.ToString());
            }
            if (null != this.EnableEpcInSerialReport)
            {
                stringBuilder.Append(labelIndent + "EnableEpcInSerialReport:");
                stringBuilder.AppendLine(subIndent + this.EnableEpcInSerialReport.ToString());
            }
            if (null != this.EnableTagOperationPassAlreadyDoneReports)
            {
                stringBuilder.Append(labelIndent + "EnableTagOperationPassAlreadyDoneReports:");
                stringBuilder.AppendLine(subIndent + this.EnableTagOperationPassAlreadyDoneReports.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._EnableTagOperationReports)
            {
                throw new RequiredFieldMissingException("EnableTagOperationReports is required in TagOperationReportConfig");
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Define what to report to the client application. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"ReportConfig")]
    public class ReportConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"DeviceEventConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private DeviceEventConfig _DeviceEventConfig = null;
        public DeviceEventConfig DeviceEventConfig
        {
            get { return this._DeviceEventConfig; }
            set { this._DeviceEventConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"OperationSummaryReportConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private OperationSummaryReportConfig _OperationSummaryReportConfig = null;
        public OperationSummaryReportConfig OperationSummaryReportConfig
        {
            get { return this._OperationSummaryReportConfig; }
            set { this._OperationSummaryReportConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"TagOperationReportConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TagOperationReportConfig _TagOperationReportConfig = null;
        public TagOperationReportConfig TagOperationReportConfig
        {
            get { return this._TagOperationReportConfig; }
            set { this._TagOperationReportConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "ReportConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.DeviceEventConfig)
            {
                stringBuilder.Append(labelIndent + "DeviceEventConfig:");
                stringBuilder.AppendLine(this.DeviceEventConfig.ToString(subIndent));
            }
            if (null != this.OperationSummaryReportConfig)
            {
                stringBuilder.Append(labelIndent + "OperationSummaryReportConfig:");
                stringBuilder.AppendLine(this.OperationSummaryReportConfig.ToString(subIndent));
            }
            if (null != this.TagOperationReportConfig)
            {
                stringBuilder.Append(labelIndent + "TagOperationReportConfig:");
                stringBuilder.AppendLine(this.TagOperationReportConfig.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._DeviceEventConfig)
            {
                this._DeviceEventConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._OperationSummaryReportConfig)
            {
                this._OperationSummaryReportConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._TagOperationReportConfig)
            {
                this._TagOperationReportConfig.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// An antenna's RF, timing, and Gen 2 behavior parameters. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"AntennaConfig")]
    public class AntennaConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"AntennaId",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _AntennaId = null;
        /// <summary>
        /// The 1-based ID of the reader antenna. 
        /// </summary>
        public uint? AntennaId
        {
            get { return this._AntennaId; }
            set { this._AntennaId = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"Gen2Mode",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private Gen2Mode? _Gen2Mode = null;
        public Gen2Mode? Gen2Mode
        {
            get { return this._Gen2Mode; }
            set { this._Gen2Mode = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"InventorySearchMode",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private InventorySearchMode? _InventorySearchMode = null;
        public InventorySearchMode? InventorySearchMode
        {
            get { return this._InventorySearchMode; }
            set { this._InventorySearchMode = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"Gen2Session",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private Gen2Session? _Gen2Session = null;
        public Gen2Session? Gen2Session
        {
            get { return this._Gen2Session; }
            set { this._Gen2Session = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"TransmitPower",DataFormat = global::ProtoBuf.DataFormat.ZigZag)]
        private int? _TransmitPower = null;
        /// <summary>
        /// Transmit power in cdBm. 
        /// </summary>
        public int? TransmitPower
        {
            get { return this._TransmitPower; }
            set { this._TransmitPower = value; }
        }
        
        [global::ProtoBuf.ProtoMember(8,IsRequired = false,Name=@"ReceiveSensitivity",DataFormat = global::ProtoBuf.DataFormat.ZigZag)]
        private int? _ReceiveSensitivity = null;
        /// <summary>
        /// Receive sensitivity in cdBm.  If not specified, no RSSI filtering is done. 
        /// </summary>
        public int? ReceiveSensitivity
        {
            get { return this._ReceiveSensitivity; }
            set { this._ReceiveSensitivity = value; }
        }
        
        [global::ProtoBuf.ProtoMember(10,IsRequired = false,Name=@"TagPopulationEstimate",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _TagPopulationEstimate = null;
        public uint? TagPopulationEstimate
        {
            get { return this._TagPopulationEstimate; }
            set { this._TagPopulationEstimate = value; }
        }
        
        [global::ProtoBuf.ProtoMember(11,IsRequired = false,Name=@"MinimumDwellTime",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _MinimumDwellTime = null;
        /// <summary>
        /// Minimum time to dwell on the antenna in milliseconds. A valueof 0 indicates no minimum. 
        /// </summary>
        public uint? MinimumDwellTime
        {
            get { return this._MinimumDwellTime; }
            set { this._MinimumDwellTime = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12,IsRequired = false,Name=@"MaximumDwellTime",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _MaximumDwellTime = null;
        /// <summary>
        /// Maximum time to dwell on the antenna in milliseconds. A valueof 0 indicates no maximum. 
        /// </summary>
        public uint? MaximumDwellTime
        {
            get { return this._MaximumDwellTime; }
            set { this._MaximumDwellTime = value; }
        }
        
        [global::ProtoBuf.ProtoMember(13,IsRequired = false,Name=@"EnableQueryForQIncrease",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableQueryForQIncrease = null;
        /// <summary>
        /// Indicates whether a query should be used instead of a queryadjust when the reader wishes to increase the Q value during the round.
        /// </summary>
        public bool? EnableQueryForQIncrease
        {
            get { return this._EnableQueryForQIncrease; }
            set { this._EnableQueryForQIncrease = value; }
        }
        
        [global::ProtoBuf.ProtoMember(14,IsRequired = false,Name=@"EnableQueryForQDecrease",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableQueryForQDecrease = null;
        /// <summary>
        /// Indicates whether a query should be used instead of a queryadjust when the reader wishes to decrease the Q value during the round.
        /// </summary>
        public bool? EnableQueryForQDecrease
        {
            get { return this._EnableQueryForQDecrease; }
            set { this._EnableQueryForQDecrease = value; }
        }
        
        [global::ProtoBuf.ProtoMember(15,IsRequired = false,Name=@"EnableQueryAtUCycleEnd",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableQueryAtUCycleEnd = null;
        /// <summary>
        /// Indicates whether a query should be used instead of a queryadjust for the flush queries at the end of the round.  
        /// </summary>
        public bool? EnableQueryAtUCycleEnd
        {
            get { return this._EnableQueryAtUCycleEnd; }
            set { this._EnableQueryAtUCycleEnd = value; }
        }
        
        [global::ProtoBuf.ProtoMember(16,IsRequired = false,Name=@"EnableAdaptiveTagPopulationEstimate",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableAdaptiveTagPopulationEstimate = null;
        /// <summary>
        /// Indicates whether the tag_population_estimate in the AntennaConfig should be updated with the actual number of tags seen.  
        /// </summary>
        public bool? EnableAdaptiveTagPopulationEstimate
        {
            get { return this._EnableAdaptiveTagPopulationEstimate; }
            set { this._EnableAdaptiveTagPopulationEstimate = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "AntennaConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.AntennaId)
            {
                stringBuilder.Append(labelIndent + "AntennaId:");
                stringBuilder.AppendLine(subIndent + this.AntennaId.ToString());
            }
            if (null != this.Gen2Mode)
            {
                stringBuilder.Append(labelIndent + "Gen2Mode:");
                stringBuilder.AppendLine(subIndent + this.Gen2Mode.ToString());
            }
            if (null != this.InventorySearchMode)
            {
                stringBuilder.Append(labelIndent + "InventorySearchMode:");
                stringBuilder.AppendLine(subIndent + this.InventorySearchMode.ToString());
            }
            if (null != this.Gen2Session)
            {
                stringBuilder.Append(labelIndent + "Gen2Session:");
                stringBuilder.AppendLine(subIndent + this.Gen2Session.ToString());
            }
            if (null != this.TransmitPower)
            {
                stringBuilder.Append(labelIndent + "TransmitPower:");
                stringBuilder.AppendLine(subIndent + this.TransmitPower.ToString());
            }
            if (null != this.ReceiveSensitivity)
            {
                stringBuilder.Append(labelIndent + "ReceiveSensitivity:");
                stringBuilder.AppendLine(subIndent + this.ReceiveSensitivity.ToString());
            }
            if (null != this.TagPopulationEstimate)
            {
                stringBuilder.Append(labelIndent + "TagPopulationEstimate:");
                stringBuilder.AppendLine(subIndent + this.TagPopulationEstimate.ToString());
            }
            if (null != this.MinimumDwellTime)
            {
                stringBuilder.Append(labelIndent + "MinimumDwellTime:");
                stringBuilder.AppendLine(subIndent + this.MinimumDwellTime.ToString());
            }
            if (null != this.MaximumDwellTime)
            {
                stringBuilder.Append(labelIndent + "MaximumDwellTime:");
                stringBuilder.AppendLine(subIndent + this.MaximumDwellTime.ToString());
            }
            if (null != this.EnableQueryForQIncrease)
            {
                stringBuilder.Append(labelIndent + "EnableQueryForQIncrease:");
                stringBuilder.AppendLine(subIndent + this.EnableQueryForQIncrease.ToString());
            }
            if (null != this.EnableQueryForQDecrease)
            {
                stringBuilder.Append(labelIndent + "EnableQueryForQDecrease:");
                stringBuilder.AppendLine(subIndent + this.EnableQueryForQDecrease.ToString());
            }
            if (null != this.EnableQueryAtUCycleEnd)
            {
                stringBuilder.Append(labelIndent + "EnableQueryAtUCycleEnd:");
                stringBuilder.AppendLine(subIndent + this.EnableQueryAtUCycleEnd.ToString());
            }
            if (null != this.EnableAdaptiveTagPopulationEstimate)
            {
                stringBuilder.Append(labelIndent + "EnableAdaptiveTagPopulationEstimate:");
                stringBuilder.AppendLine(subIndent + this.EnableAdaptiveTagPopulationEstimate.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._AntennaId)
            {
                throw new RequiredFieldMissingException("AntennaId is required in AntennaConfig");
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// A list of antenna configurations. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"AntennasConfig")]
    public class AntennasConfig
    {
        [global::ProtoBuf.ProtoMember(1,Name=@"AntennaConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<AntennaConfig> _AntennaConfig = new global::System.Collections.Generic.List<AntennaConfig>();
        /// <summary>
        /// The device will cycle through the configurations in the orderin which they appear in the list.  The amount of time spent on eachantenna is determined by the reader, but constrained by theminimum_dwell_time and maximum_dwell_time if those parameters are set.It is valid to provide multiple AntennaConfig messages that contain thesame antenna_id in which case they will simply be treated as independentAntennaConfig entries.
        /// </summary>
        public global::System.Collections.Generic.List<AntennaConfig> AntennaConfig
        {
            get { return this._AntennaConfig; }
            set { this._AntennaConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "AntennasConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            for(int i = 0; i < this.AntennaConfig.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("AntennaConfig[{0}]:", i));
                stringBuilder.AppendLine(this.AntennaConfig[i].ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            foreach (var message in this.AntennaConfig)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// What to report during an inventory. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"InventoryJob")]
    public class InventoryJob
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"JobId",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _JobId = null;
        public uint? JobId
        {
            get { return this._JobId; }
            set { this._JobId = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"UserMemory",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private UserMemory _UserMemory = null;
        public UserMemory UserMemory
        {
            get { return this._UserMemory; }
            set { this._UserMemory = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "InventoryJob");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.JobId)
            {
                stringBuilder.Append(labelIndent + "JobId:");
                stringBuilder.AppendLine(subIndent + this.JobId.ToString());
            }
            if (null != this.UserMemory)
            {
                stringBuilder.Append(labelIndent + "UserMemory:");
                stringBuilder.AppendLine(this.UserMemory.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._UserMemory)
            {
                this._UserMemory.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// A Carton contents job is what you use to provide you with anestimate of what tags are in a given carton 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"CartonContentsJob")]
    public class CartonContentsJob
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"JobId",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _JobId = null;
        public uint? JobId
        {
            get { return this._JobId; }
            set { this._JobId = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"EnterTriggerOffset",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _EnterTriggerOffset = null;
        /// <summary>
        /// Distance in millimeters from the enter trigger to the center ofthe tunnel 
        /// </summary>
        public uint? EnterTriggerOffset
        {
            get { return this._EnterTriggerOffset; }
            set { this._EnterTriggerOffset = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"ExitTriggerOffset",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _ExitTriggerOffset = null;
        /// <summary>
        /// Distance in millimeters from the exit trigger to the center ofthe tunnel 
        /// </summary>
        public uint? ExitTriggerOffset
        {
            get { return this._ExitTriggerOffset; }
            set { this._ExitTriggerOffset = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"CartonVelocity",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _CartonVelocity = null;
        /// <summary>
        /// Speed of the cartons measured in millimeters / second 
        /// </summary>
        public uint? CartonVelocity
        {
            get { return this._CartonVelocity; }
            set { this._CartonVelocity = value; }
        }
        
        [global::ProtoBuf.ProtoMember(8,IsRequired = false,Name=@"ReadTid",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _ReadTid = null;
        /// <summary>
        /// Setting to false disables reading the TID. This can improveoverall carton accuracy. 
        /// </summary>
        public bool? ReadTid
        {
            get { return this._ReadTid; }
            set { this._ReadTid = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"CartonSpacing",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _CartonSpacing = null;
        /// <summary>
        /// DEPRECATED 
        /// </summary>
        public uint? CartonSpacing
        {
            get { return this._CartonSpacing; }
            set { this._CartonSpacing = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"StartTriggerOffset",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _StartTriggerOffset = null;
        /// <summary>
        /// DEPRECATED 
        /// </summary>
        public uint? StartTriggerOffset
        {
            get { return this._StartTriggerOffset; }
            set { this._StartTriggerOffset = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"StopTriggerOffset",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _StopTriggerOffset = null;
        /// <summary>
        /// DEPRECATED 
        /// </summary>
        public uint? StopTriggerOffset
        {
            get { return this._StopTriggerOffset; }
            set { this._StopTriggerOffset = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "CartonContentsJob");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.JobId)
            {
                stringBuilder.Append(labelIndent + "JobId:");
                stringBuilder.AppendLine(subIndent + this.JobId.ToString());
            }
            if (null != this.EnterTriggerOffset)
            {
                stringBuilder.Append(labelIndent + "EnterTriggerOffset:");
                stringBuilder.AppendLine(subIndent + this.EnterTriggerOffset.ToString());
            }
            if (null != this.ExitTriggerOffset)
            {
                stringBuilder.Append(labelIndent + "ExitTriggerOffset:");
                stringBuilder.AppendLine(subIndent + this.ExitTriggerOffset.ToString());
            }
            if (null != this.CartonVelocity)
            {
                stringBuilder.Append(labelIndent + "CartonVelocity:");
                stringBuilder.AppendLine(subIndent + this.CartonVelocity.ToString());
            }
            if (null != this.ReadTid)
            {
                stringBuilder.Append(labelIndent + "ReadTid:");
                stringBuilder.AppendLine(subIndent + this.ReadTid.ToString());
            }
            if (null != this.CartonSpacing)
            {
                stringBuilder.Append(labelIndent + "CartonSpacing:");
                stringBuilder.AppendLine(subIndent + this.CartonSpacing.ToString());
            }
            if (null != this.StartTriggerOffset)
            {
                stringBuilder.Append(labelIndent + "StartTriggerOffset:");
                stringBuilder.AppendLine(subIndent + this.StartTriggerOffset.ToString());
            }
            if (null != this.StopTriggerOffset)
            {
                stringBuilder.Append(labelIndent + "StopTriggerOffset:");
                stringBuilder.AppendLine(subIndent + this.StopTriggerOffset.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"VoidTagConfig")]
    public class VoidTagConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"KillTag",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _KillTag = null;
        /// <summary>
        /// If kill_tag is set, it overrides the other possible voiding operations, and none of the other ones will be attempted. 
        /// </summary>
        public bool? KillTag
        {
            get { return this._KillTag; }
            set { this._KillTag = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"PermalockAllBanks",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _PermalockAllBanks = null;
        /// <summary>
        /// Attempt to permalock all the memory banks after writing a 0 length to the PC word and 0xDEADDEAD to the first 2 words of EPC memory. 
        /// </summary>
        public bool? PermalockAllBanks
        {
            get { return this._PermalockAllBanks; }
            set { this._PermalockAllBanks = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "VoidTagConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.KillTag)
            {
                stringBuilder.Append(labelIndent + "KillTag:");
                stringBuilder.AppendLine(subIndent + this.KillTag.ToString());
            }
            if (null != this.PermalockAllBanks)
            {
                stringBuilder.Append(labelIndent + "PermalockAllBanks:");
                stringBuilder.AppendLine(subIndent + this.PermalockAllBanks.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"Filter")]
    public class Filter
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Data",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireData = null;
        private ByteArray _Data = null;
        /// <summary>
        /// Data to be matched. 
        /// </summary>
        public ByteArray Data
        {
            get { return this._Data; }
            set { this._Data = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"Mask",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireMask = null;
        private ByteArray _Mask = null;
        /// <summary>
        /// Which bits to match. 
        /// </summary>
        public ByteArray Mask
        {
            get { return this._Mask; }
            set { this._Mask = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"WordOffset",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _WordOffset = null;
        /// <summary>
        /// This offset specifies the word address to start the data and mask at. 
        /// </summary>
        public uint? WordOffset
        {
            get { return this._WordOffset; }
            set { this._WordOffset = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Filter");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Data)
            {
                stringBuilder.Append(labelIndent + "Data:");
                stringBuilder.AppendLine(subIndent + this.Data.ToString());
            }
            if (null != this.Mask)
            {
                stringBuilder.Append(labelIndent + "Mask:");
                stringBuilder.AppendLine(subIndent + this.Mask.ToString());
            }
            if (null != this.WordOffset)
            {
                stringBuilder.Append(labelIndent + "WordOffset:");
                stringBuilder.AppendLine(subIndent + this.WordOffset.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireData)
            {
                this._Data = new ByteArray(this._wireData);
            }
            if (null != this._wireMask)
            {
                this._Mask = new ByteArray(this._wireMask);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._Data)
            {
                this._wireData = this._Data.Bytes;
            }
            if (null != this._Mask)
            {
                this._wireMask = this._Mask.Bytes;
            }
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"SerializationJobFilters")]
    public class SerializationJobFilters
    {
        [global::ProtoBuf.ProtoMember(1,Name=@"TidFilters",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<Filter> _TidFilters = new global::System.Collections.Generic.List<Filter>();
        public global::System.Collections.Generic.List<Filter> TidFilters
        {
            get { return this._TidFilters; }
            set { this._TidFilters = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,Name=@"EpcFilters",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<Filter> _EpcFilters = new global::System.Collections.Generic.List<Filter>();
        public global::System.Collections.Generic.List<Filter> EpcFilters
        {
            get { return this._EpcFilters; }
            set { this._EpcFilters = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SerializationJobFilters");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            for(int i = 0; i < this.TidFilters.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("TidFilters[{0}]:", i));
                stringBuilder.AppendLine(this.TidFilters[i].ToString(subIndent));
            }
            for(int i = 0; i < this.EpcFilters.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("EpcFilters[{0}]:", i));
                stringBuilder.AppendLine(this.EpcFilters[i].ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            foreach (var message in this.TidFilters)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
            foreach (var message in this.EpcFilters)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// What to write and whether to set passwords and lock the tag. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"SerializationJob")]
    public class SerializationJob
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"JobId",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _JobId = null;
        public uint? JobId
        {
            get { return this._JobId; }
            set { this._JobId = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = true,Name=@"JobType",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private SerializationJobType? _JobType = null;
        public SerializationJobType? JobType
        {
            get { return this._JobType; }
            set { this._JobType = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"JobCompletionCriteria",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private SerializationJobCompletionCriteria? _JobCompletionCriteria = null;
        public SerializationJobCompletionCriteria? JobCompletionCriteria
        {
            get { return this._JobCompletionCriteria; }
            set { this._JobCompletionCriteria = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"OperationQuantity",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _OperationQuantity = null;
        /// <summary>
        /// NOT YET SUPPORTED 
        /// </summary>
        public uint? OperationQuantity
        {
            get { return this._OperationQuantity; }
            set { this._OperationQuantity = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"EpcMemory",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private EPCMemory _EpcMemory = null;
        public EPCMemory EpcMemory
        {
            get { return this._EpcMemory; }
            set { this._EpcMemory = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"TidMemory",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TidMemory _TidMemory = null;
        public TidMemory TidMemory
        {
            get { return this._TidMemory; }
            set { this._TidMemory = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"UserMemory",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private UserMemory _UserMemory = null;
        public UserMemory UserMemory
        {
            get { return this._UserMemory; }
            set { this._UserMemory = value; }
        }
        
        [global::ProtoBuf.ProtoMember(8,IsRequired = false,Name=@"SecurePassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Password _SecurePassword = null;
        public Password SecurePassword
        {
            get { return this._SecurePassword; }
            set { this._SecurePassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(9,IsRequired = false,Name=@"AccessPassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Password _AccessPassword = null;
        public Password AccessPassword
        {
            get { return this._AccessPassword; }
            set { this._AccessPassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(10,IsRequired = false,Name=@"KillPassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Password _KillPassword = null;
        public Password KillPassword
        {
            get { return this._KillPassword; }
            set { this._KillPassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(11,IsRequired = false,Name=@"LockConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private LockConfig _LockConfig = null;
        public LockConfig LockConfig
        {
            get { return this._LockConfig; }
            set { this._LockConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12,IsRequired = false,Name=@"BlockpermalockConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private BlockPermalockConfig _BlockpermalockConfig = null;
        /// <summary>
        /// NOT YET SUPPORTED 
        /// </summary>
        public BlockPermalockConfig BlockpermalockConfig
        {
            get { return this._BlockpermalockConfig; }
            set { this._BlockpermalockConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(16,IsRequired = false,Name=@"KillTag",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _KillTag = null;
        public bool? KillTag
        {
            get { return this._KillTag; }
            set { this._KillTag = value; }
        }
        
        [global::ProtoBuf.ProtoMember(20,IsRequired = false,Name=@"MonzaR6PFeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaR6PFeatureConfig _MonzaR6PFeatureConfig = null;
        /// <summary>
        /// MonzaR6PFeatureConfig will only be acted upon when encoding a Monza R6P tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaR6PFeatureConfig MonzaR6PFeatureConfig
        {
            get { return this._MonzaR6PFeatureConfig; }
            set { this._MonzaR6PFeatureConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(21,IsRequired = false,Name=@"MonzaS6CFeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaS6CFeatureConfig _MonzaS6CFeatureConfig = null;
        /// <summary>
        /// MonzaS6CFeatureConfig will only be acted upon when encoding a Monza S6C tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaS6CFeatureConfig MonzaS6CFeatureConfig
        {
            get { return this._MonzaS6CFeatureConfig; }
            set { this._MonzaS6CFeatureConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(22,IsRequired = false,Name=@"MonzaR6FeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaR6FeatureConfig _MonzaR6FeatureConfig = null;
        /// <summary>
        /// MonzaR6FeatureConfig will only be acted upon when encoding a Monza R6 tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaR6FeatureConfig MonzaR6FeatureConfig
        {
            get { return this._MonzaR6FeatureConfig; }
            set { this._MonzaR6FeatureConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(23,IsRequired = false,Name=@"MonzaR6AFeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaR6AFeatureConfig _MonzaR6AFeatureConfig = null;
        /// <summary>
        /// MonzaR6AFeatureConfig will only be acted upon when encoding a Monza R6A tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaR6AFeatureConfig MonzaR6AFeatureConfig
        {
            get { return this._MonzaR6AFeatureConfig; }
            set { this._MonzaR6AFeatureConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(17,IsRequired = false,Name=@"TidTableSize",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _TidTableSize = null;
        public uint? TidTableSize
        {
            get { return this._TidTableSize; }
            set { this._TidTableSize = value; }
        }
        
        [global::ProtoBuf.ProtoMember(14,Name=@"TidTableEntries",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<TidTableEntry> _TidTableEntries = new global::System.Collections.Generic.List<TidTableEntry>();
        public global::System.Collections.Generic.List<TidTableEntry> TidTableEntries
        {
            get { return this._TidTableEntries; }
            set { this._TidTableEntries = value; }
        }
        
        [global::ProtoBuf.ProtoMember(15,Name=@"OrderedListEntries",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<OrderedListEntry> _OrderedListEntries = new global::System.Collections.Generic.List<OrderedListEntry>();
        public global::System.Collections.Generic.List<OrderedListEntry> OrderedListEntries
        {
            get { return this._OrderedListEntries; }
            set { this._OrderedListEntries = value; }
        }
        
        [global::ProtoBuf.ProtoMember(18,IsRequired = false,Name=@"VoidTagConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private VoidTagConfig _VoidTagConfig = null;
        public VoidTagConfig VoidTagConfig
        {
            get { return this._VoidTagConfig; }
            set { this._VoidTagConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(19,IsRequired = false,Name=@"Filters",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SerializationJobFilters _Filters = null;
        public SerializationJobFilters Filters
        {
            get { return this._Filters; }
            set { this._Filters = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SerializationJob");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.JobId)
            {
                stringBuilder.Append(labelIndent + "JobId:");
                stringBuilder.AppendLine(subIndent + this.JobId.ToString());
            }
            if (null != this.JobType)
            {
                stringBuilder.Append(labelIndent + "JobType:");
                stringBuilder.AppendLine(subIndent + this.JobType.ToString());
            }
            if (null != this.JobCompletionCriteria)
            {
                stringBuilder.Append(labelIndent + "JobCompletionCriteria:");
                stringBuilder.AppendLine(subIndent + this.JobCompletionCriteria.ToString());
            }
            if (null != this.OperationQuantity)
            {
                stringBuilder.Append(labelIndent + "OperationQuantity:");
                stringBuilder.AppendLine(subIndent + this.OperationQuantity.ToString());
            }
            if (null != this.EpcMemory)
            {
                stringBuilder.Append(labelIndent + "EpcMemory:");
                stringBuilder.AppendLine(this.EpcMemory.ToString(subIndent));
            }
            if (null != this.TidMemory)
            {
                stringBuilder.Append(labelIndent + "TidMemory:");
                stringBuilder.AppendLine(this.TidMemory.ToString(subIndent));
            }
            if (null != this.UserMemory)
            {
                stringBuilder.Append(labelIndent + "UserMemory:");
                stringBuilder.AppendLine(this.UserMemory.ToString(subIndent));
            }
            if (null != this.SecurePassword)
            {
                stringBuilder.Append(labelIndent + "SecurePassword:");
                stringBuilder.AppendLine(this.SecurePassword.ToString(subIndent));
            }
            if (null != this.AccessPassword)
            {
                stringBuilder.Append(labelIndent + "AccessPassword:");
                stringBuilder.AppendLine(this.AccessPassword.ToString(subIndent));
            }
            if (null != this.KillPassword)
            {
                stringBuilder.Append(labelIndent + "KillPassword:");
                stringBuilder.AppendLine(this.KillPassword.ToString(subIndent));
            }
            if (null != this.LockConfig)
            {
                stringBuilder.Append(labelIndent + "LockConfig:");
                stringBuilder.AppendLine(this.LockConfig.ToString(subIndent));
            }
            if (null != this.BlockpermalockConfig)
            {
                stringBuilder.Append(labelIndent + "BlockpermalockConfig:");
                stringBuilder.AppendLine(this.BlockpermalockConfig.ToString(subIndent));
            }
            if (null != this.KillTag)
            {
                stringBuilder.Append(labelIndent + "KillTag:");
                stringBuilder.AppendLine(subIndent + this.KillTag.ToString());
            }
            if (null != this.MonzaR6PFeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaR6PFeatureConfig:");
                stringBuilder.AppendLine(this.MonzaR6PFeatureConfig.ToString(subIndent));
            }
            if (null != this.MonzaS6CFeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaS6CFeatureConfig:");
                stringBuilder.AppendLine(this.MonzaS6CFeatureConfig.ToString(subIndent));
            }
            if (null != this.MonzaR6FeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaR6FeatureConfig:");
                stringBuilder.AppendLine(this.MonzaR6FeatureConfig.ToString(subIndent));
            }
            if (null != this.MonzaR6AFeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaR6AFeatureConfig:");
                stringBuilder.AppendLine(this.MonzaR6AFeatureConfig.ToString(subIndent));
            }
            if (null != this.TidTableSize)
            {
                stringBuilder.Append(labelIndent + "TidTableSize:");
                stringBuilder.AppendLine(subIndent + this.TidTableSize.ToString());
            }
            for(int i = 0; i < this.TidTableEntries.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("TidTableEntries[{0}]:", i));
                stringBuilder.AppendLine(this.TidTableEntries[i].ToString(subIndent));
            }
            for(int i = 0; i < this.OrderedListEntries.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("OrderedListEntries[{0}]:", i));
                stringBuilder.AppendLine(this.OrderedListEntries[i].ToString(subIndent));
            }
            if (null != this.VoidTagConfig)
            {
                stringBuilder.Append(labelIndent + "VoidTagConfig:");
                stringBuilder.AppendLine(this.VoidTagConfig.ToString(subIndent));
            }
            if (null != this.Filters)
            {
                stringBuilder.Append(labelIndent + "Filters:");
                stringBuilder.AppendLine(this.Filters.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._JobId)
            {
                throw new RequiredFieldMissingException("JobId is required in SerializationJob");
            }
            
            if (null == this._JobType)
            {
                throw new RequiredFieldMissingException("JobType is required in SerializationJob");
            }
            
            if (null != this._EpcMemory)
            {
                this._EpcMemory.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._TidMemory)
            {
                this._TidMemory.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._UserMemory)
            {
                this._UserMemory.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SecurePassword)
            {
                this._SecurePassword.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AccessPassword)
            {
                this._AccessPassword.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._KillPassword)
            {
                this._KillPassword.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._LockConfig)
            {
                this._LockConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._BlockpermalockConfig)
            {
                this._BlockpermalockConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaR6PFeatureConfig)
            {
                this._MonzaR6PFeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaS6CFeatureConfig)
            {
                this._MonzaS6CFeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaR6FeatureConfig)
            {
                this._MonzaR6FeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaR6AFeatureConfig)
            {
                this._MonzaR6AFeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._VoidTagConfig)
            {
                this._VoidTagConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Filters)
            {
                this._Filters.EnsureRequiredFieldsArePresent();
            }
            
            foreach (var message in this.TidTableEntries)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
            foreach (var message in this.OrderedListEntries)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// EPC PC word, see Gen2 specification for packing of bits 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"PCWord")]
    public class PCWord
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Data",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireData = null;
        private ByteArray _Data = null;
        /// <summary>
        /// 32 bit PC Word. 
        /// </summary>
        public ByteArray Data
        {
            get { return this._Data; }
            set { this._Data = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"Mask",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireMask = null;
        private ByteArray _Mask = null;
        /// <summary>
        /// DEPRECATED 
        /// </summary>
        public ByteArray Mask
        {
            get { return this._Mask; }
            set { this._Mask = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "PCWord");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Data)
            {
                stringBuilder.Append(labelIndent + "Data:");
                stringBuilder.AppendLine(subIndent + this.Data.ToString());
            }
            if (null != this.Mask)
            {
                stringBuilder.Append(labelIndent + "Mask:");
                stringBuilder.AppendLine(subIndent + this.Mask.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireData)
            {
                this._Data = new ByteArray(this._wireData);
            }
            if (null != this._wireMask)
            {
                this._Mask = new ByteArray(this._wireMask);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._Data)
            {
                this._wireData = this._Data.Bytes;
            }
            if (null != this._Mask)
            {
                this._wireMask = this._Mask.Bytes;
            }
        }
        
    }
    
    /// <summary>
    /// Describes the EPC memory of a tag. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"EPCMemory")]
    public class EPCMemory
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Data",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireData = null;
        private ByteArray _Data = null;
        public ByteArray Data
        {
            get { return this._Data; }
            set { this._Data = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"Mask",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireMask = null;
        private ByteArray _Mask = null;
        /// <summary>
        /// Bit mask permitting read-modify-write of the existing EPC data. For each bit use a '1' to update/write new EPC bit and a '0' to keep the existing EPC bit. The default is to update the entire EPC (96 bits). 
        /// </summary>
        public ByteArray Mask
        {
            get { return this._Mask; }
            set { this._Mask = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"Serialization",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Serialization _Serialization = null;
        public Serialization Serialization
        {
            get { return this._Serialization; }
            set { this._Serialization = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"PcWord",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private PCWord _PcWord = null;
        /// <summary>
        /// Defines the PC bits (hence the inventoried EPC length). 
        /// </summary>
        public PCWord PcWord
        {
            get { return this._PcWord; }
            set { this._PcWord = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "EPCMemory");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Data)
            {
                stringBuilder.Append(labelIndent + "Data:");
                stringBuilder.AppendLine(subIndent + this.Data.ToString());
            }
            if (null != this.Mask)
            {
                stringBuilder.Append(labelIndent + "Mask:");
                stringBuilder.AppendLine(subIndent + this.Mask.ToString());
            }
            if (null != this.Serialization)
            {
                stringBuilder.Append(labelIndent + "Serialization:");
                stringBuilder.AppendLine(this.Serialization.ToString(subIndent));
            }
            if (null != this.PcWord)
            {
                stringBuilder.Append(labelIndent + "PcWord:");
                stringBuilder.AppendLine(this.PcWord.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Serialization)
            {
                this._Serialization.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._PcWord)
            {
                this._PcWord.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireData)
            {
                this._Data = new ByteArray(this._wireData);
            }
            if (null != this._wireMask)
            {
                this._Mask = new ByteArray(this._wireMask);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._Data)
            {
                this._wireData = this._Data.Bytes;
            }
            if (null != this._Mask)
            {
                this._wireMask = this._Mask.Bytes;
            }
        }
        
    }
    
    /// <summary>
    /// Describes the TID memory of a tag. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"TidMemory")]
    public class TidMemory
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"Data",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireData = null;
        private ByteArray _Data = null;
        /// <summary>
        /// The data to write to a tag. The length of this binary string must be a multiple of 16-bits 
        /// </summary>
        public ByteArray Data
        {
            get { return this._Data; }
            set { this._Data = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"WordOffset",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _WordOffset = null;
        /// <summary>
        /// If you don't want to start the data the beginning of memory,specify this offset so that the data and mask start at your specifiedword offset 
        /// </summary>
        public uint? WordOffset
        {
            get { return this._WordOffset; }
            set { this._WordOffset = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "TidMemory");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Data)
            {
                stringBuilder.Append(labelIndent + "Data:");
                stringBuilder.AppendLine(subIndent + this.Data.ToString());
            }
            if (null != this.WordOffset)
            {
                stringBuilder.Append(labelIndent + "WordOffset:");
                stringBuilder.AppendLine(subIndent + this.WordOffset.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._Data)
            {
                throw new RequiredFieldMissingException("Data is required in TidMemory");
            }
            
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireData)
            {
                this._Data = new ByteArray(this._wireData);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._Data)
            {
                this._wireData = this._Data.Bytes;
            }
        }
        
    }
    
    /// <summary>
    /// How serial numbers are determined. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"Serialization")]
    public class Serialization
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"SerializationBits",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _SerializationBits = null;
        /// <summary>
        /// Length of serial number to generate e.g. 38-bits 
        /// </summary>
        public uint? SerializationBits
        {
            get { return this._SerializationBits; }
            set { this._SerializationBits = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"MonzaSelfSerialization",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaSelfSerialization _MonzaSelfSerialization = null;
        /// <summary>
        /// Monza Self-Serialization between 34-bits and 96-bits in length. 
        /// </summary>
        public MonzaSelfSerialization MonzaSelfSerialization
        {
            get { return this._MonzaSelfSerialization; }
            set { this._MonzaSelfSerialization = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"SerialNumberRange",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SerialNumberRange _SerialNumberRange = null;
        /// <summary>
        /// Serial Number Range can be up to 496-bits or full length of EPC(pad left with zeros). 
        /// </summary>
        public SerialNumberRange SerialNumberRange
        {
            get { return this._SerialNumberRange; }
            set { this._SerialNumberRange = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Serialization");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.SerializationBits)
            {
                stringBuilder.Append(labelIndent + "SerializationBits:");
                stringBuilder.AppendLine(subIndent + this.SerializationBits.ToString());
            }
            if (null != this.MonzaSelfSerialization)
            {
                stringBuilder.Append(labelIndent + "MonzaSelfSerialization:");
                stringBuilder.AppendLine(this.MonzaSelfSerialization.ToString(subIndent));
            }
            if (null != this.SerialNumberRange)
            {
                stringBuilder.Append(labelIndent + "SerialNumberRange:");
                stringBuilder.AppendLine(this.SerialNumberRange.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._SerializationBits)
            {
                throw new RequiredFieldMissingException("SerializationBits is required in Serialization");
            }
            
            if (null != this._MonzaSelfSerialization)
            {
                this._MonzaSelfSerialization.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SerialNumberRange)
            {
                this._SerialNumberRange.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Monza Self-Serialization between 34-bits and 96-bits in length. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"MonzaSelfSerialization")]
    public class MonzaSelfSerialization
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"SerializationPrefix",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _SerializationPrefix = null;
        /// <summary>
        /// Up to a 4-bit prefix, always left most MSB of 38-bit serial number, e.g. "10". 
        /// </summary>
        public string SerializationPrefix
        {
            get { return this._SerializationPrefix; }
            set { this._SerializationPrefix = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "MonzaSelfSerialization");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.SerializationPrefix)
            {
                stringBuilder.Append(labelIndent + "SerializationPrefix:");
                stringBuilder.AppendLine(subIndent + this.SerializationPrefix.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Serial number range can be up to 496-bits or full length of EPC (pad left with zeros) 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"SerialNumberRange")]
    public class SerialNumberRange
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"SerialNumberRangeStart",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _SerialNumberRangeStart = null;
        public ulong? SerialNumberRangeStart
        {
            get { return this._SerialNumberRangeStart; }
            set { this._SerialNumberRangeStart = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"SerialNumberRangeEnd",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _SerialNumberRangeEnd = null;
        public ulong? SerialNumberRangeEnd
        {
            get { return this._SerialNumberRangeEnd; }
            set { this._SerialNumberRangeEnd = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"BitOffset",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _BitOffset = null;
        public uint? BitOffset
        {
            get { return this._BitOffset; }
            set { this._BitOffset = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"SerialNumberRangeFormat",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private SerialNumberRangeFormat? _SerialNumberRangeFormat = null;
        public SerialNumberRangeFormat? SerialNumberRangeFormat
        {
            get { return this._SerialNumberRangeFormat; }
            set { this._SerialNumberRangeFormat = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SerialNumberRange");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.SerialNumberRangeStart)
            {
                stringBuilder.Append(labelIndent + "SerialNumberRangeStart:");
                stringBuilder.AppendLine(subIndent + this.SerialNumberRangeStart.ToString());
            }
            if (null != this.SerialNumberRangeEnd)
            {
                stringBuilder.Append(labelIndent + "SerialNumberRangeEnd:");
                stringBuilder.AppendLine(subIndent + this.SerialNumberRangeEnd.ToString());
            }
            if (null != this.BitOffset)
            {
                stringBuilder.Append(labelIndent + "BitOffset:");
                stringBuilder.AppendLine(subIndent + this.BitOffset.ToString());
            }
            if (null != this.SerialNumberRangeFormat)
            {
                stringBuilder.Append(labelIndent + "SerialNumberRangeFormat:");
                stringBuilder.AppendLine(subIndent + this.SerialNumberRangeFormat.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"UserMemory")]
    public class UserMemory
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Data",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireData = null;
        private ByteArray _Data = null;
        /// <summary>
        /// data length must be a multiple of 16-bits, used in Encode and Verify modes 
        /// </summary>
        public ByteArray Data
        {
            get { return this._Data; }
            set { this._Data = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"Mask",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireMask = null;
        private ByteArray _Mask = null;
        /// <summary>
        /// DEPRECATED 
        /// </summary>
        public ByteArray Mask
        {
            get { return this._Mask; }
            set { this._Mask = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"WordOffset",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _WordOffset = null;
        /// <summary>
        /// If you don't want to start the data the beginning of memory, specify this offset so that the data and mask start at your specifiedword offset. 
        /// </summary>
        public uint? WordOffset
        {
            get { return this._WordOffset; }
            set { this._WordOffset = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"WordCountInv",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _WordCountInv = null;
        /// <summary>
        /// Number of words to read, used in Inventory mode,the default of 0 means don't ready anything. 
        /// </summary>
        public uint? WordCountInv
        {
            get { return this._WordCountInv; }
            set { this._WordCountInv = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "UserMemory");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Data)
            {
                stringBuilder.Append(labelIndent + "Data:");
                stringBuilder.AppendLine(subIndent + this.Data.ToString());
            }
            if (null != this.Mask)
            {
                stringBuilder.Append(labelIndent + "Mask:");
                stringBuilder.AppendLine(subIndent + this.Mask.ToString());
            }
            if (null != this.WordOffset)
            {
                stringBuilder.Append(labelIndent + "WordOffset:");
                stringBuilder.AppendLine(subIndent + this.WordOffset.ToString());
            }
            if (null != this.WordCountInv)
            {
                stringBuilder.Append(labelIndent + "WordCountInv:");
                stringBuilder.AppendLine(subIndent + this.WordCountInv.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireData)
            {
                this._Data = new ByteArray(this._wireData);
            }
            if (null != this._wireMask)
            {
                this._Mask = new ByteArray(this._wireMask);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._Data)
            {
                this._wireData = this._Data.Bytes;
            }
            if (null != this._Mask)
            {
                this._wireMask = this._Mask.Bytes;
            }
        }
        
    }
    
    /// <summary>
    /// A password for accessing, securing, or locking a tag. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"Password")]
    public class Password
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"PasswordGenerationMethod",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private PasswordGenerationMethod? _PasswordGenerationMethod = null;
        public PasswordGenerationMethod? PasswordGenerationMethod
        {
            get { return this._PasswordGenerationMethod; }
            set { this._PasswordGenerationMethod = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = true,Name=@"Data",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireData = null;
        private ByteArray _Data = null;
        /// <summary>
        /// A 32-bit password or passcode for Hash with TID as salt. 
        /// </summary>
        public ByteArray Data
        {
            get { return this._Data; }
            set { this._Data = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Password");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.PasswordGenerationMethod)
            {
                stringBuilder.Append(labelIndent + "PasswordGenerationMethod:");
                stringBuilder.AppendLine(subIndent + this.PasswordGenerationMethod.ToString());
            }
            if (null != this.Data)
            {
                stringBuilder.Append(labelIndent + "Data:");
                stringBuilder.AppendLine(subIndent + this.Data.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._Data)
            {
                throw new RequiredFieldMissingException("Data is required in Password");
            }
            
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireData)
            {
                this._Data = new ByteArray(this._wireData);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._Data)
            {
                this._wireData = this._Data.Bytes;
            }
        }
        
    }
    
    /// <summary>
    /// The Gen 2 lock payload. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"LockConfig")]
    public class LockConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"LockConfigPayload",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireLockConfigPayload = null;
        private ByteArray _LockConfigPayload = null;
        /// <summary>
        /// A binary string representation of the 20-bit Gen 2 lock command payload. 
        /// </summary>
        public ByteArray LockConfigPayload
        {
            get { return this._LockConfigPayload; }
            set { this._LockConfigPayload = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "LockConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.LockConfigPayload)
            {
                stringBuilder.Append(labelIndent + "LockConfigPayload:");
                stringBuilder.AppendLine(subIndent + this.LockConfigPayload.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._LockConfigPayload)
            {
                throw new RequiredFieldMissingException("LockConfigPayload is required in LockConfig");
            }
            
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireLockConfigPayload)
            {
                this._LockConfigPayload = new ByteArray(this._wireLockConfigPayload);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._LockConfigPayload)
            {
                this._wireLockConfigPayload = this._LockConfigPayload.Bytes;
            }
        }
        
    }
    
    /// <summary>
    /// Gen 2 BlockPermalock command (BlockPtr, BlockRange) on User Memory Bank - Read/Permalock behavior. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"BlockPermalockConfig")]
    public class BlockPermalockConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"BlockPointer",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _BlockPointer = null;
        /// <summary>
        /// The starting address for BlockMask in units of 16-bit blocks. 
        /// </summary>
        public uint? BlockPointer
        {
            get { return this._BlockPointer; }
            set { this._BlockPointer = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = true,Name=@"BlockMask",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireBlockMask = null;
        private ByteArray _BlockMask = null;
        /// <summary>
        /// The blocks to lock, starting at BlockPointer and ending ((16*(BlockMask array length)) - 1) blocks later. 
        /// </summary>
        public ByteArray BlockMask
        {
            get { return this._BlockMask; }
            set { this._BlockMask = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "BlockPermalockConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.BlockPointer)
            {
                stringBuilder.Append(labelIndent + "BlockPointer:");
                stringBuilder.AppendLine(subIndent + this.BlockPointer.ToString());
            }
            if (null != this.BlockMask)
            {
                stringBuilder.Append(labelIndent + "BlockMask:");
                stringBuilder.AppendLine(subIndent + this.BlockMask.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._BlockPointer)
            {
                throw new RequiredFieldMissingException("BlockPointer is required in BlockPermalockConfig");
            }
            
            if (null == this._BlockMask)
            {
                throw new RequiredFieldMissingException("BlockMask is required in BlockPermalockConfig");
            }
            
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireBlockMask)
            {
                this._BlockMask = new ByteArray(this._wireBlockMask);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._BlockMask)
            {
                this._wireBlockMask = this._BlockMask.Bytes;
            }
        }
        
    }
    
    /// <summary>
    /// Tag specific feature configuration for Monza R6P tags.All three features must be specified.For further details, see:https://support.impinj.com/hc/en-us/articles/204793258-Monza-R6-P-Product-Datasheet
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"MonzaR6PFeatureConfig")]
    public class MonzaR6PFeatureConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"EnableAutoTune",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableAutoTune = null;
        /// <summary>
        /// Enable Auto-tune 
        /// </summary>
        public bool? EnableAutoTune
        {
            get { return this._EnableAutoTune; }
            set { this._EnableAutoTune = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"EnableShortRangeMode",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableShortRangeMode = null;
        /// <summary>
        /// Enable Short-Range mode 
        /// </summary>
        public bool? EnableShortRangeMode
        {
            get { return this._EnableShortRangeMode; }
            set { this._EnableShortRangeMode = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"MemoryMapConfig",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private MonzaR6PMemoryMapConfig? _MemoryMapConfig = null;
        /// <summary>
        /// Configure tag memory map 
        /// </summary>
        public MonzaR6PMemoryMapConfig? MemoryMapConfig
        {
            get { return this._MemoryMapConfig; }
            set { this._MemoryMapConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "MonzaR6PFeatureConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EnableAutoTune)
            {
                stringBuilder.Append(labelIndent + "EnableAutoTune:");
                stringBuilder.AppendLine(subIndent + this.EnableAutoTune.ToString());
            }
            if (null != this.EnableShortRangeMode)
            {
                stringBuilder.Append(labelIndent + "EnableShortRangeMode:");
                stringBuilder.AppendLine(subIndent + this.EnableShortRangeMode.ToString());
            }
            if (null != this.MemoryMapConfig)
            {
                stringBuilder.Append(labelIndent + "MemoryMapConfig:");
                stringBuilder.AppendLine(subIndent + this.MemoryMapConfig.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Tag specific feature configuration for Monza S6C tags.Both features must be specified.For further details, see:https://support.impinj.com/hc/en-us/articles/205744047-Monza-S6-C-Product-Datasheet
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"MonzaS6CFeatureConfig")]
    public class MonzaS6CFeatureConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"EnableAutoTune",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableAutoTune = null;
        /// <summary>
        /// Enable Auto-tune 
        /// </summary>
        public bool? EnableAutoTune
        {
            get { return this._EnableAutoTune; }
            set { this._EnableAutoTune = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"EnableShortRangeMode",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableShortRangeMode = null;
        /// <summary>
        /// Enable Short-Range mode 
        /// </summary>
        public bool? EnableShortRangeMode
        {
            get { return this._EnableShortRangeMode; }
            set { this._EnableShortRangeMode = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "MonzaS6CFeatureConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EnableAutoTune)
            {
                stringBuilder.Append(labelIndent + "EnableAutoTune:");
                stringBuilder.AppendLine(subIndent + this.EnableAutoTune.ToString());
            }
            if (null != this.EnableShortRangeMode)
            {
                stringBuilder.Append(labelIndent + "EnableShortRangeMode:");
                stringBuilder.AppendLine(subIndent + this.EnableShortRangeMode.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Tag specific feature configuration for Monza R6 tags.For further details, see:https://support.impinj.com/hc/en-us/articles/202765328-Monza-R6-Product-Datasheet
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"MonzaR6FeatureConfig")]
    public class MonzaR6FeatureConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"EnableAutoTune",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableAutoTune = null;
        /// <summary>
        /// Enable Auto-tune 
        /// </summary>
        public bool? EnableAutoTune
        {
            get { return this._EnableAutoTune; }
            set { this._EnableAutoTune = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "MonzaR6FeatureConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EnableAutoTune)
            {
                stringBuilder.Append(labelIndent + "EnableAutoTune:");
                stringBuilder.AppendLine(subIndent + this.EnableAutoTune.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Tag specific feature configuration for Monza R6-A tags.For further details, see:https://support.impinj.com/hc/en-us/articles/115001376564-Monza-R6-A-Product-Brief-Datasheet
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"MonzaR6AFeatureConfig")]
    public class MonzaR6AFeatureConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"EnableAutoTune",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableAutoTune = null;
        /// <summary>
        /// Enable Auto-tune 
        /// </summary>
        public bool? EnableAutoTune
        {
            get { return this._EnableAutoTune; }
            set { this._EnableAutoTune = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"EnableShortRangeMode",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableShortRangeMode = null;
        /// <summary>
        /// Enable Short-Range mode 
        /// </summary>
        public bool? EnableShortRangeMode
        {
            get { return this._EnableShortRangeMode; }
            set { this._EnableShortRangeMode = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "MonzaR6AFeatureConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EnableAutoTune)
            {
                stringBuilder.Append(labelIndent + "EnableAutoTune:");
                stringBuilder.AppendLine(subIndent + this.EnableAutoTune.ToString());
            }
            if (null != this.EnableShortRangeMode)
            {
                stringBuilder.Append(labelIndent + "EnableShortRangeMode:");
                stringBuilder.AppendLine(subIndent + this.EnableShortRangeMode.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Describes the operation to perform on a single tag. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"TidTableEntry")]
    public class TidTableEntry
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"Tid",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireTid = null;
        private ByteArray _Tid = null;
        /// <summary>
        /// The TID of the tag for these encoding actions to be performed on. 
        /// </summary>
        public ByteArray Tid
        {
            get { return this._Tid; }
            set { this._Tid = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"EpcMemory",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private EPCMemory _EpcMemory = null;
        public EPCMemory EpcMemory
        {
            get { return this._EpcMemory; }
            set { this._EpcMemory = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"TidMemory",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TidMemory _TidMemory = null;
        /// <summary>
        /// This is the TID memory to write.  In tags such as Monza4QT or UCodeX,there is writable memory in the TID memory bank after the read-onlyunique serialized TID bits.
        /// </summary>
        public TidMemory TidMemory
        {
            get { return this._TidMemory; }
            set { this._TidMemory = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"UserMemory",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private UserMemory _UserMemory = null;
        public UserMemory UserMemory
        {
            get { return this._UserMemory; }
            set { this._UserMemory = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"SecurePassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Password _SecurePassword = null;
        public Password SecurePassword
        {
            get { return this._SecurePassword; }
            set { this._SecurePassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"AccessPassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Password _AccessPassword = null;
        public Password AccessPassword
        {
            get { return this._AccessPassword; }
            set { this._AccessPassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(8,IsRequired = false,Name=@"KillPassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Password _KillPassword = null;
        public Password KillPassword
        {
            get { return this._KillPassword; }
            set { this._KillPassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(9,IsRequired = false,Name=@"LockConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private LockConfig _LockConfig = null;
        public LockConfig LockConfig
        {
            get { return this._LockConfig; }
            set { this._LockConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(10,IsRequired = false,Name=@"BlockpermalockConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private BlockPermalockConfig _BlockpermalockConfig = null;
        /// <summary>
        /// NOT YET SUPPORTED 
        /// </summary>
        public BlockPermalockConfig BlockpermalockConfig
        {
            get { return this._BlockpermalockConfig; }
            set { this._BlockpermalockConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12,IsRequired = false,Name=@"KillTag",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _KillTag = null;
        public bool? KillTag
        {
            get { return this._KillTag; }
            set { this._KillTag = value; }
        }
        
        [global::ProtoBuf.ProtoMember(13,IsRequired = false,Name=@"VoidTag",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _VoidTag = null;
        public bool? VoidTag
        {
            get { return this._VoidTag; }
            set { this._VoidTag = value; }
        }
        
        [global::ProtoBuf.ProtoMember(14,IsRequired = false,Name=@"MonzaR6PFeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaR6PFeatureConfig _MonzaR6PFeatureConfig = null;
        /// <summary>
        /// MonzaR6PFeatureConfig will only be acted upon when encoding a Monza R6P tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaR6PFeatureConfig MonzaR6PFeatureConfig
        {
            get { return this._MonzaR6PFeatureConfig; }
            set { this._MonzaR6PFeatureConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(15,IsRequired = false,Name=@"MonzaS6CFeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaS6CFeatureConfig _MonzaS6CFeatureConfig = null;
        /// <summary>
        /// MonzaS6CFeatureConfig will only be acted upon when encoding a Monza S6C tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaS6CFeatureConfig MonzaS6CFeatureConfig
        {
            get { return this._MonzaS6CFeatureConfig; }
            set { this._MonzaS6CFeatureConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(16,IsRequired = false,Name=@"MonzaR6FeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaR6FeatureConfig _MonzaR6FeatureConfig = null;
        /// <summary>
        /// MonzaR6FeatureConfig will only be acted upon when encoding a Monza R6 tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaR6FeatureConfig MonzaR6FeatureConfig
        {
            get { return this._MonzaR6FeatureConfig; }
            set { this._MonzaR6FeatureConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(17,IsRequired = false,Name=@"MonzaR6AFeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaR6AFeatureConfig _MonzaR6AFeatureConfig = null;
        /// <summary>
        /// MonzaR6AFeatureConfig will only be acted upon when encoding a Monza R6A tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaR6AFeatureConfig MonzaR6AFeatureConfig
        {
            get { return this._MonzaR6AFeatureConfig; }
            set { this._MonzaR6AFeatureConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "TidTableEntry");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Tid)
            {
                stringBuilder.Append(labelIndent + "Tid:");
                stringBuilder.AppendLine(subIndent + this.Tid.ToString());
            }
            if (null != this.EpcMemory)
            {
                stringBuilder.Append(labelIndent + "EpcMemory:");
                stringBuilder.AppendLine(this.EpcMemory.ToString(subIndent));
            }
            if (null != this.TidMemory)
            {
                stringBuilder.Append(labelIndent + "TidMemory:");
                stringBuilder.AppendLine(this.TidMemory.ToString(subIndent));
            }
            if (null != this.UserMemory)
            {
                stringBuilder.Append(labelIndent + "UserMemory:");
                stringBuilder.AppendLine(this.UserMemory.ToString(subIndent));
            }
            if (null != this.SecurePassword)
            {
                stringBuilder.Append(labelIndent + "SecurePassword:");
                stringBuilder.AppendLine(this.SecurePassword.ToString(subIndent));
            }
            if (null != this.AccessPassword)
            {
                stringBuilder.Append(labelIndent + "AccessPassword:");
                stringBuilder.AppendLine(this.AccessPassword.ToString(subIndent));
            }
            if (null != this.KillPassword)
            {
                stringBuilder.Append(labelIndent + "KillPassword:");
                stringBuilder.AppendLine(this.KillPassword.ToString(subIndent));
            }
            if (null != this.LockConfig)
            {
                stringBuilder.Append(labelIndent + "LockConfig:");
                stringBuilder.AppendLine(this.LockConfig.ToString(subIndent));
            }
            if (null != this.BlockpermalockConfig)
            {
                stringBuilder.Append(labelIndent + "BlockpermalockConfig:");
                stringBuilder.AppendLine(this.BlockpermalockConfig.ToString(subIndent));
            }
            if (null != this.KillTag)
            {
                stringBuilder.Append(labelIndent + "KillTag:");
                stringBuilder.AppendLine(subIndent + this.KillTag.ToString());
            }
            if (null != this.VoidTag)
            {
                stringBuilder.Append(labelIndent + "VoidTag:");
                stringBuilder.AppendLine(subIndent + this.VoidTag.ToString());
            }
            if (null != this.MonzaR6PFeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaR6PFeatureConfig:");
                stringBuilder.AppendLine(this.MonzaR6PFeatureConfig.ToString(subIndent));
            }
            if (null != this.MonzaS6CFeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaS6CFeatureConfig:");
                stringBuilder.AppendLine(this.MonzaS6CFeatureConfig.ToString(subIndent));
            }
            if (null != this.MonzaR6FeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaR6FeatureConfig:");
                stringBuilder.AppendLine(this.MonzaR6FeatureConfig.ToString(subIndent));
            }
            if (null != this.MonzaR6AFeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaR6AFeatureConfig:");
                stringBuilder.AppendLine(this.MonzaR6AFeatureConfig.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._Tid)
            {
                throw new RequiredFieldMissingException("Tid is required in TidTableEntry");
            }
            
            if (null != this._EpcMemory)
            {
                this._EpcMemory.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._TidMemory)
            {
                this._TidMemory.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._UserMemory)
            {
                this._UserMemory.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SecurePassword)
            {
                this._SecurePassword.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AccessPassword)
            {
                this._AccessPassword.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._KillPassword)
            {
                this._KillPassword.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._LockConfig)
            {
                this._LockConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._BlockpermalockConfig)
            {
                this._BlockpermalockConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaR6PFeatureConfig)
            {
                this._MonzaR6PFeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaS6CFeatureConfig)
            {
                this._MonzaS6CFeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaR6FeatureConfig)
            {
                this._MonzaR6FeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaR6AFeatureConfig)
            {
                this._MonzaR6AFeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireTid)
            {
                this._Tid = new ByteArray(this._wireTid);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._Tid)
            {
                this._wireTid = this._Tid.Bytes;
            }
        }
        
    }
    
    /// <summary>
    /// A list of tag operations to perform. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"TidTableEntries")]
    public class TidTableEntries
    {
        [global::ProtoBuf.ProtoMember(1,Name=@"TidTableEntries",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<TidTableEntry> _TheTidTableEntries = new global::System.Collections.Generic.List<TidTableEntry>();
        public global::System.Collections.Generic.List<TidTableEntry> TheTidTableEntries
        {
            get { return this._TheTidTableEntries; }
            set { this._TheTidTableEntries = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "TidTableEntries");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            for(int i = 0; i < this.TheTidTableEntries.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("TheTidTableEntries[{0}]:", i));
                stringBuilder.AppendLine(this.TheTidTableEntries[i].ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            foreach (var message in this.TheTidTableEntries)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"OrderedListEntry")]
    public class OrderedListEntry
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"EpcMemory",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private EPCMemory _EpcMemory = null;
        public EPCMemory EpcMemory
        {
            get { return this._EpcMemory; }
            set { this._EpcMemory = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"UserMemory",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private UserMemory _UserMemory = null;
        public UserMemory UserMemory
        {
            get { return this._UserMemory; }
            set { this._UserMemory = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"SecurePassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Password _SecurePassword = null;
        public Password SecurePassword
        {
            get { return this._SecurePassword; }
            set { this._SecurePassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"AccessPassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Password _AccessPassword = null;
        public Password AccessPassword
        {
            get { return this._AccessPassword; }
            set { this._AccessPassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"KillPassword",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Password _KillPassword = null;
        public Password KillPassword
        {
            get { return this._KillPassword; }
            set { this._KillPassword = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"LockConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private LockConfig _LockConfig = null;
        public LockConfig LockConfig
        {
            get { return this._LockConfig; }
            set { this._LockConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"BlockpermalockConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private BlockPermalockConfig _BlockpermalockConfig = null;
        /// <summary>
        /// NOT YET SUPPORTED 
        /// </summary>
        public BlockPermalockConfig BlockpermalockConfig
        {
            get { return this._BlockpermalockConfig; }
            set { this._BlockpermalockConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(8,IsRequired = false,Name=@"TidMemory",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TidMemory _TidMemory = null;
        public TidMemory TidMemory
        {
            get { return this._TidMemory; }
            set { this._TidMemory = value; }
        }
        
        [global::ProtoBuf.ProtoMember(10,IsRequired = false,Name=@"MonzaR6PFeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaR6PFeatureConfig _MonzaR6PFeatureConfig = null;
        /// <summary>
        /// MonzaR6PFeatureConfig will only be acted upon when encoding a Monza R6P tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaR6PFeatureConfig MonzaR6PFeatureConfig
        {
            get { return this._MonzaR6PFeatureConfig; }
            set { this._MonzaR6PFeatureConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(11,IsRequired = false,Name=@"MonzaS6CFeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaS6CFeatureConfig _MonzaS6CFeatureConfig = null;
        /// <summary>
        /// MonzaS6CFeatureConfig will only be acted upon when encoding a Monza S6C tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaS6CFeatureConfig MonzaS6CFeatureConfig
        {
            get { return this._MonzaS6CFeatureConfig; }
            set { this._MonzaS6CFeatureConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12,IsRequired = false,Name=@"MonzaR6FeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaR6FeatureConfig _MonzaR6FeatureConfig = null;
        /// <summary>
        /// MonzaR6FeatureConfig will only be acted upon when encoding a Monza R6 tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaR6FeatureConfig MonzaR6FeatureConfig
        {
            get { return this._MonzaR6FeatureConfig; }
            set { this._MonzaR6FeatureConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(13,IsRequired = false,Name=@"MonzaR6AFeatureConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private MonzaR6AFeatureConfig _MonzaR6AFeatureConfig = null;
        /// <summary>
        /// MonzaR6AFeatureConfig will only be acted upon when encoding a Monza R6A tag.Will be ignored for all other tag types.
        /// </summary>
        public MonzaR6AFeatureConfig MonzaR6AFeatureConfig
        {
            get { return this._MonzaR6AFeatureConfig; }
            set { this._MonzaR6AFeatureConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "OrderedListEntry");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EpcMemory)
            {
                stringBuilder.Append(labelIndent + "EpcMemory:");
                stringBuilder.AppendLine(this.EpcMemory.ToString(subIndent));
            }
            if (null != this.UserMemory)
            {
                stringBuilder.Append(labelIndent + "UserMemory:");
                stringBuilder.AppendLine(this.UserMemory.ToString(subIndent));
            }
            if (null != this.SecurePassword)
            {
                stringBuilder.Append(labelIndent + "SecurePassword:");
                stringBuilder.AppendLine(this.SecurePassword.ToString(subIndent));
            }
            if (null != this.AccessPassword)
            {
                stringBuilder.Append(labelIndent + "AccessPassword:");
                stringBuilder.AppendLine(this.AccessPassword.ToString(subIndent));
            }
            if (null != this.KillPassword)
            {
                stringBuilder.Append(labelIndent + "KillPassword:");
                stringBuilder.AppendLine(this.KillPassword.ToString(subIndent));
            }
            if (null != this.LockConfig)
            {
                stringBuilder.Append(labelIndent + "LockConfig:");
                stringBuilder.AppendLine(this.LockConfig.ToString(subIndent));
            }
            if (null != this.BlockpermalockConfig)
            {
                stringBuilder.Append(labelIndent + "BlockpermalockConfig:");
                stringBuilder.AppendLine(this.BlockpermalockConfig.ToString(subIndent));
            }
            if (null != this.TidMemory)
            {
                stringBuilder.Append(labelIndent + "TidMemory:");
                stringBuilder.AppendLine(this.TidMemory.ToString(subIndent));
            }
            if (null != this.MonzaR6PFeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaR6PFeatureConfig:");
                stringBuilder.AppendLine(this.MonzaR6PFeatureConfig.ToString(subIndent));
            }
            if (null != this.MonzaS6CFeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaS6CFeatureConfig:");
                stringBuilder.AppendLine(this.MonzaS6CFeatureConfig.ToString(subIndent));
            }
            if (null != this.MonzaR6FeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaR6FeatureConfig:");
                stringBuilder.AppendLine(this.MonzaR6FeatureConfig.ToString(subIndent));
            }
            if (null != this.MonzaR6AFeatureConfig)
            {
                stringBuilder.Append(labelIndent + "MonzaR6AFeatureConfig:");
                stringBuilder.AppendLine(this.MonzaR6AFeatureConfig.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._EpcMemory)
            {
                throw new RequiredFieldMissingException("EpcMemory is required in OrderedListEntry");
            }
            
            if (null != this._EpcMemory)
            {
                this._EpcMemory.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._UserMemory)
            {
                this._UserMemory.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SecurePassword)
            {
                this._SecurePassword.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AccessPassword)
            {
                this._AccessPassword.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._KillPassword)
            {
                this._KillPassword.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._LockConfig)
            {
                this._LockConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._BlockpermalockConfig)
            {
                this._BlockpermalockConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._TidMemory)
            {
                this._TidMemory.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaR6PFeatureConfig)
            {
                this._MonzaR6PFeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaS6CFeatureConfig)
            {
                this._MonzaS6CFeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaR6FeatureConfig)
            {
                this._MonzaR6FeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MonzaR6AFeatureConfig)
            {
                this._MonzaR6AFeatureConfig.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"OrderedListEntries")]
    public class OrderedListEntries
    {
        [global::ProtoBuf.ProtoMember(1,Name=@"OrderedListEntries",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<OrderedListEntry> _TheOrderedListEntries = new global::System.Collections.Generic.List<OrderedListEntry>();
        public global::System.Collections.Generic.List<OrderedListEntry> TheOrderedListEntries
        {
            get { return this._TheOrderedListEntries; }
            set { this._TheOrderedListEntries = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "OrderedListEntries");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            for(int i = 0; i < this.TheOrderedListEntries.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("TheOrderedListEntries[{0}]:", i));
                stringBuilder.AppendLine(this.TheOrderedListEntries[i].ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            foreach (var message in this.TheOrderedListEntries)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Configuration of Low Encode Volume Events 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"LowEncodeVolumeEventConfig")]
    public class LowEncodeVolumeEventConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"EnableLowEncodeVolumeEvents",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableLowEncodeVolumeEvents = null;
        public bool? EnableLowEncodeVolumeEvents
        {
            get { return this._EnableLowEncodeVolumeEvents; }
            set { this._EnableLowEncodeVolumeEvents = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"MonzaThreshold",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _MonzaThreshold = null;
        /// <summary>
        /// The threshold at which the device will start sending reports that the remaining Monza encode volume is low. 
        /// </summary>
        public ulong? MonzaThreshold
        {
            get { return this._MonzaThreshold; }
            set { this._MonzaThreshold = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"NonMonzaThreshold",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _NonMonzaThreshold = null;
        /// <summary>
        /// The threshold at which the device will start sending reports that the remaining Non Monza encode volume is low. 
        /// </summary>
        public ulong? NonMonzaThreshold
        {
            get { return this._NonMonzaThreshold; }
            set { this._NonMonzaThreshold = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"MonzaReminderPeriod",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _MonzaReminderPeriod = null;
        /// <summary>
        /// The period at which the the device will send a reminder report that the remaining Monza encode volume is low. The value is the number of attempted encodes since last report. Set to 0 to disable reminders. 
        /// </summary>
        public uint? MonzaReminderPeriod
        {
            get { return this._MonzaReminderPeriod; }
            set { this._MonzaReminderPeriod = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"NonMonzaReminderPeriod",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _NonMonzaReminderPeriod = null;
        /// <summary>
        /// The period at which the the device will send a reminder report that the remaining Non Monza encode volume is low. The value is the number of attempted encodes since last report. Set to 0 to disable reminders. 
        /// </summary>
        public uint? NonMonzaReminderPeriod
        {
            get { return this._NonMonzaReminderPeriod; }
            set { this._NonMonzaReminderPeriod = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "LowEncodeVolumeEventConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EnableLowEncodeVolumeEvents)
            {
                stringBuilder.Append(labelIndent + "EnableLowEncodeVolumeEvents:");
                stringBuilder.AppendLine(subIndent + this.EnableLowEncodeVolumeEvents.ToString());
            }
            if (null != this.MonzaThreshold)
            {
                stringBuilder.Append(labelIndent + "MonzaThreshold:");
                stringBuilder.AppendLine(subIndent + this.MonzaThreshold.ToString());
            }
            if (null != this.NonMonzaThreshold)
            {
                stringBuilder.Append(labelIndent + "NonMonzaThreshold:");
                stringBuilder.AppendLine(subIndent + this.NonMonzaThreshold.ToString());
            }
            if (null != this.MonzaReminderPeriod)
            {
                stringBuilder.Append(labelIndent + "MonzaReminderPeriod:");
                stringBuilder.AppendLine(subIndent + this.MonzaReminderPeriod.ToString());
            }
            if (null != this.NonMonzaReminderPeriod)
            {
                stringBuilder.Append(labelIndent + "NonMonzaReminderPeriod:");
                stringBuilder.AppendLine(subIndent + this.NonMonzaReminderPeriod.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Enable or disable classes of reports. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"DeviceEventConfig")]
    public class DeviceEventConfig
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"EnableOperationEvents",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableOperationEvents = null;
        public bool? EnableOperationEvents
        {
            get { return this._EnableOperationEvents; }
            set { this._EnableOperationEvents = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"EnableGpiEvents",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EnableGpiEvents = null;
        public bool? EnableGpiEvents
        {
            get { return this._EnableGpiEvents; }
            set { this._EnableGpiEvents = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"LowEncodeVolumeEventConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private LowEncodeVolumeEventConfig _LowEncodeVolumeEventConfig = null;
        public LowEncodeVolumeEventConfig LowEncodeVolumeEventConfig
        {
            get { return this._LowEncodeVolumeEventConfig; }
            set { this._LowEncodeVolumeEventConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "DeviceEventConfig");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.EnableOperationEvents)
            {
                stringBuilder.Append(labelIndent + "EnableOperationEvents:");
                stringBuilder.AppendLine(subIndent + this.EnableOperationEvents.ToString());
            }
            if (null != this.EnableGpiEvents)
            {
                stringBuilder.Append(labelIndent + "EnableGpiEvents:");
                stringBuilder.AppendLine(subIndent + this.EnableGpiEvents.ToString());
            }
            if (null != this.LowEncodeVolumeEventConfig)
            {
                stringBuilder.Append(labelIndent + "LowEncodeVolumeEventConfig:");
                stringBuilder.AppendLine(this.LowEncodeVolumeEventConfig.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._LowEncodeVolumeEventConfig)
            {
                this._LowEncodeVolumeEventConfig.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// If enabled in ReportConfig_, this report is sent when the device operation stops. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"OperationSummaryReport")]
    public class OperationSummaryReport
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"Timestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _Timestamp = null;
        public Timestamp Timestamp
        {
            get { return this._Timestamp; }
            set { this._Timestamp = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = true,Name=@"OperationResult",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private OperationSummaryResult? _OperationResult = null;
        public OperationSummaryResult? OperationResult
        {
            get { return this._OperationResult; }
            set { this._OperationResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"OperationResultDetail",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _OperationResultDetail = null;
        public string OperationResultDetail
        {
            get { return this._OperationResultDetail; }
            set { this._OperationResultDetail = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"OperationElapsedTime",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _OperationElapsedTime = null;
        public uint? OperationElapsedTime
        {
            get { return this._OperationElapsedTime; }
            set { this._OperationElapsedTime = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"TagOperationTotalCount",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _TagOperationTotalCount = null;
        public uint? TagOperationTotalCount
        {
            get { return this._TagOperationTotalCount; }
            set { this._TagOperationTotalCount = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"TagOperationPassCount",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _TagOperationPassCount = null;
        public uint? TagOperationPassCount
        {
            get { return this._TagOperationPassCount; }
            set { this._TagOperationPassCount = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"TagOperationFailCount",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _TagOperationFailCount = null;
        public uint? TagOperationFailCount
        {
            get { return this._TagOperationFailCount; }
            set { this._TagOperationFailCount = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "OperationSummaryReport");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Timestamp)
            {
                stringBuilder.Append(labelIndent + "Timestamp:");
                stringBuilder.AppendLine(this.Timestamp.ToString(subIndent));
            }
            if (null != this.OperationResult)
            {
                stringBuilder.Append(labelIndent + "OperationResult:");
                stringBuilder.AppendLine(subIndent + this.OperationResult.ToString());
            }
            if (null != this.OperationResultDetail)
            {
                stringBuilder.Append(labelIndent + "OperationResultDetail:");
                stringBuilder.AppendLine(subIndent + this.OperationResultDetail.ToString());
            }
            if (null != this.OperationElapsedTime)
            {
                stringBuilder.Append(labelIndent + "OperationElapsedTime:");
                stringBuilder.AppendLine(subIndent + this.OperationElapsedTime.ToString());
            }
            if (null != this.TagOperationTotalCount)
            {
                stringBuilder.Append(labelIndent + "TagOperationTotalCount:");
                stringBuilder.AppendLine(subIndent + this.TagOperationTotalCount.ToString());
            }
            if (null != this.TagOperationPassCount)
            {
                stringBuilder.Append(labelIndent + "TagOperationPassCount:");
                stringBuilder.AppendLine(subIndent + this.TagOperationPassCount.ToString());
            }
            if (null != this.TagOperationFailCount)
            {
                stringBuilder.Append(labelIndent + "TagOperationFailCount:");
                stringBuilder.AppendLine(subIndent + this.TagOperationFailCount.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._Timestamp)
            {
                throw new RequiredFieldMissingException("Timestamp is required in OperationSummaryReport");
            }
            
            if (null == this._OperationResult)
            {
                throw new RequiredFieldMissingException("OperationResult is required in OperationSummaryReport");
            }
            
            if (null != this._Timestamp)
            {
                this._Timestamp.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Timestamp, antenna id, frequency, RSSI should be last values on lastattempt. All \*_result bools should be included and set to true when they are enabled in the OperationResponsibility and confirmed as complete. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"TagOperationReport")]
    public class TagOperationReport
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"TagOperationReportType",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private TagOperationReportType? _TagOperationReportType = null;
        public TagOperationReportType? TagOperationReportType
        {
            get { return this._TagOperationReportType; }
            set { this._TagOperationReportType = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"TagOperationResult",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private TagOperationResult? _TagOperationResult = null;
        public TagOperationResult? TagOperationResult
        {
            get { return this._TagOperationResult; }
            set { this._TagOperationResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"TagOperationResultDetail",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _TagOperationResultDetail = null;
        public string TagOperationResultDetail
        {
            get { return this._TagOperationResultDetail; }
            set { this._TagOperationResultDetail = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"Tid",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireTid = null;
        private ByteArray _Tid = null;
        /// <summary>
        /// big endian 16-bit words representing the TID. 
        /// </summary>
        public ByteArray Tid
        {
            get { return this._Tid; }
            set { this._Tid = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"Epc",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireEpc = null;
        private ByteArray _Epc = null;
        /// <summary>
        /// big endian 16-bit words representing the EPC. 
        /// </summary>
        public ByteArray Epc
        {
            get { return this._Epc; }
            set { this._Epc = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"EpcAttempted",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireEpcAttempted = null;
        private ByteArray _EpcAttempted = null;
        public ByteArray EpcAttempted
        {
            get { return this._EpcAttempted; }
            set { this._EpcAttempted = value; }
        }
        
        [global::ProtoBuf.ProtoMember(19,IsRequired = false,Name=@"UserMemoryInv",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireUserMemoryInv = null;
        private ByteArray _UserMemoryInv = null;
        /// <summary>
        /// big endian 16-bit words representing the user memory. Used in Inventory mode, note that 'user_memory_result' is unrelated. 
        /// </summary>
        public ByteArray UserMemoryInv
        {
            get { return this._UserMemoryInv; }
            set { this._UserMemoryInv = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"EpcMemoryResult",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _EpcMemoryResult = null;
        public bool? EpcMemoryResult
        {
            get { return this._EpcMemoryResult; }
            set { this._EpcMemoryResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(8,IsRequired = false,Name=@"AccessPasswordResult",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _AccessPasswordResult = null;
        public bool? AccessPasswordResult
        {
            get { return this._AccessPasswordResult; }
            set { this._AccessPasswordResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(9,IsRequired = false,Name=@"KillPasswordResult",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _KillPasswordResult = null;
        public bool? KillPasswordResult
        {
            get { return this._KillPasswordResult; }
            set { this._KillPasswordResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(10,IsRequired = false,Name=@"LockConfigResult",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _LockConfigResult = null;
        public bool? LockConfigResult
        {
            get { return this._LockConfigResult; }
            set { this._LockConfigResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(11,IsRequired = false,Name=@"UserMemoryResult",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _UserMemoryResult = null;
        public bool? UserMemoryResult
        {
            get { return this._UserMemoryResult; }
            set { this._UserMemoryResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12,IsRequired = false,Name=@"BlockpermalockResult",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _BlockpermalockResult = null;
        public bool? BlockpermalockResult
        {
            get { return this._BlockpermalockResult; }
            set { this._BlockpermalockResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(18,IsRequired = false,Name=@"KillTagResult",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _KillTagResult = null;
        public bool? KillTagResult
        {
            get { return this._KillTagResult; }
            set { this._KillTagResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(20,IsRequired = false,Name=@"PcWordResult",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _PcWordResult = null;
        public bool? PcWordResult
        {
            get { return this._PcWordResult; }
            set { this._PcWordResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(21,IsRequired = false,Name=@"TagSpecificFeatureConfigResult",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _TagSpecificFeatureConfigResult = null;
        public bool? TagSpecificFeatureConfigResult
        {
            get { return this._TagSpecificFeatureConfigResult; }
            set { this._TagSpecificFeatureConfigResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(22,IsRequired = false,Name=@"TidWriteResult",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _TidWriteResult = null;
        public bool? TidWriteResult
        {
            get { return this._TidWriteResult; }
            set { this._TidWriteResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(13,IsRequired = false,Name=@"Timestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _Timestamp = null;
        public Timestamp Timestamp
        {
            get { return this._Timestamp; }
            set { this._Timestamp = value; }
        }
        
        [global::ProtoBuf.ProtoMember(14,IsRequired = false,Name=@"AntennaId",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _AntennaId = null;
        public uint? AntennaId
        {
            get { return this._AntennaId; }
            set { this._AntennaId = value; }
        }
        
        [global::ProtoBuf.ProtoMember(15,IsRequired = false,Name=@"Frequency",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _Frequency = null;
        /// <summary>
        /// Units are kHz 
        /// </summary>
        public uint? Frequency
        {
            get { return this._Frequency; }
            set { this._Frequency = value; }
        }
        
        [global::ProtoBuf.ProtoMember(16,IsRequired = false,Name=@"Rssi",DataFormat = global::ProtoBuf.DataFormat.ZigZag)]
        private int? _Rssi = null;
        /// <summary>
        /// RSSI of the Ack response (EPC) in units of dBm * 100.  
        /// </summary>
        public int? Rssi
        {
            get { return this._Rssi; }
            set { this._Rssi = value; }
        }
        
        [global::ProtoBuf.ProtoMember(17,IsRequired = false,Name=@"JobId",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _JobId = null;
        public uint? JobId
        {
            get { return this._JobId; }
            set { this._JobId = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "TagOperationReport");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.TagOperationReportType)
            {
                stringBuilder.Append(labelIndent + "TagOperationReportType:");
                stringBuilder.AppendLine(subIndent + this.TagOperationReportType.ToString());
            }
            if (null != this.TagOperationResult)
            {
                stringBuilder.Append(labelIndent + "TagOperationResult:");
                stringBuilder.AppendLine(subIndent + this.TagOperationResult.ToString());
            }
            if (null != this.TagOperationResultDetail)
            {
                stringBuilder.Append(labelIndent + "TagOperationResultDetail:");
                stringBuilder.AppendLine(subIndent + this.TagOperationResultDetail.ToString());
            }
            if (null != this.Tid)
            {
                stringBuilder.Append(labelIndent + "Tid:");
                stringBuilder.AppendLine(subIndent + this.Tid.ToString());
            }
            if (null != this.Epc)
            {
                stringBuilder.Append(labelIndent + "Epc:");
                stringBuilder.AppendLine(subIndent + this.Epc.ToString());
            }
            if (null != this.EpcAttempted)
            {
                stringBuilder.Append(labelIndent + "EpcAttempted:");
                stringBuilder.AppendLine(subIndent + this.EpcAttempted.ToString());
            }
            if (null != this.UserMemoryInv)
            {
                stringBuilder.Append(labelIndent + "UserMemoryInv:");
                stringBuilder.AppendLine(subIndent + this.UserMemoryInv.ToString());
            }
            if (null != this.EpcMemoryResult)
            {
                stringBuilder.Append(labelIndent + "EpcMemoryResult:");
                stringBuilder.AppendLine(subIndent + this.EpcMemoryResult.ToString());
            }
            if (null != this.AccessPasswordResult)
            {
                stringBuilder.Append(labelIndent + "AccessPasswordResult:");
                stringBuilder.AppendLine(subIndent + this.AccessPasswordResult.ToString());
            }
            if (null != this.KillPasswordResult)
            {
                stringBuilder.Append(labelIndent + "KillPasswordResult:");
                stringBuilder.AppendLine(subIndent + this.KillPasswordResult.ToString());
            }
            if (null != this.LockConfigResult)
            {
                stringBuilder.Append(labelIndent + "LockConfigResult:");
                stringBuilder.AppendLine(subIndent + this.LockConfigResult.ToString());
            }
            if (null != this.UserMemoryResult)
            {
                stringBuilder.Append(labelIndent + "UserMemoryResult:");
                stringBuilder.AppendLine(subIndent + this.UserMemoryResult.ToString());
            }
            if (null != this.BlockpermalockResult)
            {
                stringBuilder.Append(labelIndent + "BlockpermalockResult:");
                stringBuilder.AppendLine(subIndent + this.BlockpermalockResult.ToString());
            }
            if (null != this.KillTagResult)
            {
                stringBuilder.Append(labelIndent + "KillTagResult:");
                stringBuilder.AppendLine(subIndent + this.KillTagResult.ToString());
            }
            if (null != this.PcWordResult)
            {
                stringBuilder.Append(labelIndent + "PcWordResult:");
                stringBuilder.AppendLine(subIndent + this.PcWordResult.ToString());
            }
            if (null != this.TagSpecificFeatureConfigResult)
            {
                stringBuilder.Append(labelIndent + "TagSpecificFeatureConfigResult:");
                stringBuilder.AppendLine(subIndent + this.TagSpecificFeatureConfigResult.ToString());
            }
            if (null != this.TidWriteResult)
            {
                stringBuilder.Append(labelIndent + "TidWriteResult:");
                stringBuilder.AppendLine(subIndent + this.TidWriteResult.ToString());
            }
            if (null != this.Timestamp)
            {
                stringBuilder.Append(labelIndent + "Timestamp:");
                stringBuilder.AppendLine(this.Timestamp.ToString(subIndent));
            }
            if (null != this.AntennaId)
            {
                stringBuilder.Append(labelIndent + "AntennaId:");
                stringBuilder.AppendLine(subIndent + this.AntennaId.ToString());
            }
            if (null != this.Frequency)
            {
                stringBuilder.Append(labelIndent + "Frequency:");
                stringBuilder.AppendLine(subIndent + this.Frequency.ToString());
            }
            if (null != this.Rssi)
            {
                stringBuilder.Append(labelIndent + "Rssi:");
                stringBuilder.AppendLine(subIndent + this.Rssi.ToString());
            }
            if (null != this.JobId)
            {
                stringBuilder.Append(labelIndent + "JobId:");
                stringBuilder.AppendLine(subIndent + this.JobId.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._TagOperationReportType)
            {
                throw new RequiredFieldMissingException("TagOperationReportType is required in TagOperationReport");
            }
            
            if (null != this._Timestamp)
            {
                this._Timestamp.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireTid)
            {
                this._Tid = new ByteArray(this._wireTid);
            }
            if (null != this._wireEpc)
            {
                this._Epc = new ByteArray(this._wireEpc);
            }
            if (null != this._wireEpcAttempted)
            {
                this._EpcAttempted = new ByteArray(this._wireEpcAttempted);
            }
            if (null != this._wireUserMemoryInv)
            {
                this._UserMemoryInv = new ByteArray(this._wireUserMemoryInv);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._Tid)
            {
                this._wireTid = this._Tid.Bytes;
            }
            if (null != this._Epc)
            {
                this._wireEpc = this._Epc.Bytes;
            }
            if (null != this._EpcAttempted)
            {
                this._wireEpcAttempted = this._EpcAttempted.Bytes;
            }
            if (null != this._UserMemoryInv)
            {
                this._wireUserMemoryInv = this._UserMemoryInv.Bytes;
            }
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"CartonContentsTag")]
    public class CartonContentsTag
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Tid",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireTid = null;
        private ByteArray _Tid = null;
        public ByteArray Tid
        {
            get { return this._Tid; }
            set { this._Tid = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"Epc",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireEpc = null;
        private ByteArray _Epc = null;
        public ByteArray Epc
        {
            get { return this._Epc; }
            set { this._Epc = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"Confidence",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _Confidence = null;
        /// <summary>
        /// Confidence is given as a value between 0 and 100 (inclusive) toindicate whether the given tag is in the carton for which this reportcorresponds 
        /// </summary>
        public uint? Confidence
        {
            get { return this._Confidence; }
            set { this._Confidence = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"Metric1",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _Metric1 = null;
        /// <summary>
        /// A metric to add color to the confidence 
        /// </summary>
        public uint? Metric1
        {
            get { return this._Metric1; }
            set { this._Metric1 = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"Metric2",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _Metric2 = null;
        /// <summary>
        /// A metric to add color to the confidence 
        /// </summary>
        public uint? Metric2
        {
            get { return this._Metric2; }
            set { this._Metric2 = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"Metric3",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _Metric3 = null;
        /// <summary>
        /// A metric to add color to the confidence 
        /// </summary>
        public uint? Metric3
        {
            get { return this._Metric3; }
            set { this._Metric3 = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "CartonContentsTag");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Tid)
            {
                stringBuilder.Append(labelIndent + "Tid:");
                stringBuilder.AppendLine(subIndent + this.Tid.ToString());
            }
            if (null != this.Epc)
            {
                stringBuilder.Append(labelIndent + "Epc:");
                stringBuilder.AppendLine(subIndent + this.Epc.ToString());
            }
            if (null != this.Confidence)
            {
                stringBuilder.Append(labelIndent + "Confidence:");
                stringBuilder.AppendLine(subIndent + this.Confidence.ToString());
            }
            if (null != this.Metric1)
            {
                stringBuilder.Append(labelIndent + "Metric1:");
                stringBuilder.AppendLine(subIndent + this.Metric1.ToString());
            }
            if (null != this.Metric2)
            {
                stringBuilder.Append(labelIndent + "Metric2:");
                stringBuilder.AppendLine(subIndent + this.Metric2.ToString());
            }
            if (null != this.Metric3)
            {
                stringBuilder.Append(labelIndent + "Metric3:");
                stringBuilder.AppendLine(subIndent + this.Metric3.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireTid)
            {
                this._Tid = new ByteArray(this._wireTid);
            }
            if (null != this._wireEpc)
            {
                this._Epc = new ByteArray(this._wireEpc);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._Tid)
            {
                this._wireTid = this._Tid.Bytes;
            }
            if (null != this._Epc)
            {
                this._wireEpc = this._Epc.Bytes;
            }
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"CartonContentsReport")]
    public class CartonContentsReport
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"CartonContentsResult",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private CartonContentsResult? _CartonContentsResult = null;
        public CartonContentsResult? CartonContentsResult
        {
            get { return this._CartonContentsResult; }
            set { this._CartonContentsResult = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"EnterTimestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _EnterTimestamp = null;
        /// <summary>
        /// Timestamp of the start trigger 
        /// </summary>
        public Timestamp EnterTimestamp
        {
            get { return this._EnterTimestamp; }
            set { this._EnterTimestamp = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"ExitTimestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _ExitTimestamp = null;
        /// <summary>
        /// Timestamp of the stop trigger 
        /// </summary>
        public Timestamp ExitTimestamp
        {
            get { return this._ExitTimestamp; }
            set { this._ExitTimestamp = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"CartonSize",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _CartonSize = null;
        /// <summary>
        /// Detected carton size in millimeters 
        /// </summary>
        public uint? CartonSize
        {
            get { return this._CartonSize; }
            set { this._CartonSize = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,Name=@"CartonContentsTag",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<CartonContentsTag> _CartonContentsTag = new global::System.Collections.Generic.List<CartonContentsTag>();
        /// <summary>
        /// A list of all tags seen for the duration the carton was betweenthe entry and exit sensors. 
        /// </summary>
        public global::System.Collections.Generic.List<CartonContentsTag> CartonContentsTag
        {
            get { return this._CartonContentsTag; }
            set { this._CartonContentsTag = value; }
        }
        
        [global::ProtoBuf.ProtoMember(8,Name=@"CartonContentsError",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<CartonContentsError> _CartonContentsError = new global::System.Collections.Generic.List<CartonContentsError>();
        public global::System.Collections.Generic.List<CartonContentsError> CartonContentsError
        {
            get { return this._CartonContentsError; }
            set { this._CartonContentsError = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"StartTimestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _StartTimestamp = null;
        /// <summary>
        /// DEPRECATED 
        /// </summary>
        public Timestamp StartTimestamp
        {
            get { return this._StartTimestamp; }
            set { this._StartTimestamp = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"StopTimestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _StopTimestamp = null;
        /// <summary>
        /// DEPRECATED 
        /// </summary>
        public Timestamp StopTimestamp
        {
            get { return this._StopTimestamp; }
            set { this._StopTimestamp = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "CartonContentsReport");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.CartonContentsResult)
            {
                stringBuilder.Append(labelIndent + "CartonContentsResult:");
                stringBuilder.AppendLine(subIndent + this.CartonContentsResult.ToString());
            }
            if (null != this.EnterTimestamp)
            {
                stringBuilder.Append(labelIndent + "EnterTimestamp:");
                stringBuilder.AppendLine(this.EnterTimestamp.ToString(subIndent));
            }
            if (null != this.ExitTimestamp)
            {
                stringBuilder.Append(labelIndent + "ExitTimestamp:");
                stringBuilder.AppendLine(this.ExitTimestamp.ToString(subIndent));
            }
            if (null != this.CartonSize)
            {
                stringBuilder.Append(labelIndent + "CartonSize:");
                stringBuilder.AppendLine(subIndent + this.CartonSize.ToString());
            }
            for(int i = 0; i < this.CartonContentsTag.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("CartonContentsTag[{0}]:", i));
                stringBuilder.AppendLine(this.CartonContentsTag[i].ToString(subIndent));
            }
            for(int i = 0; i < this.CartonContentsError.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("CartonContentsError[{0}]:", i));
                stringBuilder.AppendLine(this.CartonContentsError[i].ToString(subIndent));
            }
            if (null != this.StartTimestamp)
            {
                stringBuilder.Append(labelIndent + "StartTimestamp:");
                stringBuilder.AppendLine(this.StartTimestamp.ToString(subIndent));
            }
            if (null != this.StopTimestamp)
            {
                stringBuilder.Append(labelIndent + "StopTimestamp:");
                stringBuilder.AppendLine(this.StopTimestamp.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._EnterTimestamp)
            {
                this._EnterTimestamp.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._ExitTimestamp)
            {
                this._ExitTimestamp.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._StartTimestamp)
            {
                this._StartTimestamp.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._StopTimestamp)
            {
                this._StopTimestamp.EnsureRequiredFieldsArePresent();
            }
            
            foreach (var message in this.CartonContentsTag)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
            foreach (var message in this.CartonContentsError)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"CartonContentsError")]
    public class CartonContentsError
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"ErrorType",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private CartonContentsErrorType? _ErrorType = null;
        public CartonContentsErrorType? ErrorType
        {
            get { return this._ErrorType; }
            set { this._ErrorType = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"ExtraTimestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _ExtraTimestamp = null;
        public Timestamp ExtraTimestamp
        {
            get { return this._ExtraTimestamp; }
            set { this._ExtraTimestamp = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"MinTimestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _MinTimestamp = null;
        public Timestamp MinTimestamp
        {
            get { return this._MinTimestamp; }
            set { this._MinTimestamp = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"MaxTimestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _MaxTimestamp = null;
        public Timestamp MaxTimestamp
        {
            get { return this._MaxTimestamp; }
            set { this._MaxTimestamp = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "CartonContentsError");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.ErrorType)
            {
                stringBuilder.Append(labelIndent + "ErrorType:");
                stringBuilder.AppendLine(subIndent + this.ErrorType.ToString());
            }
            if (null != this.ExtraTimestamp)
            {
                stringBuilder.Append(labelIndent + "ExtraTimestamp:");
                stringBuilder.AppendLine(this.ExtraTimestamp.ToString(subIndent));
            }
            if (null != this.MinTimestamp)
            {
                stringBuilder.Append(labelIndent + "MinTimestamp:");
                stringBuilder.AppendLine(this.MinTimestamp.ToString(subIndent));
            }
            if (null != this.MaxTimestamp)
            {
                stringBuilder.Append(labelIndent + "MaxTimestamp:");
                stringBuilder.AppendLine(this.MaxTimestamp.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._ExtraTimestamp)
            {
                this._ExtraTimestamp.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MinTimestamp)
            {
                this._MinTimestamp.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._MaxTimestamp)
            {
                this._MaxTimestamp.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"TagModeMetrics")]
    public class TagModeMetrics
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"TotalCount",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _TotalCount = null;
        public ulong? TotalCount
        {
            get { return this._TotalCount; }
            set { this._TotalCount = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"PassCount",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _PassCount = null;
        public ulong? PassCount
        {
            get { return this._PassCount; }
            set { this._PassCount = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"FailCount",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _FailCount = null;
        public ulong? FailCount
        {
            get { return this._FailCount; }
            set { this._FailCount = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"VoidCount",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _VoidCount = null;
        public ulong? VoidCount
        {
            get { return this._VoidCount; }
            set { this._VoidCount = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "TagModeMetrics");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.TotalCount)
            {
                stringBuilder.Append(labelIndent + "TotalCount:");
                stringBuilder.AppendLine(subIndent + this.TotalCount.ToString());
            }
            if (null != this.PassCount)
            {
                stringBuilder.Append(labelIndent + "PassCount:");
                stringBuilder.AppendLine(subIndent + this.PassCount.ToString());
            }
            if (null != this.FailCount)
            {
                stringBuilder.Append(labelIndent + "FailCount:");
                stringBuilder.AppendLine(subIndent + this.FailCount.ToString());
            }
            if (null != this.VoidCount)
            {
                stringBuilder.Append(labelIndent + "VoidCount:");
                stringBuilder.AppendLine(subIndent + this.VoidCount.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"TagMetrics")]
    public class TagMetrics
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"TagChip",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireTagChip = null;
        private ByteArray _TagChip = null;
        public ByteArray TagChip
        {
            get { return this._TagChip; }
            set { this._TagChip = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"VerifyBasicMetrics",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TagModeMetrics _VerifyBasicMetrics = null;
        public TagModeMetrics VerifyBasicMetrics
        {
            get { return this._VerifyBasicMetrics; }
            set { this._VerifyBasicMetrics = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"VerifyDataMetrics",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TagModeMetrics _VerifyDataMetrics = null;
        public TagModeMetrics VerifyDataMetrics
        {
            get { return this._VerifyDataMetrics; }
            set { this._VerifyDataMetrics = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"EncodeMetrics",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TagModeMetrics _EncodeMetrics = null;
        public TagModeMetrics EncodeMetrics
        {
            get { return this._EncodeMetrics; }
            set { this._EncodeMetrics = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"InventoryMetrics",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TagModeMetrics _InventoryMetrics = null;
        public TagModeMetrics InventoryMetrics
        {
            get { return this._InventoryMetrics; }
            set { this._InventoryMetrics = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"CartonContentsMetrics",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TagModeMetrics _CartonContentsMetrics = null;
        public TagModeMetrics CartonContentsMetrics
        {
            get { return this._CartonContentsMetrics; }
            set { this._CartonContentsMetrics = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "TagMetrics");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.TagChip)
            {
                stringBuilder.Append(labelIndent + "TagChip:");
                stringBuilder.AppendLine(subIndent + this.TagChip.ToString());
            }
            if (null != this.VerifyBasicMetrics)
            {
                stringBuilder.Append(labelIndent + "VerifyBasicMetrics:");
                stringBuilder.AppendLine(this.VerifyBasicMetrics.ToString(subIndent));
            }
            if (null != this.VerifyDataMetrics)
            {
                stringBuilder.Append(labelIndent + "VerifyDataMetrics:");
                stringBuilder.AppendLine(this.VerifyDataMetrics.ToString(subIndent));
            }
            if (null != this.EncodeMetrics)
            {
                stringBuilder.Append(labelIndent + "EncodeMetrics:");
                stringBuilder.AppendLine(this.EncodeMetrics.ToString(subIndent));
            }
            if (null != this.InventoryMetrics)
            {
                stringBuilder.Append(labelIndent + "InventoryMetrics:");
                stringBuilder.AppendLine(this.InventoryMetrics.ToString(subIndent));
            }
            if (null != this.CartonContentsMetrics)
            {
                stringBuilder.Append(labelIndent + "CartonContentsMetrics:");
                stringBuilder.AppendLine(this.CartonContentsMetrics.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._VerifyBasicMetrics)
            {
                this._VerifyBasicMetrics.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._VerifyDataMetrics)
            {
                this._VerifyDataMetrics.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._EncodeMetrics)
            {
                this._EncodeMetrics.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._InventoryMetrics)
            {
                this._InventoryMetrics.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._CartonContentsMetrics)
            {
                this._CartonContentsMetrics.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireTagChip)
            {
                this._TagChip = new ByteArray(this._wireTagChip);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._TagChip)
            {
                this._wireTagChip = this._TagChip.Bytes;
            }
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"InterDeviceCommunicationMetrics")]
    public class InterDeviceCommunicationMetrics
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"SerialNumber",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _SerialNumber = null;
        public string SerialNumber
        {
            get { return this._SerialNumber; }
            set { this._SerialNumber = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"ReceivedMessageCount",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _ReceivedMessageCount = null;
        public ulong? ReceivedMessageCount
        {
            get { return this._ReceivedMessageCount; }
            set { this._ReceivedMessageCount = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "InterDeviceCommunicationMetrics");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.SerialNumber)
            {
                stringBuilder.Append(labelIndent + "SerialNumber:");
                stringBuilder.AppendLine(subIndent + this.SerialNumber.ToString());
            }
            if (null != this.ReceivedMessageCount)
            {
                stringBuilder.Append(labelIndent + "ReceivedMessageCount:");
                stringBuilder.AppendLine(subIndent + this.ReceivedMessageCount.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"OperationMetrics")]
    public class OperationMetrics
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"RemainingNonMonzaEncodes",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _RemainingNonMonzaEncodes = null;
        public ulong? RemainingNonMonzaEncodes
        {
            get { return this._RemainingNonMonzaEncodes; }
            set { this._RemainingNonMonzaEncodes = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,Name=@"TagMetrics",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<TagMetrics> _TagMetrics = new global::System.Collections.Generic.List<TagMetrics>();
        public global::System.Collections.Generic.List<TagMetrics> TagMetrics
        {
            get { return this._TagMetrics; }
            set { this._TagMetrics = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,Name=@"InterDeviceCommunicationMetrics",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<InterDeviceCommunicationMetrics> _InterDeviceCommunicationMetrics = new global::System.Collections.Generic.List<InterDeviceCommunicationMetrics>();
        public global::System.Collections.Generic.List<InterDeviceCommunicationMetrics> InterDeviceCommunicationMetrics
        {
            get { return this._InterDeviceCommunicationMetrics; }
            set { this._InterDeviceCommunicationMetrics = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"RemainingMonzaEncodes",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _RemainingMonzaEncodes = null;
        public ulong? RemainingMonzaEncodes
        {
            get { return this._RemainingMonzaEncodes; }
            set { this._RemainingMonzaEncodes = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "OperationMetrics");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.RemainingNonMonzaEncodes)
            {
                stringBuilder.Append(labelIndent + "RemainingNonMonzaEncodes:");
                stringBuilder.AppendLine(subIndent + this.RemainingNonMonzaEncodes.ToString());
            }
            for(int i = 0; i < this.TagMetrics.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("TagMetrics[{0}]:", i));
                stringBuilder.AppendLine(this.TagMetrics[i].ToString(subIndent));
            }
            for(int i = 0; i < this.InterDeviceCommunicationMetrics.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("InterDeviceCommunicationMetrics[{0}]:", i));
                stringBuilder.AppendLine(this.InterDeviceCommunicationMetrics[i].ToString(subIndent));
            }
            if (null != this.RemainingMonzaEncodes)
            {
                stringBuilder.Append(labelIndent + "RemainingMonzaEncodes:");
                stringBuilder.AppendLine(subIndent + this.RemainingMonzaEncodes.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            foreach (var message in this.TagMetrics)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
            foreach (var message in this.InterDeviceCommunicationMetrics)
            {
                message.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"OperationDataDetails")]
    public class OperationDataDetails
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"SerialNumber",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _SerialNumber = null;
        public string SerialNumber
        {
            get { return this._SerialNumber; }
            set { this._SerialNumber = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"FirmwareVersion",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _FirmwareVersion = null;
        public string FirmwareVersion
        {
            get { return this._FirmwareVersion; }
            set { this._FirmwareVersion = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"Region",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _Region = null;
        public string Region
        {
            get { return this._Region; }
            set { this._Region = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,Name=@"InstalledFeatures",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<string> _InstalledFeatures = new global::System.Collections.Generic.List<string>();
        public global::System.Collections.Generic.List<string> InstalledFeatures
        {
            get { return this._InstalledFeatures; }
            set { this._InstalledFeatures = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"NonMonzaVolumeKeyId",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _NonMonzaVolumeKeyId = null;
        public uint? NonMonzaVolumeKeyId
        {
            get { return this._NonMonzaVolumeKeyId; }
            set { this._NonMonzaVolumeKeyId = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"OperationMetrics",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private OperationMetrics _OperationMetrics = null;
        public OperationMetrics OperationMetrics
        {
            get { return this._OperationMetrics; }
            set { this._OperationMetrics = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"MonzaVolumeKeyId",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _MonzaVolumeKeyId = null;
        public uint? MonzaVolumeKeyId
        {
            get { return this._MonzaVolumeKeyId; }
            set { this._MonzaVolumeKeyId = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "OperationDataDetails");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.SerialNumber)
            {
                stringBuilder.Append(labelIndent + "SerialNumber:");
                stringBuilder.AppendLine(subIndent + this.SerialNumber.ToString());
            }
            if (null != this.FirmwareVersion)
            {
                stringBuilder.Append(labelIndent + "FirmwareVersion:");
                stringBuilder.AppendLine(subIndent + this.FirmwareVersion.ToString());
            }
            if (null != this.Region)
            {
                stringBuilder.Append(labelIndent + "Region:");
                stringBuilder.AppendLine(subIndent + this.Region.ToString());
            }
            for(int i = 0; i < this.InstalledFeatures.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("InstalledFeatures[{0}]:", i));
                stringBuilder.AppendLine(subIndent + this.InstalledFeatures[i].ToString());
            }
            if (null != this.NonMonzaVolumeKeyId)
            {
                stringBuilder.Append(labelIndent + "NonMonzaVolumeKeyId:");
                stringBuilder.AppendLine(subIndent + this.NonMonzaVolumeKeyId.ToString());
            }
            if (null != this.OperationMetrics)
            {
                stringBuilder.Append(labelIndent + "OperationMetrics:");
                stringBuilder.AppendLine(this.OperationMetrics.ToString(subIndent));
            }
            if (null != this.MonzaVolumeKeyId)
            {
                stringBuilder.Append(labelIndent + "MonzaVolumeKeyId:");
                stringBuilder.AppendLine(subIndent + this.MonzaVolumeKeyId.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._OperationMetrics)
            {
                this._OperationMetrics.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"OperationData")]
    public class OperationData
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"OperationDetails",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private OperationDataDetails _OperationDetails = null;
        public OperationDataDetails OperationDetails
        {
            get { return this._OperationDetails; }
            set { this._OperationDetails = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,Name=@"Data",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private global::System.Collections.Generic.List<string> _Data = new global::System.Collections.Generic.List<string>();
        public global::System.Collections.Generic.List<string> Data
        {
            get { return this._Data; }
            set { this._Data = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "OperationData");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.OperationDetails)
            {
                stringBuilder.Append(labelIndent + "OperationDetails:");
                stringBuilder.AppendLine(this.OperationDetails.ToString(subIndent));
            }
            for(int i = 0; i < this.Data.Count; i++)
            {
                stringBuilder.Append(labelIndent + String.Format("Data[{0}]:", i));
                stringBuilder.AppendLine(subIndent + this.Data[i].ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._OperationDetails)
            {
                this._OperationDetails.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"LicenseKey")]
    public class LicenseKey
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"LicenseKeyPayload",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private byte[] _wireLicenseKeyPayload = null;
        private ByteArray _LicenseKeyPayload = null;
        public ByteArray LicenseKeyPayload
        {
            get { return this._LicenseKeyPayload; }
            set { this._LicenseKeyPayload = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "LicenseKey");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.LicenseKeyPayload)
            {
                stringBuilder.Append(labelIndent + "LicenseKeyPayload:");
                stringBuilder.AppendLine(subIndent + this.LicenseKeyPayload.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._LicenseKeyPayload)
            {
                throw new RequiredFieldMissingException("LicenseKeyPayload is required in LicenseKey");
            }
            
        }
        [global::ProtoBuf.ProtoAfterDeserialization()]
        internal void ProtoAfterDeserialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            if (null != this._wireLicenseKeyPayload)
            {
                this._LicenseKeyPayload = new ByteArray(this._wireLicenseKeyPayload);
            }
        }

        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
            if (null != this._LicenseKeyPayload)
            {
                this._wireLicenseKeyPayload = this._LicenseKeyPayload.Bytes;
            }
        }
        
    }
    
    /// <summary>
    /// **NOT YET SUPPORTED** A change in the device operating state driven by completion of the tag operation or a start or stop driven by GPI. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"OperationEvent")]
    public class OperationEvent
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"Timestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _Timestamp = null;
        public Timestamp Timestamp
        {
            get { return this._Timestamp; }
            set { this._Timestamp = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = true,Name=@"OperationEventType",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private OperationEventType? _OperationEventType = null;
        public OperationEventType? OperationEventType
        {
            get { return this._OperationEventType; }
            set { this._OperationEventType = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"OperationTriggerType",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private OperationTriggerType? _OperationTriggerType = null;
        public OperationTriggerType? OperationTriggerType
        {
            get { return this._OperationTriggerType; }
            set { this._OperationTriggerType = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "OperationEvent");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Timestamp)
            {
                stringBuilder.Append(labelIndent + "Timestamp:");
                stringBuilder.AppendLine(this.Timestamp.ToString(subIndent));
            }
            if (null != this.OperationEventType)
            {
                stringBuilder.Append(labelIndent + "OperationEventType:");
                stringBuilder.AppendLine(subIndent + this.OperationEventType.ToString());
            }
            if (null != this.OperationTriggerType)
            {
                stringBuilder.Append(labelIndent + "OperationTriggerType:");
                stringBuilder.AppendLine(subIndent + this.OperationTriggerType.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._Timestamp)
            {
                throw new RequiredFieldMissingException("Timestamp is required in OperationEvent");
            }
            
            if (null == this._OperationEventType)
            {
                throw new RequiredFieldMissingException("OperationEventType is required in OperationEvent");
            }
            
            if (null != this._Timestamp)
            {
                this._Timestamp.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// **NOT YET SUPPORTED** 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"DeviceExceptionEvent")]
    public class DeviceExceptionEvent
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"Timestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _Timestamp = null;
        public Timestamp Timestamp
        {
            get { return this._Timestamp; }
            set { this._Timestamp = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = true,Name=@"DeviceExceptionEventType",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private DeviceExceptionEventType? _DeviceExceptionEventType = null;
        public DeviceExceptionEventType? DeviceExceptionEventType
        {
            get { return this._DeviceExceptionEventType; }
            set { this._DeviceExceptionEventType = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = true,Name=@"ExceptionDetail",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private string _ExceptionDetail = null;
        public string ExceptionDetail
        {
            get { return this._ExceptionDetail; }
            set { this._ExceptionDetail = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "DeviceExceptionEvent");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Timestamp)
            {
                stringBuilder.Append(labelIndent + "Timestamp:");
                stringBuilder.AppendLine(this.Timestamp.ToString(subIndent));
            }
            if (null != this.DeviceExceptionEventType)
            {
                stringBuilder.Append(labelIndent + "DeviceExceptionEventType:");
                stringBuilder.AppendLine(subIndent + this.DeviceExceptionEventType.ToString());
            }
            if (null != this.ExceptionDetail)
            {
                stringBuilder.Append(labelIndent + "ExceptionDetail:");
                stringBuilder.AppendLine(subIndent + this.ExceptionDetail.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._Timestamp)
            {
                throw new RequiredFieldMissingException("Timestamp is required in DeviceExceptionEvent");
            }
            
            if (null == this._DeviceExceptionEventType)
            {
                throw new RequiredFieldMissingException("DeviceExceptionEventType is required in DeviceExceptionEvent");
            }
            
            if (null == this._ExceptionDetail)
            {
                throw new RequiredFieldMissingException("ExceptionDetail is required in DeviceExceptionEvent");
            }
            
            if (null != this._Timestamp)
            {
                this._Timestamp.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Generated when any of the gpi inputs change 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GpiEvent")]
    public class GpiEvent
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"Timestamp",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Timestamp _Timestamp = null;
        public Timestamp Timestamp
        {
            get { return this._Timestamp; }
            set { this._Timestamp = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = true,Name=@"GpiState",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _GpiState = null;
        public uint? GpiState
        {
            get { return this._GpiState; }
            set { this._GpiState = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GpiEvent");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Timestamp)
            {
                stringBuilder.Append(labelIndent + "Timestamp:");
                stringBuilder.AppendLine(this.Timestamp.ToString(subIndent));
            }
            if (null != this.GpiState)
            {
                stringBuilder.Append(labelIndent + "GpiState:");
                stringBuilder.AppendLine(subIndent + this.GpiState.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._Timestamp)
            {
                throw new RequiredFieldMissingException("Timestamp is required in GpiEvent");
            }
            
            if (null == this._GpiState)
            {
                throw new RequiredFieldMissingException("GpiState is required in GpiEvent");
            }
            
            if (null != this._Timestamp)
            {
                this._Timestamp.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Generated when the remaining number of encodes falls below a threshold 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"LowEncodeVolumeEvent")]
    public class LowEncodeVolumeEvent
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"LowEncodeVolumeEventType",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private LowEncodeVolumeEventType? _LowEncodeVolumeEventType = null;
        public LowEncodeVolumeEventType? LowEncodeVolumeEventType
        {
            get { return this._LowEncodeVolumeEventType; }
            set { this._LowEncodeVolumeEventType = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"RemainingMonzaEncodes",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _RemainingMonzaEncodes = null;
        public ulong? RemainingMonzaEncodes
        {
            get { return this._RemainingMonzaEncodes; }
            set { this._RemainingMonzaEncodes = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"RemainingNonMonzaEncodes",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private ulong? _RemainingNonMonzaEncodes = null;
        public ulong? RemainingNonMonzaEncodes
        {
            get { return this._RemainingNonMonzaEncodes; }
            set { this._RemainingNonMonzaEncodes = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "LowEncodeVolumeEvent");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.LowEncodeVolumeEventType)
            {
                stringBuilder.Append(labelIndent + "LowEncodeVolumeEventType:");
                stringBuilder.AppendLine(subIndent + this.LowEncodeVolumeEventType.ToString());
            }
            if (null != this.RemainingMonzaEncodes)
            {
                stringBuilder.Append(labelIndent + "RemainingMonzaEncodes:");
                stringBuilder.AppendLine(subIndent + this.RemainingMonzaEncodes.ToString());
            }
            if (null != this.RemainingNonMonzaEncodes)
            {
                stringBuilder.Append(labelIndent + "RemainingNonMonzaEncodes:");
                stringBuilder.AppendLine(subIndent + this.RemainingNonMonzaEncodes.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"DeviceEventReport")]
    public class DeviceEventReport
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"OperationEvent",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private OperationEvent _OperationEvent = null;
        public OperationEvent OperationEvent
        {
            get { return this._OperationEvent; }
            set { this._OperationEvent = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"GpiEvent",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GpiEvent _GpiEvent = null;
        public GpiEvent GpiEvent
        {
            get { return this._GpiEvent; }
            set { this._GpiEvent = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"DeviceExceptionEvent",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private DeviceExceptionEvent _DeviceExceptionEvent = null;
        public DeviceExceptionEvent DeviceExceptionEvent
        {
            get { return this._DeviceExceptionEvent; }
            set { this._DeviceExceptionEvent = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"LowEncodeVolumeEvent",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private LowEncodeVolumeEvent _LowEncodeVolumeEvent = null;
        public LowEncodeVolumeEvent LowEncodeVolumeEvent
        {
            get { return this._LowEncodeVolumeEvent; }
            set { this._LowEncodeVolumeEvent = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "DeviceEventReport");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.OperationEvent)
            {
                stringBuilder.Append(labelIndent + "OperationEvent:");
                stringBuilder.AppendLine(this.OperationEvent.ToString(subIndent));
            }
            if (null != this.GpiEvent)
            {
                stringBuilder.Append(labelIndent + "GpiEvent:");
                stringBuilder.AppendLine(this.GpiEvent.ToString(subIndent));
            }
            if (null != this.DeviceExceptionEvent)
            {
                stringBuilder.Append(labelIndent + "DeviceExceptionEvent:");
                stringBuilder.AppendLine(this.DeviceExceptionEvent.ToString(subIndent));
            }
            if (null != this.LowEncodeVolumeEvent)
            {
                stringBuilder.Append(labelIndent + "LowEncodeVolumeEvent:");
                stringBuilder.AppendLine(this.LowEncodeVolumeEvent.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._OperationEvent)
            {
                this._OperationEvent.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GpiEvent)
            {
                this._GpiEvent.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._DeviceExceptionEvent)
            {
                this._DeviceExceptionEvent.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._LowEncodeVolumeEvent)
            {
                this._LowEncodeVolumeEvent.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Request the antenna configuration. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GetAntennaConfigCommand")]
    public class GetAntennaConfigCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reserved",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Reserved = null;
        public bool? Reserved
        {
            get { return this._Reserved; }
            set { this._Reserved = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GetAntennaConfigCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reserved)
            {
                stringBuilder.Append(labelIndent + "Reserved:");
                stringBuilder.AppendLine(subIndent + this.Reserved.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Set the configuration for one or more antennas. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"SetAntennaConfigCommand")]
    public class SetAntennaConfigCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"AntennasConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private AntennasConfig _AntennasConfig = null;
        public AntennasConfig AntennasConfig
        {
            get { return this._AntennasConfig; }
            set { this._AntennasConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SetAntennaConfigCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.AntennasConfig)
            {
                stringBuilder.Append(labelIndent + "AntennasConfig:");
                stringBuilder.AppendLine(this.AntennasConfig.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._AntennasConfig)
            {
                this._AntennasConfig.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Start the encode or inventory operation. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"StartCommand")]
    public class StartCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reserved",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Reserved = null;
        public bool? Reserved
        {
            get { return this._Reserved; }
            set { this._Reserved = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "StartCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reserved)
            {
                stringBuilder.Append(labelIndent + "Reserved:");
                stringBuilder.AppendLine(subIndent + this.Reserved.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Set the device's behavior. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"SetDeviceConfigCommand")]
    public class SetDeviceConfigCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = true,Name=@"DeviceConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private DeviceConfig _DeviceConfig = null;
        public DeviceConfig DeviceConfig
        {
            get { return this._DeviceConfig; }
            set { this._DeviceConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SetDeviceConfigCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.DeviceConfig)
            {
                stringBuilder.Append(labelIndent + "DeviceConfig:");
                stringBuilder.AppendLine(this.DeviceConfig.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null == this._DeviceConfig)
            {
                throw new RequiredFieldMissingException("DeviceConfig is required in SetDeviceConfigCommand");
            }
            
            if (null != this._DeviceConfig)
            {
                this._DeviceConfig.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Get the DeviceConfig_ 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GetDeviceConfigCommand")]
    public class GetDeviceConfigCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reserved",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Reserved = null;
        public bool? Reserved
        {
            get { return this._Reserved; }
            set { this._Reserved = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GetDeviceConfigCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reserved)
            {
                stringBuilder.Append(labelIndent + "Reserved:");
                stringBuilder.AppendLine(subIndent + this.Reserved.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Tell the device to do any preparation possible before a StartCommand_ is sent so that the operation begins as soon after the start as possible. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"EngageCommand")]
    public class EngageCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reserved",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Reserved = null;
        public bool? Reserved
        {
            get { return this._Reserved; }
            set { this._Reserved = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "EngageCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reserved)
            {
                stringBuilder.Append(labelIndent + "Reserved:");
                stringBuilder.AppendLine(subIndent + this.Reserved.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Called after StopCommand_, return the device to its initial state. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"DisengageCommand")]
    public class DisengageCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reserved",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Reserved = null;
        public bool? Reserved
        {
            get { return this._Reserved; }
            set { this._Reserved = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "DisengageCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reserved)
            {
                stringBuilder.Append(labelIndent + "Reserved:");
                stringBuilder.AppendLine(subIndent + this.Reserved.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"SetOperationResultGpoCommand")]
    public class SetOperationResultGpoCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"OperationSummaryResult",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private OperationSummaryResult? _OperationSummaryResult = null;
        public OperationSummaryResult? OperationSummaryResult
        {
            get { return this._OperationSummaryResult; }
            set { this._OperationSummaryResult = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SetOperationResultGpoCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.OperationSummaryResult)
            {
                stringBuilder.Append(labelIndent + "OperationSummaryResult:");
                stringBuilder.AppendLine(subIndent + this.OperationSummaryResult.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Set the SerializationJob_ 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"AddSerializationJobCommand")]
    public class AddSerializationJobCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"SerializationJob",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SerializationJob _SerializationJob = null;
        public SerializationJob SerializationJob
        {
            get { return this._SerializationJob; }
            set { this._SerializationJob = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "AddSerializationJobCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.SerializationJob)
            {
                stringBuilder.Append(labelIndent + "SerializationJob:");
                stringBuilder.AppendLine(this.SerializationJob.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._SerializationJob)
            {
                this._SerializationJob.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// **NOT YET SUPPORTED** 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"RemoveSerializationJobCommand")]
    public class RemoveSerializationJobCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"JobId",DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
        private uint? _JobId = null;
        public uint? JobId
        {
            get { return this._JobId; }
            set { this._JobId = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "RemoveSerializationJobCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.JobId)
            {
                stringBuilder.Append(labelIndent + "JobId:");
                stringBuilder.AppendLine(subIndent + this.JobId.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"SetInventoryJobCommand")]
    public class SetInventoryJobCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"InventoryJob",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private InventoryJob _InventoryJob = null;
        public InventoryJob InventoryJob
        {
            get { return this._InventoryJob; }
            set { this._InventoryJob = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SetInventoryJobCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.InventoryJob)
            {
                stringBuilder.Append(labelIndent + "InventoryJob:");
                stringBuilder.AppendLine(this.InventoryJob.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._InventoryJob)
            {
                this._InventoryJob.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"SetCartonContentsJobCommand")]
    public class SetCartonContentsJobCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"CartonContentsJob",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private CartonContentsJob _CartonContentsJob = null;
        public CartonContentsJob CartonContentsJob
        {
            get { return this._CartonContentsJob; }
            set { this._CartonContentsJob = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SetCartonContentsJobCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.CartonContentsJob)
            {
                stringBuilder.Append(labelIndent + "CartonContentsJob:");
                stringBuilder.AppendLine(this.CartonContentsJob.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._CartonContentsJob)
            {
                this._CartonContentsJob.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"GetOperationDataCommand")]
    public class GetOperationDataCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reserved",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private bool? _Reserved = null;
        public bool? Reserved
        {
            get { return this._Reserved; }
            set { this._Reserved = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GetOperationDataCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reserved)
            {
                stringBuilder.Append(labelIndent + "Reserved:");
                stringBuilder.AppendLine(subIndent + this.Reserved.ToString());
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"AddLicenseKeyCommand")]
    public class AddLicenseKeyCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"LicenseKey",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private LicenseKey _LicenseKey = null;
        public LicenseKey LicenseKey
        {
            get { return this._LicenseKey; }
            set { this._LicenseKey = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "AddLicenseKeyCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.LicenseKey)
            {
                stringBuilder.Append(labelIndent + "LicenseKey:");
                stringBuilder.AppendLine(this.LicenseKey.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._LicenseKey)
            {
                this._LicenseKey.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Send a list of tag operations to perform. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"AddTidTableEntriesCommand")]
    public class AddTidTableEntriesCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"TableEntries",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TidTableEntries _TableEntries = null;
        public TidTableEntries TableEntries
        {
            get { return this._TableEntries; }
            set { this._TableEntries = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "AddTidTableEntriesCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.TableEntries)
            {
                stringBuilder.Append(labelIndent + "TableEntries:");
                stringBuilder.AppendLine(this.TableEntries.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._TableEntries)
            {
                this._TableEntries.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Send a list of tag operations to perform. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"AddOrderedListEntriesCommand")]
    public class AddOrderedListEntriesCommand
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"OrderedListEntries",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private OrderedListEntries _OrderedListEntries = null;
        public OrderedListEntries OrderedListEntries
        {
            get { return this._OrderedListEntries; }
            set { this._OrderedListEntries = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "AddOrderedListEntriesCommand");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.OrderedListEntries)
            {
                stringBuilder.Append(labelIndent + "OrderedListEntries:");
                stringBuilder.AppendLine(this.OrderedListEntries.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._OrderedListEntries)
            {
                this._OrderedListEntries.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// The reply to StartCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"StartResp")]
    public class StartResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "StartResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// See SetDeviceConfigCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"SetDeviceConfigResp")]
    public class SetDeviceConfigResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SetDeviceConfigResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Return the device configuration.  See GetDeviceConfigCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GetDeviceConfigResp")]
    public class GetDeviceConfigResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"DeviceConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private DeviceConfig _DeviceConfig = null;
        public DeviceConfig DeviceConfig
        {
            get { return this._DeviceConfig; }
            set { this._DeviceConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GetDeviceConfigResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }
            if (null != this.DeviceConfig)
            {
                stringBuilder.Append(labelIndent + "DeviceConfig:");
                stringBuilder.AppendLine(this.DeviceConfig.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._DeviceConfig)
            {
                this._DeviceConfig.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// See SetAntennaConfigCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"SetAntennaConfigResp")]
    public class SetAntennaConfigResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SetAntennaConfigResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Return the configuration which was set on all antennas. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GetAntennaConfigResp")]
    public class GetAntennaConfigResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"AntennasConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private AntennasConfig _AntennasConfig = null;
        public AntennasConfig AntennasConfig
        {
            get { return this._AntennasConfig; }
            set { this._AntennasConfig = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GetAntennaConfigResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }
            if (null != this.AntennasConfig)
            {
                stringBuilder.Append(labelIndent + "AntennasConfig:");
                stringBuilder.AppendLine(this.AntennasConfig.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AntennasConfig)
            {
                this._AntennasConfig.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// See EngageCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"EngageResp")]
    public class EngageResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "EngageResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// See DisengageCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"DisengageResp")]
    public class DisengageResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "DisengageResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// See SetOperationResultGPOCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"SetOperationResultGpoResp")]
    public class SetOperationResultGpoResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SetOperationResultGpoResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// See AddSerializationJobCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"AddSerializationJobResp")]
    public class AddSerializationJobResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "AddSerializationJobResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// **NOT YET SUPPORTED** 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"RemoveSerializationJobResp")]
    public class RemoveSerializationJobResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "RemoveSerializationJobResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"SetInventoryJobResp")]
    public class SetInventoryJobResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SetInventoryJobResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"SetCartonContentsJobResp")]
    public class SetCartonContentsJobResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "SetCartonContentsJobResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"GetOperationDataResp")]
    public class GetOperationDataResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"OperationData",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private OperationData _OperationData = null;
        public OperationData OperationData
        {
            get { return this._OperationData; }
            set { this._OperationData = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "GetOperationDataResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }
            if (null != this.OperationData)
            {
                stringBuilder.Append(labelIndent + "OperationData:");
                stringBuilder.AppendLine(this.OperationData.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._OperationData)
            {
                this._OperationData.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"AddLicenseKeyResp")]
    public class AddLicenseKeyResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "AddLicenseKeyResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Returns SUCCESS if the TID entry was added.  See AddTIDTableEntriesCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"AddTidTableEntriesResp")]
    public class AddTidTableEntriesResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "AddTidTableEntriesResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    /// <summary>
    /// Returns SUCCESS if the OrderedListEntries_ were added. See AddOrderedListEntriesCommand_. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"AddOrderedListEntriesResp")]
    public class AddOrderedListEntriesResp
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Reply",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Reply _Reply = null;
        public Reply Reply
        {
            get { return this._Reply; }
            set { this._Reply = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "AddOrderedListEntriesResp");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Reply)
            {
                stringBuilder.Append(labelIndent + "Reply:");
                stringBuilder.AppendLine(this.Reply.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Reply)
            {
                this._Reply.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"Command")]
    public class Command
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Connect",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private ConnectCommand _Connect = null;
        /// <summary>
        /// Connect to device. 
        /// </summary>
        public ConnectCommand Connect
        {
            get { return this._Connect; }
            set { this._Connect = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"GetVersionsReader",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GetVersionsReaderCommand _GetVersionsReader = null;
        /// <summary>
        /// Return all version information reported by the device and by the host-side library. 
        /// </summary>
        public GetVersionsReaderCommand GetVersionsReader
        {
            get { return this._GetVersionsReader; }
            set { this._GetVersionsReader = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"Start",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private StartCommand _Start = null;
        /// <summary>
        /// Start the encode or inventory run. The device must be engaged with GPI or by calling engage before starting. 
        /// </summary>
        public StartCommand Start
        {
            get { return this._Start; }
            set { this._Start = value; }
        }
        
        [global::ProtoBuf.ProtoMember(8,IsRequired = false,Name=@"Stop",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private StopCommand _Stop = null;
        /// <summary>
        /// Stop the encode or inventory run. The device must be operating. 
        /// </summary>
        public StopCommand Stop
        {
            get { return this._Stop; }
            set { this._Stop = value; }
        }
        
        [global::ProtoBuf.ProtoMember(25,IsRequired = false,Name=@"GetDeviceState",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GetDeviceStateCommand _GetDeviceState = null;
        /// <summary>
        /// Get the state (operating, fault, etc.) of the device. Contains a fault description, if any. 
        /// </summary>
        public GetDeviceStateCommand GetDeviceState
        {
            get { return this._GetDeviceState; }
            set { this._GetDeviceState = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12032,IsRequired = false,Name=@"SetDeviceConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SetDeviceConfigCommand _SetDeviceConfig = null;
        public SetDeviceConfigCommand SetDeviceConfig
        {
            get { return this._SetDeviceConfig; }
            set { this._SetDeviceConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12033,IsRequired = false,Name=@"GetDeviceConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GetDeviceConfigCommand _GetDeviceConfig = null;
        public GetDeviceConfigCommand GetDeviceConfig
        {
            get { return this._GetDeviceConfig; }
            set { this._GetDeviceConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12034,IsRequired = false,Name=@"SetAntennaConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SetAntennaConfigCommand _SetAntennaConfig = null;
        public SetAntennaConfigCommand SetAntennaConfig
        {
            get { return this._SetAntennaConfig; }
            set { this._SetAntennaConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12035,IsRequired = false,Name=@"GetAntennaConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GetAntennaConfigCommand _GetAntennaConfig = null;
        public GetAntennaConfigCommand GetAntennaConfig
        {
            get { return this._GetAntennaConfig; }
            set { this._GetAntennaConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12036,IsRequired = false,Name=@"Engage",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private EngageCommand _Engage = null;
        public EngageCommand Engage
        {
            get { return this._Engage; }
            set { this._Engage = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12037,IsRequired = false,Name=@"Disengage",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private DisengageCommand _Disengage = null;
        public DisengageCommand Disengage
        {
            get { return this._Disengage; }
            set { this._Disengage = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12038,IsRequired = false,Name=@"SetOperationResultGpo",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SetOperationResultGpoCommand _SetOperationResultGpo = null;
        /// <summary>
        /// When the GPOConfig enable_operation_result_gpo is set false, this command lets the client application set the pass/fail GPO based on its own pass/fail conditions. 
        /// </summary>
        public SetOperationResultGpoCommand SetOperationResultGpo
        {
            get { return this._SetOperationResultGpo; }
            set { this._SetOperationResultGpo = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12039,IsRequired = false,Name=@"AddSerializationJob",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private AddSerializationJobCommand _AddSerializationJob = null;
        public AddSerializationJobCommand AddSerializationJob
        {
            get { return this._AddSerializationJob; }
            set { this._AddSerializationJob = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12040,IsRequired = false,Name=@"RemoveSerializationJob",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private RemoveSerializationJobCommand _RemoveSerializationJob = null;
        public RemoveSerializationJobCommand RemoveSerializationJob
        {
            get { return this._RemoveSerializationJob; }
            set { this._RemoveSerializationJob = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12041,IsRequired = false,Name=@"AddTidTableEntries",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private AddTidTableEntriesCommand _AddTidTableEntries = null;
        public AddTidTableEntriesCommand AddTidTableEntries
        {
            get { return this._AddTidTableEntries; }
            set { this._AddTidTableEntries = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12042,IsRequired = false,Name=@"AddOrderedListEntries",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private AddOrderedListEntriesCommand _AddOrderedListEntries = null;
        public AddOrderedListEntriesCommand AddOrderedListEntries
        {
            get { return this._AddOrderedListEntries; }
            set { this._AddOrderedListEntries = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12043,IsRequired = false,Name=@"SetInventoryJob",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SetInventoryJobCommand _SetInventoryJob = null;
        public SetInventoryJobCommand SetInventoryJob
        {
            get { return this._SetInventoryJob; }
            set { this._SetInventoryJob = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12044,IsRequired = false,Name=@"SetCartonContentsJob",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SetCartonContentsJobCommand _SetCartonContentsJob = null;
        public SetCartonContentsJobCommand SetCartonContentsJob
        {
            get { return this._SetCartonContentsJob; }
            set { this._SetCartonContentsJob = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12045,IsRequired = false,Name=@"GetOperationData",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GetOperationDataCommand _GetOperationData = null;
        public GetOperationDataCommand GetOperationData
        {
            get { return this._GetOperationData; }
            set { this._GetOperationData = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12046,IsRequired = false,Name=@"AddLicenseKey",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private AddLicenseKeyCommand _AddLicenseKey = null;
        public AddLicenseKeyCommand AddLicenseKey
        {
            get { return this._AddLicenseKey; }
            set { this._AddLicenseKey = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Command");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Connect)
            {
                stringBuilder.Append(labelIndent + "Connect:");
                stringBuilder.AppendLine(this.Connect.ToString(subIndent));
            }
            if (null != this.GetVersionsReader)
            {
                stringBuilder.Append(labelIndent + "GetVersionsReader:");
                stringBuilder.AppendLine(this.GetVersionsReader.ToString(subIndent));
            }
            if (null != this.Start)
            {
                stringBuilder.Append(labelIndent + "Start:");
                stringBuilder.AppendLine(this.Start.ToString(subIndent));
            }
            if (null != this.Stop)
            {
                stringBuilder.Append(labelIndent + "Stop:");
                stringBuilder.AppendLine(this.Stop.ToString(subIndent));
            }
            if (null != this.GetDeviceState)
            {
                stringBuilder.Append(labelIndent + "GetDeviceState:");
                stringBuilder.AppendLine(this.GetDeviceState.ToString(subIndent));
            }
            if (null != this.SetDeviceConfig)
            {
                stringBuilder.Append(labelIndent + "SetDeviceConfig:");
                stringBuilder.AppendLine(this.SetDeviceConfig.ToString(subIndent));
            }
            if (null != this.GetDeviceConfig)
            {
                stringBuilder.Append(labelIndent + "GetDeviceConfig:");
                stringBuilder.AppendLine(this.GetDeviceConfig.ToString(subIndent));
            }
            if (null != this.SetAntennaConfig)
            {
                stringBuilder.Append(labelIndent + "SetAntennaConfig:");
                stringBuilder.AppendLine(this.SetAntennaConfig.ToString(subIndent));
            }
            if (null != this.GetAntennaConfig)
            {
                stringBuilder.Append(labelIndent + "GetAntennaConfig:");
                stringBuilder.AppendLine(this.GetAntennaConfig.ToString(subIndent));
            }
            if (null != this.Engage)
            {
                stringBuilder.Append(labelIndent + "Engage:");
                stringBuilder.AppendLine(this.Engage.ToString(subIndent));
            }
            if (null != this.Disengage)
            {
                stringBuilder.Append(labelIndent + "Disengage:");
                stringBuilder.AppendLine(this.Disengage.ToString(subIndent));
            }
            if (null != this.SetOperationResultGpo)
            {
                stringBuilder.Append(labelIndent + "SetOperationResultGpo:");
                stringBuilder.AppendLine(this.SetOperationResultGpo.ToString(subIndent));
            }
            if (null != this.AddSerializationJob)
            {
                stringBuilder.Append(labelIndent + "AddSerializationJob:");
                stringBuilder.AppendLine(this.AddSerializationJob.ToString(subIndent));
            }
            if (null != this.RemoveSerializationJob)
            {
                stringBuilder.Append(labelIndent + "RemoveSerializationJob:");
                stringBuilder.AppendLine(this.RemoveSerializationJob.ToString(subIndent));
            }
            if (null != this.AddTidTableEntries)
            {
                stringBuilder.Append(labelIndent + "AddTidTableEntries:");
                stringBuilder.AppendLine(this.AddTidTableEntries.ToString(subIndent));
            }
            if (null != this.AddOrderedListEntries)
            {
                stringBuilder.Append(labelIndent + "AddOrderedListEntries:");
                stringBuilder.AppendLine(this.AddOrderedListEntries.ToString(subIndent));
            }
            if (null != this.SetInventoryJob)
            {
                stringBuilder.Append(labelIndent + "SetInventoryJob:");
                stringBuilder.AppendLine(this.SetInventoryJob.ToString(subIndent));
            }
            if (null != this.SetCartonContentsJob)
            {
                stringBuilder.Append(labelIndent + "SetCartonContentsJob:");
                stringBuilder.AppendLine(this.SetCartonContentsJob.ToString(subIndent));
            }
            if (null != this.GetOperationData)
            {
                stringBuilder.Append(labelIndent + "GetOperationData:");
                stringBuilder.AppendLine(this.GetOperationData.ToString(subIndent));
            }
            if (null != this.AddLicenseKey)
            {
                stringBuilder.Append(labelIndent + "AddLicenseKey:");
                stringBuilder.AppendLine(this.AddLicenseKey.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Connect)
            {
                this._Connect.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GetVersionsReader)
            {
                this._GetVersionsReader.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Start)
            {
                this._Start.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Stop)
            {
                this._Stop.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GetDeviceState)
            {
                this._GetDeviceState.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SetDeviceConfig)
            {
                this._SetDeviceConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GetDeviceConfig)
            {
                this._GetDeviceConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SetAntennaConfig)
            {
                this._SetAntennaConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GetAntennaConfig)
            {
                this._GetAntennaConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Engage)
            {
                this._Engage.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Disengage)
            {
                this._Disengage.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SetOperationResultGpo)
            {
                this._SetOperationResultGpo.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AddSerializationJob)
            {
                this._AddSerializationJob.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._RemoveSerializationJob)
            {
                this._RemoveSerializationJob.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AddTidTableEntries)
            {
                this._AddTidTableEntries.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AddOrderedListEntries)
            {
                this._AddOrderedListEntries.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SetInventoryJob)
            {
                this._SetInventoryJob.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SetCartonContentsJob)
            {
                this._SetCartonContentsJob.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GetOperationData)
            {
                this._GetOperationData.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AddLicenseKey)
            {
                this._AddLicenseKey.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"Response")]
    public class Response
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"Connect",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private ConnectResp _Connect = null;
        public ConnectResp Connect
        {
            get { return this._Connect; }
            set { this._Connect = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"GetVersionsReader",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GetVersionsReaderResp _GetVersionsReader = null;
        public GetVersionsReaderResp GetVersionsReader
        {
            get { return this._GetVersionsReader; }
            set { this._GetVersionsReader = value; }
        }
        
        [global::ProtoBuf.ProtoMember(7,IsRequired = false,Name=@"Start",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private StartResp _Start = null;
        public StartResp Start
        {
            get { return this._Start; }
            set { this._Start = value; }
        }
        
        [global::ProtoBuf.ProtoMember(8,IsRequired = false,Name=@"Stop",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private StopResp _Stop = null;
        public StopResp Stop
        {
            get { return this._Stop; }
            set { this._Stop = value; }
        }
        
        [global::ProtoBuf.ProtoMember(15,IsRequired = false,Name=@"Invalid",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private InvalidResp _Invalid = null;
        public InvalidResp Invalid
        {
            get { return this._Invalid; }
            set { this._Invalid = value; }
        }
        
        [global::ProtoBuf.ProtoMember(25,IsRequired = false,Name=@"GetDeviceState",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GetDeviceStateResp _GetDeviceState = null;
        public GetDeviceStateResp GetDeviceState
        {
            get { return this._GetDeviceState; }
            set { this._GetDeviceState = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12032,IsRequired = false,Name=@"SetDeviceConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SetDeviceConfigResp _SetDeviceConfig = null;
        public SetDeviceConfigResp SetDeviceConfig
        {
            get { return this._SetDeviceConfig; }
            set { this._SetDeviceConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12033,IsRequired = false,Name=@"GetDeviceConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GetDeviceConfigResp _GetDeviceConfig = null;
        public GetDeviceConfigResp GetDeviceConfig
        {
            get { return this._GetDeviceConfig; }
            set { this._GetDeviceConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12034,IsRequired = false,Name=@"SetAntennaConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SetAntennaConfigResp _SetAntennaConfig = null;
        public SetAntennaConfigResp SetAntennaConfig
        {
            get { return this._SetAntennaConfig; }
            set { this._SetAntennaConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12035,IsRequired = false,Name=@"GetAntennaConfig",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GetAntennaConfigResp _GetAntennaConfig = null;
        public GetAntennaConfigResp GetAntennaConfig
        {
            get { return this._GetAntennaConfig; }
            set { this._GetAntennaConfig = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12036,IsRequired = false,Name=@"Engage",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private EngageResp _Engage = null;
        public EngageResp Engage
        {
            get { return this._Engage; }
            set { this._Engage = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12037,IsRequired = false,Name=@"Disengage",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private DisengageResp _Disengage = null;
        public DisengageResp Disengage
        {
            get { return this._Disengage; }
            set { this._Disengage = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12041,IsRequired = false,Name=@"SetOperationResultGpo",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SetOperationResultGpoResp _SetOperationResultGpo = null;
        public SetOperationResultGpoResp SetOperationResultGpo
        {
            get { return this._SetOperationResultGpo; }
            set { this._SetOperationResultGpo = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12042,IsRequired = false,Name=@"AddSerializationJob",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private AddSerializationJobResp _AddSerializationJob = null;
        public AddSerializationJobResp AddSerializationJob
        {
            get { return this._AddSerializationJob; }
            set { this._AddSerializationJob = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12043,IsRequired = false,Name=@"RemoveSerializationJob",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private RemoveSerializationJobResp _RemoveSerializationJob = null;
        public RemoveSerializationJobResp RemoveSerializationJob
        {
            get { return this._RemoveSerializationJob; }
            set { this._RemoveSerializationJob = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12044,IsRequired = false,Name=@"AddTidTableEntries",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private AddTidTableEntriesResp _AddTidTableEntries = null;
        public AddTidTableEntriesResp AddTidTableEntries
        {
            get { return this._AddTidTableEntries; }
            set { this._AddTidTableEntries = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12045,IsRequired = false,Name=@"AddOrderedListEntries",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private AddOrderedListEntriesResp _AddOrderedListEntries = null;
        public AddOrderedListEntriesResp AddOrderedListEntries
        {
            get { return this._AddOrderedListEntries; }
            set { this._AddOrderedListEntries = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12046,IsRequired = false,Name=@"SetInventoryJob",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SetInventoryJobResp _SetInventoryJob = null;
        public SetInventoryJobResp SetInventoryJob
        {
            get { return this._SetInventoryJob; }
            set { this._SetInventoryJob = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12047,IsRequired = false,Name=@"SetCartonContentsJob",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private SetCartonContentsJobResp _SetCartonContentsJob = null;
        public SetCartonContentsJobResp SetCartonContentsJob
        {
            get { return this._SetCartonContentsJob; }
            set { this._SetCartonContentsJob = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12048,IsRequired = false,Name=@"GetOperationData",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private GetOperationDataResp _GetOperationData = null;
        public GetOperationDataResp GetOperationData
        {
            get { return this._GetOperationData; }
            set { this._GetOperationData = value; }
        }
        
        [global::ProtoBuf.ProtoMember(12049,IsRequired = false,Name=@"AddLicenseKey",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private AddLicenseKeyResp _AddLicenseKey = null;
        public AddLicenseKeyResp AddLicenseKey
        {
            get { return this._AddLicenseKey; }
            set { this._AddLicenseKey = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Response");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Connect)
            {
                stringBuilder.Append(labelIndent + "Connect:");
                stringBuilder.AppendLine(this.Connect.ToString(subIndent));
            }
            if (null != this.GetVersionsReader)
            {
                stringBuilder.Append(labelIndent + "GetVersionsReader:");
                stringBuilder.AppendLine(this.GetVersionsReader.ToString(subIndent));
            }
            if (null != this.Start)
            {
                stringBuilder.Append(labelIndent + "Start:");
                stringBuilder.AppendLine(this.Start.ToString(subIndent));
            }
            if (null != this.Stop)
            {
                stringBuilder.Append(labelIndent + "Stop:");
                stringBuilder.AppendLine(this.Stop.ToString(subIndent));
            }
            if (null != this.Invalid)
            {
                stringBuilder.Append(labelIndent + "Invalid:");
                stringBuilder.AppendLine(this.Invalid.ToString(subIndent));
            }
            if (null != this.GetDeviceState)
            {
                stringBuilder.Append(labelIndent + "GetDeviceState:");
                stringBuilder.AppendLine(this.GetDeviceState.ToString(subIndent));
            }
            if (null != this.SetDeviceConfig)
            {
                stringBuilder.Append(labelIndent + "SetDeviceConfig:");
                stringBuilder.AppendLine(this.SetDeviceConfig.ToString(subIndent));
            }
            if (null != this.GetDeviceConfig)
            {
                stringBuilder.Append(labelIndent + "GetDeviceConfig:");
                stringBuilder.AppendLine(this.GetDeviceConfig.ToString(subIndent));
            }
            if (null != this.SetAntennaConfig)
            {
                stringBuilder.Append(labelIndent + "SetAntennaConfig:");
                stringBuilder.AppendLine(this.SetAntennaConfig.ToString(subIndent));
            }
            if (null != this.GetAntennaConfig)
            {
                stringBuilder.Append(labelIndent + "GetAntennaConfig:");
                stringBuilder.AppendLine(this.GetAntennaConfig.ToString(subIndent));
            }
            if (null != this.Engage)
            {
                stringBuilder.Append(labelIndent + "Engage:");
                stringBuilder.AppendLine(this.Engage.ToString(subIndent));
            }
            if (null != this.Disengage)
            {
                stringBuilder.Append(labelIndent + "Disengage:");
                stringBuilder.AppendLine(this.Disengage.ToString(subIndent));
            }
            if (null != this.SetOperationResultGpo)
            {
                stringBuilder.Append(labelIndent + "SetOperationResultGpo:");
                stringBuilder.AppendLine(this.SetOperationResultGpo.ToString(subIndent));
            }
            if (null != this.AddSerializationJob)
            {
                stringBuilder.Append(labelIndent + "AddSerializationJob:");
                stringBuilder.AppendLine(this.AddSerializationJob.ToString(subIndent));
            }
            if (null != this.RemoveSerializationJob)
            {
                stringBuilder.Append(labelIndent + "RemoveSerializationJob:");
                stringBuilder.AppendLine(this.RemoveSerializationJob.ToString(subIndent));
            }
            if (null != this.AddTidTableEntries)
            {
                stringBuilder.Append(labelIndent + "AddTidTableEntries:");
                stringBuilder.AppendLine(this.AddTidTableEntries.ToString(subIndent));
            }
            if (null != this.AddOrderedListEntries)
            {
                stringBuilder.Append(labelIndent + "AddOrderedListEntries:");
                stringBuilder.AppendLine(this.AddOrderedListEntries.ToString(subIndent));
            }
            if (null != this.SetInventoryJob)
            {
                stringBuilder.Append(labelIndent + "SetInventoryJob:");
                stringBuilder.AppendLine(this.SetInventoryJob.ToString(subIndent));
            }
            if (null != this.SetCartonContentsJob)
            {
                stringBuilder.Append(labelIndent + "SetCartonContentsJob:");
                stringBuilder.AppendLine(this.SetCartonContentsJob.ToString(subIndent));
            }
            if (null != this.GetOperationData)
            {
                stringBuilder.Append(labelIndent + "GetOperationData:");
                stringBuilder.AppendLine(this.GetOperationData.ToString(subIndent));
            }
            if (null != this.AddLicenseKey)
            {
                stringBuilder.Append(labelIndent + "AddLicenseKey:");
                stringBuilder.AppendLine(this.AddLicenseKey.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Connect)
            {
                this._Connect.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GetVersionsReader)
            {
                this._GetVersionsReader.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Start)
            {
                this._Start.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Stop)
            {
                this._Stop.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Invalid)
            {
                this._Invalid.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GetDeviceState)
            {
                this._GetDeviceState.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SetDeviceConfig)
            {
                this._SetDeviceConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GetDeviceConfig)
            {
                this._GetDeviceConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SetAntennaConfig)
            {
                this._SetAntennaConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GetAntennaConfig)
            {
                this._GetAntennaConfig.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Engage)
            {
                this._Engage.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Disengage)
            {
                this._Disengage.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SetOperationResultGpo)
            {
                this._SetOperationResultGpo.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AddSerializationJob)
            {
                this._AddSerializationJob.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._RemoveSerializationJob)
            {
                this._RemoveSerializationJob.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AddTidTableEntries)
            {
                this._AddTidTableEntries.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AddOrderedListEntries)
            {
                this._AddOrderedListEntries.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SetInventoryJob)
            {
                this._SetInventoryJob.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._SetCartonContentsJob)
            {
                this._SetCartonContentsJob.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._GetOperationData)
            {
                this._GetOperationData.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._AddLicenseKey)
            {
                this._AddLicenseKey.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"Report")]
    public class Report
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"DeviceEventReport",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private DeviceEventReport _DeviceEventReport = null;
        public DeviceEventReport DeviceEventReport
        {
            get { return this._DeviceEventReport; }
            set { this._DeviceEventReport = value; }
        }
        
        [global::ProtoBuf.ProtoMember(2,IsRequired = false,Name=@"TagOperationReport",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private TagOperationReport _TagOperationReport = null;
        public TagOperationReport TagOperationReport
        {
            get { return this._TagOperationReport; }
            set { this._TagOperationReport = value; }
        }
        
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"OperationSummaryReport",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private OperationSummaryReport _OperationSummaryReport = null;
        public OperationSummaryReport OperationSummaryReport
        {
            get { return this._OperationSummaryReport; }
            set { this._OperationSummaryReport = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"CartonContentsReport",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private CartonContentsReport _CartonContentsReport = null;
        public CartonContentsReport CartonContentsReport
        {
            get { return this._CartonContentsReport; }
            set { this._CartonContentsReport = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Report");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.DeviceEventReport)
            {
                stringBuilder.Append(labelIndent + "DeviceEventReport:");
                stringBuilder.AppendLine(this.DeviceEventReport.ToString(subIndent));
            }
            if (null != this.TagOperationReport)
            {
                stringBuilder.Append(labelIndent + "TagOperationReport:");
                stringBuilder.AppendLine(this.TagOperationReport.ToString(subIndent));
            }
            if (null != this.OperationSummaryReport)
            {
                stringBuilder.Append(labelIndent + "OperationSummaryReport:");
                stringBuilder.AppendLine(this.OperationSummaryReport.ToString(subIndent));
            }
            if (null != this.CartonContentsReport)
            {
                stringBuilder.Append(labelIndent + "CartonContentsReport:");
                stringBuilder.AppendLine(this.CartonContentsReport.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._DeviceEventReport)
            {
                this._DeviceEventReport.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._TagOperationReport)
            {
                this._TagOperationReport.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._OperationSummaryReport)
            {
                this._OperationSummaryReport.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._CartonContentsReport)
            {
                this._CartonContentsReport.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"Update")]
    public class Update
    {
        [global::ProtoBuf.ProtoMember(1,IsRequired = false,Name=@"AddTidTableEntries",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private AddTidTableEntriesCommand _AddTidTableEntries = null;
        public AddTidTableEntriesCommand AddTidTableEntries
        {
            get { return this._AddTidTableEntries; }
            set { this._AddTidTableEntries = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Update");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.AddTidTableEntries)
            {
                stringBuilder.Append(labelIndent + "AddTidTableEntries:");
                stringBuilder.AppendLine(this.AddTidTableEntries.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._AddTidTableEntries)
            {
                this._AddTidTableEntries.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"Packet")]
    public class Packet
    {
        [global::ProtoBuf.ProtoMember(3,IsRequired = false,Name=@"Command",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Command _Command = null;
        public Command Command
        {
            get { return this._Command; }
            set { this._Command = value; }
        }
        
        [global::ProtoBuf.ProtoMember(4,IsRequired = false,Name=@"Response",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Response _Response = null;
        public Response Response
        {
            get { return this._Response; }
            set { this._Response = value; }
        }
        
        [global::ProtoBuf.ProtoMember(5,IsRequired = false,Name=@"Report",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Report _Report = null;
        public Report Report
        {
            get { return this._Report; }
            set { this._Report = value; }
        }
        
        [global::ProtoBuf.ProtoMember(6,IsRequired = false,Name=@"Update",DataFormat = global::ProtoBuf.DataFormat.Default)]
        private Update _Update = null;
        public Update Update
        {
            get { return this._Update; }
            set { this._Update = value; }
        }
        

        /// <summary>
        /// Converts message to human readable string
        /// </summary>
        public override string ToString()
        {
            return this.ToString("");
        }

        /// <summary>
        /// Converts message to human readable string with provided indent
        /// </summary>
        public string ToString(string indent)
        {
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            stringBuilder.AppendLine(indent + "Packet");
            stringBuilder.AppendLine(indent + "{");

            string labelIndent = indent + "  ";
            string subIndent = labelIndent + "  ";
            if (null != this.Command)
            {
                stringBuilder.Append(labelIndent + "Command:");
                stringBuilder.AppendLine(this.Command.ToString(subIndent));
            }
            if (null != this.Response)
            {
                stringBuilder.Append(labelIndent + "Response:");
                stringBuilder.AppendLine(this.Response.ToString(subIndent));
            }
            if (null != this.Report)
            {
                stringBuilder.Append(labelIndent + "Report:");
                stringBuilder.AppendLine(this.Report.ToString(subIndent));
            }
            if (null != this.Update)
            {
                stringBuilder.Append(labelIndent + "Update:");
                stringBuilder.AppendLine(this.Update.ToString(subIndent));
            }

            stringBuilder.Append(indent + "}");
            return stringBuilder.ToString();
        }

        public void EnsureRequiredFieldsArePresent()
        {
            if (null != this._Command)
            {
                this._Command.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Response)
            {
                this._Response.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Report)
            {
                this._Report.EnsureRequiredFieldsArePresent();
            }
            
            if (null != this._Update)
            {
                this._Update.EnsureRequiredFieldsArePresent();
            }
            
        }
        [global::ProtoBuf.ProtoBeforeSerialization()]
        internal void ProtoBeforeSerialization(
                global::System.Runtime.Serialization.StreamingContext context)
        {
            this.EnsureRequiredFieldsArePresent();
        }
        
    }
    
    #endregion

    #region Enumerations
    
    [global::ProtoBuf.ProtoContract(Name=@"ErrorCode")]
    public enum ErrorCode
    {
        ERROR_CODE_SUCCESS = 0,
        ERROR_CODE_INVALID_COMMAND = 1,
        ERROR_CODE_INVALID_SET_KEY = 2,
        ERROR_CODE_INVALID_GET_KEY = 3,
        ERROR_CODE_INVALID_ADDRESS = 4,
        ERROR_CODE_INVALID_VALUE = 5,
        ERROR_CODE_FIRMWARE_INVALID = 6,
        ERROR_CODE_COMMAND_REFUSED = 7,
        ERROR_CODE_SET_KEY_READ_ONLY = 8,
        ERROR_CODE_NO_HANDSHAKE = 9,
        ERROR_CODE_NO_DEVICE_CONNECTION = 10,
        ERROR_CODE_UNSUPPORTED = 11,
        /// <summary>
        /// Failure when initializing the device network connection. 
        /// </summary>
        ERROR_CODE_NETWORK_INIT = 12,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"Gen2Session")]
    public enum Gen2Session
    {
        GEN2_SESSION_0 = 0,
        GEN2_SESSION_1 = 1,
        GEN2_SESSION_2 = 2,
        GEN2_SESSION_3 = 3,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"DeviceOperatingState")]
    public enum DeviceOperatingState
    {
        DEVICE_OPERATING_STATE_READY = 0,
        DEVICE_OPERATING_STATE_OPERATING = 1,
        DEVICE_OPERATING_STATE_ENGAGED = 2,
        DEVICE_OPERATING_STATE_FAULT = 3,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"DeviceFaultType")]
    public enum DeviceFaultType
    {
        DEVICE_FAULT_TYPE_NONE = 0,
        DEVICE_FAULT_TYPE_NETWORK_DISCONNECT = 1,
        DEVICE_FAULT_TYPE_APPLICATION_FAILURE = 2,
        DEVICE_FAULT_TYPE_FPGA_FAILURE = 3,
    }
    
    /// <summary>
    /// The local library or remote device component corresponding to the version. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"VersionType")]
    public enum VersionType
    {
        /// <summary>
        /// Version of the tool used to create the API on the host. 
        /// </summary>
        VERSION_TYPE_KODIAK_HOST = 0,
        /// <summary>
        /// Version of the tool used to create the API on the reader. 
        /// </summary>
        VERSION_TYPE_KODIAK_READER = 1,
        /// <summary>
        /// Version of the protocol used by the reader. 
        /// </summary>
        VERSION_TYPE_FRAME_READER = 2,
        /// <summary>
        /// Version of the API on the host. 
        /// </summary>
        VERSION_TYPE_API_HOST = 3,
        /// <summary>
        /// Version of the API on the reader. 
        /// </summary>
        VERSION_TYPE_API_READER = 4,
        /// <summary>
        /// Version of the reader firmware. 
        /// </summary>
        VERSION_TYPE_FIRMWARE = 5,
        /// <summary>
        /// Version of custom application. 
        /// </summary>
        VERSION_TYPE_FIRMWARE_CUST = 6,
        /// <summary>
        /// Version of the tool which upgrades reader software. 
        /// </summary>
        VERSION_TYPE_UPGRADE_AGENT = 7,
        VERSION_TYPE_FPGA_IMAGE = 8,
    }
    
    /// <summary>
    /// RF regulatory region. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"RegulatoryRegion")]
    public enum RegulatoryRegion
    {
        REGULATORY_REGION_FCC_PART_15_247 = 0,
        REGULATORY_REGION_ETSI_EN_300_220 = 1,
        REGULATORY_REGION_ETSI_EN_302_208_LBT = 2,
        REGULATORY_REGION_HONG_KONG_920_925_MHZ = 3,
        REGULATORY_REGION_TAIWAN_922_928_MHZ = 4,
        REGULATORY_REGION_JAPAN_952_954_MHZ = 5,
        REGULATORY_REGION_JAPAN_952_954_MHZ_LOWPOWER = 6,
        REGULATORY_REGION_ETSI_EN_302_208_V1_2_1 = 7,
        REGULATORY_REGION_KOREA_917_921_MHZ = 8,
        REGULATORY_REGION_MALAYSIA_919_921_MHZ = 9,
        REGULATORY_REGION_CHINA_920_925_MHZ = 10,
        REGULATORY_REGION_JAPAN_952_956_MHZ_NO_LBT = 11,
        REGULATORY_REGION_SOUTH_AFRICA_915_919_MHZ = 12,
        REGULATORY_REGION_BRAZIL_902_907_AND_915_928_MHZ = 13,
        REGULATORY_REGION_THAILAND_920_925_MHZ = 14,
        REGULATORY_REGION_SINGAPORE_920_925_MHZ = 15,
        REGULATORY_REGION_AUSTRALIA_920_926_MHZ = 16,
        REGULATORY_REGION_INDIA_865_867_MHZ = 17,
        REGULATORY_REGION_URUGUAY_916_928_MHZ = 18,
        REGULATORY_REGION_VIETNAM_920_925_MHZ = 19,
        REGULATORY_REGION_ISRAEL_915_917_MHZ = 20,
        REGULATORY_REGION_PHILIPPINES_918_920_MHZ = 21,
        REGULATORY_REGION_INDONESIA_923_925_MHZ = 22,
        REGULATORY_REGION_NEW_ZEALAND_921P5_928_MHZ = 23,
        REGULATORY_REGION_JAPAN_916_921_MHZ_NO_LBT = 24,
        REGULATORY_REGION_LATIN_AMERICA_902_928_MHZ = 25,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"GPIOState")]
    public enum GpioState
    {
        GPIO_STATE_LOW = 0,
        GPIO_STATE_HIGH = 1,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"GPIOPolarity")]
    public enum GpioPolarity
    {
        GPIO_POLARITY_ACTIVE_LOW = 0,
        GPIO_POLARITY_ACTIVE_HIGH = 1,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"Gen2Mode")]
    public enum Gen2Mode
    {
        GEN2_MODE_MAX_THROUGHPUT = 0,
        GEN2_MODE_HYBRID = 1,
        GEN2_MODE_DENSE_READER_M4 = 2,
        GEN2_MODE_DENSE_READER_M8 = 3,
        GEN2_MODE_MAX_MILLER = 4,
        GEN2_MODE_DENSE_READER_M4_2 = 5,
        GEN2_MODE_MAX_THROUGHPUT_M4 = 6,
        /// <summary>
        /// DEPRECATED 
        /// </summary>
        GEN2_MODE_AUTO_SET = 1000,
    }
    
    /// <summary>
    /// How to inventory tags. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"InventorySearchMode")]
    public enum InventorySearchMode
    {
        /// <summary>
        /// Inventory tags from A to B state and back to A. 
        /// </summary>
        INVENTORY_SEARCH_MODE_DUAL_TARGET = 1,
        /// <summary>
        /// Inventory tags from A to B state. 
        /// </summary>
        INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B = 2,
        /// <summary>
        /// Inventory tags from B to A state. 
        /// </summary>
        INVENTORY_SEARCH_MODE_SINGLE_TARGET_B_TO_A = 3,
        /// <summary>
        /// Inventory tags from A to B state with boost. 
        /// </summary>
        INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_MONZA_TAGFOCUS = 4,
        /// <summary>
        /// Inventory tags from B to A state with boost. 
        /// </summary>
        INVENTORY_SEARCH_MODE_SINGLE_TARGET_B_TO_A_MONZA_TAGFOCUS = 5,
        /// <summary>
        /// ItemVerify Inventory Search Mode 1 
        /// </summary>
        INVENTORY_SEARCH_MODE_CARTON_STAGE_1 = 7,
        /// <summary>
        /// ItemVerify Inventory Search Mode 2 
        /// </summary>
        INVENTORY_SEARCH_MODE_CARTON_STAGE_2 = 8,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"DeviceMode")]
    public enum DeviceMode
    {
        DEVICE_MODE_INVENTORY = 0,
        DEVICE_MODE_ENCODE = 1,
        DEVICE_MODE_VERIFY_TAGCHIP_BASIC = 2,
        DEVICE_MODE_VERIFY_TAGCHIP_DATA = 3,
        DEVICE_MODE_ITEM_VERIFY = 6,
    }
    
    /// <summary>
    /// How the reader will be used. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"OperationMode")]
    public enum OperationMode
    {
        /// <summary>
        /// Use with a start and stop for a quantity of tags. 
        /// </summary>
        OPERATION_MODE_BATCH = 0,
        /// <summary>
        /// Use with a start and stop for optimized encoding or verification when a single tag is in the FoV. 
        /// </summary>
        OPERATION_MODE_SINGLE = 1,
        /// <summary>
        /// Use this mode to encode a continuous stream of tags. 
        /// </summary>
        OPERATION_MODE_CONTINUOUS = 2,
    }
    
    /// <summary>
    /// The way that GPIOs are used, with functions on the same GPIOs or on separate GPIOs. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"GPIOSignalMode")]
    public enum GpioSignalMode
    {
        GPIO_SIGNAL_MODE_COMBINED = 0,
        GPIO_SIGNAL_MODE_SEPARATE = 1,
        GPIO_SIGNAL_MODE_PRESENCE_DETECTION = 2,
    }
    
    /// <summary>
    /// Use this type when registering a report handler. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"ReportType")]
    public enum ReportType
    {
        REPORT_TYPE_ALL = 0,
        REPORT_TYPE_DEVICE_EVENT = 1,
        REPORT_TYPE_OPERATION_SUMMARY = 2,
        REPORT_TYPE_TAG_OPERATION = 3,
        REPORT_TYPE_CARTON_CONTENTS = 4,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"TagOperationReportTrigger")]
    public enum TagOperationReportTrigger
    {
        /// <summary>
        /// Send reports as operations are performed. 
        /// </summary>
        TAG_OPERATION_REPORT_TRIGGER_IMMEDIATE = 1,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"OperationSummaryResult")]
    public enum OperationSummaryResult
    {
        OPERATION_SUMMARY_RESULT_PASS = 0,
        OPERATION_SUMMARY_RESULT_FAIL = 1,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"TagOperationResult")]
    public enum TagOperationResult
    {
        TAG_OPERATION_RESULT_PASS = 0,
        TAG_OPERATION_RESULT_PASS_ALREADY_DONE = 1,
        TAG_OPERATION_RESULT_RETRY = 2,
        TAG_OPERATION_RESULT_RETRY_INSUFFICIENT_POWER = 3,
        TAG_OPERATION_RESULT_RETRY_NO_RESPONSE_FROM_TAG = 4,
        TAG_OPERATION_RESULT_RETRY_SERIALIZATION_JOB_QUEUE_EMPTY = 5,
        TAG_OPERATION_RESULT_RETRY_TID_TABLE_NO_MATCH = 6,
        TAG_OPERATION_RESULT_RETRY_ORDERED_LIST_EMPTY = 7,
        TAG_OPERATION_RESULT_FAIL = 8,
        TAG_OPERATION_RESULT_FAIL_INSUFFICIENT_POWER = 9,
        TAG_OPERATION_RESULT_FAIL_NO_RESPONSE_FROM_TAG = 10,
        TAG_OPERATION_RESULT_FAIL_MEMORY_BANK_LOCKED = 11,
        TAG_OPERATION_RESULT_FAIL_MEMORY_BANK_MEMORY_OVERRUN = 12,
        TAG_OPERATION_RESULT_FAIL_GEN2_INSUFFICIENT_PRIVILEGES = 13,
        TAG_OPERATION_RESULT_FAIL_SERIALIZATION_JOB_QUEUE_EMPTY = 14,
        /// <summary>
        /// There was no TIDTableEntry_ for this tag. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_TID_TABLE_NO_MATCH = 15,
        /// <summary>
        /// The device has run out of OrderedListEntry_. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_ORDERED_LIST_EMPTY = 16,
        /// <summary>
        /// This tag chip is not supported. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_TAG_CHIP_NOT_SUPPORTED = 17,
        /// <summary>
        /// This tag chip is supported, but the corresponding feature key has not been installed. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_TAG_CHIP_SUPPORTED_LICENSE_KEY_NOT_INSTALLED = 18,
        /// <summary>
        /// The device was expecting to see a tag (Single mode), but did not. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_TAG_NOT_INVENTORIED = 19,
        /// <summary>
        /// The remaining encoding volume for this tag type has exhausted. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_VOLUME_EXHAUSTED = 20,
        TAG_OPERATION_RESULT_FAIL_TID_PARITY_CHECK = 21,
        /// <summary>
        /// The device has run out of serial numbers. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_SERIAL_NUMBER_RANGE_EMPTY = 22,
        /// <summary>
        /// Device was configured to expect performance information packet, but did not receive one for this tid 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_VOYANTIC_TEST_RESULT_MISSING = 23,
        /// <summary>
        /// The upstream performance indicator reported that this tag had poor performance. This will only come from a tagchip basic verifier who receives a performance report that declares a failure. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_VOYANTIC_TEST_RESULT_FAILED = 24,
        /// <summary>
        /// The device attempted to void the tag, and was successful. 
        /// </summary>
        TAG_OPERATION_RESULT_VOID_TAG_PASS = 25,
        /// <summary>
        /// The device attempted to void the tag and failed to complete the task 
        /// </summary>
        TAG_OPERATION_RESULT_VOID_TAG_FAIL = 26,
        /// <summary>
        /// The encoding configuration for this tag was invalid. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_TID_TABLE_INVALID_CONFIG = 27,
        /// <summary>
        /// This tag didn't match one of the configured filters. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_FILTER_NO_MATCH = 28,
        /// <summary>
        /// The Volume License for this tag has been revoked. Please contactImpinj Support for assistance. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_VOLUME_LICENSE_REVOKED = 29,
        /// <summary>
        /// The device has detected that the backscattered EPC does not match the EPC writes that were already performed. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_INVENTORIED_EPC_MISMATCH = 30,
        /// <summary>
        /// The device has detected that the Monza R6P memory map was previously configured to a different state than what was requested. 
        /// </summary>
        TAG_OPERATION_RESULT_FAIL_CANNOT_CHANGE_MEMORY_MAP_CONFIG = 31,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"SerializationJobType")]
    public enum SerializationJobType
    {
        SERIALIZATION_JOB_TYPE_STATIC = 1,
        SERIALIZATION_JOB_TYPE_TID_TABLE = 4,
        SERIALIZATION_JOB_TYPE_ORDERED_LIST = 5,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"SerializationJobCompletionCriteria")]
    public enum SerializationJobCompletionCriteria
    {
        SERIALIZATION_JOB_COMPLETION_CRITERIA_NONE = 4,
    }
    
    /// <summary>
    /// Serial Number Range format specifies whether the EPC will be formatted in binary coded hexadecimal or binary coded decimal. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"SerialNumberRangeFormat")]
    public enum SerialNumberRangeFormat
    {
        SERIAL_NUMBER_RANGE_FORMAT_HEX = 0,
        SERIAL_NUMBER_RANGE_FORMAT_DEC = 1,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"PasswordGenerationMethod")]
    public enum PasswordGenerationMethod
    {
        PASSWORD_GENERATION_METHOD_STATIC = 1,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"MonzaR6PMemoryMapConfig")]
    public enum MonzaR6PMemoryMapConfig
    {
        MONZA_R6P_MEMORY_MAP_CONFIG_96_BIT_EPC_64_BIT_USER = 0,
        MONZA_R6P_MEMORY_MAP_CONFIG_128_BIT_EPC_32_BIT_USER = 1,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"TagOperationReportType")]
    public enum TagOperationReportType
    {
        TAG_OPERATION_REPORT_TYPE_INVENTORY = 0,
        TAG_OPERATION_REPORT_TYPE_VERIFY = 1,
        TAG_OPERATION_REPORT_TYPE_ENCODE = 2,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"CartonContentsResult")]
    public enum CartonContentsResult
    {
        /// <summary>
        /// This indicates that the contents of this packet describes acarton for which the device had good data. 
        /// </summary>
        CARTON_CONTENTS_RESULT_OK = 1,
        /// <summary>
        /// The stop trigger was seen for this carton, but no correspondingstart was seen. An example would be in a belt stoppage scenario duringstartup 
        /// </summary>
        CARTON_CONTENTS_RESULT_ERROR_NO_ENTER = 3,
        /// <summary>
        /// DEPRECATED 
        /// </summary>
        CARTON_CONTENTS_RESULT_ERROR_NO_START = 2,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"CartonContentsErrorType")]
    public enum CartonContentsErrorType
    {
        CARTON_CONTENTS_ERROR_EXTRA_LEADING_ENTER = 1,
        CARTON_CONTENTS_ERROR_EXTRA_TRAILING_ENTER = 2,
        CARTON_CONTENTS_ERROR_MISSING_LEADING_ENTER = 3,
        CARTON_CONTENTS_ERROR_MISSING_TRAILING_ENTER = 4,
    }
    
    /// <summary>
    /// **NOT YET SUPPORTED** 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"OperationEventType")]
    public enum OperationEventType
    {
        OPERATION_EVENT_TYPE_START_TRIGGER = 1,
        OPERATION_EVENT_TYPE_STOP_TRIGGER = 2,
        /// <summary>
        /// An event for the end of the operation, and when no more reports will be delivered. 
        /// </summary>
        OPERATION_EVENT_TYPE_COMPLETE = 3,
    }
    
    /// <summary>
    /// **NOT YET SUPPORTED** The source of the operation start/stop. 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"OperationTriggerType")]
    public enum OperationTriggerType
    {
        OPERATION_TRIGGER_TYPE_CLIENT = 1,
        OPERATION_TRIGGER_TYPE_GPI = 2,
        OPERATION_TRIGGER_TYPE_TIMEOUT = 4,
    }
    
    /// <summary>
    /// **NOT YET SUPPORTED** 
    /// </summary>
    [global::ProtoBuf.ProtoContract(Name=@"DeviceExceptionEventType")]
    public enum DeviceExceptionEventType
    {
        DEVICE_EXCEPTION_EVENT_TYPE_UNKNOWN = 1,
        DEVICE_EXCEPTION_EVENT_TYPE_SYSTEM_FAULT = 2,
        /// <summary>
        /// Generated when a GPI start trigger fires before STP is done with the current operation and returned to the engaged state. 
        /// </summary>
        DEVICE_EXCEPTION_EVENT_TYPE_OPERATION_START_TRIGGER_FAULT = 3,
    }
    
    [global::ProtoBuf.ProtoContract(Name=@"LowEncodeVolumeEventType")]
    public enum LowEncodeVolumeEventType
    {
        LOW_ENCODE_VOLUME_EVENT_MONZA = 1,
        LOW_ENCODE_VOLUME_EVENT_NON_MONZA = 2,
    }
    
    #endregion
}
