// source: gw/gw.proto
/**
 * @fileoverview
 * @enhanceable
 * @suppress {messageConventions} JS Compiler reports an error if a variable or
 *     field starts with 'MSG_' and isn't a translatable message.
 * @public
 */
// GENERATED CODE -- DO NOT EDIT!

var jspb = require('google-protobuf');
var goog = jspb;
var global = Function('return this')();

var common_common_pb = require('../common/common_pb.js');
goog.object.extend(proto, common_common_pb);
var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/timestamp_pb.js');
goog.object.extend(proto, google_protobuf_timestamp_pb);
var google_protobuf_duration_pb = require('google-protobuf/google/protobuf/duration_pb.js');
goog.object.extend(proto, google_protobuf_duration_pb);
goog.exportSymbol('proto.gw.CRCStatus', null, global);
goog.exportSymbol('proto.gw.ChannelConfiguration', null, global);
goog.exportSymbol('proto.gw.ChannelConfiguration.ModulationConfigCase', null, global);
goog.exportSymbol('proto.gw.ConnState', null, global);
goog.exportSymbol('proto.gw.ConnState.State', null, global);
goog.exportSymbol('proto.gw.DelayTimingInfo', null, global);
goog.exportSymbol('proto.gw.DownlinkFrame', null, global);
goog.exportSymbol('proto.gw.DownlinkFrameItem', null, global);
goog.exportSymbol('proto.gw.DownlinkTXAck', null, global);
goog.exportSymbol('proto.gw.DownlinkTXAckItem', null, global);
goog.exportSymbol('proto.gw.DownlinkTXInfo', null, global);
goog.exportSymbol('proto.gw.DownlinkTXInfo.ModulationInfoCase', null, global);
goog.exportSymbol('proto.gw.DownlinkTXInfo.TimingInfoCase', null, global);
goog.exportSymbol('proto.gw.DownlinkTiming', null, global);
goog.exportSymbol('proto.gw.EncryptedFineTimestamp', null, global);
goog.exportSymbol('proto.gw.FSKModulationConfig', null, global);
goog.exportSymbol('proto.gw.FSKModulationInfo', null, global);
goog.exportSymbol('proto.gw.FineTimestampType', null, global);
goog.exportSymbol('proto.gw.GPSEpochTimingInfo', null, global);
goog.exportSymbol('proto.gw.GatewayCommandExecRequest', null, global);
goog.exportSymbol('proto.gw.GatewayCommandExecResponse', null, global);
goog.exportSymbol('proto.gw.GatewayConfiguration', null, global);
goog.exportSymbol('proto.gw.GatewayStats', null, global);
goog.exportSymbol('proto.gw.ImmediatelyTimingInfo', null, global);
goog.exportSymbol('proto.gw.LRFHSSModulationInfo', null, global);
goog.exportSymbol('proto.gw.LoRaModulationConfig', null, global);
goog.exportSymbol('proto.gw.LoRaModulationInfo', null, global);
goog.exportSymbol('proto.gw.Modulation', null, global);
goog.exportSymbol('proto.gw.Modulation.ParametersCase', null, global);
goog.exportSymbol('proto.gw.PerModulationCount', null, global);
goog.exportSymbol('proto.gw.PlainFineTimestamp', null, global);
goog.exportSymbol('proto.gw.RawPacketForwarderCommand', null, global);
goog.exportSymbol('proto.gw.RawPacketForwarderEvent', null, global);
goog.exportSymbol('proto.gw.TxAckStatus', null, global);
goog.exportSymbol('proto.gw.UplinkFrame', null, global);
goog.exportSymbol('proto.gw.UplinkFrameSet', null, global);
goog.exportSymbol('proto.gw.UplinkRXInfo', null, global);
goog.exportSymbol('proto.gw.UplinkRXInfo.FineTimestampCase', null, global);
goog.exportSymbol('proto.gw.UplinkTXInfo', null, global);
goog.exportSymbol('proto.gw.UplinkTXInfo.ModulationInfoCase', null, global);
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.Modulation = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, proto.gw.Modulation.oneofGroups_);
};
goog.inherits(proto.gw.Modulation, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.Modulation.displayName = 'proto.gw.Modulation';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.UplinkTXInfo = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, proto.gw.UplinkTXInfo.oneofGroups_);
};
goog.inherits(proto.gw.UplinkTXInfo, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.UplinkTXInfo.displayName = 'proto.gw.UplinkTXInfo';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.LoRaModulationInfo = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.LoRaModulationInfo, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.LoRaModulationInfo.displayName = 'proto.gw.LoRaModulationInfo';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.FSKModulationInfo = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.FSKModulationInfo, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.FSKModulationInfo.displayName = 'proto.gw.FSKModulationInfo';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.LRFHSSModulationInfo = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.LRFHSSModulationInfo, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.LRFHSSModulationInfo.displayName = 'proto.gw.LRFHSSModulationInfo';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.EncryptedFineTimestamp = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.EncryptedFineTimestamp, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.EncryptedFineTimestamp.displayName = 'proto.gw.EncryptedFineTimestamp';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.PlainFineTimestamp = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.PlainFineTimestamp, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.PlainFineTimestamp.displayName = 'proto.gw.PlainFineTimestamp';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.GatewayStats = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, proto.gw.GatewayStats.repeatedFields_, null);
};
goog.inherits(proto.gw.GatewayStats, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.GatewayStats.displayName = 'proto.gw.GatewayStats';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.PerModulationCount = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.PerModulationCount, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.PerModulationCount.displayName = 'proto.gw.PerModulationCount';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.UplinkRXInfo = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, proto.gw.UplinkRXInfo.oneofGroups_);
};
goog.inherits(proto.gw.UplinkRXInfo, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.UplinkRXInfo.displayName = 'proto.gw.UplinkRXInfo';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.DownlinkTXInfo = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, proto.gw.DownlinkTXInfo.oneofGroups_);
};
goog.inherits(proto.gw.DownlinkTXInfo, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.DownlinkTXInfo.displayName = 'proto.gw.DownlinkTXInfo';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.ImmediatelyTimingInfo = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.ImmediatelyTimingInfo, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.ImmediatelyTimingInfo.displayName = 'proto.gw.ImmediatelyTimingInfo';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.DelayTimingInfo = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.DelayTimingInfo, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.DelayTimingInfo.displayName = 'proto.gw.DelayTimingInfo';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.GPSEpochTimingInfo = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.GPSEpochTimingInfo, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.GPSEpochTimingInfo.displayName = 'proto.gw.GPSEpochTimingInfo';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.UplinkFrame = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.UplinkFrame, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.UplinkFrame.displayName = 'proto.gw.UplinkFrame';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.UplinkFrameSet = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, proto.gw.UplinkFrameSet.repeatedFields_, null);
};
goog.inherits(proto.gw.UplinkFrameSet, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.UplinkFrameSet.displayName = 'proto.gw.UplinkFrameSet';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.DownlinkFrame = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, proto.gw.DownlinkFrame.repeatedFields_, null);
};
goog.inherits(proto.gw.DownlinkFrame, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.DownlinkFrame.displayName = 'proto.gw.DownlinkFrame';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.DownlinkFrameItem = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.DownlinkFrameItem, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.DownlinkFrameItem.displayName = 'proto.gw.DownlinkFrameItem';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.DownlinkTXAck = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, proto.gw.DownlinkTXAck.repeatedFields_, null);
};
goog.inherits(proto.gw.DownlinkTXAck, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.DownlinkTXAck.displayName = 'proto.gw.DownlinkTXAck';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.DownlinkTXAckItem = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.DownlinkTXAckItem, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.DownlinkTXAckItem.displayName = 'proto.gw.DownlinkTXAckItem';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.GatewayConfiguration = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, proto.gw.GatewayConfiguration.repeatedFields_, null);
};
goog.inherits(proto.gw.GatewayConfiguration, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.GatewayConfiguration.displayName = 'proto.gw.GatewayConfiguration';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.ChannelConfiguration = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, proto.gw.ChannelConfiguration.oneofGroups_);
};
goog.inherits(proto.gw.ChannelConfiguration, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.ChannelConfiguration.displayName = 'proto.gw.ChannelConfiguration';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.LoRaModulationConfig = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, proto.gw.LoRaModulationConfig.repeatedFields_, null);
};
goog.inherits(proto.gw.LoRaModulationConfig, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.LoRaModulationConfig.displayName = 'proto.gw.LoRaModulationConfig';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.FSKModulationConfig = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.FSKModulationConfig, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.FSKModulationConfig.displayName = 'proto.gw.FSKModulationConfig';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.GatewayCommandExecRequest = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.GatewayCommandExecRequest, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.GatewayCommandExecRequest.displayName = 'proto.gw.GatewayCommandExecRequest';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.GatewayCommandExecResponse = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.GatewayCommandExecResponse, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.GatewayCommandExecResponse.displayName = 'proto.gw.GatewayCommandExecResponse';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.RawPacketForwarderEvent = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.RawPacketForwarderEvent, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.RawPacketForwarderEvent.displayName = 'proto.gw.RawPacketForwarderEvent';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.RawPacketForwarderCommand = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.RawPacketForwarderCommand, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.RawPacketForwarderCommand.displayName = 'proto.gw.RawPacketForwarderCommand';
}
/**
 * Generated by JsPbCodeGenerator.
 * @param {Array=} opt_data Optional initial data array, typically from a
 * server response, or constructed directly in Javascript. The array is used
 * in place and becomes part of the constructed object. It is not cloned.
 * If no data is provided, the constructed object will be empty, but still
 * valid.
 * @extends {jspb.Message}
 * @constructor
 */
proto.gw.ConnState = function(opt_data) {
  jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.gw.ConnState, jspb.Message);
if (goog.DEBUG && !COMPILED) {
  /**
   * @public
   * @override
   */
  proto.gw.ConnState.displayName = 'proto.gw.ConnState';
}

/**
 * Oneof group definitions for this message. Each group defines the field
 * numbers belonging to that group. When of these fields' value is set, all
 * other fields in the group are cleared. During deserialization, if multiple
 * fields are encountered for a group, only the last value seen will be kept.
 * @private {!Array<!Array<number>>}
 * @const
 */
proto.gw.Modulation.oneofGroups_ = [[3,4,5]];

/**
 * @enum {number}
 */
proto.gw.Modulation.ParametersCase = {
  PARAMETERS_NOT_SET: 0,
  LORA: 3,
  FSK: 4,
  LR_FHSS: 5
};

/**
 * @return {proto.gw.Modulation.ParametersCase}
 */
proto.gw.Modulation.prototype.getParametersCase = function() {
  return /** @type {proto.gw.Modulation.ParametersCase} */(jspb.Message.computeOneofCase(this, proto.gw.Modulation.oneofGroups_[0]));
};



if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.Modulation.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.Modulation.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.Modulation} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.Modulation.toObject = function(includeInstance, msg) {
  var f, obj = {
    lora: (f = msg.getLora()) && proto.gw.LoRaModulationInfo.toObject(includeInstance, f),
    fsk: (f = msg.getFsk()) && proto.gw.FSKModulationInfo.toObject(includeInstance, f),
    lrFhss: (f = msg.getLrFhss()) && proto.gw.LRFHSSModulationInfo.toObject(includeInstance, f)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.Modulation}
 */
proto.gw.Modulation.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.Modulation;
  return proto.gw.Modulation.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.Modulation} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.Modulation}
 */
proto.gw.Modulation.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 3:
      var value = new proto.gw.LoRaModulationInfo;
      reader.readMessage(value,proto.gw.LoRaModulationInfo.deserializeBinaryFromReader);
      msg.setLora(value);
      break;
    case 4:
      var value = new proto.gw.FSKModulationInfo;
      reader.readMessage(value,proto.gw.FSKModulationInfo.deserializeBinaryFromReader);
      msg.setFsk(value);
      break;
    case 5:
      var value = new proto.gw.LRFHSSModulationInfo;
      reader.readMessage(value,proto.gw.LRFHSSModulationInfo.deserializeBinaryFromReader);
      msg.setLrFhss(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.Modulation.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.Modulation.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.Modulation} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.Modulation.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getLora();
  if (f != null) {
    writer.writeMessage(
      3,
      f,
      proto.gw.LoRaModulationInfo.serializeBinaryToWriter
    );
  }
  f = message.getFsk();
  if (f != null) {
    writer.writeMessage(
      4,
      f,
      proto.gw.FSKModulationInfo.serializeBinaryToWriter
    );
  }
  f = message.getLrFhss();
  if (f != null) {
    writer.writeMessage(
      5,
      f,
      proto.gw.LRFHSSModulationInfo.serializeBinaryToWriter
    );
  }
};


/**
 * optional LoRaModulationInfo lora = 3;
 * @return {?proto.gw.LoRaModulationInfo}
 */
