text: # This Python file uses the following encoding: utf-8
  """autogenerated by genpy from geographic_msgs/RouteNetwork.msg. Do not edit."""
  import codecs
  import sys
  python3 = True if sys.hexversion > 0x03000000 else False
  import genpy
  import struct
  
  import geographic_msgs.msg
  import std_msgs.msg
  import uuid_msgs.msg
  
  class RouteNetwork(genpy.Message):
    _md5sum = "fd717c0a34a7c954deed32c6847f30a8"
    _type = "geographic_msgs/RouteNetwork"
    _has_header = True  # flag to mark the presence of a Header object
    _full_text = """# Geographic map route network.
  #
  # A directed graph of WayPoint nodes and RouteSegment edges.  This
  # information is extracted from the more-detailed contents of a
  # GeographicMap.  A RouteNetwork contains only the way points and
  # route segments of interest for path planning.
  
  Header          header
  
  uuid_msgs/UniqueID id    # This route network identifier
  BoundingBox     bounds   # 2D bounding box for network
  
  WayPoint[]      points   # Way points in this network
  RouteSegment[]  segments # Directed edges of this network
  
  KeyValue[]      props    # Network key/value properties
  
  ================================================================================
  MSG: std_msgs/Header
  # Standard metadata for higher-level stamped data types.
  # This is generally used to communicate timestamped data 
  # in a particular coordinate frame.
  # 
  # sequence ID: consecutively increasing ID 
  uint32 seq
  #Two-integer timestamp that is expressed as:
  # * stamp.sec: seconds (stamp_secs) since epoch (in Python the variable is called 'secs')
  # * stamp.nsec: nanoseconds since stamp_secs (in Python the variable is called 'nsecs')
  # time-handling sugar is provided by the client library
  time stamp
  #Frame this data is associated with
  string frame_id
  
  ================================================================================
  MSG: uuid_msgs/UniqueID
  # A universally unique identifier (UUID).
  #
  #  http://en.wikipedia.org/wiki/Universally_unique_identifier
  #  http://tools.ietf.org/html/rfc4122.html
  
  uint8[16] uuid
  
  ================================================================================
  MSG: geographic_msgs/BoundingBox
  # Geographic map bounding box. 
  #
  # The two GeoPoints denote diagonally opposite corners of the box.
  #
  # If min_pt.latitude is NaN, the bounding box is "global", matching
  # any valid latitude, longitude and altitude.
  #
  # If min_pt.altitude is NaN, the bounding box is two-dimensional and
  # matches any altitude within the specified latitude and longitude
  # range.
  
  GeoPoint min_pt         # lowest and most Southwestern corner
  GeoPoint max_pt         # highest and most Northeastern corner
  
  ================================================================================
  MSG: geographic_msgs/GeoPoint
  # Geographic point, using the WGS 84 reference ellipsoid.
  
  # Latitude [degrees]. Positive is north of equator; negative is south
  # (-90 <= latitude <= +90).
  float64 latitude
  
  # Longitude [degrees]. Positive is east of prime meridian; negative is
  # west (-180 <= longitude <= +180). At the poles, latitude is -90 or
  # +90, and longitude is irrelevant, but must be in range.
  float64 longitude
  
  # Altitude [m]. Positive is above the WGS 84 ellipsoid (NaN if unspecified).
  float64 altitude
  
  ================================================================================
  MSG: geographic_msgs/WayPoint
  # Way-point element for a geographic map.
  
  uuid_msgs/UniqueID id   # Unique way-point identifier
  GeoPoint   position     # Position relative to WGS 84 ellipsoid
  KeyValue[] props        # Key/value properties for this point
  
  ================================================================================
  MSG: geographic_msgs/KeyValue
  # Geographic map tag (key, value) pair
  #
  # This is equivalent to diagnostic_msgs/KeyValue, repeated here to
  # avoid introducing a trivial stack dependency.
  
  string key                     # tag label
  string value                   # corresponding value
  
  ================================================================================
  MSG: geographic_msgs/RouteSegment
  # Route network segment.
  #
  # This is one directed edge of a RouteNetwork graph. It represents a
  # known path from one way point to another.  If the path is two-way,
  # there will be another RouteSegment with "start" and "end" reversed.
  
  uuid_msgs/UniqueID id           # Unique identifier for this segment
  
  uuid_msgs/UniqueID start        # beginning way point of segment
  uuid_msgs/UniqueID end          # ending way point of segment
  
  KeyValue[] props                # segment properties
  """
    __slots__ = ['header','id','bounds','points','segments','props']
    _slot_types = ['std_msgs/Header','uuid_msgs/UniqueID','geographic_msgs/BoundingBox','geographic_msgs/WayPoint[]','geographic_msgs/RouteSegment[]','geographic_msgs/KeyValue[]']
  
    def __init__(self, *args, **kwds):
      """
      Constructor. Any message fields that are implicitly/explicitly
      set to None will be assigned a default value. The recommend
      use is keyword arguments as this is more robust to future message
      changes.  You cannot mix in-order arguments and keyword arguments.
  
      The available fields are:
         header,id,bounds,points,segments,props
  
      :param args: complete set of field values, in .msg order
      :param kwds: use keyword arguments corresponding to message field names
      to set specific fields.
      """
      if args or kwds:
        super(RouteNetwork, self).__init__(*args, **kwds)
        # message fields cannot be None, assign default values for those that are
        if self.header is None:
          self.header = std_msgs.msg.Header()
        if self.id is None:
          self.id = uuid_msgs.msg.UniqueID()
        if self.bounds is None:
          self.bounds = geographic_msgs.msg.BoundingBox()
        if self.points is None:
          self.points = []
        if self.segments is None:
          self.segments = []
        if self.props is None:
          self.props = []
      else:
        self.header = std_msgs.msg.Header()
        self.id = uuid_msgs.msg.UniqueID()
        self.bounds = geographic_msgs.msg.BoundingBox()
        self.points = []
        self.segments = []
        self.props = []
  
    def _get_types(self):
      """
      internal API method
      """
      return self._slot_types
  
    def serialize(self, buff):
      """
      serialize message into buffer
      :param buff: buffer, ``StringIO``
      """
      try:
        _x = self
        buff.write(_get_struct_3I().pack(_x.header.seq, _x.header.stamp.secs, _x.header.stamp.nsecs))
        _x = self.header.frame_id
        length = len(_x)
        if python3 or type(_x) == unicode:
          _x = _x.encode('utf-8')
          length = len(_x)
        buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
        _x = self.id.uuid
        # - if encoded as a list instead, serialize as bytes instead of string
        if type(_x) in [list, tuple]:
          buff.write(_get_struct_16B().pack(*_x))
        else:
          buff.write(_get_struct_16s().pack(_x))
        _x = self
        buff.write(_get_struct_6d().pack(_x.bounds.min_pt.latitude, _x.bounds.min_pt.longitude, _x.bounds.min_pt.altitude, _x.bounds.max_pt.latitude, _x.bounds.max_pt.longitude, _x.bounds.max_pt.altitude))
        length = len(self.points)
        buff.write(_struct_I.pack(length))
        for val1 in self.points:
          _v1 = val1.id
          _x = _v1.uuid
          # - if encoded as a list instead, serialize as bytes instead of string
          if type(_x) in [list, tuple]:
            buff.write(_get_struct_16B().pack(*_x))
          else:
            buff.write(_get_struct_16s().pack(_x))
          _v2 = val1.position
          _x = _v2
          buff.write(_get_struct_3d().pack(_x.latitude, _x.longitude, _x.altitude))
          length = len(val1.props)
          buff.write(_struct_I.pack(length))
          for val2 in val1.props:
            _x = val2.key
            length = len(_x)
            if python3 or type(_x) == unicode:
              _x = _x.encode('utf-8')
              length = len(_x)
            buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
            _x = val2.value
            length = len(_x)
            if python3 or type(_x) == unicode:
              _x = _x.encode('utf-8')
              length = len(_x)
            buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
        length = len(self.segments)
        buff.write(_struct_I.pack(length))
        for val1 in self.segments:
          _v3 = val1.id
          _x = _v3.uuid
          # - if encoded as a list instead, serialize as bytes instead of string
          if type(_x) in [list, tuple]:
            buff.write(_get_struct_16B().pack(*_x))
          else:
            buff.write(_get_struct_16s().pack(_x))
          _v4 = val1.start
          _x = _v4.uuid
          # - if encoded as a list instead, serialize as bytes instead of string
          if type(_x) in [list, tuple]:
            buff.write(_get_struct_16B().pack(*_x))
          else:
            buff.write(_get_struct_16s().pack(_x))
          _v5 = val1.end
          _x = _v5.uuid
          # - if encoded as a list instead, serialize as bytes instead of string
          if type(_x) in [list, tuple]:
            buff.write(_get_struct_16B().pack(*_x))
          else:
            buff.write(_get_struct_16s().pack(_x))
          length = len(val1.props)
          buff.write(_struct_I.pack(length))
          for val2 in val1.props:
            _x = val2.key
            length = len(_x)
            if python3 or type(_x) == unicode:
              _x = _x.encode('utf-8')
              length = len(_x)
            buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
            _x = val2.value
            length = len(_x)
            if python3 or type(_x) == unicode:
              _x = _x.encode('utf-8')
              length = len(_x)
            buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
        length = len(self.props)
        buff.write(_struct_I.pack(length))
        for val1 in self.props:
          _x = val1.key
          length = len(_x)
          if python3 or type(_x) == unicode:
            _x = _x.encode('utf-8')
            length = len(_x)
          buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
          _x = val1.value
          length = len(_x)
          if python3 or type(_x) == unicode:
            _x = _x.encode('utf-8')
            length = len(_x)
          buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
      except struct.error as se: self._check_types(struct.error("%s: '%s' when writing '%s'" % (type(se), str(se), str(locals().get('_x', self)))))
      except TypeError as te: self._check_types(ValueError("%s: '%s' when writing '%s'" % (type(te), str(te), str(locals().get('_x', self)))))
  
    def deserialize(self, str):
      """
      unpack serialized message in str into this message instance
      :param str: byte array of serialized message, ``str``
      """
      if python3:
        codecs.lookup_error("rosmsg").msg_type = self._type
      try:
        if self.header is None:
          self.header = std_msgs.msg.Header()
        if self.id is None:
          self.id = uuid_msgs.msg.UniqueID()
        if self.bounds is None:
          self.bounds = geographic_msgs.msg.BoundingBox()
        if self.points is None:
          self.points = None
        if self.segments is None:
          self.segments = None
        if self.props is None:
          self.props = None
        end = 0
        _x = self
        start = end
        end += 12
        (_x.header.seq, _x.header.stamp.secs, _x.header.stamp.nsecs,) = _get_struct_3I().unpack(str[start:end])
        start = end
        end += 4
        (length,) = _struct_I.unpack(str[start:end])
        start = end
        end += length
        if python3:
          self.header.frame_id = str[start:end].decode('utf-8', 'rosmsg')
        else:
          self.header.frame_id = str[start:end]
        start = end
        end += 16
        self.id.uuid = str[start:end]
        _x = self
        start = end
        end += 48
        (_x.bounds.min_pt.latitude, _x.bounds.min_pt.longitude, _x.bounds.min_pt.altitude, _x.bounds.max_pt.latitude, _x.bounds.max_pt.longitude, _x.bounds.max_pt.altitude,) = _get_struct_6d().unpack(str[start:end])
        start = end
        end += 4
        (length,) = _struct_I.unpack(str[start:end])
        self.points = []
        for i in range(0, length):
          val1 = geographic_msgs.msg.WayPoint()
          _v6 = val1.id
          start = end
          end += 16
          _v6.uuid = str[start:end]
          _v7 = val1.position
          _x = _v7
          start = end
          end += 24
          (_x.latitude, _x.longitude, _x.altitude,) = _get_struct_3d().unpack(str[start:end])
          start = end
          end += 4
          (length,) = _struct_I.unpack(str[start:end])
          val1.props = []
          for i in range(0, length):
            val2 = geographic_msgs.msg.KeyValue()
            start = end
            end += 4
            (length,) = _struct_I.unpack(str[start:end])
            start = end
            end += length
            if python3:
              val2.key = str[start:end].decode('utf-8', 'rosmsg')
            else:
              val2.key = str[start:end]
            start = end
            end += 4
            (length,) = _struct_I.unpack(str[start:end])
            start = end
            end += length
            if python3:
              val2.value = str[start:end].decode('utf-8', 'rosmsg')
            else:
              val2.value = str[start:end]
            val1.props.append(val2)
          self.points.append(val1)
        start = end
        end += 4
        (length,) = _struct_I.unpack(str[start:end])
        self.segments = []
        for i in range(0, length):
          val1 = geographic_msgs.msg.RouteSegment()
          _v8 = val1.id
          start = end
          end += 16
          _v8.uuid = str[start:end]
          _v9 = val1.start
          start = end
          end += 16
          _v9.uuid = str[start:end]
          _v10 = val1.end
          start = end
          end += 16
          _v10.uuid = str[start:end]
          start = end
          end += 4
          (length,) = _struct_I.unpack(str[start:end])
          val1.props = []
          for i in range(0, length):
            val2 = geographic_msgs.msg.KeyValue()
            start = end
            end += 4
            (length,) = _struct_I.unpack(str[start:end])
            start = end
            end += length
            if python3:
              val2.key = str[start:end].decode('utf-8', 'rosmsg')
            else:
              val2.key = str[start:end]
            start = end
            end += 4
            (length,) = _struct_I.unpack(str[start:end])
            start = end
            end += length
            if python3:
              val2.value = str[start:end].decode('utf-8', 'rosmsg')
            else:
              val2.value = str[start:end]
            val1.props.append(val2)
          self.segments.append(val1)
        start = end
        end += 4
        (length,) = _struct_I.unpack(str[start:end])
        self.props = []
        for i in range(0, length):
          val1 = geographic_msgs.msg.KeyValue()
          start = end
          end += 4
          (length,) = _struct_I.unpack(str[start:end])
          start = end
          end += length
          if python3:
            val1.key = str[start:end].decode('utf-8', 'rosmsg')
          else:
            val1.key = str[start:end]
          start = end
          end += 4
          (length,) = _struct_I.unpack(str[start:end])
          start = end
          end += length
          if python3:
            val1.value = str[start:end].decode('utf-8', 'rosmsg')
          else:
            val1.value = str[start:end]
          self.props.append(val1)
        return self
      except struct.error as e:
        raise genpy.DeserializationError(e)  # most likely buffer underfill
  
  
    def serialize_numpy(self, buff, numpy):
      """
      serialize message with numpy array types into buffer
      :param buff: buffer, ``StringIO``
      :param numpy: numpy python module
      """
      try:
        _x = self
        buff.write(_get_struct_3I().pack(_x.header.seq, _x.header.stamp.secs, _x.header.stamp.nsecs))
        _x = self.header.frame_id
        length = len(_x)
        if python3 or type(_x) == unicode:
          _x = _x.encode('utf-8')
          length = len(_x)
        buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
        _x = self.id.uuid
        # - if encoded as a list instead, serialize as bytes instead of string
        if type(_x) in [list, tuple]:
          buff.write(_get_struct_16B().pack(*_x))
        else:
          buff.write(_get_struct_16s().pack(_x))
        _x = self
        buff.write(_get_struct_6d().pack(_x.bounds.min_pt.latitude, _x.bounds.min_pt.longitude, _x.bounds.min_pt.altitude, _x.bounds.max_pt.latitude, _x.bounds.max_pt.longitude, _x.bounds.max_pt.altitude))
        length = len(self.points)
        buff.write(_struct_I.pack(length))
        for val1 in self.points:
          _v11 = val1.id
          _x = _v11.uuid
          # - if encoded as a list instead, serialize as bytes instead of string
          if type(_x) in [list, tuple]:
            buff.write(_get_struct_16B().pack(*_x))
          else:
            buff.write(_get_struct_16s().pack(_x))
          _v12 = val1.position
          _x = _v12
          buff.write(_get_struct_3d().pack(_x.latitude, _x.longitude, _x.altitude))
          length = len(val1.props)
          buff.write(_struct_I.pack(length))
          for val2 in val1.props:
            _x = val2.key
            length = len(_x)
            if python3 or type(_x) == unicode:
              _x = _x.encode('utf-8')
              length = len(_x)
            buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
            _x = val2.value
            length = len(_x)
            if python3 or type(_x) == unicode:
              _x = _x.encode('utf-8')
              length = len(_x)
            buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
        length = len(self.segments)
        buff.write(_struct_I.pack(length))
        for val1 in self.segments:
          _v13 = val1.id
          _x = _v13.uuid
          # - if encoded as a list instead, serialize as bytes instead of string
          if type(_x) in [list, tuple]:
            buff.write(_get_struct_16B().pack(*_x))
          else:
            buff.write(_get_struct_16s().pack(_x))
          _v14 = val1.start
          _x = _v14.uuid
          # - if encoded as a list instead, serialize as bytes instead of string
          if type(_x) in [list, tuple]:
            buff.write(_get_struct_16B().pack(*_x))
          else:
            buff.write(_get_struct_16s().pack(_x))
          _v15 = val1.end
          _x = _v15.uuid
          # - if encoded as a list instead, serialize as bytes instead of string
          if type(_x) in [list, tuple]:
            buff.write(_get_struct_16B().pack(*_x))
          else:
            buff.write(_get_struct_16s().pack(_x))
          length = len(val1.props)
          buff.write(_struct_I.pack(length))
          for val2 in val1.props:
            _x = val2.key
            length = len(_x)
            if python3 or type(_x) == unicode:
              _x = _x.encode('utf-8')
              length = len(_x)
            buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
            _x = val2.value
            length = len(_x)
            if python3 or type(_x) == unicode:
              _x = _x.encode('utf-8')
              length = len(_x)
            buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
        length = len(self.props)
        buff.write(_struct_I.pack(length))
        for val1 in self.props:
          _x = val1.key
          length = len(_x)
          if python3 or type(_x) == unicode:
            _x = _x.encode('utf-8')
            length = len(_x)
          buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
          _x = val1.value
          length = len(_x)
          if python3 or type(_x) == unicode:
            _x = _x.encode('utf-8')
            length = len(_x)
          buff.write(struct.Struct('<I%ss'%length).pack(length, _x))
      except struct.error as se: self._check_types(struct.error("%s: '%s' when writing '%s'" % (type(se), str(se), str(locals().get('_x', self)))))
      except TypeError as te: self._check_types(ValueError("%s: '%s' when writing '%s'" % (type(te), str(te), str(locals().get('_x', self)))))
  
    def deserialize_numpy(self, str, numpy):
      """
      unpack serialized message in str into this message instance using numpy for array types
      :param str: byte array of serialized message, ``str``
      :param numpy: numpy python module
      """
      if python3:
        codecs.lookup_error("rosmsg").msg_type = self._type
      try:
        if self.header is None:
          self.header = std_msgs.msg.Header()
        if self.id is None:
          self.id = uuid_msgs.msg.UniqueID()
        if self.bounds is None:
          self.bounds = geographic_msgs.msg.BoundingBox()
        if self.points is None:
          self.points = None
        if self.segments is None:
          self.segments = None
        if self.props is None:
          self.props = None
        end = 0
        _x = self
        start = end
        end += 12
        (_x.header.seq, _x.header.stamp.secs, _x.header.stamp.nsecs,) = _get_struct_3I().unpack(str[start:end])
        start = end
        end += 4
        (length,) = _struct_I.unpack(str[start:end])
        start = end
        end += length
        if python3:
          self.header.frame_id = str[start:end].decode('utf-8', 'rosmsg')
        else:
          self.header.frame_id = str[start:end]
        start = end
        end += 16
        self.id.uuid = str[start:end]
        _x = self
        start = end
        end += 48
        (_x.bounds.min_pt.latitude, _x.bounds.min_pt.longitude, _x.bounds.min_pt.altitude, _x.bounds.max_pt.latitude, _x.bounds.max_pt.longitude, _x.bounds.max_pt.altitude,) = _get_struct_6d().unpack(str[start:end])
        start = end
        end += 4
        (length,) = _struct_I.unpack(str[start:end])
        self.points = []
        for i in range(0, length):
          val1 = geographic_msgs.msg.WayPoint()
          _v16 = val1.id
          start = end
          end += 16
          _v16.uuid = str[start:end]
          _v17 = val1.position
          _x = _v17
          start = end
          end += 24
          (_x.latitude, _x.longitude, _x.altitude,) = _get_struct_3d().unpack(str[start:end])
          start = end
          end += 4
          (length,) = _struct_I.unpack(str[start:end])
          val1.props = []
          for i in range(0, length):
            val2 = geographic_msgs.msg.KeyValue()
            start = end
            end += 4
            (length,) = _struct_I.unpack(str[start:end])
            start = end
            end += length
            if python3:
              val2.key = str[start:end].decode('utf-8', 'rosmsg')
            else:
              val2.key = str[start:end]
            start = end
            end += 4
            (length,) = _struct_I.unpack(str[start:end])
            start = end
            end += length
            if python3:
              val2.value = str[start:end].decode('utf-8', 'rosmsg')
            else:
              val2.value = str[start:end]
            val1.props.append(val2)
          self.points.append(val1)
        start = end
        end += 4
        (length,) = _struct_I.unpack(str[start:end])
        self.segments = []
        for i in range(0, length):
          val1 = geographic_msgs.msg.RouteSegment()
          _v18 = val1.id
          start = end
          end += 16
          _v18.uuid = str[start:end]
          _v19 = val1.start
          start = end
          end += 16
          _v19.uuid = str[start:end]
          _v20 = val1.end
          start = end
          end += 16
          _v20.uuid = str[start:end]
          start = end
          end += 4
          (length,) = _struct_I.unpack(str[start:end])
          val1.props = []
          for i in range(0, length):
            val2 = geographic_msgs.msg.KeyValue()
            start = end
            end += 4
            (length,) = _struct_I.unpack(str[start:end])
            start = end
            end += length
            if python3:
              val2.key = str[start:end].decode('utf-8', 'rosmsg')
            else:
              val2.key = str[start:end]
            start = end
            end += 4
            (length,) = _struct_I.unpack(str[start:end])
            start = end
            end += length
            if python3:
              val2.value = str[start:end].decode('utf-8', 'rosmsg')
            else:
              val2.value = str[start:end]
            val1.props.append(val2)
          self.segments.append(val1)
        start = end
        end += 4
        (length,) = _struct_I.unpack(str[start:end])
        self.props = []
        for i in range(0, length):
          val1 = geographic_msgs.msg.KeyValue()
          start = end
          end += 4
          (length,) = _struct_I.unpack(str[start:end])
          start = end
          end += length
          if python3:
            val1.key = str[start:end].decode('utf-8', 'rosmsg')
          else:
            val1.key = str[start:end]
          start = end
          end += 4
          (length,) = _struct_I.unpack(str[start:end])
          start = end
          end += length
          if python3:
            val1.value = str[start:end].decode('utf-8', 'rosmsg')
          else:
            val1.value = str[start:end]
          self.props.append(val1)
        return self
      except struct.error as e:
        raise genpy.DeserializationError(e)  # most likely buffer underfill
  
  _struct_I = genpy.struct_I
  def _get_struct_I():
      global _struct_I
      return _struct_I
  _struct_16B = None
  def _get_struct_16B():
      global _struct_16B
      if _struct_16B is None:
          _struct_16B = struct.Struct("<16B")
      return _struct_16B
  _struct_16s = None
  def _get_struct_16s():
      global _struct_16s
      if _struct_16s is None:
          _struct_16s = struct.Struct("<16s")
      return _struct_16s
  _struct_3I = None
  def _get_struct_3I():
      global _struct_3I
      if _struct_3I is None:
          _struct_3I = struct.Struct("<3I")
      return _struct_3I
  _struct_3d = None
  def _get_struct_3d():
      global _struct_3d
      if _struct_3d is None:
          _struct_3d = struct.Struct("<3d")
      return _struct_3d
  _struct_6d = None
  def _get_struct_6d():
      global _struct_6d
      if _struct_6d is None:
          _struct_6d = struct.Struct("<6d")
      return _struct_6d
  