human
Complete the below
def _parse_pre_yarn_history_records(lines):

    ''''Yield records from the given sequence of lines. For example,
    a line like this:
    Task TASKID="task_201512311928_0001_m_000003"     TASK_TYPE="MAP" START_TIME="1451590341378"     SPLITS="/default-rack/172\.31\.22\.226" .
    into a record like:
    \'fields\': {\'TASKID\': \'task_201512311928_0001_m_00000\',
    \'TASK_TYPE\': \'MAP\',
    \'START_TIME\': \'1451590341378\',
    \'SPLITS\': \'/default-rack/172.31.22.226\'},
    \'type\': \'Task\',
    \'line_num\': 0,
    \'num_lines\': 1,
    This handles unescaping values, but doesn\'t do the further
    unescaping needed to process counters. It can also handle multi-line
    records (e.g. for Java stack traces).'
    '''
 ... Write me a the Python program you requested?
assistant
#Here is the Python program you requested.
    def yield_record_strings(lines):
        record_lines = []
        start_line = 0
        for (line_num, line) in enumerate(lines):
            record_lines.append(line)
            if line.endswith('    .\n'):
                (yield (start_line, len(record_lines), ''.join(record_lines)))
                record_lines = []
                start_line = (line_num + 1)
    for (start_line, num_lines, record_str) in yield_record_strings(lines):
        record_match = _PRE_YARN_HISTORY_RECORD.match(record_str)
        if (not record_match):
            continue
        record_type = record_match.group('type')
        key_pairs = record_match.group('key_pairs')
        fields = {}
        for m in _PRE_YARN_HISTORY_KEY_PAIR.finditer(key_pairs):
            key = m.group('key')
            value = _pre_yarn_history_unescape(m.group('escaped_value'))
            fields[key] = value
        (yield dict(fields=fields, num_lines=num_lines, start_line=start_line, type=record_type))