proto.gw.Modulation.prototype.getLora = function() {
  return /** @type{?proto.gw.LoRaModulationInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.LoRaModulationInfo, 3));
};


/**
 * @param {?proto.gw.LoRaModulationInfo|undefined} value
 * @return {!proto.gw.Modulation} returns this
*/
proto.gw.Modulation.prototype.setLora = function(value) {
  return jspb.Message.setOneofWrapperField(this, 3, proto.gw.Modulation.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.Modulation} returns this
 */
proto.gw.Modulation.prototype.clearLora = function() {
  return this.setLora(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.Modulation.prototype.hasLora = function() {
  return jspb.Message.getField(this, 3) != null;
};


/**
 * optional FSKModulationInfo fsk = 4;
 * @return {?proto.gw.FSKModulationInfo}
 */
proto.gw.Modulation.prototype.getFsk = function() {
  return /** @type{?proto.gw.FSKModulationInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.FSKModulationInfo, 4));
};


/**
 * @param {?proto.gw.FSKModulationInfo|undefined} value
 * @return {!proto.gw.Modulation} returns this
*/
proto.gw.Modulation.prototype.setFsk = function(value) {
  return jspb.Message.setOneofWrapperField(this, 4, proto.gw.Modulation.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.Modulation} returns this
 */
proto.gw.Modulation.prototype.clearFsk = function() {
  return this.setFsk(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.Modulation.prototype.hasFsk = function() {
  return jspb.Message.getField(this, 4) != null;
};


/**
 * optional LRFHSSModulationInfo lr_fhss = 5;
 * @return {?proto.gw.LRFHSSModulationInfo}
 */
proto.gw.Modulation.prototype.getLrFhss = function() {
  return /** @type{?proto.gw.LRFHSSModulationInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.LRFHSSModulationInfo, 5));
};


/**
 * @param {?proto.gw.LRFHSSModulationInfo|undefined} value
 * @return {!proto.gw.Modulation} returns this
*/
proto.gw.Modulation.prototype.setLrFhss = function(value) {
  return jspb.Message.setOneofWrapperField(this, 5, proto.gw.Modulation.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.Modulation} returns this
 */
proto.gw.Modulation.prototype.clearLrFhss = function() {
  return this.setLrFhss(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.Modulation.prototype.hasLrFhss = function() {
  return jspb.Message.getField(this, 5) != null;
};



/**
 * Oneof group definitions for this message. Each group defines the field
 * numbers belonging to that group. When of these fields' value is set, all
 * other fields in the group are cleared. During deserialization, if multiple
 * fields are encountered for a group, only the last value seen will be kept.
 * @private {!Array<!Array<number>>}
 * @const
 */
proto.gw.UplinkTXInfo.oneofGroups_ = [[3,4,5]];

/**
 * @enum {number}
 */
proto.gw.UplinkTXInfo.ModulationInfoCase = {
  MODULATION_INFO_NOT_SET: 0,
  LORA_MODULATION_INFO: 3,
  FSK_MODULATION_INFO: 4,
  LR_FHSS_MODULATION_INFO: 5
};

/**
 * @return {proto.gw.UplinkTXInfo.ModulationInfoCase}
 */
proto.gw.UplinkTXInfo.prototype.getModulationInfoCase = function() {
  return /** @type {proto.gw.UplinkTXInfo.ModulationInfoCase} */(jspb.Message.computeOneofCase(this, proto.gw.UplinkTXInfo.oneofGroups_[0]));
};



if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.UplinkTXInfo.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.UplinkTXInfo.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.UplinkTXInfo} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.UplinkTXInfo.toObject = function(includeInstance, msg) {
  var f, obj = {
    frequency: jspb.Message.getFieldWithDefault(msg, 1, 0),
    modulation: jspb.Message.getFieldWithDefault(msg, 2, 0),
    loraModulationInfo: (f = msg.getLoraModulationInfo()) && proto.gw.LoRaModulationInfo.toObject(includeInstance, f),
    fskModulationInfo: (f = msg.getFskModulationInfo()) && proto.gw.FSKModulationInfo.toObject(includeInstance, f),
    lrFhssModulationInfo: (f = msg.getLrFhssModulationInfo()) && proto.gw.LRFHSSModulationInfo.toObject(includeInstance, f)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.UplinkTXInfo}
 */
proto.gw.UplinkTXInfo.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.UplinkTXInfo;
  return proto.gw.UplinkTXInfo.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.UplinkTXInfo} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.UplinkTXInfo}
 */
proto.gw.UplinkTXInfo.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setFrequency(value);
      break;
    case 2:
      var value = /** @type {!proto.common.Modulation} */ (reader.readEnum());
      msg.setModulation(value);
      break;
    case 3:
      var value = new proto.gw.LoRaModulationInfo;
      reader.readMessage(value,proto.gw.LoRaModulationInfo.deserializeBinaryFromReader);
      msg.setLoraModulationInfo(value);
      break;
    case 4:
      var value = new proto.gw.FSKModulationInfo;
      reader.readMessage(value,proto.gw.FSKModulationInfo.deserializeBinaryFromReader);
      msg.setFskModulationInfo(value);
      break;
    case 5:
      var value = new proto.gw.LRFHSSModulationInfo;
      reader.readMessage(value,proto.gw.LRFHSSModulationInfo.deserializeBinaryFromReader);
      msg.setLrFhssModulationInfo(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.UplinkTXInfo.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.UplinkTXInfo.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.UplinkTXInfo} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.UplinkTXInfo.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getFrequency();
  if (f !== 0) {
    writer.writeUint32(
      1,
      f
    );
  }
  f = message.getModulation();
  if (f !== 0.0) {
    writer.writeEnum(
      2,
      f
    );
  }
  f = message.getLoraModulationInfo();
  if (f != null) {
    writer.writeMessage(
      3,
      f,
      proto.gw.LoRaModulationInfo.serializeBinaryToWriter
    );
  }
  f = message.getFskModulationInfo();
  if (f != null) {
    writer.writeMessage(
      4,
      f,
      proto.gw.FSKModulationInfo.serializeBinaryToWriter
    );
  }
  f = message.getLrFhssModulationInfo();
  if (f != null) {
    writer.writeMessage(
      5,
      f,
      proto.gw.LRFHSSModulationInfo.serializeBinaryToWriter
    );
  }
};


/**
 * optional uint32 frequency = 1;
 * @return {number}
 */
proto.gw.UplinkTXInfo.prototype.getFrequency = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.UplinkTXInfo} returns this
 */
proto.gw.UplinkTXInfo.prototype.setFrequency = function(value) {
  return jspb.Message.setProto3IntField(this, 1, value);
};


/**
 * optional common.Modulation modulation = 2;
 * @return {!proto.common.Modulation}
 */
proto.gw.UplinkTXInfo.prototype.getModulation = function() {
  return /** @type {!proto.common.Modulation} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
};


/**
 * @param {!proto.common.Modulation} value
 * @return {!proto.gw.UplinkTXInfo} returns this
 */
proto.gw.UplinkTXInfo.prototype.setModulation = function(value) {
  return jspb.Message.setProto3EnumField(this, 2, value);
};


/**
 * optional LoRaModulationInfo lora_modulation_info = 3;
 * @return {?proto.gw.LoRaModulationInfo}
 */
proto.gw.UplinkTXInfo.prototype.getLoraModulationInfo = function() {
  return /** @type{?proto.gw.LoRaModulationInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.LoRaModulationInfo, 3));
};


/**
 * @param {?proto.gw.LoRaModulationInfo|undefined} value
 * @return {!proto.gw.UplinkTXInfo} returns this
*/
proto.gw.UplinkTXInfo.prototype.setLoraModulationInfo = function(value) {
  return jspb.Message.setOneofWrapperField(this, 3, proto.gw.UplinkTXInfo.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.UplinkTXInfo} returns this
 */
proto.gw.UplinkTXInfo.prototype.clearLoraModulationInfo = function() {
  return this.setLoraModulationInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.UplinkTXInfo.prototype.hasLoraModulationInfo = function() {
  return jspb.Message.getField(this, 3) != null;
};


/**
 * optional FSKModulationInfo fsk_modulation_info = 4;
 * @return {?proto.gw.FSKModulationInfo}
 */
proto.gw.UplinkTXInfo.prototype.getFskModulationInfo = function() {
  return /** @type{?proto.gw.FSKModulationInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.FSKModulationInfo, 4));
};


/**
 * @param {?proto.gw.FSKModulationInfo|undefined} value
 * @return {!proto.gw.UplinkTXInfo} returns this
*/
proto.gw.UplinkTXInfo.prototype.setFskModulationInfo = function(value) {
  return jspb.Message.setOneofWrapperField(this, 4, proto.gw.UplinkTXInfo.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.UplinkTXInfo} returns this
 */
proto.gw.UplinkTXInfo.prototype.clearFskModulationInfo = function() {
  return this.setFskModulationInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.UplinkTXInfo.prototype.hasFskModulationInfo = function() {
  return jspb.Message.getField(this, 4) != null;
};


/**
 * optional LRFHSSModulationInfo lr_fhss_modulation_info = 5;
 * @return {?proto.gw.LRFHSSModulationInfo}
 */
proto.gw.UplinkTXInfo.prototype.getLrFhssModulationInfo = function() {
  return /** @type{?proto.gw.LRFHSSModulationInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.LRFHSSModulationInfo, 5));
};


/**
 * @param {?proto.gw.LRFHSSModulationInfo|undefined} value
 * @return {!proto.gw.UplinkTXInfo} returns this
*/
proto.gw.UplinkTXInfo.prototype.setLrFhssModulationInfo = function(value) {
  return jspb.Message.setOneofWrapperField(this, 5, proto.gw.UplinkTXInfo.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.UplinkTXInfo} returns this
 */
proto.gw.UplinkTXInfo.prototype.clearLrFhssModulationInfo = function() {
  return this.setLrFhssModulationInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.UplinkTXInfo.prototype.hasLrFhssModulationInfo = function() {
  return jspb.Message.getField(this, 5) != null;
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.LoRaModulationInfo.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.LoRaModulationInfo.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.LoRaModulationInfo} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.LoRaModulationInfo.toObject = function(includeInstance, msg) {
  var f, obj = {
    bandwidth: jspb.Message.getFieldWithDefault(msg, 1, 0),
    spreadingFactor: jspb.Message.getFieldWithDefault(msg, 2, 0),
    codeRate: jspb.Message.getFieldWithDefault(msg, 3, ""),
    polarizationInversion: jspb.Message.getBooleanFieldWithDefault(msg, 4, false)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.LoRaModulationInfo}
 */
proto.gw.LoRaModulationInfo.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.LoRaModulationInfo;
  return proto.gw.LoRaModulationInfo.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.LoRaModulationInfo} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.LoRaModulationInfo}
 */
proto.gw.LoRaModulationInfo.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setBandwidth(value);
      break;
    case 2:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setSpreadingFactor(value);
      break;
    case 3:
      var value = /** @type {string} */ (reader.readString());
      msg.setCodeRate(value);
      break;
    case 4:
      var value = /** @type {boolean} */ (reader.readBool());
      msg.setPolarizationInversion(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.LoRaModulationInfo.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.LoRaModulationInfo.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.LoRaModulationInfo} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.LoRaModulationInfo.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getBandwidth();
  if (f !== 0) {
    writer.writeUint32(
      1,
      f
    );
  }
  f = message.getSpreadingFactor();
  if (f !== 0) {
    writer.writeUint32(
      2,
      f
    );
  }
  f = message.getCodeRate();
  if (f.length > 0) {
    writer.writeString(
      3,
      f
    );
  }
  f = message.getPolarizationInversion();
  if (f) {
    writer.writeBool(
      4,
      f
    );
  }
};


/**
 * optional uint32 bandwidth = 1;
 * @return {number}
 */
proto.gw.LoRaModulationInfo.prototype.getBandwidth = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.LoRaModulationInfo} returns this
 */
proto.gw.LoRaModulationInfo.prototype.setBandwidth = function(value) {
  return jspb.Message.setProto3IntField(this, 1, value);
};


/**
 * optional uint32 spreading_factor = 2;
 * @return {number}
 */
proto.gw.LoRaModulationInfo.prototype.getSpreadingFactor = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.LoRaModulationInfo} returns this
 */
proto.gw.LoRaModulationInfo.prototype.setSpreadingFactor = function(value) {
  return jspb.Message.setProto3IntField(this, 2, value);
};


/**
 * optional string code_rate = 3;
 * @return {string}
 */
proto.gw.LoRaModulationInfo.prototype.getCodeRate = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
};


/**
 * @param {string} value
 * @return {!proto.gw.LoRaModulationInfo} returns this
 */
proto.gw.LoRaModulationInfo.prototype.setCodeRate = function(value) {
  return jspb.Message.setProto3StringField(this, 3, value);
};


/**
 * optional bool polarization_inversion = 4;
 * @return {boolean}
 */
proto.gw.LoRaModulationInfo.prototype.getPolarizationInversion = function() {
  return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
};


/**
 * @param {boolean} value
 * @return {!proto.gw.LoRaModulationInfo} returns this
 */
proto.gw.LoRaModulationInfo.prototype.setPolarizationInversion = function(value) {
  return jspb.Message.setProto3BooleanField(this, 4, value);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.FSKModulationInfo.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.FSKModulationInfo.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.FSKModulationInfo} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.FSKModulationInfo.toObject = function(includeInstance, msg) {
  var f, obj = {
    frequencyDeviation: jspb.Message.getFieldWithDefault(msg, 1, 0),
    datarate: jspb.Message.getFieldWithDefault(msg, 2, 0)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.FSKModulationInfo}
 */
proto.gw.FSKModulationInfo.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.FSKModulationInfo;
  return proto.gw.FSKModulationInfo.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.FSKModulationInfo} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.FSKModulationInfo}
 */
proto.gw.FSKModulationInfo.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setFrequencyDeviation(value);
      break;
    case 2:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setDatarate(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.FSKModulationInfo.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.FSKModulationInfo.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.FSKModulationInfo} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.FSKModulationInfo.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getFrequencyDeviation();
  if (f !== 0) {
    writer.writeUint32(
      1,
      f
    );
  }
  f = message.getDatarate();
  if (f !== 0) {
    writer.writeUint32(
      2,
      f
    );
  }
};


/**
 * optional uint32 frequency_deviation = 1;
 * @return {number}
 */
proto.gw.FSKModulationInfo.prototype.getFrequencyDeviation = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.FSKModulationInfo} returns this
 */
proto.gw.FSKModulationInfo.prototype.setFrequencyDeviation = function(value) {
  return jspb.Message.setProto3IntField(this, 1, value);
};


/**
 * optional uint32 datarate = 2;
 * @return {number}
 */
proto.gw.FSKModulationInfo.prototype.getDatarate = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.FSKModulationInfo} returns this
 */
proto.gw.FSKModulationInfo.prototype.setDatarate = function(value) {
  return jspb.Message.setProto3IntField(this, 2, value);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.LRFHSSModulationInfo.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.LRFHSSModulationInfo.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.LRFHSSModulationInfo} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.LRFHSSModulationInfo.toObject = function(includeInstance, msg) {
  var f, obj = {
    operatingChannelWidth: jspb.Message.getFieldWithDefault(msg, 1, 0),
    codeRate: jspb.Message.getFieldWithDefault(msg, 2, ""),
    gridSteps: jspb.Message.getFieldWithDefault(msg, 3, 0)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.LRFHSSModulationInfo}
 */
proto.gw.LRFHSSModulationInfo.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.LRFHSSModulationInfo;
  return proto.gw.LRFHSSModulationInfo.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.LRFHSSModulationInfo} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.LRFHSSModulationInfo}
 */
proto.gw.LRFHSSModulationInfo.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setOperatingChannelWidth(value);
      break;
    case 2:
      var value = /** @type {string} */ (reader.readString());
      msg.setCodeRate(value);
      break;
    case 3:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setGridSteps(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.LRFHSSModulationInfo.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.LRFHSSModulationInfo.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.LRFHSSModulationInfo} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.LRFHSSModulationInfo.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getOperatingChannelWidth();
  if (f !== 0) {
    writer.writeUint32(
      1,
      f
    );
  }
  f = message.getCodeRate();
  if (f.length > 0) {
    writer.writeString(
      2,
      f
    );
  }
  f = message.getGridSteps();
  if (f !== 0) {
    writer.writeUint32(
      3,
      f
    );
  }
};


/**
 * optional uint32 operating_channel_width = 1;
 * @return {number}
 */
proto.gw.LRFHSSModulationInfo.prototype.getOperatingChannelWidth = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.LRFHSSModulationInfo} returns this
 */
proto.gw.LRFHSSModulationInfo.prototype.setOperatingChannelWidth = function(value) {
  return jspb.Message.setProto3IntField(this, 1, value);
};


/**
 * optional string code_rate = 2;
 * @return {string}
 */
proto.gw.LRFHSSModulationInfo.prototype.getCodeRate = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
};


/**
 * @param {string} value
 * @return {!proto.gw.LRFHSSModulationInfo} returns this
 */
proto.gw.LRFHSSModulationInfo.prototype.setCodeRate = function(value) {
  return jspb.Message.setProto3StringField(this, 2, value);
};


/**
 * optional uint32 grid_steps = 3;
 * @return {number}
 */
proto.gw.LRFHSSModulationInfo.prototype.getGridSteps = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.LRFHSSModulationInfo} returns this
 */
proto.gw.LRFHSSModulationInfo.prototype.setGridSteps = function(value) {
  return jspb.Message.setProto3IntField(this, 3, value);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.EncryptedFineTimestamp.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.EncryptedFineTimestamp.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.EncryptedFineTimestamp} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.EncryptedFineTimestamp.toObject = function(includeInstance, msg) {
  var f, obj = {
    aesKeyIndex: jspb.Message.getFieldWithDefault(msg, 1, 0),
    encryptedNs: msg.getEncryptedNs_asB64(),
    fpgaId: msg.getFpgaId_asB64()
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.EncryptedFineTimestamp}
 */
proto.gw.EncryptedFineTimestamp.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.EncryptedFineTimestamp;
  return proto.gw.EncryptedFineTimestamp.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.EncryptedFineTimestamp} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.EncryptedFineTimestamp}
 */
proto.gw.EncryptedFineTimestamp.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setAesKeyIndex(value);
      break;
    case 2:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setEncryptedNs(value);
      break;
    case 3:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setFpgaId(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.EncryptedFineTimestamp.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.EncryptedFineTimestamp.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.EncryptedFineTimestamp} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.EncryptedFineTimestamp.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getAesKeyIndex();
  if (f !== 0) {
    writer.writeUint32(
      1,
      f
    );
  }
  f = message.getEncryptedNs_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      2,
      f
    );
  }
  f = message.getFpgaId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      3,
      f
    );
  }
};


/**
 * optional uint32 aes_key_index = 1;
 * @return {number}
 */
proto.gw.EncryptedFineTimestamp.prototype.getAesKeyIndex = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.EncryptedFineTimestamp} returns this
 */
proto.gw.EncryptedFineTimestamp.prototype.setAesKeyIndex = function(value) {
  return jspb.Message.setProto3IntField(this, 1, value);
};


/**
 * optional bytes encrypted_ns = 2;
 * @return {string}
 */
proto.gw.EncryptedFineTimestamp.prototype.getEncryptedNs = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
};


/**
 * optional bytes encrypted_ns = 2;
 * This is a type-conversion wrapper around `getEncryptedNs()`
 * @return {string}
 */
proto.gw.EncryptedFineTimestamp.prototype.getEncryptedNs_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getEncryptedNs()));
};


/**
 * optional bytes encrypted_ns = 2;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getEncryptedNs()`
 * @return {!Uint8Array}
 */
proto.gw.EncryptedFineTimestamp.prototype.getEncryptedNs_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getEncryptedNs()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.EncryptedFineTimestamp} returns this
 */
proto.gw.EncryptedFineTimestamp.prototype.setEncryptedNs = function(value) {
  return jspb.Message.setProto3BytesField(this, 2, value);
};


/**
 * optional bytes fpga_id = 3;
 * @return {string}
 */
proto.gw.EncryptedFineTimestamp.prototype.getFpgaId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
};


/**
 * optional bytes fpga_id = 3;
 * This is a type-conversion wrapper around `getFpgaId()`
 * @return {string}
 */
proto.gw.EncryptedFineTimestamp.prototype.getFpgaId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getFpgaId()));
};


/**
 * optional bytes fpga_id = 3;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getFpgaId()`
 * @return {!Uint8Array}
 */
proto.gw.EncryptedFineTimestamp.prototype.getFpgaId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getFpgaId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.EncryptedFineTimestamp} returns this
 */
proto.gw.EncryptedFineTimestamp.prototype.setFpgaId = function(value) {
  return jspb.Message.setProto3BytesField(this, 3, value);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.PlainFineTimestamp.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.PlainFineTimestamp.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.PlainFineTimestamp} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.PlainFineTimestamp.toObject = function(includeInstance, msg) {
  var f, obj = {
    time: (f = msg.getTime()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.PlainFineTimestamp}
 */
proto.gw.PlainFineTimestamp.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.PlainFineTimestamp;
  return proto.gw.PlainFineTimestamp.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.PlainFineTimestamp} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.PlainFineTimestamp}
 */
proto.gw.PlainFineTimestamp.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = new google_protobuf_timestamp_pb.Timestamp;
      reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader);
      msg.setTime(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.PlainFineTimestamp.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.PlainFineTimestamp.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.PlainFineTimestamp} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.PlainFineTimestamp.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getTime();
  if (f != null) {
    writer.writeMessage(
      1,
      f,
      google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter
    );
  }
};


/**
 * optional google.protobuf.Timestamp time = 1;
 * @return {?proto.google.protobuf.Timestamp}
 */
proto.gw.PlainFineTimestamp.prototype.getTime = function() {
  return /** @type{?proto.google.protobuf.Timestamp} */ (
    jspb.Message.getWrapperField(this, google_protobuf_timestamp_pb.Timestamp, 1));
};


/**
 * @param {?proto.google.protobuf.Timestamp|undefined} value
 * @return {!proto.gw.PlainFineTimestamp} returns this
*/
proto.gw.PlainFineTimestamp.prototype.setTime = function(value) {
  return jspb.Message.setWrapperField(this, 1, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.PlainFineTimestamp} returns this
 */
proto.gw.PlainFineTimestamp.prototype.clearTime = function() {
  return this.setTime(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.PlainFineTimestamp.prototype.hasTime = function() {
  return jspb.Message.getField(this, 1) != null;
};



/**
 * List of repeated fields within this message type.
 * @private {!Array<number>}
 * @const
 */
proto.gw.GatewayStats.repeatedFields_ = [14,15];



if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.GatewayStats.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.GatewayStats.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.GatewayStats} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.GatewayStats.toObject = function(includeInstance, msg) {
  var f, obj = {
    gatewayId: msg.getGatewayId_asB64(),
    ip: jspb.Message.getFieldWithDefault(msg, 9, ""),
    time: (f = msg.getTime()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f),
    location: (f = msg.getLocation()) && common_common_pb.Location.toObject(includeInstance, f),
    configVersion: jspb.Message.getFieldWithDefault(msg, 4, ""),
    rxPacketsReceived: jspb.Message.getFieldWithDefault(msg, 5, 0),
    rxPacketsReceivedOk: jspb.Message.getFieldWithDefault(msg, 6, 0),
    txPacketsReceived: jspb.Message.getFieldWithDefault(msg, 7, 0),
    txPacketsEmitted: jspb.Message.getFieldWithDefault(msg, 8, 0),
    metaDataMap: (f = msg.getMetaDataMap()) ? f.toObject(includeInstance, undefined) : [],
    statsId: msg.getStatsId_asB64(),
    txPacketsPerFrequencyMap: (f = msg.getTxPacketsPerFrequencyMap()) ? f.toObject(includeInstance, undefined) : [],
    rxPacketsPerFrequencyMap: (f = msg.getRxPacketsPerFrequencyMap()) ? f.toObject(includeInstance, undefined) : [],
    txPacketsPerModulationList: jspb.Message.toObjectList(msg.getTxPacketsPerModulationList(),
    proto.gw.PerModulationCount.toObject, includeInstance),
    rxPacketsPerModulationList: jspb.Message.toObjectList(msg.getRxPacketsPerModulationList(),
    proto.gw.PerModulationCount.toObject, includeInstance),
    txPacketsPerStatusMap: (f = msg.getTxPacketsPerStatusMap()) ? f.toObject(includeInstance, undefined) : []
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.GatewayStats}
 */
proto.gw.GatewayStats.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.GatewayStats;
  return proto.gw.GatewayStats.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.GatewayStats} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.GatewayStats}
 */
proto.gw.GatewayStats.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setGatewayId(value);
      break;
    case 9:
      var value = /** @type {string} */ (reader.readString());
      msg.setIp(value);
      break;
    case 2:
      var value = new google_protobuf_timestamp_pb.Timestamp;
      reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader);
      msg.setTime(value);
      break;
    case 3:
      var value = new common_common_pb.Location;
      reader.readMessage(value,common_common_pb.Location.deserializeBinaryFromReader);
      msg.setLocation(value);
      break;
    case 4:
      var value = /** @type {string} */ (reader.readString());
      msg.setConfigVersion(value);
      break;
    case 5:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setRxPacketsReceived(value);
      break;
    case 6:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setRxPacketsReceivedOk(value);
      break;
    case 7:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setTxPacketsReceived(value);
      break;
    case 8:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setTxPacketsEmitted(value);
      break;
    case 10:
      var value = msg.getMetaDataMap();
      reader.readMessage(value, function(message, reader) {
        jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
         });
      break;
    case 11:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setStatsId(value);
      break;
    case 12:
      var value = msg.getTxPacketsPerFrequencyMap();
      reader.readMessage(value, function(message, reader) {
        jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readUint32, jspb.BinaryReader.prototype.readUint32, null, 0, 0);
         });
      break;
    case 13:
      var value = msg.getRxPacketsPerFrequencyMap();
      reader.readMessage(value, function(message, reader) {
        jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readUint32, jspb.BinaryReader.prototype.readUint32, null, 0, 0);
         });
      break;
    case 14:
      var value = new proto.gw.PerModulationCount;
      reader.readMessage(value,proto.gw.PerModulationCount.deserializeBinaryFromReader);
      msg.addTxPacketsPerModulation(value);
      break;
    case 15:
      var value = new proto.gw.PerModulationCount;
      reader.readMessage(value,proto.gw.PerModulationCount.deserializeBinaryFromReader);
      msg.addRxPacketsPerModulation(value);
      break;
    case 16:
      var value = msg.getTxPacketsPerStatusMap();
      reader.readMessage(value, function(message, reader) {
        jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readUint32, null, "", 0);
         });
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.GatewayStats.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.GatewayStats.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.GatewayStats} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.GatewayStats.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getGatewayId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getIp();
  if (f.length > 0) {
    writer.writeString(
      9,
      f
    );
  }
  f = message.getTime();
  if (f != null) {
    writer.writeMessage(
      2,
      f,
      google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter
    );
  }
  f = message.getLocation();
  if (f != null) {
    writer.writeMessage(
      3,
      f,
      common_common_pb.Location.serializeBinaryToWriter
    );
  }
  f = message.getConfigVersion();
  if (f.length > 0) {
    writer.writeString(
      4,
      f
    );
  }
  f = message.getRxPacketsReceived();
  if (f !== 0) {
    writer.writeUint32(
      5,
      f
    );
  }
  f = message.getRxPacketsReceivedOk();
  if (f !== 0) {
    writer.writeUint32(
      6,
      f
    );
  }
  f = message.getTxPacketsReceived();
  if (f !== 0) {
    writer.writeUint32(
      7,
      f
    );
  }
  f = message.getTxPacketsEmitted();
  if (f !== 0) {
    writer.writeUint32(
      8,
      f
    );
  }
  f = message.getMetaDataMap(true);
  if (f && f.getLength() > 0) {
    f.serializeBinary(10, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
  }
  f = message.getStatsId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      11,
      f
    );
  }
  f = message.getTxPacketsPerFrequencyMap(true);
  if (f && f.getLength() > 0) {
    f.serializeBinary(12, writer, jspb.BinaryWriter.prototype.writeUint32, jspb.BinaryWriter.prototype.writeUint32);
  }
  f = message.getRxPacketsPerFrequencyMap(true);
  if (f && f.getLength() > 0) {
    f.serializeBinary(13, writer, jspb.BinaryWriter.prototype.writeUint32, jspb.BinaryWriter.prototype.writeUint32);
  }
  f = message.getTxPacketsPerModulationList();
  if (f.length > 0) {
    writer.writeRepeatedMessage(
      14,
      f,
      proto.gw.PerModulationCount.serializeBinaryToWriter
    );
  }
  f = message.getRxPacketsPerModulationList();
  if (f.length > 0) {
    writer.writeRepeatedMessage(
      15,
      f,
      proto.gw.PerModulationCount.serializeBinaryToWriter
    );
  }
  f = message.getTxPacketsPerStatusMap(true);
  if (f && f.getLength() > 0) {
    f.serializeBinary(16, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeUint32);
  }
};


