<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def ParseUserEngagedRow( self, parser_mediator, query, row, **unused_kwargs):
 """Parses a timeline row that describes a user interacting with an app. Args: parser_mediator (ParserMediator):
 mediates interactions between parsers and other components, such as storage and dfvfs. query (str):
 query that created the row. row (sqlite3.Row):
 row. """

    query_hash = hash(query)

    event_data = WindowsTimelineUserEngagedEventData()
    event_data.package_identifier = self._GetRowValue(
        query_hash, row, 'PackageName')

    # Payload is JSON serialized as binary data in a BLOB field, with the text
    # encoded as UTF-8.
    payload_json_bytes = bytes(self._GetRowValue(query_hash, row, 'Payload'))
    payload_json_string = payload_json_bytes.decode('utf-8')
    payload = json.loads(payload_json_string)

    if 'reportingApp' in payload:
      event_data.reporting_app = payload['reportingApp']
    if 'activeDurationSeconds' in payload:
      event_data.active_duration_seconds = int(payload['activeDurationSeconds'])

    timestamp = self._GetRowValue(query_hash, row, 'StartTime')
    date_time = dfdatetime_posix_time.PosixTime(timestamp=timestamp)
    event = time_events.DateTimeValuesEvent(
        date_time, definitions.TIME_DESCRIPTION_START)
    parser_mediator.ProduceEventWithEventData(event, event_data)