def asciihexdecode(data):
decode = (lambda hx: chr(int(hx, <NUM_LIT:16>)))<EOL>out = map(decode, hex_re.findall(data))<EOL>m = trail_re.search(data)<EOL>if m:<EOL><INDENT>out.append(decode('<STR_LIT>' % m.group(<NUM_LIT:1>)))<EOL><DEDENT>return b'<STR_LIT>'.join(out)<EOL>
ASCIIHexDecode filter: PDFReference v1.4 section 3.3.1
For each pair of ASCII hexadecimal digits (0-9 and A-F or a-f), the
ASCIIHexDecode filter produces one byte of binary data. All white-space
characters are ignored. A right angle bracket character (>) indicates
EOD. Any other characters will cause an error. If the filter encounters
the EOD marker after reading an odd number of hexadecimal digits, it
will behave as if a 0 followed the last digit.

>>> asciihexdecode(b'61 62 2e6364   65')
'ab.cde'
>>> asciihexdecode(b'61 62 2e6364   657>')
'ab.cdep'
>>> asciihexdecode(b'7>')
'p'