/**
 * optional bytes gateway_id = 1;
 * @return {string}
 */
proto.gw.GatewayStats.prototype.getGatewayId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes gateway_id = 1;
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {string}
 */
proto.gw.GatewayStats.prototype.getGatewayId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getGatewayId()));
};


/**
 * optional bytes gateway_id = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {!Uint8Array}
 */
proto.gw.GatewayStats.prototype.getGatewayId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getGatewayId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.setGatewayId = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional string ip = 9;
 * @return {string}
 */
proto.gw.GatewayStats.prototype.getIp = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 9, ""));
};


/**
 * @param {string} value
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.setIp = function(value) {
  return jspb.Message.setProto3StringField(this, 9, value);
};


/**
 * optional google.protobuf.Timestamp time = 2;
 * @return {?proto.google.protobuf.Timestamp}
 */
proto.gw.GatewayStats.prototype.getTime = function() {
  return /** @type{?proto.google.protobuf.Timestamp} */ (
    jspb.Message.getWrapperField(this, google_protobuf_timestamp_pb.Timestamp, 2));
};


/**
 * @param {?proto.google.protobuf.Timestamp|undefined} value
 * @return {!proto.gw.GatewayStats} returns this
*/
proto.gw.GatewayStats.prototype.setTime = function(value) {
  return jspb.Message.setWrapperField(this, 2, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.clearTime = function() {
  return this.setTime(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.GatewayStats.prototype.hasTime = function() {
  return jspb.Message.getField(this, 2) != null;
};


/**
 * optional common.Location location = 3;
 * @return {?proto.common.Location}
 */
proto.gw.GatewayStats.prototype.getLocation = function() {
  return /** @type{?proto.common.Location} */ (
    jspb.Message.getWrapperField(this, common_common_pb.Location, 3));
};


/**
 * @param {?proto.common.Location|undefined} value
 * @return {!proto.gw.GatewayStats} returns this
*/
proto.gw.GatewayStats.prototype.setLocation = function(value) {
  return jspb.Message.setWrapperField(this, 3, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.clearLocation = function() {
  return this.setLocation(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.GatewayStats.prototype.hasLocation = function() {
  return jspb.Message.getField(this, 3) != null;
};


/**
 * optional string config_version = 4;
 * @return {string}
 */
proto.gw.GatewayStats.prototype.getConfigVersion = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
};


/**
 * @param {string} value
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.setConfigVersion = function(value) {
  return jspb.Message.setProto3StringField(this, 4, value);
};


/**
 * optional uint32 rx_packets_received = 5;
 * @return {number}
 */
proto.gw.GatewayStats.prototype.getRxPacketsReceived = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.setRxPacketsReceived = function(value) {
  return jspb.Message.setProto3IntField(this, 5, value);
};


/**
 * optional uint32 rx_packets_received_ok = 6;
 * @return {number}
 */
proto.gw.GatewayStats.prototype.getRxPacketsReceivedOk = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.setRxPacketsReceivedOk = function(value) {
  return jspb.Message.setProto3IntField(this, 6, value);
};


/**
 * optional uint32 tx_packets_received = 7;
 * @return {number}
 */
proto.gw.GatewayStats.prototype.getTxPacketsReceived = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.setTxPacketsReceived = function(value) {
  return jspb.Message.setProto3IntField(this, 7, value);
};


/**
 * optional uint32 tx_packets_emitted = 8;
 * @return {number}
 */
proto.gw.GatewayStats.prototype.getTxPacketsEmitted = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.setTxPacketsEmitted = function(value) {
  return jspb.Message.setProto3IntField(this, 8, value);
};


/**
 * map<string, string> meta_data = 10;
 * @param {boolean=} opt_noLazyCreate Do not create the map if
 * empty, instead returning `undefined`
 * @return {!jspb.Map<string,string>}
 */
proto.gw.GatewayStats.prototype.getMetaDataMap = function(opt_noLazyCreate) {
  return /** @type {!jspb.Map<string,string>} */ (
      jspb.Message.getMapField(this, 10, opt_noLazyCreate,
      null));
};


/**
 * Clears values from the map. The map will be non-null.
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.clearMetaDataMap = function() {
  this.getMetaDataMap().clear();
  return this;};


/**
 * optional bytes stats_id = 11;
 * @return {string}
 */
proto.gw.GatewayStats.prototype.getStatsId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 11, ""));
};


/**
 * optional bytes stats_id = 11;
 * This is a type-conversion wrapper around `getStatsId()`
 * @return {string}
 */
proto.gw.GatewayStats.prototype.getStatsId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getStatsId()));
};


/**
 * optional bytes stats_id = 11;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getStatsId()`
 * @return {!Uint8Array}
 */
proto.gw.GatewayStats.prototype.getStatsId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getStatsId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.setStatsId = function(value) {
  return jspb.Message.setProto3BytesField(this, 11, value);
};


/**
 * map<uint32, uint32> tx_packets_per_frequency = 12;
 * @param {boolean=} opt_noLazyCreate Do not create the map if
 * empty, instead returning `undefined`
 * @return {!jspb.Map<number,number>}
 */
proto.gw.GatewayStats.prototype.getTxPacketsPerFrequencyMap = function(opt_noLazyCreate) {
  return /** @type {!jspb.Map<number,number>} */ (
      jspb.Message.getMapField(this, 12, opt_noLazyCreate,
      null));
};


/**
 * Clears values from the map. The map will be non-null.
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.clearTxPacketsPerFrequencyMap = function() {
  this.getTxPacketsPerFrequencyMap().clear();
  return this;};


/**
 * map<uint32, uint32> rx_packets_per_frequency = 13;
 * @param {boolean=} opt_noLazyCreate Do not create the map if
 * empty, instead returning `undefined`
 * @return {!jspb.Map<number,number>}
 */
proto.gw.GatewayStats.prototype.getRxPacketsPerFrequencyMap = function(opt_noLazyCreate) {
  return /** @type {!jspb.Map<number,number>} */ (
      jspb.Message.getMapField(this, 13, opt_noLazyCreate,
      null));
};


/**
 * Clears values from the map. The map will be non-null.
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.clearRxPacketsPerFrequencyMap = function() {
  this.getRxPacketsPerFrequencyMap().clear();
  return this;};


/**
 * repeated PerModulationCount tx_packets_per_modulation = 14;
 * @return {!Array<!proto.gw.PerModulationCount>}
 */
proto.gw.GatewayStats.prototype.getTxPacketsPerModulationList = function() {
  return /** @type{!Array<!proto.gw.PerModulationCount>} */ (
    jspb.Message.getRepeatedWrapperField(this, proto.gw.PerModulationCount, 14));
};


/**
 * @param {!Array<!proto.gw.PerModulationCount>} value
 * @return {!proto.gw.GatewayStats} returns this
*/
proto.gw.GatewayStats.prototype.setTxPacketsPerModulationList = function(value) {
  return jspb.Message.setRepeatedWrapperField(this, 14, value);
};


/**
 * @param {!proto.gw.PerModulationCount=} opt_value
 * @param {number=} opt_index
 * @return {!proto.gw.PerModulationCount}
 */
proto.gw.GatewayStats.prototype.addTxPacketsPerModulation = function(opt_value, opt_index) {
  return jspb.Message.addToRepeatedWrapperField(this, 14, opt_value, proto.gw.PerModulationCount, opt_index);
};


/**
 * Clears the list making it empty but non-null.
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.clearTxPacketsPerModulationList = function() {
  return this.setTxPacketsPerModulationList([]);
};


/**
 * repeated PerModulationCount rx_packets_per_modulation = 15;
 * @return {!Array<!proto.gw.PerModulationCount>}
 */
proto.gw.GatewayStats.prototype.getRxPacketsPerModulationList = function() {
  return /** @type{!Array<!proto.gw.PerModulationCount>} */ (
    jspb.Message.getRepeatedWrapperField(this, proto.gw.PerModulationCount, 15));
};


/**
 * @param {!Array<!proto.gw.PerModulationCount>} value
 * @return {!proto.gw.GatewayStats} returns this
*/
proto.gw.GatewayStats.prototype.setRxPacketsPerModulationList = function(value) {
  return jspb.Message.setRepeatedWrapperField(this, 15, value);
};


/**
 * @param {!proto.gw.PerModulationCount=} opt_value
 * @param {number=} opt_index
 * @return {!proto.gw.PerModulationCount}
 */
proto.gw.GatewayStats.prototype.addRxPacketsPerModulation = function(opt_value, opt_index) {
  return jspb.Message.addToRepeatedWrapperField(this, 15, opt_value, proto.gw.PerModulationCount, opt_index);
};


/**
 * Clears the list making it empty but non-null.
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.clearRxPacketsPerModulationList = function() {
  return this.setRxPacketsPerModulationList([]);
};


/**
 * map<string, uint32> tx_packets_per_status = 16;
 * @param {boolean=} opt_noLazyCreate Do not create the map if
 * empty, instead returning `undefined`
 * @return {!jspb.Map<string,number>}
 */
proto.gw.GatewayStats.prototype.getTxPacketsPerStatusMap = function(opt_noLazyCreate) {
  return /** @type {!jspb.Map<string,number>} */ (
      jspb.Message.getMapField(this, 16, opt_noLazyCreate,
      null));
};


/**
 * Clears values from the map. The map will be non-null.
 * @return {!proto.gw.GatewayStats} returns this
 */
proto.gw.GatewayStats.prototype.clearTxPacketsPerStatusMap = function() {
  this.getTxPacketsPerStatusMap().clear();
  return this;};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.PerModulationCount.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.PerModulationCount.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.PerModulationCount} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.PerModulationCount.toObject = function(includeInstance, msg) {
  var f, obj = {
    modulation: (f = msg.getModulation()) && proto.gw.Modulation.toObject(includeInstance, f),
    count: jspb.Message.getFieldWithDefault(msg, 2, 0)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.PerModulationCount}
 */
proto.gw.PerModulationCount.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.PerModulationCount;
  return proto.gw.PerModulationCount.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.PerModulationCount} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.PerModulationCount}
 */
proto.gw.PerModulationCount.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = new proto.gw.Modulation;
      reader.readMessage(value,proto.gw.Modulation.deserializeBinaryFromReader);
      msg.setModulation(value);
      break;
    case 2:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setCount(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.PerModulationCount.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.PerModulationCount.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.PerModulationCount} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.PerModulationCount.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getModulation();
  if (f != null) {
    writer.writeMessage(
      1,
      f,
      proto.gw.Modulation.serializeBinaryToWriter
    );
  }
  f = message.getCount();
  if (f !== 0) {
    writer.writeUint32(
      2,
      f
    );
  }
};


/**
 * optional Modulation modulation = 1;
 * @return {?proto.gw.Modulation}
 */
proto.gw.PerModulationCount.prototype.getModulation = function() {
  return /** @type{?proto.gw.Modulation} */ (
    jspb.Message.getWrapperField(this, proto.gw.Modulation, 1));
};


/**
 * @param {?proto.gw.Modulation|undefined} value
 * @return {!proto.gw.PerModulationCount} returns this
*/
proto.gw.PerModulationCount.prototype.setModulation = function(value) {
  return jspb.Message.setWrapperField(this, 1, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.PerModulationCount} returns this
 */
proto.gw.PerModulationCount.prototype.clearModulation = function() {
  return this.setModulation(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.PerModulationCount.prototype.hasModulation = function() {
  return jspb.Message.getField(this, 1) != null;
};


/**
 * optional uint32 count = 2;
 * @return {number}
 */
proto.gw.PerModulationCount.prototype.getCount = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.PerModulationCount} returns this
 */
proto.gw.PerModulationCount.prototype.setCount = function(value) {
  return jspb.Message.setProto3IntField(this, 2, value);
};



/**
 * Oneof group definitions for this message. Each group defines the field
 * numbers belonging to that group. When of these fields' value is set, all
 * other fields in the group are cleared. During deserialization, if multiple
 * fields are encountered for a group, only the last value seen will be kept.
 * @private {!Array<!Array<number>>}
 * @const
 */
proto.gw.UplinkRXInfo.oneofGroups_ = [[13,14]];

/**
 * @enum {number}
 */
proto.gw.UplinkRXInfo.FineTimestampCase = {
  FINE_TIMESTAMP_NOT_SET: 0,
  ENCRYPTED_FINE_TIMESTAMP: 13,
  PLAIN_FINE_TIMESTAMP: 14
};

/**
 * @return {proto.gw.UplinkRXInfo.FineTimestampCase}
 */
proto.gw.UplinkRXInfo.prototype.getFineTimestampCase = function() {
  return /** @type {proto.gw.UplinkRXInfo.FineTimestampCase} */(jspb.Message.computeOneofCase(this, proto.gw.UplinkRXInfo.oneofGroups_[0]));
};



if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.UplinkRXInfo.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.UplinkRXInfo.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.UplinkRXInfo} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.UplinkRXInfo.toObject = function(includeInstance, msg) {
  var f, obj = {
    gatewayId: msg.getGatewayId_asB64(),
    time: (f = msg.getTime()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f),
    timeSinceGpsEpoch: (f = msg.getTimeSinceGpsEpoch()) && google_protobuf_duration_pb.Duration.toObject(includeInstance, f),
    rssi: jspb.Message.getFieldWithDefault(msg, 5, 0),
    loraSnr: jspb.Message.getFloatingPointFieldWithDefault(msg, 6, 0.0),
    channel: jspb.Message.getFieldWithDefault(msg, 7, 0),
    rfChain: jspb.Message.getFieldWithDefault(msg, 8, 0),
    board: jspb.Message.getFieldWithDefault(msg, 9, 0),
    antenna: jspb.Message.getFieldWithDefault(msg, 10, 0),
    location: (f = msg.getLocation()) && common_common_pb.Location.toObject(includeInstance, f),
    fineTimestampType: jspb.Message.getFieldWithDefault(msg, 12, 0),
    encryptedFineTimestamp: (f = msg.getEncryptedFineTimestamp()) && proto.gw.EncryptedFineTimestamp.toObject(includeInstance, f),
    plainFineTimestamp: (f = msg.getPlainFineTimestamp()) && proto.gw.PlainFineTimestamp.toObject(includeInstance, f),
    context: msg.getContext_asB64(),
    uplinkId: msg.getUplinkId_asB64(),
    crcStatus: jspb.Message.getFieldWithDefault(msg, 17, 0),
    metadataMap: (f = msg.getMetadataMap()) ? f.toObject(includeInstance, undefined) : []
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.UplinkRXInfo}
 */
proto.gw.UplinkRXInfo.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.UplinkRXInfo;
  return proto.gw.UplinkRXInfo.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.UplinkRXInfo} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.UplinkRXInfo}
 */
