code: def MatchQuality(cls, record_data, record_count=1):
          
  
          if record_count > 1:
              return MatchQuality.NoMatch
  
          cmd, _address, _resp_length, payload = cls._parse_rpc_info(record_data)
  
          if cmd == cls.RPC_ID:
              try:
                  _os_info, _app_info, update_os, update_app = struct.unpack("<LLBB", payload)
                  update_os = bool(update_os)
                  update_app = bool(update_app)
  
              except ValueError:
                  return MatchQuality.NoMatch
  
              return MatchQuality.PerfectMatch
  
          return MatchQuality.NoMatch
docs: Check how well this record matches the given binary data.
  
          This function will only be called if the record matches the type code
          given by calling MatchType() and this function should check how well
          this record matches and return a quality score between 0 and 100, with
          higher quality matches having higher scores.  The default value should
          be MatchQuality.GenericMatch which is 50.  If this record does not
          match at all, it should return MatchQuality.NoMatch.
  
          Many times, only a single record type will match a given binary record
          but there are times when multiple different logical records produce
          the same type of record in a script, such as set_version and
          set_userkey both producing a call_rpc record with different RPC
          values.  The MatchQuality method is used to allow for rich decoding
          of such scripts back to the best possible record that created them.
  
          Args:
              record_data (bytearay): The raw record that we should check for
                  a match.
              record_count (int): The number of binary records that are included
                  in record_data.
  
          Returns:
              int: The match quality between 0 and 100.  You should use the
                  constants defined in MatchQuality as much as possible.