proto.gw.UplinkRXInfo.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setGatewayId(value);
      break;
    case 2:
      var value = new google_protobuf_timestamp_pb.Timestamp;
      reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader);
      msg.setTime(value);
      break;
    case 3:
      var value = new google_protobuf_duration_pb.Duration;
      reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader);
      msg.setTimeSinceGpsEpoch(value);
      break;
    case 5:
      var value = /** @type {number} */ (reader.readInt32());
      msg.setRssi(value);
      break;
    case 6:
      var value = /** @type {number} */ (reader.readDouble());
      msg.setLoraSnr(value);
      break;
    case 7:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setChannel(value);
      break;
    case 8:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setRfChain(value);
      break;
    case 9:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setBoard(value);
      break;
    case 10:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setAntenna(value);
      break;
    case 11:
      var value = new common_common_pb.Location;
      reader.readMessage(value,common_common_pb.Location.deserializeBinaryFromReader);
      msg.setLocation(value);
      break;
    case 12:
      var value = /** @type {!proto.gw.FineTimestampType} */ (reader.readEnum());
      msg.setFineTimestampType(value);
      break;
    case 13:
      var value = new proto.gw.EncryptedFineTimestamp;
      reader.readMessage(value,proto.gw.EncryptedFineTimestamp.deserializeBinaryFromReader);
      msg.setEncryptedFineTimestamp(value);
      break;
    case 14:
      var value = new proto.gw.PlainFineTimestamp;
      reader.readMessage(value,proto.gw.PlainFineTimestamp.deserializeBinaryFromReader);
      msg.setPlainFineTimestamp(value);
      break;
    case 15:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setContext(value);
      break;
    case 16:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setUplinkId(value);
      break;
    case 17:
      var value = /** @type {!proto.gw.CRCStatus} */ (reader.readEnum());
      msg.setCrcStatus(value);
      break;
    case 18:
      var value = msg.getMetadataMap();
      reader.readMessage(value, function(message, reader) {
        jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
         });
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.UplinkRXInfo.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.UplinkRXInfo.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.UplinkRXInfo} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.UplinkRXInfo.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getGatewayId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getTime();
  if (f != null) {
    writer.writeMessage(
      2,
      f,
      google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter
    );
  }
  f = message.getTimeSinceGpsEpoch();
  if (f != null) {
    writer.writeMessage(
      3,
      f,
      google_protobuf_duration_pb.Duration.serializeBinaryToWriter
    );
  }
  f = message.getRssi();
  if (f !== 0) {
    writer.writeInt32(
      5,
      f
    );
  }
  f = message.getLoraSnr();
  if (f !== 0.0) {
    writer.writeDouble(
      6,
      f
    );
  }
  f = message.getChannel();
  if (f !== 0) {
    writer.writeUint32(
      7,
      f
    );
  }
  f = message.getRfChain();
  if (f !== 0) {
    writer.writeUint32(
      8,
      f
    );
  }
  f = message.getBoard();
  if (f !== 0) {
    writer.writeUint32(
      9,
      f
    );
  }
  f = message.getAntenna();
  if (f !== 0) {
    writer.writeUint32(
      10,
      f
    );
  }
  f = message.getLocation();
  if (f != null) {
    writer.writeMessage(
      11,
      f,
      common_common_pb.Location.serializeBinaryToWriter
    );
  }
  f = message.getFineTimestampType();
  if (f !== 0.0) {
    writer.writeEnum(
      12,
      f
    );
  }
  f = message.getEncryptedFineTimestamp();
  if (f != null) {
    writer.writeMessage(
      13,
      f,
      proto.gw.EncryptedFineTimestamp.serializeBinaryToWriter
    );
  }
  f = message.getPlainFineTimestamp();
  if (f != null) {
    writer.writeMessage(
      14,
      f,
      proto.gw.PlainFineTimestamp.serializeBinaryToWriter
    );
  }
  f = message.getContext_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      15,
      f
    );
  }
  f = message.getUplinkId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      16,
      f
    );
  }
  f = message.getCrcStatus();
  if (f !== 0.0) {
    writer.writeEnum(
      17,
      f
    );
  }
  f = message.getMetadataMap(true);
  if (f && f.getLength() > 0) {
    f.serializeBinary(18, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
  }
};


/**
 * optional bytes gateway_id = 1;
 * @return {string}
 */
proto.gw.UplinkRXInfo.prototype.getGatewayId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes gateway_id = 1;
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {string}
 */
proto.gw.UplinkRXInfo.prototype.getGatewayId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getGatewayId()));
};


/**
 * optional bytes gateway_id = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {!Uint8Array}
 */
proto.gw.UplinkRXInfo.prototype.getGatewayId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getGatewayId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.setGatewayId = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional google.protobuf.Timestamp time = 2;
 * @return {?proto.google.protobuf.Timestamp}
 */
proto.gw.UplinkRXInfo.prototype.getTime = function() {
  return /** @type{?proto.google.protobuf.Timestamp} */ (
    jspb.Message.getWrapperField(this, google_protobuf_timestamp_pb.Timestamp, 2));
};


/**
 * @param {?proto.google.protobuf.Timestamp|undefined} value
 * @return {!proto.gw.UplinkRXInfo} returns this
*/
proto.gw.UplinkRXInfo.prototype.setTime = function(value) {
  return jspb.Message.setWrapperField(this, 2, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.clearTime = function() {
  return this.setTime(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.UplinkRXInfo.prototype.hasTime = function() {
  return jspb.Message.getField(this, 2) != null;
};


/**
 * optional google.protobuf.Duration time_since_gps_epoch = 3;
 * @return {?proto.google.protobuf.Duration}
 */
proto.gw.UplinkRXInfo.prototype.getTimeSinceGpsEpoch = function() {
  return /** @type{?proto.google.protobuf.Duration} */ (
    jspb.Message.getWrapperField(this, google_protobuf_duration_pb.Duration, 3));
};


/**
 * @param {?proto.google.protobuf.Duration|undefined} value
 * @return {!proto.gw.UplinkRXInfo} returns this
*/
proto.gw.UplinkRXInfo.prototype.setTimeSinceGpsEpoch = function(value) {
  return jspb.Message.setWrapperField(this, 3, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.clearTimeSinceGpsEpoch = function() {
  return this.setTimeSinceGpsEpoch(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.UplinkRXInfo.prototype.hasTimeSinceGpsEpoch = function() {
  return jspb.Message.getField(this, 3) != null;
};


/**
 * optional int32 rssi = 5;
 * @return {number}
 */
proto.gw.UplinkRXInfo.prototype.getRssi = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.setRssi = function(value) {
  return jspb.Message.setProto3IntField(this, 5, value);
};


/**
 * optional double lora_snr = 6;
 * @return {number}
 */
proto.gw.UplinkRXInfo.prototype.getLoraSnr = function() {
  return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 6, 0.0));
};


/**
 * @param {number} value
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.setLoraSnr = function(value) {
  return jspb.Message.setProto3FloatField(this, 6, value);
};


/**
 * optional uint32 channel = 7;
 * @return {number}
 */
proto.gw.UplinkRXInfo.prototype.getChannel = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.setChannel = function(value) {
  return jspb.Message.setProto3IntField(this, 7, value);
};


/**
 * optional uint32 rf_chain = 8;
 * @return {number}
 */
proto.gw.UplinkRXInfo.prototype.getRfChain = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.setRfChain = function(value) {
  return jspb.Message.setProto3IntField(this, 8, value);
};


/**
 * optional uint32 board = 9;
 * @return {number}
 */
proto.gw.UplinkRXInfo.prototype.getBoard = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 9, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.setBoard = function(value) {
  return jspb.Message.setProto3IntField(this, 9, value);
};


/**
 * optional uint32 antenna = 10;
 * @return {number}
 */
proto.gw.UplinkRXInfo.prototype.getAntenna = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 10, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.setAntenna = function(value) {
  return jspb.Message.setProto3IntField(this, 10, value);
};


/**
 * optional common.Location location = 11;
 * @return {?proto.common.Location}
 */
proto.gw.UplinkRXInfo.prototype.getLocation = function() {
  return /** @type{?proto.common.Location} */ (
    jspb.Message.getWrapperField(this, common_common_pb.Location, 11));
};


/**
 * @param {?proto.common.Location|undefined} value
 * @return {!proto.gw.UplinkRXInfo} returns this
*/
proto.gw.UplinkRXInfo.prototype.setLocation = function(value) {
  return jspb.Message.setWrapperField(this, 11, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.clearLocation = function() {
  return this.setLocation(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.UplinkRXInfo.prototype.hasLocation = function() {
  return jspb.Message.getField(this, 11) != null;
};


/**
 * optional FineTimestampType fine_timestamp_type = 12;
 * @return {!proto.gw.FineTimestampType}
 */
proto.gw.UplinkRXInfo.prototype.getFineTimestampType = function() {
  return /** @type {!proto.gw.FineTimestampType} */ (jspb.Message.getFieldWithDefault(this, 12, 0));
};


/**
 * @param {!proto.gw.FineTimestampType} value
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.setFineTimestampType = function(value) {
  return jspb.Message.setProto3EnumField(this, 12, value);
};


/**
 * optional EncryptedFineTimestamp encrypted_fine_timestamp = 13;
 * @return {?proto.gw.EncryptedFineTimestamp}
 */
proto.gw.UplinkRXInfo.prototype.getEncryptedFineTimestamp = function() {
  return /** @type{?proto.gw.EncryptedFineTimestamp} */ (
    jspb.Message.getWrapperField(this, proto.gw.EncryptedFineTimestamp, 13));
};


/**
 * @param {?proto.gw.EncryptedFineTimestamp|undefined} value
 * @return {!proto.gw.UplinkRXInfo} returns this
*/
proto.gw.UplinkRXInfo.prototype.setEncryptedFineTimestamp = function(value) {
  return jspb.Message.setOneofWrapperField(this, 13, proto.gw.UplinkRXInfo.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.clearEncryptedFineTimestamp = function() {
  return this.setEncryptedFineTimestamp(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.UplinkRXInfo.prototype.hasEncryptedFineTimestamp = function() {
  return jspb.Message.getField(this, 13) != null;
};


/**
 * optional PlainFineTimestamp plain_fine_timestamp = 14;
 * @return {?proto.gw.PlainFineTimestamp}
 */
proto.gw.UplinkRXInfo.prototype.getPlainFineTimestamp = function() {
  return /** @type{?proto.gw.PlainFineTimestamp} */ (
    jspb.Message.getWrapperField(this, proto.gw.PlainFineTimestamp, 14));
};


/**
 * @param {?proto.gw.PlainFineTimestamp|undefined} value
 * @return {!proto.gw.UplinkRXInfo} returns this
*/
proto.gw.UplinkRXInfo.prototype.setPlainFineTimestamp = function(value) {
  return jspb.Message.setOneofWrapperField(this, 14, proto.gw.UplinkRXInfo.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.clearPlainFineTimestamp = function() {
  return this.setPlainFineTimestamp(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.UplinkRXInfo.prototype.hasPlainFineTimestamp = function() {
  return jspb.Message.getField(this, 14) != null;
};


/**
 * optional bytes context = 15;
 * @return {string}
 */
proto.gw.UplinkRXInfo.prototype.getContext = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 15, ""));
};


/**
 * optional bytes context = 15;
 * This is a type-conversion wrapper around `getContext()`
 * @return {string}
 */
proto.gw.UplinkRXInfo.prototype.getContext_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getContext()));
};


/**
 * optional bytes context = 15;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getContext()`
 * @return {!Uint8Array}
 */
proto.gw.UplinkRXInfo.prototype.getContext_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getContext()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.setContext = function(value) {
  return jspb.Message.setProto3BytesField(this, 15, value);
};


/**
 * optional bytes uplink_id = 16;
 * @return {string}
 */
proto.gw.UplinkRXInfo.prototype.getUplinkId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 16, ""));
};


/**
 * optional bytes uplink_id = 16;
 * This is a type-conversion wrapper around `getUplinkId()`
 * @return {string}
 */
proto.gw.UplinkRXInfo.prototype.getUplinkId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getUplinkId()));
};


/**
 * optional bytes uplink_id = 16;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getUplinkId()`
 * @return {!Uint8Array}
 */
proto.gw.UplinkRXInfo.prototype.getUplinkId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getUplinkId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.setUplinkId = function(value) {
  return jspb.Message.setProto3BytesField(this, 16, value);
};


/**
 * optional CRCStatus crc_status = 17;
 * @return {!proto.gw.CRCStatus}
 */
proto.gw.UplinkRXInfo.prototype.getCrcStatus = function() {
  return /** @type {!proto.gw.CRCStatus} */ (jspb.Message.getFieldWithDefault(this, 17, 0));
};


/**
 * @param {!proto.gw.CRCStatus} value
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.setCrcStatus = function(value) {
  return jspb.Message.setProto3EnumField(this, 17, value);
};


/**
 * map<string, string> metadata = 18;
 * @param {boolean=} opt_noLazyCreate Do not create the map if
 * empty, instead returning `undefined`
 * @return {!jspb.Map<string,string>}
 */
proto.gw.UplinkRXInfo.prototype.getMetadataMap = function(opt_noLazyCreate) {
  return /** @type {!jspb.Map<string,string>} */ (
      jspb.Message.getMapField(this, 18, opt_noLazyCreate,
      null));
};


/**
 * Clears values from the map. The map will be non-null.
 * @return {!proto.gw.UplinkRXInfo} returns this
 */
proto.gw.UplinkRXInfo.prototype.clearMetadataMap = function() {
  this.getMetadataMap().clear();
  return this;};



/**
 * Oneof group definitions for this message. Each group defines the field
 * numbers belonging to that group. When of these fields' value is set, all
 * other fields in the group are cleared. During deserialization, if multiple
 * fields are encountered for a group, only the last value seen will be kept.
 * @private {!Array<!Array<number>>}
 * @const
 */
proto.gw.DownlinkTXInfo.oneofGroups_ = [[8,9],[13,14,15]];

/**
 * @enum {number}
 */
proto.gw.DownlinkTXInfo.ModulationInfoCase = {
  MODULATION_INFO_NOT_SET: 0,
  LORA_MODULATION_INFO: 8,
  FSK_MODULATION_INFO: 9
};

/**
 * @return {proto.gw.DownlinkTXInfo.ModulationInfoCase}
 */
proto.gw.DownlinkTXInfo.prototype.getModulationInfoCase = function() {
  return /** @type {proto.gw.DownlinkTXInfo.ModulationInfoCase} */(jspb.Message.computeOneofCase(this, proto.gw.DownlinkTXInfo.oneofGroups_[0]));
};

/**
 * @enum {number}
 */
proto.gw.DownlinkTXInfo.TimingInfoCase = {
  TIMING_INFO_NOT_SET: 0,
  IMMEDIATELY_TIMING_INFO: 13,
  DELAY_TIMING_INFO: 14,
  GPS_EPOCH_TIMING_INFO: 15
};

/**
 * @return {proto.gw.DownlinkTXInfo.TimingInfoCase}
 */
proto.gw.DownlinkTXInfo.prototype.getTimingInfoCase = function() {
  return /** @type {proto.gw.DownlinkTXInfo.TimingInfoCase} */(jspb.Message.computeOneofCase(this, proto.gw.DownlinkTXInfo.oneofGroups_[1]));
};



if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.DownlinkTXInfo.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.DownlinkTXInfo.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.DownlinkTXInfo} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DownlinkTXInfo.toObject = function(includeInstance, msg) {
  var f, obj = {
    gatewayId: msg.getGatewayId_asB64(),
    frequency: jspb.Message.getFieldWithDefault(msg, 5, 0),
    power: jspb.Message.getFieldWithDefault(msg, 6, 0),
    modulation: jspb.Message.getFieldWithDefault(msg, 7, 0),
    loraModulationInfo: (f = msg.getLoraModulationInfo()) && proto.gw.LoRaModulationInfo.toObject(includeInstance, f),
    fskModulationInfo: (f = msg.getFskModulationInfo()) && proto.gw.FSKModulationInfo.toObject(includeInstance, f),
    board: jspb.Message.getFieldWithDefault(msg, 10, 0),
    antenna: jspb.Message.getFieldWithDefault(msg, 11, 0),
    timing: jspb.Message.getFieldWithDefault(msg, 12, 0),
    immediatelyTimingInfo: (f = msg.getImmediatelyTimingInfo()) && proto.gw.ImmediatelyTimingInfo.toObject(includeInstance, f),
    delayTimingInfo: (f = msg.getDelayTimingInfo()) && proto.gw.DelayTimingInfo.toObject(includeInstance, f),
    gpsEpochTimingInfo: (f = msg.getGpsEpochTimingInfo()) && proto.gw.GPSEpochTimingInfo.toObject(includeInstance, f),
    context: msg.getContext_asB64()
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.DownlinkTXInfo}
 */
proto.gw.DownlinkTXInfo.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.DownlinkTXInfo;
  return proto.gw.DownlinkTXInfo.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.DownlinkTXInfo} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.DownlinkTXInfo}
 */
proto.gw.DownlinkTXInfo.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setGatewayId(value);
      break;
    case 5:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setFrequency(value);
      break;
    case 6:
      var value = /** @type {number} */ (reader.readInt32());
      msg.setPower(value);
      break;
    case 7:
      var value = /** @type {!proto.common.Modulation} */ (reader.readEnum());
      msg.setModulation(value);
      break;
    case 8:
      var value = new proto.gw.LoRaModulationInfo;
      reader.readMessage(value,proto.gw.LoRaModulationInfo.deserializeBinaryFromReader);
      msg.setLoraModulationInfo(value);
      break;
    case 9:
      var value = new proto.gw.FSKModulationInfo;
      reader.readMessage(value,proto.gw.FSKModulationInfo.deserializeBinaryFromReader);
      msg.setFskModulationInfo(value);
      break;
    case 10:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setBoard(value);
      break;
    case 11:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setAntenna(value);
      break;
    case 12:
      var value = /** @type {!proto.gw.DownlinkTiming} */ (reader.readEnum());
      msg.setTiming(value);
      break;
    case 13:
      var value = new proto.gw.ImmediatelyTimingInfo;
      reader.readMessage(value,proto.gw.ImmediatelyTimingInfo.deserializeBinaryFromReader);
      msg.setImmediatelyTimingInfo(value);
      break;
    case 14:
      var value = new proto.gw.DelayTimingInfo;
      reader.readMessage(value,proto.gw.DelayTimingInfo.deserializeBinaryFromReader);
      msg.setDelayTimingInfo(value);
      break;
    case 15:
      var value = new proto.gw.GPSEpochTimingInfo;
      reader.readMessage(value,proto.gw.GPSEpochTimingInfo.deserializeBinaryFromReader);
      msg.setGpsEpochTimingInfo(value);
      break;
    case 16:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setContext(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.DownlinkTXInfo.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.DownlinkTXInfo.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.DownlinkTXInfo} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DownlinkTXInfo.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getGatewayId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getFrequency();
  if (f !== 0) {
    writer.writeUint32(
      5,
      f
    );
  }
  f = message.getPower();
  if (f !== 0) {
    writer.writeInt32(
      6,
      f
    );
  }
  f = message.getModulation();
  if (f !== 0.0) {
    writer.writeEnum(
      7,
      f
    );
  }
  f = message.getLoraModulationInfo();
  if (f != null) {
    writer.writeMessage(
      8,
      f,
      proto.gw.LoRaModulationInfo.serializeBinaryToWriter
    );
  }
  f = message.getFskModulationInfo();
  if (f != null) {
    writer.writeMessage(
      9,
      f,
      proto.gw.FSKModulationInfo.serializeBinaryToWriter
    );
  }
  f = message.getBoard();
  if (f !== 0) {
    writer.writeUint32(
      10,
      f
    );
  }
  f = message.getAntenna();
  if (f !== 0) {
    writer.writeUint32(
      11,
      f
    );
  }
  f = message.getTiming();
  if (f !== 0.0) {
    writer.writeEnum(
      12,
      f
    );
  }
  f = message.getImmediatelyTimingInfo();
  if (f != null) {
    writer.writeMessage(
      13,
      f,
      proto.gw.ImmediatelyTimingInfo.serializeBinaryToWriter
    );
  }
  f = message.getDelayTimingInfo();
  if (f != null) {
    writer.writeMessage(
      14,
      f,
      proto.gw.DelayTimingInfo.serializeBinaryToWriter
    );
  }
  f = message.getGpsEpochTimingInfo();
  if (f != null) {
    writer.writeMessage(
      15,
      f,
      proto.gw.GPSEpochTimingInfo.serializeBinaryToWriter
    );
  }
  f = message.getContext_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      16,
      f
    );
  }
};


/**
 * optional bytes gateway_id = 1;
 * @return {string}
 */
proto.gw.DownlinkTXInfo.prototype.getGatewayId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes gateway_id = 1;
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {string}
 */
proto.gw.DownlinkTXInfo.prototype.getGatewayId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getGatewayId()));
};


/**
 * optional bytes gateway_id = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {!Uint8Array}
 */
proto.gw.DownlinkTXInfo.prototype.getGatewayId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getGatewayId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.setGatewayId = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional uint32 frequency = 5;
 * @return {number}
 */
proto.gw.DownlinkTXInfo.prototype.getFrequency = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.setFrequency = function(value) {
  return jspb.Message.setProto3IntField(this, 5, value);
};


/**
 * optional int32 power = 6;
 * @return {number}
 */
proto.gw.DownlinkTXInfo.prototype.getPower = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.setPower = function(value) {
  return jspb.Message.setProto3IntField(this, 6, value);
};


/**
 * optional common.Modulation modulation = 7;
 * @return {!proto.common.Modulation}
 */
proto.gw.DownlinkTXInfo.prototype.getModulation = function() {
  return /** @type {!proto.common.Modulation} */ (jspb.Message.getFieldWithDefault(this, 7, 0));
};


/**
 * @param {!proto.common.Modulation} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.setModulation = function(value) {
  return jspb.Message.setProto3EnumField(this, 7, value);
};


/**
 * optional LoRaModulationInfo lora_modulation_info = 8;
 * @return {?proto.gw.LoRaModulationInfo}
 */
proto.gw.DownlinkTXInfo.prototype.getLoraModulationInfo = function() {
  return /** @type{?proto.gw.LoRaModulationInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.LoRaModulationInfo, 8));
};


/**
 * @param {?proto.gw.LoRaModulationInfo|undefined} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
*/
proto.gw.DownlinkTXInfo.prototype.setLoraModulationInfo = function(value) {
  return jspb.Message.setOneofWrapperField(this, 8, proto.gw.DownlinkTXInfo.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.clearLoraModulationInfo = function() {
  return this.setLoraModulationInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.DownlinkTXInfo.prototype.hasLoraModulationInfo = function() {
  return jspb.Message.getField(this, 8) != null;
};


/**
 * optional FSKModulationInfo fsk_modulation_info = 9;
 * @return {?proto.gw.FSKModulationInfo}
 */
proto.gw.DownlinkTXInfo.prototype.getFskModulationInfo = function() {
  return /** @type{?proto.gw.FSKModulationInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.FSKModulationInfo, 9));
};


/**
 * @param {?proto.gw.FSKModulationInfo|undefined} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
*/
proto.gw.DownlinkTXInfo.prototype.setFskModulationInfo = function(value) {
  return jspb.Message.setOneofWrapperField(this, 9, proto.gw.DownlinkTXInfo.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.clearFskModulationInfo = function() {
  return this.setFskModulationInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.DownlinkTXInfo.prototype.hasFskModulationInfo = function() {
  return jspb.Message.getField(this, 9) != null;
};


/**
 * optional uint32 board = 10;
 * @return {number}
 */
proto.gw.DownlinkTXInfo.prototype.getBoard = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 10, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.setBoard = function(value) {
  return jspb.Message.setProto3IntField(this, 10, value);
};


/**
 * optional uint32 antenna = 11;
 * @return {number}
 */
proto.gw.DownlinkTXInfo.prototype.getAntenna = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 11, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.setAntenna = function(value) {
  return jspb.Message.setProto3IntField(this, 11, value);
};


/**
 * optional DownlinkTiming timing = 12;
 * @return {!proto.gw.DownlinkTiming}
 */
proto.gw.DownlinkTXInfo.prototype.getTiming = function() {
  return /** @type {!proto.gw.DownlinkTiming} */ (jspb.Message.getFieldWithDefault(this, 12, 0));
};


/**
 * @param {!proto.gw.DownlinkTiming} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.setTiming = function(value) {
  return jspb.Message.setProto3EnumField(this, 12, value);
};


/**
 * optional ImmediatelyTimingInfo immediately_timing_info = 13;
 * @return {?proto.gw.ImmediatelyTimingInfo}
 */
proto.gw.DownlinkTXInfo.prototype.getImmediatelyTimingInfo = function() {
  return /** @type{?proto.gw.ImmediatelyTimingInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.ImmediatelyTimingInfo, 13));
};


/**
 * @param {?proto.gw.ImmediatelyTimingInfo|undefined} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
*/
proto.gw.DownlinkTXInfo.prototype.setImmediatelyTimingInfo = function(value) {
  return jspb.Message.setOneofWrapperField(this, 13, proto.gw.DownlinkTXInfo.oneofGroups_[1], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.clearImmediatelyTimingInfo = function() {
  return this.setImmediatelyTimingInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.DownlinkTXInfo.prototype.hasImmediatelyTimingInfo = function() {
  return jspb.Message.getField(this, 13) != null;
};


/**
 * optional DelayTimingInfo delay_timing_info = 14;
 * @return {?proto.gw.DelayTimingInfo}
 */
proto.gw.DownlinkTXInfo.prototype.getDelayTimingInfo = function() {
  return /** @type{?proto.gw.DelayTimingInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.DelayTimingInfo, 14));
};


/**
 * @param {?proto.gw.DelayTimingInfo|undefined} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
*/
proto.gw.DownlinkTXInfo.prototype.setDelayTimingInfo = function(value) {
  return jspb.Message.setOneofWrapperField(this, 14, proto.gw.DownlinkTXInfo.oneofGroups_[1], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.clearDelayTimingInfo = function() {
  return this.setDelayTimingInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.DownlinkTXInfo.prototype.hasDelayTimingInfo = function() {
  return jspb.Message.getField(this, 14) != null;
};


/**
 * optional GPSEpochTimingInfo gps_epoch_timing_info = 15;
 * @return {?proto.gw.GPSEpochTimingInfo}
 */
proto.gw.DownlinkTXInfo.prototype.getGpsEpochTimingInfo = function() {
  return /** @type{?proto.gw.GPSEpochTimingInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.GPSEpochTimingInfo, 15));
};


/**
 * @param {?proto.gw.GPSEpochTimingInfo|undefined} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
*/
proto.gw.DownlinkTXInfo.prototype.setGpsEpochTimingInfo = function(value) {
  return jspb.Message.setOneofWrapperField(this, 15, proto.gw.DownlinkTXInfo.oneofGroups_[1], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.clearGpsEpochTimingInfo = function() {
  return this.setGpsEpochTimingInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.DownlinkTXInfo.prototype.hasGpsEpochTimingInfo = function() {
  return jspb.Message.getField(this, 15) != null;
};


/**
 * optional bytes context = 16;
 * @return {string}
 */
proto.gw.DownlinkTXInfo.prototype.getContext = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 16, ""));
};


/**
 * optional bytes context = 16;
 * This is a type-conversion wrapper around `getContext()`
 * @return {string}
 */
proto.gw.DownlinkTXInfo.prototype.getContext_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getContext()));
};


/**
 * optional bytes context = 16;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getContext()`
 * @return {!Uint8Array}
 */
proto.gw.DownlinkTXInfo.prototype.getContext_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getContext()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.DownlinkTXInfo} returns this
 */
proto.gw.DownlinkTXInfo.prototype.setContext = function(value) {
  return jspb.Message.setProto3BytesField(this, 16, value);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.ImmediatelyTimingInfo.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.ImmediatelyTimingInfo.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.ImmediatelyTimingInfo} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.ImmediatelyTimingInfo.toObject = function(includeInstance, msg) {
  var f, obj = {

  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.ImmediatelyTimingInfo}
 */
proto.gw.ImmediatelyTimingInfo.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.ImmediatelyTimingInfo;
  return proto.gw.ImmediatelyTimingInfo.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.ImmediatelyTimingInfo} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.ImmediatelyTimingInfo}
 */
proto.gw.ImmediatelyTimingInfo.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.ImmediatelyTimingInfo.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.ImmediatelyTimingInfo.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.ImmediatelyTimingInfo} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.ImmediatelyTimingInfo.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.DelayTimingInfo.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.DelayTimingInfo.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.DelayTimingInfo} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DelayTimingInfo.toObject = function(includeInstance, msg) {
  var f, obj = {
    delay: (f = msg.getDelay()) && google_protobuf_duration_pb.Duration.toObject(includeInstance, f)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.DelayTimingInfo}
 */
proto.gw.DelayTimingInfo.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.DelayTimingInfo;
  return proto.gw.DelayTimingInfo.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.DelayTimingInfo} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.DelayTimingInfo}
 */
proto.gw.DelayTimingInfo.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = new google_protobuf_duration_pb.Duration;
      reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader);
      msg.setDelay(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.DelayTimingInfo.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.DelayTimingInfo.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.DelayTimingInfo} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DelayTimingInfo.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getDelay();
  if (f != null) {
    writer.writeMessage(
      1,
      f,
      google_protobuf_duration_pb.Duration.serializeBinaryToWriter
    );
  }
};


/**
 * optional google.protobuf.Duration delay = 1;
 * @return {?proto.google.protobuf.Duration}
 */
proto.gw.DelayTimingInfo.prototype.getDelay = function() {
  return /** @type{?proto.google.protobuf.Duration} */ (
    jspb.Message.getWrapperField(this, google_protobuf_duration_pb.Duration, 1));
};


/**
 * @param {?proto.google.protobuf.Duration|undefined} value
 * @return {!proto.gw.DelayTimingInfo} returns this
*/
proto.gw.DelayTimingInfo.prototype.setDelay = function(value) {
  return jspb.Message.setWrapperField(this, 1, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.DelayTimingInfo} returns this
 */
proto.gw.DelayTimingInfo.prototype.clearDelay = function() {
  return this.setDelay(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.DelayTimingInfo.prototype.hasDelay = function() {
  return jspb.Message.getField(this, 1) != null;
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.GPSEpochTimingInfo.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.GPSEpochTimingInfo.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.GPSEpochTimingInfo} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.GPSEpochTimingInfo.toObject = function(includeInstance, msg) {
  var f, obj = {
    timeSinceGpsEpoch: (f = msg.getTimeSinceGpsEpoch()) && google_protobuf_duration_pb.Duration.toObject(includeInstance, f)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.GPSEpochTimingInfo}
 */
proto.gw.GPSEpochTimingInfo.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.GPSEpochTimingInfo;
  return proto.gw.GPSEpochTimingInfo.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.GPSEpochTimingInfo} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.GPSEpochTimingInfo}
 */
proto.gw.GPSEpochTimingInfo.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = new google_protobuf_duration_pb.Duration;
      reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader);
      msg.setTimeSinceGpsEpoch(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.GPSEpochTimingInfo.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.GPSEpochTimingInfo.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.GPSEpochTimingInfo} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.GPSEpochTimingInfo.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getTimeSinceGpsEpoch();
  if (f != null) {
    writer.writeMessage(
      1,
      f,
      google_protobuf_duration_pb.Duration.serializeBinaryToWriter
    );
  }
};


/**
 * optional google.protobuf.Duration time_since_gps_epoch = 1;
 * @return {?proto.google.protobuf.Duration}
 */
proto.gw.GPSEpochTimingInfo.prototype.getTimeSinceGpsEpoch = function() {
  return /** @type{?proto.google.protobuf.Duration} */ (
    jspb.Message.getWrapperField(this, google_protobuf_duration_pb.Duration, 1));
};


/**
 * @param {?proto.google.protobuf.Duration|undefined} value
 * @return {!proto.gw.GPSEpochTimingInfo} returns this
*/
proto.gw.GPSEpochTimingInfo.prototype.setTimeSinceGpsEpoch = function(value) {
  return jspb.Message.setWrapperField(this, 1, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.GPSEpochTimingInfo} returns this
 */
proto.gw.GPSEpochTimingInfo.prototype.clearTimeSinceGpsEpoch = function() {
  return this.setTimeSinceGpsEpoch(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.GPSEpochTimingInfo.prototype.hasTimeSinceGpsEpoch = function() {
  return jspb.Message.getField(this, 1) != null;
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.UplinkFrame.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.UplinkFrame.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.UplinkFrame} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.UplinkFrame.toObject = function(includeInstance, msg) {
  var f, obj = {
    phyPayload: msg.getPhyPayload_asB64(),
    txInfo: (f = msg.getTxInfo()) && proto.gw.UplinkTXInfo.toObject(includeInstance, f),
    rxInfo: (f = msg.getRxInfo()) && proto.gw.UplinkRXInfo.toObject(includeInstance, f)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.UplinkFrame}
 */
proto.gw.UplinkFrame.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.UplinkFrame;
  return proto.gw.UplinkFrame.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.UplinkFrame} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.UplinkFrame}
 */
proto.gw.UplinkFrame.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setPhyPayload(value);
      break;
    case 2:
      var value = new proto.gw.UplinkTXInfo;
      reader.readMessage(value,proto.gw.UplinkTXInfo.deserializeBinaryFromReader);
      msg.setTxInfo(value);
      break;
    case 3:
      var value = new proto.gw.UplinkRXInfo;
      reader.readMessage(value,proto.gw.UplinkRXInfo.deserializeBinaryFromReader);
      msg.setRxInfo(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.UplinkFrame.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.UplinkFrame.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.UplinkFrame} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.UplinkFrame.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getPhyPayload_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getTxInfo();
  if (f != null) {
    writer.writeMessage(
      2,
      f,
      proto.gw.UplinkTXInfo.serializeBinaryToWriter
    );
  }
  f = message.getRxInfo();
  if (f != null) {
    writer.writeMessage(
      3,
      f,
      proto.gw.UplinkRXInfo.serializeBinaryToWriter
    );
  }
};


/**
 * optional bytes phy_payload = 1;
 * @return {string}
 */
proto.gw.UplinkFrame.prototype.getPhyPayload = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes phy_payload = 1;
 * This is a type-conversion wrapper around `getPhyPayload()`
 * @return {string}
 */
proto.gw.UplinkFrame.prototype.getPhyPayload_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getPhyPayload()));
};


/**
 * optional bytes phy_payload = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getPhyPayload()`
 * @return {!Uint8Array}
 */
proto.gw.UplinkFrame.prototype.getPhyPayload_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getPhyPayload()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.UplinkFrame} returns this
 */
proto.gw.UplinkFrame.prototype.setPhyPayload = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional UplinkTXInfo tx_info = 2;
 * @return {?proto.gw.UplinkTXInfo}
 */
proto.gw.UplinkFrame.prototype.getTxInfo = function() {
  return /** @type{?proto.gw.UplinkTXInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.UplinkTXInfo, 2));
};


/**
 * @param {?proto.gw.UplinkTXInfo|undefined} value
 * @return {!proto.gw.UplinkFrame} returns this
*/
proto.gw.UplinkFrame.prototype.setTxInfo = function(value) {
  return jspb.Message.setWrapperField(this, 2, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.UplinkFrame} returns this
 */
proto.gw.UplinkFrame.prototype.clearTxInfo = function() {
  return this.setTxInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.UplinkFrame.prototype.hasTxInfo = function() {
  return jspb.Message.getField(this, 2) != null;
};


/**
 * optional UplinkRXInfo rx_info = 3;
 * @return {?proto.gw.UplinkRXInfo}
 */
proto.gw.UplinkFrame.prototype.getRxInfo = function() {
  return /** @type{?proto.gw.UplinkRXInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.UplinkRXInfo, 3));
};


/**
 * @param {?proto.gw.UplinkRXInfo|undefined} value
 * @return {!proto.gw.UplinkFrame} returns this
*/
proto.gw.UplinkFrame.prototype.setRxInfo = function(value) {
  return jspb.Message.setWrapperField(this, 3, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.UplinkFrame} returns this
 */
proto.gw.UplinkFrame.prototype.clearRxInfo = function() {
  return this.setRxInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.UplinkFrame.prototype.hasRxInfo = function() {
  return jspb.Message.getField(this, 3) != null;
};



/**
 * List of repeated fields within this message type.
 * @private {!Array<number>}
 * @const
 */
proto.gw.UplinkFrameSet.repeatedFields_ = [3];



if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.UplinkFrameSet.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.UplinkFrameSet.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.UplinkFrameSet} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.UplinkFrameSet.toObject = function(includeInstance, msg) {
  var f, obj = {
    phyPayload: msg.getPhyPayload_asB64(),
    txInfo: (f = msg.getTxInfo()) && proto.gw.UplinkTXInfo.toObject(includeInstance, f),
    rxInfoList: jspb.Message.toObjectList(msg.getRxInfoList(),
    proto.gw.UplinkRXInfo.toObject, includeInstance)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.UplinkFrameSet}
 */
proto.gw.UplinkFrameSet.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.UplinkFrameSet;
  return proto.gw.UplinkFrameSet.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.UplinkFrameSet} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.UplinkFrameSet}
 */
proto.gw.UplinkFrameSet.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setPhyPayload(value);
      break;
    case 2:
      var value = new proto.gw.UplinkTXInfo;
      reader.readMessage(value,proto.gw.UplinkTXInfo.deserializeBinaryFromReader);
      msg.setTxInfo(value);
      break;
    case 3:
      var value = new proto.gw.UplinkRXInfo;
      reader.readMessage(value,proto.gw.UplinkRXInfo.deserializeBinaryFromReader);
      msg.addRxInfo(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.UplinkFrameSet.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.UplinkFrameSet.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.UplinkFrameSet} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.UplinkFrameSet.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getPhyPayload_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getTxInfo();
  if (f != null) {
    writer.writeMessage(
      2,
      f,
      proto.gw.UplinkTXInfo.serializeBinaryToWriter
    );
  }
  f = message.getRxInfoList();
  if (f.length > 0) {
    writer.writeRepeatedMessage(
      3,
      f,
      proto.gw.UplinkRXInfo.serializeBinaryToWriter
    );
  }
};


/**
 * optional bytes phy_payload = 1;
 * @return {string}
 */
proto.gw.UplinkFrameSet.prototype.getPhyPayload = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes phy_payload = 1;
 * This is a type-conversion wrapper around `getPhyPayload()`
 * @return {string}
 */
proto.gw.UplinkFrameSet.prototype.getPhyPayload_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getPhyPayload()));
};


/**
 * optional bytes phy_payload = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getPhyPayload()`
 * @return {!Uint8Array}
 */
proto.gw.UplinkFrameSet.prototype.getPhyPayload_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getPhyPayload()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.UplinkFrameSet} returns this
 */
proto.gw.UplinkFrameSet.prototype.setPhyPayload = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional UplinkTXInfo tx_info = 2;
 * @return {?proto.gw.UplinkTXInfo}
 */
proto.gw.UplinkFrameSet.prototype.getTxInfo = function() {
  return /** @type{?proto.gw.UplinkTXInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.UplinkTXInfo, 2));
};


/**
 * @param {?proto.gw.UplinkTXInfo|undefined} value
 * @return {!proto.gw.UplinkFrameSet} returns this
*/
proto.gw.UplinkFrameSet.prototype.setTxInfo = function(value) {
  return jspb.Message.setWrapperField(this, 2, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.UplinkFrameSet} returns this
 */
proto.gw.UplinkFrameSet.prototype.clearTxInfo = function() {
  return this.setTxInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.UplinkFrameSet.prototype.hasTxInfo = function() {
  return jspb.Message.getField(this, 2) != null;
};


/**
 * repeated UplinkRXInfo rx_info = 3;
 * @return {!Array<!proto.gw.UplinkRXInfo>}
 */
proto.gw.UplinkFrameSet.prototype.getRxInfoList = function() {
  return /** @type{!Array<!proto.gw.UplinkRXInfo>} */ (
    jspb.Message.getRepeatedWrapperField(this, proto.gw.UplinkRXInfo, 3));
};


/**
 * @param {!Array<!proto.gw.UplinkRXInfo>} value
 * @return {!proto.gw.UplinkFrameSet} returns this
*/
proto.gw.UplinkFrameSet.prototype.setRxInfoList = function(value) {
  return jspb.Message.setRepeatedWrapperField(this, 3, value);
};


/**
 * @param {!proto.gw.UplinkRXInfo=} opt_value
 * @param {number=} opt_index
 * @return {!proto.gw.UplinkRXInfo}
 */
proto.gw.UplinkFrameSet.prototype.addRxInfo = function(opt_value, opt_index) {
  return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.gw.UplinkRXInfo, opt_index);
};


/**
 * Clears the list making it empty but non-null.
 * @return {!proto.gw.UplinkFrameSet} returns this
 */
proto.gw.UplinkFrameSet.prototype.clearRxInfoList = function() {
  return this.setRxInfoList([]);
};



/**
 * List of repeated fields within this message type.
 * @private {!Array<number>}
 * @const
 */
proto.gw.DownlinkFrame.repeatedFields_ = [5];



if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.DownlinkFrame.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.DownlinkFrame.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.DownlinkFrame} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DownlinkFrame.toObject = function(includeInstance, msg) {
  var f, obj = {
    phyPayload: msg.getPhyPayload_asB64(),
    txInfo: (f = msg.getTxInfo()) && proto.gw.DownlinkTXInfo.toObject(includeInstance, f),
    token: jspb.Message.getFieldWithDefault(msg, 3, 0),
    downlinkId: msg.getDownlinkId_asB64(),
    itemsList: jspb.Message.toObjectList(msg.getItemsList(),
    proto.gw.DownlinkFrameItem.toObject, includeInstance),
    gatewayId: msg.getGatewayId_asB64()
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.DownlinkFrame}
 */
proto.gw.DownlinkFrame.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.DownlinkFrame;
  return proto.gw.DownlinkFrame.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.DownlinkFrame} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.DownlinkFrame}
 */
proto.gw.DownlinkFrame.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setPhyPayload(value);
      break;
    case 2:
      var value = new proto.gw.DownlinkTXInfo;
      reader.readMessage(value,proto.gw.DownlinkTXInfo.deserializeBinaryFromReader);
      msg.setTxInfo(value);
      break;
    case 3:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setToken(value);
      break;
    case 4:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setDownlinkId(value);
      break;
    case 5:
      var value = new proto.gw.DownlinkFrameItem;
      reader.readMessage(value,proto.gw.DownlinkFrameItem.deserializeBinaryFromReader);
      msg.addItems(value);
      break;
    case 6:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setGatewayId(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.DownlinkFrame.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.DownlinkFrame.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.DownlinkFrame} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DownlinkFrame.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getPhyPayload_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getTxInfo();
  if (f != null) {
    writer.writeMessage(
      2,
      f,
      proto.gw.DownlinkTXInfo.serializeBinaryToWriter
    );
  }
  f = message.getToken();
  if (f !== 0) {
    writer.writeUint32(
      3,
      f
    );
  }
  f = message.getDownlinkId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      4,
      f
    );
  }
  f = message.getItemsList();
  if (f.length > 0) {
    writer.writeRepeatedMessage(
      5,
      f,
      proto.gw.DownlinkFrameItem.serializeBinaryToWriter
    );
  }
  f = message.getGatewayId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      6,
      f
    );
  }
};


/**
 * optional bytes phy_payload = 1;
 * @return {string}
 */
proto.gw.DownlinkFrame.prototype.getPhyPayload = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes phy_payload = 1;
 * This is a type-conversion wrapper around `getPhyPayload()`
 * @return {string}
 */
proto.gw.DownlinkFrame.prototype.getPhyPayload_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getPhyPayload()));
};


/**
 * optional bytes phy_payload = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getPhyPayload()`
 * @return {!Uint8Array}
 */
proto.gw.DownlinkFrame.prototype.getPhyPayload_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getPhyPayload()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.DownlinkFrame} returns this
 */
proto.gw.DownlinkFrame.prototype.setPhyPayload = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional DownlinkTXInfo tx_info = 2;
 * @return {?proto.gw.DownlinkTXInfo}
 */
proto.gw.DownlinkFrame.prototype.getTxInfo = function() {
  return /** @type{?proto.gw.DownlinkTXInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.DownlinkTXInfo, 2));
};


/**
 * @param {?proto.gw.DownlinkTXInfo|undefined} value
 * @return {!proto.gw.DownlinkFrame} returns this
*/
proto.gw.DownlinkFrame.prototype.setTxInfo = function(value) {
  return jspb.Message.setWrapperField(this, 2, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.DownlinkFrame} returns this
 */
proto.gw.DownlinkFrame.prototype.clearTxInfo = function() {
  return this.setTxInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.DownlinkFrame.prototype.hasTxInfo = function() {
  return jspb.Message.getField(this, 2) != null;
};


/**
 * optional uint32 token = 3;
 * @return {number}
 */
proto.gw.DownlinkFrame.prototype.getToken = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.DownlinkFrame} returns this
 */
proto.gw.DownlinkFrame.prototype.setToken = function(value) {
  return jspb.Message.setProto3IntField(this, 3, value);
};


/**
 * optional bytes downlink_id = 4;
 * @return {string}
 */
proto.gw.DownlinkFrame.prototype.getDownlinkId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
};


/**
 * optional bytes downlink_id = 4;
 * This is a type-conversion wrapper around `getDownlinkId()`
 * @return {string}
 */
proto.gw.DownlinkFrame.prototype.getDownlinkId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getDownlinkId()));
};


/**
 * optional bytes downlink_id = 4;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getDownlinkId()`
 * @return {!Uint8Array}
 */
proto.gw.DownlinkFrame.prototype.getDownlinkId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getDownlinkId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.DownlinkFrame} returns this
 */
proto.gw.DownlinkFrame.prototype.setDownlinkId = function(value) {
  return jspb.Message.setProto3BytesField(this, 4, value);
};


/**
 * repeated DownlinkFrameItem items = 5;
 * @return {!Array<!proto.gw.DownlinkFrameItem>}
 */
proto.gw.DownlinkFrame.prototype.getItemsList = function() {
  return /** @type{!Array<!proto.gw.DownlinkFrameItem>} */ (
    jspb.Message.getRepeatedWrapperField(this, proto.gw.DownlinkFrameItem, 5));
};


/**
 * @param {!Array<!proto.gw.DownlinkFrameItem>} value
 * @return {!proto.gw.DownlinkFrame} returns this
*/
proto.gw.DownlinkFrame.prototype.setItemsList = function(value) {
  return jspb.Message.setRepeatedWrapperField(this, 5, value);
};


/**
 * @param {!proto.gw.DownlinkFrameItem=} opt_value
 * @param {number=} opt_index
 * @return {!proto.gw.DownlinkFrameItem}
 */
proto.gw.DownlinkFrame.prototype.addItems = function(opt_value, opt_index) {
  return jspb.Message.addToRepeatedWrapperField(this, 5, opt_value, proto.gw.DownlinkFrameItem, opt_index);
};


/**
 * Clears the list making it empty but non-null.
 * @return {!proto.gw.DownlinkFrame} returns this
 */
proto.gw.DownlinkFrame.prototype.clearItemsList = function() {
  return this.setItemsList([]);
};


/**
 * optional bytes gateway_id = 6;
 * @return {string}
 */
proto.gw.DownlinkFrame.prototype.getGatewayId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, ""));
};


/**
 * optional bytes gateway_id = 6;
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {string}
 */
proto.gw.DownlinkFrame.prototype.getGatewayId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getGatewayId()));
};


/**
 * optional bytes gateway_id = 6;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {!Uint8Array}
 */
proto.gw.DownlinkFrame.prototype.getGatewayId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getGatewayId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.DownlinkFrame} returns this
 */
proto.gw.DownlinkFrame.prototype.setGatewayId = function(value) {
  return jspb.Message.setProto3BytesField(this, 6, value);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.DownlinkFrameItem.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.DownlinkFrameItem.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.DownlinkFrameItem} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DownlinkFrameItem.toObject = function(includeInstance, msg) {
  var f, obj = {
    phyPayload: msg.getPhyPayload_asB64(),
    txInfo: (f = msg.getTxInfo()) && proto.gw.DownlinkTXInfo.toObject(includeInstance, f)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.DownlinkFrameItem}
 */
proto.gw.DownlinkFrameItem.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.DownlinkFrameItem;
  return proto.gw.DownlinkFrameItem.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.DownlinkFrameItem} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.DownlinkFrameItem}
 */
proto.gw.DownlinkFrameItem.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setPhyPayload(value);
      break;
    case 2:
      var value = new proto.gw.DownlinkTXInfo;
      reader.readMessage(value,proto.gw.DownlinkTXInfo.deserializeBinaryFromReader);
      msg.setTxInfo(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.DownlinkFrameItem.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.DownlinkFrameItem.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.DownlinkFrameItem} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DownlinkFrameItem.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getPhyPayload_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getTxInfo();
  if (f != null) {
    writer.writeMessage(
      2,
      f,
      proto.gw.DownlinkTXInfo.serializeBinaryToWriter
    );
  }
};


/**
 * optional bytes phy_payload = 1;
 * @return {string}
 */
proto.gw.DownlinkFrameItem.prototype.getPhyPayload = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes phy_payload = 1;
 * This is a type-conversion wrapper around `getPhyPayload()`
 * @return {string}
 */
proto.gw.DownlinkFrameItem.prototype.getPhyPayload_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getPhyPayload()));
};


/**
 * optional bytes phy_payload = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getPhyPayload()`
 * @return {!Uint8Array}
 */
proto.gw.DownlinkFrameItem.prototype.getPhyPayload_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getPhyPayload()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.DownlinkFrameItem} returns this
 */
proto.gw.DownlinkFrameItem.prototype.setPhyPayload = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional DownlinkTXInfo tx_info = 2;
 * @return {?proto.gw.DownlinkTXInfo}
 */
proto.gw.DownlinkFrameItem.prototype.getTxInfo = function() {
  return /** @type{?proto.gw.DownlinkTXInfo} */ (
    jspb.Message.getWrapperField(this, proto.gw.DownlinkTXInfo, 2));
};


/**
 * @param {?proto.gw.DownlinkTXInfo|undefined} value
 * @return {!proto.gw.DownlinkFrameItem} returns this
*/
proto.gw.DownlinkFrameItem.prototype.setTxInfo = function(value) {
  return jspb.Message.setWrapperField(this, 2, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.DownlinkFrameItem} returns this
 */
proto.gw.DownlinkFrameItem.prototype.clearTxInfo = function() {
  return this.setTxInfo(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.DownlinkFrameItem.prototype.hasTxInfo = function() {
  return jspb.Message.getField(this, 2) != null;
};



/**
 * List of repeated fields within this message type.
 * @private {!Array<number>}
 * @const
 */
proto.gw.DownlinkTXAck.repeatedFields_ = [5];



if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.DownlinkTXAck.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.DownlinkTXAck.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.DownlinkTXAck} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DownlinkTXAck.toObject = function(includeInstance, msg) {
  var f, obj = {
    gatewayId: msg.getGatewayId_asB64(),
    token: jspb.Message.getFieldWithDefault(msg, 2, 0),
    error: jspb.Message.getFieldWithDefault(msg, 3, ""),
    downlinkId: msg.getDownlinkId_asB64(),
    itemsList: jspb.Message.toObjectList(msg.getItemsList(),
    proto.gw.DownlinkTXAckItem.toObject, includeInstance)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.DownlinkTXAck}
 */
proto.gw.DownlinkTXAck.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.DownlinkTXAck;
  return proto.gw.DownlinkTXAck.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.DownlinkTXAck} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.DownlinkTXAck}
 */
proto.gw.DownlinkTXAck.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setGatewayId(value);
      break;
    case 2:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setToken(value);
      break;
    case 3:
      var value = /** @type {string} */ (reader.readString());
      msg.setError(value);
      break;
    case 4:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setDownlinkId(value);
      break;
    case 5:
      var value = new proto.gw.DownlinkTXAckItem;
      reader.readMessage(value,proto.gw.DownlinkTXAckItem.deserializeBinaryFromReader);
      msg.addItems(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.DownlinkTXAck.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.DownlinkTXAck.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.DownlinkTXAck} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DownlinkTXAck.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getGatewayId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getToken();
  if (f !== 0) {
    writer.writeUint32(
      2,
      f
    );
  }
  f = message.getError();
  if (f.length > 0) {
    writer.writeString(
      3,
      f
    );
  }
  f = message.getDownlinkId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      4,
      f
    );
  }
  f = message.getItemsList();
  if (f.length > 0) {
    writer.writeRepeatedMessage(
      5,
      f,
      proto.gw.DownlinkTXAckItem.serializeBinaryToWriter
    );
  }
};


/**
 * optional bytes gateway_id = 1;
 * @return {string}
 */
proto.gw.DownlinkTXAck.prototype.getGatewayId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes gateway_id = 1;
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {string}
 */
proto.gw.DownlinkTXAck.prototype.getGatewayId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getGatewayId()));
};


/**
 * optional bytes gateway_id = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {!Uint8Array}
 */
proto.gw.DownlinkTXAck.prototype.getGatewayId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getGatewayId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.DownlinkTXAck} returns this
 */
proto.gw.DownlinkTXAck.prototype.setGatewayId = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional uint32 token = 2;
 * @return {number}
 */
proto.gw.DownlinkTXAck.prototype.getToken = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.DownlinkTXAck} returns this
 */
proto.gw.DownlinkTXAck.prototype.setToken = function(value) {
  return jspb.Message.setProto3IntField(this, 2, value);
};


/**
 * optional string error = 3;
 * @return {string}
 */
proto.gw.DownlinkTXAck.prototype.getError = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
};


/**
 * @param {string} value
 * @return {!proto.gw.DownlinkTXAck} returns this
 */
proto.gw.DownlinkTXAck.prototype.setError = function(value) {
  return jspb.Message.setProto3StringField(this, 3, value);
};


/**
 * optional bytes downlink_id = 4;
 * @return {string}
 */
proto.gw.DownlinkTXAck.prototype.getDownlinkId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
};


/**
 * optional bytes downlink_id = 4;
 * This is a type-conversion wrapper around `getDownlinkId()`
 * @return {string}
 */
proto.gw.DownlinkTXAck.prototype.getDownlinkId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getDownlinkId()));
};


/**
 * optional bytes downlink_id = 4;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getDownlinkId()`
 * @return {!Uint8Array}
 */
proto.gw.DownlinkTXAck.prototype.getDownlinkId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getDownlinkId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.DownlinkTXAck} returns this
 */
proto.gw.DownlinkTXAck.prototype.setDownlinkId = function(value) {
  return jspb.Message.setProto3BytesField(this, 4, value);
};


/**
 * repeated DownlinkTXAckItem items = 5;
 * @return {!Array<!proto.gw.DownlinkTXAckItem>}
 */
proto.gw.DownlinkTXAck.prototype.getItemsList = function() {
  return /** @type{!Array<!proto.gw.DownlinkTXAckItem>} */ (
    jspb.Message.getRepeatedWrapperField(this, proto.gw.DownlinkTXAckItem, 5));
};


/**
 * @param {!Array<!proto.gw.DownlinkTXAckItem>} value
 * @return {!proto.gw.DownlinkTXAck} returns this
*/
proto.gw.DownlinkTXAck.prototype.setItemsList = function(value) {
  return jspb.Message.setRepeatedWrapperField(this, 5, value);
};


/**
 * @param {!proto.gw.DownlinkTXAckItem=} opt_value
 * @param {number=} opt_index
 * @return {!proto.gw.DownlinkTXAckItem}
 */
proto.gw.DownlinkTXAck.prototype.addItems = function(opt_value, opt_index) {
  return jspb.Message.addToRepeatedWrapperField(this, 5, opt_value, proto.gw.DownlinkTXAckItem, opt_index);
};


/**
 * Clears the list making it empty but non-null.
 * @return {!proto.gw.DownlinkTXAck} returns this
 */
proto.gw.DownlinkTXAck.prototype.clearItemsList = function() {
  return this.setItemsList([]);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.DownlinkTXAckItem.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.DownlinkTXAckItem.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.DownlinkTXAckItem} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DownlinkTXAckItem.toObject = function(includeInstance, msg) {
  var f, obj = {
    status: jspb.Message.getFieldWithDefault(msg, 1, 0)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.DownlinkTXAckItem}
 */
proto.gw.DownlinkTXAckItem.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.DownlinkTXAckItem;
  return proto.gw.DownlinkTXAckItem.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.DownlinkTXAckItem} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.DownlinkTXAckItem}
 */
proto.gw.DownlinkTXAckItem.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!proto.gw.TxAckStatus} */ (reader.readEnum());
      msg.setStatus(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.DownlinkTXAckItem.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.DownlinkTXAckItem.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.DownlinkTXAckItem} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.DownlinkTXAckItem.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getStatus();
  if (f !== 0.0) {
    writer.writeEnum(
      1,
      f
    );
  }
};


/**
 * optional TxAckStatus status = 1;
 * @return {!proto.gw.TxAckStatus}
 */
proto.gw.DownlinkTXAckItem.prototype.getStatus = function() {
  return /** @type {!proto.gw.TxAckStatus} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
};


/**
 * @param {!proto.gw.TxAckStatus} value
 * @return {!proto.gw.DownlinkTXAckItem} returns this
 */
proto.gw.DownlinkTXAckItem.prototype.setStatus = function(value) {
  return jspb.Message.setProto3EnumField(this, 1, value);
};



/**
 * List of repeated fields within this message type.
 * @private {!Array<number>}
 * @const
 */
proto.gw.GatewayConfiguration.repeatedFields_ = [3];



if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.GatewayConfiguration.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.GatewayConfiguration.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.GatewayConfiguration} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.GatewayConfiguration.toObject = function(includeInstance, msg) {
  var f, obj = {
    gatewayId: msg.getGatewayId_asB64(),
    version: jspb.Message.getFieldWithDefault(msg, 2, ""),
    channelsList: jspb.Message.toObjectList(msg.getChannelsList(),
    proto.gw.ChannelConfiguration.toObject, includeInstance),
    statsInterval: (f = msg.getStatsInterval()) && google_protobuf_duration_pb.Duration.toObject(includeInstance, f)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.GatewayConfiguration}
 */
proto.gw.GatewayConfiguration.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.GatewayConfiguration;
  return proto.gw.GatewayConfiguration.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.GatewayConfiguration} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.GatewayConfiguration}
 */
proto.gw.GatewayConfiguration.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setGatewayId(value);
      break;
    case 2:
      var value = /** @type {string} */ (reader.readString());
      msg.setVersion(value);
      break;
    case 3:
      var value = new proto.gw.ChannelConfiguration;
      reader.readMessage(value,proto.gw.ChannelConfiguration.deserializeBinaryFromReader);
      msg.addChannels(value);
      break;
    case 4:
      var value = new google_protobuf_duration_pb.Duration;
      reader.readMessage(value,google_protobuf_duration_pb.Duration.deserializeBinaryFromReader);
      msg.setStatsInterval(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.GatewayConfiguration.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.GatewayConfiguration.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.GatewayConfiguration} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.GatewayConfiguration.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getGatewayId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getVersion();
  if (f.length > 0) {
    writer.writeString(
      2,
      f
    );
  }
  f = message.getChannelsList();
  if (f.length > 0) {
    writer.writeRepeatedMessage(
      3,
      f,
      proto.gw.ChannelConfiguration.serializeBinaryToWriter
    );
  }
  f = message.getStatsInterval();
  if (f != null) {
    writer.writeMessage(
      4,
      f,
      google_protobuf_duration_pb.Duration.serializeBinaryToWriter
    );
  }
};


/**
 * optional bytes gateway_id = 1;
 * @return {string}
 */
proto.gw.GatewayConfiguration.prototype.getGatewayId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes gateway_id = 1;
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {string}
 */
proto.gw.GatewayConfiguration.prototype.getGatewayId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getGatewayId()));
};


/**
 * optional bytes gateway_id = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {!Uint8Array}
 */
proto.gw.GatewayConfiguration.prototype.getGatewayId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getGatewayId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.GatewayConfiguration} returns this
 */
proto.gw.GatewayConfiguration.prototype.setGatewayId = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional string version = 2;
 * @return {string}
 */
proto.gw.GatewayConfiguration.prototype.getVersion = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
};


/**
 * @param {string} value
 * @return {!proto.gw.GatewayConfiguration} returns this
 */
proto.gw.GatewayConfiguration.prototype.setVersion = function(value) {
  return jspb.Message.setProto3StringField(this, 2, value);
};


/**
 * repeated ChannelConfiguration channels = 3;
 * @return {!Array<!proto.gw.ChannelConfiguration>}
 */
proto.gw.GatewayConfiguration.prototype.getChannelsList = function() {
  return /** @type{!Array<!proto.gw.ChannelConfiguration>} */ (
    jspb.Message.getRepeatedWrapperField(this, proto.gw.ChannelConfiguration, 3));
};


/**
 * @param {!Array<!proto.gw.ChannelConfiguration>} value
 * @return {!proto.gw.GatewayConfiguration} returns this
*/
proto.gw.GatewayConfiguration.prototype.setChannelsList = function(value) {
  return jspb.Message.setRepeatedWrapperField(this, 3, value);
};


/**
 * @param {!proto.gw.ChannelConfiguration=} opt_value
 * @param {number=} opt_index
 * @return {!proto.gw.ChannelConfiguration}
 */
proto.gw.GatewayConfiguration.prototype.addChannels = function(opt_value, opt_index) {
  return jspb.Message.addToRepeatedWrapperField(this, 3, opt_value, proto.gw.ChannelConfiguration, opt_index);
};


/**
 * Clears the list making it empty but non-null.
 * @return {!proto.gw.GatewayConfiguration} returns this
 */
proto.gw.GatewayConfiguration.prototype.clearChannelsList = function() {
  return this.setChannelsList([]);
};


/**
 * optional google.protobuf.Duration stats_interval = 4;
 * @return {?proto.google.protobuf.Duration}
 */
proto.gw.GatewayConfiguration.prototype.getStatsInterval = function() {
  return /** @type{?proto.google.protobuf.Duration} */ (
    jspb.Message.getWrapperField(this, google_protobuf_duration_pb.Duration, 4));
};


/**
 * @param {?proto.google.protobuf.Duration|undefined} value
 * @return {!proto.gw.GatewayConfiguration} returns this
*/
proto.gw.GatewayConfiguration.prototype.setStatsInterval = function(value) {
  return jspb.Message.setWrapperField(this, 4, value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.GatewayConfiguration} returns this
 */
proto.gw.GatewayConfiguration.prototype.clearStatsInterval = function() {
  return this.setStatsInterval(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.GatewayConfiguration.prototype.hasStatsInterval = function() {
  return jspb.Message.getField(this, 4) != null;
};



/**
 * Oneof group definitions for this message. Each group defines the field
 * numbers belonging to that group. When of these fields' value is set, all
 * other fields in the group are cleared. During deserialization, if multiple
 * fields are encountered for a group, only the last value seen will be kept.
 * @private {!Array<!Array<number>>}
 * @const
 */
proto.gw.ChannelConfiguration.oneofGroups_ = [[3,4]];

/**
 * @enum {number}
 */
proto.gw.ChannelConfiguration.ModulationConfigCase = {
  MODULATION_CONFIG_NOT_SET: 0,
  LORA_MODULATION_CONFIG: 3,
  FSK_MODULATION_CONFIG: 4
};

/**
 * @return {proto.gw.ChannelConfiguration.ModulationConfigCase}
 */
proto.gw.ChannelConfiguration.prototype.getModulationConfigCase = function() {
  return /** @type {proto.gw.ChannelConfiguration.ModulationConfigCase} */(jspb.Message.computeOneofCase(this, proto.gw.ChannelConfiguration.oneofGroups_[0]));
};



if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.ChannelConfiguration.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.ChannelConfiguration.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.ChannelConfiguration} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.ChannelConfiguration.toObject = function(includeInstance, msg) {
  var f, obj = {
    frequency: jspb.Message.getFieldWithDefault(msg, 1, 0),
    modulation: jspb.Message.getFieldWithDefault(msg, 2, 0),
    loraModulationConfig: (f = msg.getLoraModulationConfig()) && proto.gw.LoRaModulationConfig.toObject(includeInstance, f),
    fskModulationConfig: (f = msg.getFskModulationConfig()) && proto.gw.FSKModulationConfig.toObject(includeInstance, f),
    board: jspb.Message.getFieldWithDefault(msg, 5, 0),
    demodulator: jspb.Message.getFieldWithDefault(msg, 6, 0)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.ChannelConfiguration}
 */
proto.gw.ChannelConfiguration.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.ChannelConfiguration;
  return proto.gw.ChannelConfiguration.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.ChannelConfiguration} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.ChannelConfiguration}
 */
proto.gw.ChannelConfiguration.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setFrequency(value);
      break;
    case 2:
      var value = /** @type {!proto.common.Modulation} */ (reader.readEnum());
      msg.setModulation(value);
      break;
    case 3:
      var value = new proto.gw.LoRaModulationConfig;
      reader.readMessage(value,proto.gw.LoRaModulationConfig.deserializeBinaryFromReader);
      msg.setLoraModulationConfig(value);
      break;
    case 4:
      var value = new proto.gw.FSKModulationConfig;
      reader.readMessage(value,proto.gw.FSKModulationConfig.deserializeBinaryFromReader);
      msg.setFskModulationConfig(value);
      break;
    case 5:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setBoard(value);
      break;
    case 6:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setDemodulator(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.ChannelConfiguration.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.ChannelConfiguration.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.ChannelConfiguration} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.ChannelConfiguration.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getFrequency();
  if (f !== 0) {
    writer.writeUint32(
      1,
      f
    );
  }
  f = message.getModulation();
  if (f !== 0.0) {
    writer.writeEnum(
      2,
      f
    );
  }
  f = message.getLoraModulationConfig();
  if (f != null) {
    writer.writeMessage(
      3,
      f,
      proto.gw.LoRaModulationConfig.serializeBinaryToWriter
    );
  }
  f = message.getFskModulationConfig();
  if (f != null) {
    writer.writeMessage(
      4,
      f,
      proto.gw.FSKModulationConfig.serializeBinaryToWriter
    );
  }
  f = message.getBoard();
  if (f !== 0) {
    writer.writeUint32(
      5,
      f
    );
  }
  f = message.getDemodulator();
  if (f !== 0) {
    writer.writeUint32(
      6,
      f
    );
  }
};


/**
 * optional uint32 frequency = 1;
 * @return {number}
 */
proto.gw.ChannelConfiguration.prototype.getFrequency = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.ChannelConfiguration} returns this
 */
proto.gw.ChannelConfiguration.prototype.setFrequency = function(value) {
  return jspb.Message.setProto3IntField(this, 1, value);
};


/**
 * optional common.Modulation modulation = 2;
 * @return {!proto.common.Modulation}
 */
proto.gw.ChannelConfiguration.prototype.getModulation = function() {
  return /** @type {!proto.common.Modulation} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
};


/**
 * @param {!proto.common.Modulation} value
 * @return {!proto.gw.ChannelConfiguration} returns this
 */
proto.gw.ChannelConfiguration.prototype.setModulation = function(value) {
  return jspb.Message.setProto3EnumField(this, 2, value);
};


/**
 * optional LoRaModulationConfig lora_modulation_config = 3;
 * @return {?proto.gw.LoRaModulationConfig}
 */
proto.gw.ChannelConfiguration.prototype.getLoraModulationConfig = function() {
  return /** @type{?proto.gw.LoRaModulationConfig} */ (
    jspb.Message.getWrapperField(this, proto.gw.LoRaModulationConfig, 3));
};


/**
 * @param {?proto.gw.LoRaModulationConfig|undefined} value
 * @return {!proto.gw.ChannelConfiguration} returns this
*/
proto.gw.ChannelConfiguration.prototype.setLoraModulationConfig = function(value) {
  return jspb.Message.setOneofWrapperField(this, 3, proto.gw.ChannelConfiguration.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.ChannelConfiguration} returns this
 */
proto.gw.ChannelConfiguration.prototype.clearLoraModulationConfig = function() {
  return this.setLoraModulationConfig(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.ChannelConfiguration.prototype.hasLoraModulationConfig = function() {
  return jspb.Message.getField(this, 3) != null;
};


/**
 * optional FSKModulationConfig fsk_modulation_config = 4;
 * @return {?proto.gw.FSKModulationConfig}
 */
proto.gw.ChannelConfiguration.prototype.getFskModulationConfig = function() {
  return /** @type{?proto.gw.FSKModulationConfig} */ (
    jspb.Message.getWrapperField(this, proto.gw.FSKModulationConfig, 4));
};


/**
 * @param {?proto.gw.FSKModulationConfig|undefined} value
 * @return {!proto.gw.ChannelConfiguration} returns this
*/
proto.gw.ChannelConfiguration.prototype.setFskModulationConfig = function(value) {
  return jspb.Message.setOneofWrapperField(this, 4, proto.gw.ChannelConfiguration.oneofGroups_[0], value);
};


/**
 * Clears the message field making it undefined.
 * @return {!proto.gw.ChannelConfiguration} returns this
 */
proto.gw.ChannelConfiguration.prototype.clearFskModulationConfig = function() {
  return this.setFskModulationConfig(undefined);
};


/**
 * Returns whether this field is set.
 * @return {boolean}
 */
proto.gw.ChannelConfiguration.prototype.hasFskModulationConfig = function() {
  return jspb.Message.getField(this, 4) != null;
};


/**
 * optional uint32 board = 5;
 * @return {number}
 */
proto.gw.ChannelConfiguration.prototype.getBoard = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.ChannelConfiguration} returns this
 */
proto.gw.ChannelConfiguration.prototype.setBoard = function(value) {
  return jspb.Message.setProto3IntField(this, 5, value);
};


/**
 * optional uint32 demodulator = 6;
 * @return {number}
 */
proto.gw.ChannelConfiguration.prototype.getDemodulator = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.ChannelConfiguration} returns this
 */
proto.gw.ChannelConfiguration.prototype.setDemodulator = function(value) {
  return jspb.Message.setProto3IntField(this, 6, value);
};



/**
 * List of repeated fields within this message type.
 * @private {!Array<number>}
 * @const
 */
proto.gw.LoRaModulationConfig.repeatedFields_ = [2];



if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.LoRaModulationConfig.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.LoRaModulationConfig.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.LoRaModulationConfig} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.LoRaModulationConfig.toObject = function(includeInstance, msg) {
  var f, obj = {
    bandwidth: jspb.Message.getFieldWithDefault(msg, 1, 0),
    spreadingFactorsList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.LoRaModulationConfig}
 */
proto.gw.LoRaModulationConfig.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.LoRaModulationConfig;
  return proto.gw.LoRaModulationConfig.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.LoRaModulationConfig} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.LoRaModulationConfig}
 */
proto.gw.LoRaModulationConfig.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setBandwidth(value);
      break;
    case 2:
      var value = /** @type {!Array<number>} */ (reader.readPackedUint32());
      msg.setSpreadingFactorsList(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.LoRaModulationConfig.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.LoRaModulationConfig.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.LoRaModulationConfig} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.LoRaModulationConfig.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getBandwidth();
  if (f !== 0) {
    writer.writeUint32(
      1,
      f
    );
  }
  f = message.getSpreadingFactorsList();
  if (f.length > 0) {
    writer.writePackedUint32(
      2,
      f
    );
  }
};


/**
 * optional uint32 bandwidth = 1;
 * @return {number}
 */
proto.gw.LoRaModulationConfig.prototype.getBandwidth = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.LoRaModulationConfig} returns this
 */
proto.gw.LoRaModulationConfig.prototype.setBandwidth = function(value) {
  return jspb.Message.setProto3IntField(this, 1, value);
};


/**
 * repeated uint32 spreading_factors = 2;
 * @return {!Array<number>}
 */
proto.gw.LoRaModulationConfig.prototype.getSpreadingFactorsList = function() {
  return /** @type {!Array<number>} */ (jspb.Message.getRepeatedField(this, 2));
};


/**
 * @param {!Array<number>} value
 * @return {!proto.gw.LoRaModulationConfig} returns this
 */
proto.gw.LoRaModulationConfig.prototype.setSpreadingFactorsList = function(value) {
  return jspb.Message.setField(this, 2, value || []);
};


/**
 * @param {number} value
 * @param {number=} opt_index
 * @return {!proto.gw.LoRaModulationConfig} returns this
 */
proto.gw.LoRaModulationConfig.prototype.addSpreadingFactors = function(value, opt_index) {
  return jspb.Message.addToRepeatedField(this, 2, value, opt_index);
};


/**
 * Clears the list making it empty but non-null.
 * @return {!proto.gw.LoRaModulationConfig} returns this
 */
proto.gw.LoRaModulationConfig.prototype.clearSpreadingFactorsList = function() {
  return this.setSpreadingFactorsList([]);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.FSKModulationConfig.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.FSKModulationConfig.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.FSKModulationConfig} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.FSKModulationConfig.toObject = function(includeInstance, msg) {
  var f, obj = {
    bandwidth: jspb.Message.getFieldWithDefault(msg, 1, 0),
    bitrate: jspb.Message.getFieldWithDefault(msg, 2, 0)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.FSKModulationConfig}
 */
proto.gw.FSKModulationConfig.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.FSKModulationConfig;
  return proto.gw.FSKModulationConfig.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.FSKModulationConfig} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.FSKModulationConfig}
 */
proto.gw.FSKModulationConfig.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setBandwidth(value);
      break;
    case 2:
      var value = /** @type {number} */ (reader.readUint32());
      msg.setBitrate(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.FSKModulationConfig.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.FSKModulationConfig.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.FSKModulationConfig} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.FSKModulationConfig.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getBandwidth();
  if (f !== 0) {
    writer.writeUint32(
      1,
      f
    );
  }
  f = message.getBitrate();
  if (f !== 0) {
    writer.writeUint32(
      2,
      f
    );
  }
};


/**
 * optional uint32 bandwidth = 1;
 * @return {number}
 */
proto.gw.FSKModulationConfig.prototype.getBandwidth = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.FSKModulationConfig} returns this
 */
proto.gw.FSKModulationConfig.prototype.setBandwidth = function(value) {
  return jspb.Message.setProto3IntField(this, 1, value);
};


/**
 * optional uint32 bitrate = 2;
 * @return {number}
 */
proto.gw.FSKModulationConfig.prototype.getBitrate = function() {
  return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
};


/**
 * @param {number} value
 * @return {!proto.gw.FSKModulationConfig} returns this
 */
proto.gw.FSKModulationConfig.prototype.setBitrate = function(value) {
  return jspb.Message.setProto3IntField(this, 2, value);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.GatewayCommandExecRequest.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.GatewayCommandExecRequest.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.GatewayCommandExecRequest} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.GatewayCommandExecRequest.toObject = function(includeInstance, msg) {
  var f, obj = {
    gatewayId: msg.getGatewayId_asB64(),
    command: jspb.Message.getFieldWithDefault(msg, 2, ""),
    execid: msg.getExecid_asB64(),
    stdin: msg.getStdin_asB64(),
    environmentMap: (f = msg.getEnvironmentMap()) ? f.toObject(includeInstance, undefined) : []
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.GatewayCommandExecRequest}
 */
proto.gw.GatewayCommandExecRequest.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.GatewayCommandExecRequest;
  return proto.gw.GatewayCommandExecRequest.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.GatewayCommandExecRequest} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.GatewayCommandExecRequest}
 */
proto.gw.GatewayCommandExecRequest.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setGatewayId(value);
      break;
    case 2:
      var value = /** @type {string} */ (reader.readString());
      msg.setCommand(value);
      break;
    case 3:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setExecid(value);
      break;
    case 4:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setStdin(value);
      break;
    case 5:
      var value = msg.getEnvironmentMap();
      reader.readMessage(value, function(message, reader) {
        jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
         });
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.GatewayCommandExecRequest.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.GatewayCommandExecRequest.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.GatewayCommandExecRequest} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.GatewayCommandExecRequest.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getGatewayId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getCommand();
  if (f.length > 0) {
    writer.writeString(
      2,
      f
    );
  }
  f = message.getExecid_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      3,
      f
    );
  }
  f = message.getStdin_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      4,
      f
    );
  }
  f = message.getEnvironmentMap(true);
  if (f && f.getLength() > 0) {
    f.serializeBinary(5, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
  }
};


/**
 * optional bytes gateway_id = 1;
 * @return {string}
 */
proto.gw.GatewayCommandExecRequest.prototype.getGatewayId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes gateway_id = 1;
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {string}
 */
proto.gw.GatewayCommandExecRequest.prototype.getGatewayId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getGatewayId()));
};


/**
 * optional bytes gateway_id = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {!Uint8Array}
 */
proto.gw.GatewayCommandExecRequest.prototype.getGatewayId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getGatewayId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.GatewayCommandExecRequest} returns this
 */
proto.gw.GatewayCommandExecRequest.prototype.setGatewayId = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional string command = 2;
 * @return {string}
 */
proto.gw.GatewayCommandExecRequest.prototype.getCommand = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
};


/**
 * @param {string} value
 * @return {!proto.gw.GatewayCommandExecRequest} returns this
 */
proto.gw.GatewayCommandExecRequest.prototype.setCommand = function(value) {
  return jspb.Message.setProto3StringField(this, 2, value);
};


/**
 * optional bytes ExecId = 3;
 * @return {string}
 */
proto.gw.GatewayCommandExecRequest.prototype.getExecid = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
};


/**
 * optional bytes ExecId = 3;
 * This is a type-conversion wrapper around `getExecid()`
 * @return {string}
 */
proto.gw.GatewayCommandExecRequest.prototype.getExecid_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getExecid()));
};


/**
 * optional bytes ExecId = 3;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getExecid()`
 * @return {!Uint8Array}
 */
proto.gw.GatewayCommandExecRequest.prototype.getExecid_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getExecid()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.GatewayCommandExecRequest} returns this
 */
proto.gw.GatewayCommandExecRequest.prototype.setExecid = function(value) {
  return jspb.Message.setProto3BytesField(this, 3, value);
};


/**
 * optional bytes stdin = 4;
 * @return {string}
 */
proto.gw.GatewayCommandExecRequest.prototype.getStdin = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
};


/**
 * optional bytes stdin = 4;
 * This is a type-conversion wrapper around `getStdin()`
 * @return {string}
 */
proto.gw.GatewayCommandExecRequest.prototype.getStdin_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getStdin()));
};


/**
 * optional bytes stdin = 4;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getStdin()`
 * @return {!Uint8Array}
 */
proto.gw.GatewayCommandExecRequest.prototype.getStdin_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getStdin()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.GatewayCommandExecRequest} returns this
 */
proto.gw.GatewayCommandExecRequest.prototype.setStdin = function(value) {
  return jspb.Message.setProto3BytesField(this, 4, value);
};


/**
 * map<string, string> environment = 5;
 * @param {boolean=} opt_noLazyCreate Do not create the map if
 * empty, instead returning `undefined`
 * @return {!jspb.Map<string,string>}
 */
proto.gw.GatewayCommandExecRequest.prototype.getEnvironmentMap = function(opt_noLazyCreate) {
  return /** @type {!jspb.Map<string,string>} */ (
      jspb.Message.getMapField(this, 5, opt_noLazyCreate,
      null));
};


/**
 * Clears values from the map. The map will be non-null.
 * @return {!proto.gw.GatewayCommandExecRequest} returns this
 */
proto.gw.GatewayCommandExecRequest.prototype.clearEnvironmentMap = function() {
  this.getEnvironmentMap().clear();
  return this;};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.GatewayCommandExecResponse.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.GatewayCommandExecResponse.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.GatewayCommandExecResponse} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.GatewayCommandExecResponse.toObject = function(includeInstance, msg) {
  var f, obj = {
    gatewayId: msg.getGatewayId_asB64(),
    execId: msg.getExecId_asB64(),
    stdout: msg.getStdout_asB64(),
    stderr: msg.getStderr_asB64(),
    error: jspb.Message.getFieldWithDefault(msg, 5, "")
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.GatewayCommandExecResponse}
 */
proto.gw.GatewayCommandExecResponse.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.GatewayCommandExecResponse;
  return proto.gw.GatewayCommandExecResponse.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.GatewayCommandExecResponse} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.GatewayCommandExecResponse}
 */
proto.gw.GatewayCommandExecResponse.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setGatewayId(value);
      break;
    case 2:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setExecId(value);
      break;
    case 3:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setStdout(value);
      break;
    case 4:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setStderr(value);
      break;
    case 5:
      var value = /** @type {string} */ (reader.readString());
      msg.setError(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.GatewayCommandExecResponse.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.GatewayCommandExecResponse.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.GatewayCommandExecResponse} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.GatewayCommandExecResponse.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getGatewayId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getExecId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      2,
      f
    );
  }
  f = message.getStdout_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      3,
      f
    );
  }
  f = message.getStderr_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      4,
      f
    );
  }
  f = message.getError();
  if (f.length > 0) {
    writer.writeString(
      5,
      f
    );
  }
};


/**
 * optional bytes gateway_id = 1;
 * @return {string}
 */
proto.gw.GatewayCommandExecResponse.prototype.getGatewayId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes gateway_id = 1;
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {string}
 */
proto.gw.GatewayCommandExecResponse.prototype.getGatewayId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getGatewayId()));
};


/**
 * optional bytes gateway_id = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {!Uint8Array}
 */
proto.gw.GatewayCommandExecResponse.prototype.getGatewayId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getGatewayId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.GatewayCommandExecResponse} returns this
 */
proto.gw.GatewayCommandExecResponse.prototype.setGatewayId = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional bytes exec_id = 2;
 * @return {string}
 */
proto.gw.GatewayCommandExecResponse.prototype.getExecId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
};


/**
 * optional bytes exec_id = 2;
 * This is a type-conversion wrapper around `getExecId()`
 * @return {string}
 */
proto.gw.GatewayCommandExecResponse.prototype.getExecId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getExecId()));
};


/**
 * optional bytes exec_id = 2;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getExecId()`
 * @return {!Uint8Array}
 */
proto.gw.GatewayCommandExecResponse.prototype.getExecId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getExecId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.GatewayCommandExecResponse} returns this
 */
proto.gw.GatewayCommandExecResponse.prototype.setExecId = function(value) {
  return jspb.Message.setProto3BytesField(this, 2, value);
};


/**
 * optional bytes stdout = 3;
 * @return {string}
 */
proto.gw.GatewayCommandExecResponse.prototype.getStdout = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
};


/**
 * optional bytes stdout = 3;
 * This is a type-conversion wrapper around `getStdout()`
 * @return {string}
 */
proto.gw.GatewayCommandExecResponse.prototype.getStdout_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getStdout()));
};


/**
 * optional bytes stdout = 3;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getStdout()`
 * @return {!Uint8Array}
 */
proto.gw.GatewayCommandExecResponse.prototype.getStdout_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getStdout()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.GatewayCommandExecResponse} returns this
 */
proto.gw.GatewayCommandExecResponse.prototype.setStdout = function(value) {
  return jspb.Message.setProto3BytesField(this, 3, value);
};


/**
 * optional bytes stderr = 4;
 * @return {string}
 */
proto.gw.GatewayCommandExecResponse.prototype.getStderr = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
};


/**
 * optional bytes stderr = 4;
 * This is a type-conversion wrapper around `getStderr()`
 * @return {string}
 */
proto.gw.GatewayCommandExecResponse.prototype.getStderr_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getStderr()));
};


/**
 * optional bytes stderr = 4;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getStderr()`
 * @return {!Uint8Array}
 */
proto.gw.GatewayCommandExecResponse.prototype.getStderr_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getStderr()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.GatewayCommandExecResponse} returns this
 */
proto.gw.GatewayCommandExecResponse.prototype.setStderr = function(value) {
  return jspb.Message.setProto3BytesField(this, 4, value);
};


/**
 * optional string error = 5;
 * @return {string}
 */
proto.gw.GatewayCommandExecResponse.prototype.getError = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
};


/**
 * @param {string} value
 * @return {!proto.gw.GatewayCommandExecResponse} returns this
 */
proto.gw.GatewayCommandExecResponse.prototype.setError = function(value) {
  return jspb.Message.setProto3StringField(this, 5, value);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.RawPacketForwarderEvent.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.RawPacketForwarderEvent.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.RawPacketForwarderEvent} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.RawPacketForwarderEvent.toObject = function(includeInstance, msg) {
  var f, obj = {
    gatewayId: msg.getGatewayId_asB64(),
    rawId: msg.getRawId_asB64(),
    payload: msg.getPayload_asB64()
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.RawPacketForwarderEvent}
 */
proto.gw.RawPacketForwarderEvent.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.RawPacketForwarderEvent;
  return proto.gw.RawPacketForwarderEvent.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.RawPacketForwarderEvent} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.RawPacketForwarderEvent}
 */
proto.gw.RawPacketForwarderEvent.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setGatewayId(value);
      break;
    case 2:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setRawId(value);
      break;
    case 3:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setPayload(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.RawPacketForwarderEvent.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.RawPacketForwarderEvent.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.RawPacketForwarderEvent} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.RawPacketForwarderEvent.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getGatewayId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getRawId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      2,
      f
    );
  }
  f = message.getPayload_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      3,
      f
    );
  }
};


/**
 * optional bytes gateway_id = 1;
 * @return {string}
 */
proto.gw.RawPacketForwarderEvent.prototype.getGatewayId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes gateway_id = 1;
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {string}
 */
proto.gw.RawPacketForwarderEvent.prototype.getGatewayId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getGatewayId()));
};


/**
 * optional bytes gateway_id = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {!Uint8Array}
 */
proto.gw.RawPacketForwarderEvent.prototype.getGatewayId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getGatewayId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.RawPacketForwarderEvent} returns this
 */
proto.gw.RawPacketForwarderEvent.prototype.setGatewayId = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional bytes raw_id = 2;
 * @return {string}
 */
proto.gw.RawPacketForwarderEvent.prototype.getRawId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
};


/**
 * optional bytes raw_id = 2;
 * This is a type-conversion wrapper around `getRawId()`
 * @return {string}
 */
proto.gw.RawPacketForwarderEvent.prototype.getRawId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getRawId()));
};


/**
 * optional bytes raw_id = 2;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getRawId()`
 * @return {!Uint8Array}
 */
proto.gw.RawPacketForwarderEvent.prototype.getRawId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getRawId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.RawPacketForwarderEvent} returns this
 */
proto.gw.RawPacketForwarderEvent.prototype.setRawId = function(value) {
  return jspb.Message.setProto3BytesField(this, 2, value);
};


/**
 * optional bytes payload = 3;
 * @return {string}
 */
proto.gw.RawPacketForwarderEvent.prototype.getPayload = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
};


/**
 * optional bytes payload = 3;
 * This is a type-conversion wrapper around `getPayload()`
 * @return {string}
 */
proto.gw.RawPacketForwarderEvent.prototype.getPayload_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getPayload()));
};


/**
 * optional bytes payload = 3;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getPayload()`
 * @return {!Uint8Array}
 */
proto.gw.RawPacketForwarderEvent.prototype.getPayload_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getPayload()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.RawPacketForwarderEvent} returns this
 */
proto.gw.RawPacketForwarderEvent.prototype.setPayload = function(value) {
  return jspb.Message.setProto3BytesField(this, 3, value);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.RawPacketForwarderCommand.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.RawPacketForwarderCommand.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.RawPacketForwarderCommand} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.RawPacketForwarderCommand.toObject = function(includeInstance, msg) {
  var f, obj = {
    gatewayId: msg.getGatewayId_asB64(),
    rawId: msg.getRawId_asB64(),
    payload: msg.getPayload_asB64()
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.RawPacketForwarderCommand}
 */
proto.gw.RawPacketForwarderCommand.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.RawPacketForwarderCommand;
  return proto.gw.RawPacketForwarderCommand.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.RawPacketForwarderCommand} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.RawPacketForwarderCommand}
 */
proto.gw.RawPacketForwarderCommand.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setGatewayId(value);
      break;
    case 2:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setRawId(value);
      break;
    case 3:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setPayload(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.RawPacketForwarderCommand.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.RawPacketForwarderCommand.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.RawPacketForwarderCommand} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.RawPacketForwarderCommand.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getGatewayId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getRawId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      2,
      f
    );
  }
  f = message.getPayload_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      3,
      f
    );
  }
};


/**
 * optional bytes gateway_id = 1;
 * @return {string}
 */
proto.gw.RawPacketForwarderCommand.prototype.getGatewayId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes gateway_id = 1;
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {string}
 */
proto.gw.RawPacketForwarderCommand.prototype.getGatewayId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getGatewayId()));
};


/**
 * optional bytes gateway_id = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {!Uint8Array}
 */
proto.gw.RawPacketForwarderCommand.prototype.getGatewayId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getGatewayId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.RawPacketForwarderCommand} returns this
 */
proto.gw.RawPacketForwarderCommand.prototype.setGatewayId = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional bytes raw_id = 2;
 * @return {string}
 */
proto.gw.RawPacketForwarderCommand.prototype.getRawId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
};


/**
 * optional bytes raw_id = 2;
 * This is a type-conversion wrapper around `getRawId()`
 * @return {string}
 */
proto.gw.RawPacketForwarderCommand.prototype.getRawId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getRawId()));
};


/**
 * optional bytes raw_id = 2;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getRawId()`
 * @return {!Uint8Array}
 */
proto.gw.RawPacketForwarderCommand.prototype.getRawId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getRawId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.RawPacketForwarderCommand} returns this
 */
proto.gw.RawPacketForwarderCommand.prototype.setRawId = function(value) {
  return jspb.Message.setProto3BytesField(this, 2, value);
};


/**
 * optional bytes payload = 3;
 * @return {string}
 */
proto.gw.RawPacketForwarderCommand.prototype.getPayload = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
};


/**
 * optional bytes payload = 3;
 * This is a type-conversion wrapper around `getPayload()`
 * @return {string}
 */
proto.gw.RawPacketForwarderCommand.prototype.getPayload_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getPayload()));
};


/**
 * optional bytes payload = 3;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getPayload()`
 * @return {!Uint8Array}
 */
proto.gw.RawPacketForwarderCommand.prototype.getPayload_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getPayload()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.RawPacketForwarderCommand} returns this
 */
proto.gw.RawPacketForwarderCommand.prototype.setPayload = function(value) {
  return jspb.Message.setProto3BytesField(this, 3, value);
};





if (jspb.Message.GENERATE_TO_OBJECT) {
/**
 * Creates an object representation of this proto.
 * Field names that are reserved in JavaScript and will be renamed to pb_name.
 * Optional fields that are not set will be set to undefined.
 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
 * For the list of reserved names please see:
 *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
 * @param {boolean=} opt_includeInstance Deprecated. whether to include the
 *     JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @return {!Object}
 */
proto.gw.ConnState.prototype.toObject = function(opt_includeInstance) {
  return proto.gw.ConnState.toObject(opt_includeInstance, this);
};


/**
 * Static version of the {@see toObject} method.
 * @param {boolean|undefined} includeInstance Deprecated. Whether to include
 *     the JSPB instance for transitional soy proto support:
 *     http://goto/soy-param-migration
 * @param {!proto.gw.ConnState} msg The msg instance to transform.
 * @return {!Object}
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.ConnState.toObject = function(includeInstance, msg) {
  var f, obj = {
    gatewayId: msg.getGatewayId_asB64(),
    state: jspb.Message.getFieldWithDefault(msg, 2, 0)
  };

  if (includeInstance) {
    obj.$jspbMessageInstance = msg;
  }
  return obj;
};
}


/**
 * Deserializes binary data (in protobuf wire format).
 * @param {jspb.ByteSource} bytes The bytes to deserialize.
 * @return {!proto.gw.ConnState}
 */
proto.gw.ConnState.deserializeBinary = function(bytes) {
  var reader = new jspb.BinaryReader(bytes);
  var msg = new proto.gw.ConnState;
  return proto.gw.ConnState.deserializeBinaryFromReader(msg, reader);
};


/**
 * Deserializes binary data (in protobuf wire format) from the
 * given reader into the given message object.
 * @param {!proto.gw.ConnState} msg The message object to deserialize into.
 * @param {!jspb.BinaryReader} reader The BinaryReader to use.
 * @return {!proto.gw.ConnState}
 */
proto.gw.ConnState.deserializeBinaryFromReader = function(msg, reader) {
  while (reader.nextField()) {
    if (reader.isEndGroup()) {
      break;
    }
    var field = reader.getFieldNumber();
    switch (field) {
    case 1:
      var value = /** @type {!Uint8Array} */ (reader.readBytes());
      msg.setGatewayId(value);
      break;
    case 2:
      var value = /** @type {!proto.gw.ConnState.State} */ (reader.readEnum());
      msg.setState(value);
      break;
    default:
      reader.skipField();
      break;
    }
  }
  return msg;
};


/**
 * Serializes the message to binary data (in protobuf wire format).
 * @return {!Uint8Array}
 */
proto.gw.ConnState.prototype.serializeBinary = function() {
  var writer = new jspb.BinaryWriter();
  proto.gw.ConnState.serializeBinaryToWriter(this, writer);
  return writer.getResultBuffer();
};


/**
 * Serializes the given message to binary data (in protobuf wire
 * format), writing to the given BinaryWriter.
 * @param {!proto.gw.ConnState} message
 * @param {!jspb.BinaryWriter} writer
 * @suppress {unusedLocalVariables} f is only used for nested messages
 */
proto.gw.ConnState.serializeBinaryToWriter = function(message, writer) {
  var f = undefined;
  f = message.getGatewayId_asU8();
  if (f.length > 0) {
    writer.writeBytes(
      1,
      f
    );
  }
  f = message.getState();
  if (f !== 0.0) {
    writer.writeEnum(
      2,
      f
    );
  }
};


/**
 * @enum {number}
 */
proto.gw.ConnState.State = {
  OFFLINE: 0,
  ONLINE: 1
};

/**
 * optional bytes gateway_id = 1;
 * @return {string}
 */
proto.gw.ConnState.prototype.getGatewayId = function() {
  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};


/**
 * optional bytes gateway_id = 1;
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {string}
 */
proto.gw.ConnState.prototype.getGatewayId_asB64 = function() {
  return /** @type {string} */ (jspb.Message.bytesAsB64(
      this.getGatewayId()));
};


/**
 * optional bytes gateway_id = 1;
 * Note that Uint8Array is not supported on all browsers.
 * @see http://caniuse.com/Uint8Array
 * This is a type-conversion wrapper around `getGatewayId()`
 * @return {!Uint8Array}
 */
proto.gw.ConnState.prototype.getGatewayId_asU8 = function() {
  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
      this.getGatewayId()));
};


/**
 * @param {!(string|Uint8Array)} value
 * @return {!proto.gw.ConnState} returns this
 */
proto.gw.ConnState.prototype.setGatewayId = function(value) {
  return jspb.Message.setProto3BytesField(this, 1, value);
};


/**
 * optional State state = 2;
 * @return {!proto.gw.ConnState.State}
 */
proto.gw.ConnState.prototype.getState = function() {
  return /** @type {!proto.gw.ConnState.State} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
};


/**
 * @param {!proto.gw.ConnState.State} value
 * @return {!proto.gw.ConnState} returns this
 */
proto.gw.ConnState.prototype.setState = function(value) {
  return jspb.Message.setProto3EnumField(this, 2, value);
};


/**
 * @enum {number}
 */
proto.gw.DownlinkTiming = {
  IMMEDIATELY: 0,
  DELAY: 1,
  GPS_EPOCH: 2
};

/**
 * @enum {number}
 */
proto.gw.FineTimestampType = {
  NONE: 0,
  ENCRYPTED: 1,
  PLAIN: 2
};

/**
 * @enum {number}
 */
proto.gw.CRCStatus = {
  NO_CRC: 0,
  BAD_CRC: 1,
  CRC_OK: 2
};

/**
 * @enum {number}
 */
proto.gw.TxAckStatus = {
  IGNORED: 0,
  OK: 1,
  TOO_LATE: 2,
  TOO_EARLY: 3,
  COLLISION_PACKET: 4,
  COLLISION_BEACON: 5,
  TX_FREQ: 6,
  TX_POWER: 7,
  GPS_UNLOCKED: 8,
  QUEUE_FULL: 9,
  INTERNAL_ERROR: 10
};

goog.object.extend(exports, proto.gw);
