Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Decompress FlateDecode Objects in PDF
#!/usr/bin/env python3
# This script is designed to do one thing and one thing only. It will find each
# of the FlateDecode streams in a PDF document using a regular expression,
# unzip them, and print out the unzipped data. You can do the same in any
# programming language you choose.
#
# This is NOT a generic PDF decoder, if you need a generic PDF decoder, please
# take a look at pdf-parser by Didier Stevens, which is included in Kali linux.
# https://tools.kali.org/forensics/pdf-parser.
#
# Any requests to decode a PDF will be ignored.
import re
import zlib
pdf = open("some_doc.pdf", "rb").read()
stream = re.compile(rb'.*?FlateDecode.*?stream(.*?)endstream', re.S)
for s in stream.findall(pdf):
s = s.strip(b'\r\n')
try:
print(zlib.decompress(s))
print("")
except:
pass
@averagesecurityguy
Copy link
Author

You can learn more about pdf streams here. https://blog.didierstevens.com/2008/05/19/pdf-stream-objects/

@grafikmutfagi
Copy link

stephen@averagesecurityguy.info I sent an e-mail to this address. I am waiting for your help. Thx..

@Kungergely
Copy link

Kungergely commented Apr 7, 2020

stephen@averagesecurityguy.info I sent an e-mail to this address. I am waiting for your help. Thx..

This script is not for doing some sort of a "conversion", but a forensics tool to be used mostly to look inside said streams. Even though you obviously weren't able to articulate what you want, this script is most probably not the solution you're looking for anyway.

@Kungergely
Copy link

Oh BTW @averagesecurityguy I think that the '\r\n' should be preceded by a b, like this: s = s.strip(b'\r\n')

@grafikmutfagi
Copy link

Hi.. i have a pdf that i have and i want to solve it with flatedecode. for example;

%PDF-1.4
%Çì�¢
5 0 obj
<</Length 6 0 R/Filter /FlateDecode>>
stream..........

@Kungergely
Copy link

Hi.. i have a pdf that i have and i want to solve it with flatedecode. for example;

You should run the script above on the PDF you want to have decoded.

@grafikmutfagi
Copy link

Could I copy and run the pdf content under this code file? where and how do i get the output file?

@Kungergely
Copy link

No, you have to load the PDF using the script. The output will be printed to stdout (i.e. the terminal window), so you have to redirect it to a file.

@grafikmutfagi
Copy link

Do you have an email address where I can send you the file, at least let's check if it works?
Because, I put the code and pdf file in the same directory, then changed the name of pdf to some_doc.pdf. Python Shell writes restart on the screen, the cursor flashes. But I can not get any results.

@Kungergely
Copy link

The script needs Python 3 to run. I can't help you with troubleshooting your own Python installation, sorry.

@grafikmutfagi
Copy link

I have Python 3.8.2.. Thx for help..

@grafikmutfagi
Copy link

the last question is, can you tell the version it works? Which version are you using?

@Kungergely
Copy link

I'm running it on Python 3.8.2 too and also on Windows.

@averagesecurityguy
Copy link
Author

@ grafikmutfagi I'm not sure why the script is not working in your environment. On my Mac or Linux machine, I would do the following:

  1. Edit the script to use the filename of my PDF.
  2. Add my PDF to the same directory as the script.
  3. Run the script with Python 3. python3 pdf_flatedecode.py

The script will find each of the FlateDecode streams in the PDF document using a regular expression, unzip them, and print out the unzipped data. You can do the same in the programming language of your choice.

Generally, it is ok to reach out to me by email and ask questions but I'm not going to open the PDF doc you sent and analyze it for you. If this script does not do what you want, there are other, more polished tools that you can use. Some of which come with detailed instructions on their usage. One example is this tool by Didier Stevens, which is included in Kali linux, https://tools.kali.org/forensics/pdf-parser.

@grafikmutfagi
Copy link

Thx..

@duarte025
Copy link

can someone please help me decode something I cannot figure it out for the life of me!!!!

@Kungergely
Copy link

@duarte025 I'm sorry but if you're not able to comprehend the code above then this tool is most probably not what you're looking for. This isn't for "decoding" PDF documents.

@celsowm
Copy link

celsowm commented May 19, 2020

Hi Guys, I have a similar problem with this pdf: https://pdfhost.io/v/54HTT2PTw_inicial_anterior.pdf
I tried pdftotext, ghostscript and imagemagick, no one was able to convert this pdf to nothing
I even offered a bounty on stackoverflow: https://stackoverflow.com/questions/61839856/how-extract-text-from-this-pdf-a-using-python

@Mortadha92
Copy link

thank you for this script , it works good , but can you help me to understand this output type and how can i decode it :
b'\x00\x01\x00\x00\x00\t\x00\x80\x00\x03\x00\x10cvt \xef\x1f\x94\xcc\x00\x00\x00\x9c\

@averagesecurityguy
Copy link
Author

@Kungergely
Copy link

Kungergely commented Jun 9, 2020

@Mortadha92 if you expect any of us to "magically" deduce the contents of the data, then you're out of luck I'm afraid. What you posted there is binary data that's merely been transformed into another form (represented by Python-compatible hex numbers). It doesn't say anything about its contents though.

@Mortadha92
Copy link

@Kungergely yes i know and i convert it and i have a Embedded CMAP tables like this : (but i can't go far )

/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo
<< /Registry (TTX+0) /Ordering (T42UV) /Supplement 0 >> def
/CMapName /TTX+0 def /CMapType 2 def
1 begincodespacerange
<0000>
endcodespacerange
58 beginbfrange
<0003><0003><0020>
<000a><000a><0027>
<000b><000b><0028>
<000c><000c><0029>
<000f><000f><002c>

@ShankeyTayal
Copy link

above script it returning below output and how can i decode it?

"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00EBCLIJ#\x1f \xac\xab\xab\xa5\xa4\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00zwx?;<#\x1f \x9e\x9d\x9d\xa5\xa4\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xc7\xc7\xc8\xc7\xc7\xcc\xcb\xcb\xcf\xce\xce\xd6\xd5\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\xf1\xf1\xdc\xdc\xdc\xd5\xd5\xd5\xd1\xd0\xd0\xd5\xd5\xd5\xe3\xe3\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x8f\x8f\xe3\xe3\xe3\xc8\xc7\xc7\x83\x81\x81\x9e\x9d\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\xf1\xf1\xb3\xb2\xb2\x83\x81\x81a^^\xc8\xc7\xc7\xc8\xc7\xc7\xd6\xd5\xd5nlla^^\x91\x8f\x8f\x00\x00\x00\x91\x8f\x8fusslijuss\x83\x81\x81qnoC?@'#$PMNgee\x97\x96\x96a^^LII'#$C?@spq\x84\x81\x82\x00\x00\x00\x00\x00\x00\xd6\xd5\xd5\x98\x96\x96\x91\x8f\x8f\xf1\xf1\xf1\xc8\xc7\xc7\xc8\xc7\xc7\xe3\xe3\xe3\x7f}~|zz\xba\xb9\xb9\x00\x00\x00hefEBC:67#\x1f #\x1f #\x1f #\x1f #\x1f :67EBChef\x00\x00\x00\x9e\x9d\x9dnllURS,()'#$HDE\x8c\x8a\x8b\xba\xb9\xb9\xf1\xf1\xf1\xe3\xe3\xe3\x9e\x9d\x9d\x87\x85\x86ZWX\x8c\x8a\x8b\x8c\x8a\x8bzwx512,()hee\x8a\x88\x88\xd6\xd5\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\xb9\xb9\xa5\xa4\xa4\xaf\xad\xae\xa8\xa6\xa6\xb3\xb2\xb2uss\x9a\x98\x98\x95\x93\x94\x83\x81\x81C?@'#$LIIa^^\x91\x8f\x8f\xb5\xb4\xb4\xf1\xf1\xf1vst#\x1f #\x1f #\x1f #\x1f 1-.\x91\x8f\x8flij\x91\x8f\x8fuss\x91\x8f\x8fZWXZWX\xac\xab\xab\x84\x81\x82#\x1f #\x1f 1-.\x9e\x9d\x9db_\x91\x8f\x8f1-.#\x1f #\x1f \x84\x81\x82hee\x91\x8f\x8f\xc8\xc7\xc7\x95\x93\x94\xd6\xd5\xd5ZWX#\x1f #\x1f #\x1f #\x1f ?;<\xba\xb9\xb9\x8c\x8a\x8a\xc8\xc7\xc7a^_hef#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f hefa^_vstgee\x9e\x9d\x9d?;<#\x1f #\x1f 1-.\x84\x81\x82\xf1\xf1\xf1\xba\xb9\xb9\xe3\xe3\xe3\xe3\xe3\xe3ZWXZWXZWX\xf1\xf1\xf1ZWX#\x1f #\x1f ?;<\xd6\xd5\xd5\xa8\xa6\xa6\xf1\xf1\xf1\x00\x00\x00\x00\x00\x00uss\x91\x8f\x8fZWX\xd6\xd5\xd5\xa2\xa0\xa0\x91\x8f\x8fZWX\xe3\xe3\xe3\x84\x81\x82#\x1f #\x1f 1-.\x91\x8f\x8fuss\xf1\xf1\xf1?;<#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f \x91\x8f\x8fheelijZWX#\x1f #\x1f ?;<#\x1f #\x1f #\x1f #\x1f #\x1f vst#\x1f #\x1f #\x1f #\x1f #\x1f \x91\x8f\x8fuss\x91\x8f\x8f\xc8\xc7\xc7#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f \xc8\xc7\xc7\x9f\x9d\x9dqnoZWX#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f ZWX|zzussvst#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f LIJ\xf1\xf1\xf1\xce\xce\xce\xd6\xd5\xd5#\x1f #\x1f #\x1f ZWX#\x1f #\x1f #\x1f #\x1f 1-.\xf1\xf1\xf1\xdc\xdc\xdc\x00\x00\x00\x00\x00\x00lijZWX#\x1f \xc8\xc7\xc7\x9c\x9a\x9bZWX#\x1f LIJ#\x1f #\x1f ?;<#\x1f #\x1f \xac\xab\xab\x91\x8f\x8f#\x1f #\x1f #\x1f \x84\x81\x82\x84\x81\x821-.#\x1f #\x1f ?;<QMNZWXZWX#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f ZWXZWWqnoZWX#\x1f #\x1f 1-.\x91\x8f\x8fvst#\x1f #\x1f #\x1f vst\x88\x85\x86uss\x91\x8f\x8fZWXZWXZWX?;<#\x1f #\x1f #\x1f hef\x91\x8f\x8f\xc8\xc7\xc7#\x1f #\x1f #\x1f ZWX\x84\x81\x82#\x1f #\x1f #\x1f \x91\x8f\x8f\xa2\xa0\xa0OLM#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f \xc8\xc7\xc7\xc3\xc2\xc2\x00\x00\x00\x00\x00\x00ZWXZWX#\x1f \xc8\xc7\xc7\x91\x8f\x8fZWX#\x1f #\x1f hef\xf1\xf1\xf1usshef#\x1f LIJhef#\x1f #\x1f \x91\x8f\x8f\x93\x91\x91\x7f|}\x84\x81\x82#\x1f #\x1f #\x1f ,()ZWXZWX#\x1f #\x1f #\x1f \xba\xb9\xb9\xf1\xf1\xf1?;<#\x1f #\x1f #\x1f \x9e\x9d\x9d\xf1\xf1\xf1LIJ#\x1f #\x1f #\x1f 512EBC1-.#\x1f #\x1f \xc8\xc7\xc7\x9e\x9d\x9d\x7f}}LIJ#\x1f #\x1f ZWXca\x91\x8f\x8fusslijxuv\xf1\xf1\xf11-.#\x1f #\x1f 1-.\xe3\xe3\xe3\x88\x86\x87hef#\x1f #\x1f ?;<ZWXspq\x84\x81\x82#\x1f #\x1f 1-.khiLII#\x1f #\x1f #\x1f ?;<\xe3\xe3\xe3\xac\xab\xab#\x1f #\x1f #\x1f \x91\x8f\x8f\xa3\xa1\xa1\x00\x00\x00\x00\x00\x00ZWXZWX#\x1f \xc8\xc7\xc7\x91\x8f\x8fZWX#\x1f 1-.\xf1\xf1\xf1\xc3\xc2\xc2\xbe\xbd\xbe\xe3\xe3\xe3#\x1f #\x1f zwxwuv\xc8\xc7\xc7\xf1\xf1\xf1wuu\xc8\xc7\xc7vst#\x1f #\x1f #\x1f #\x1f ZWXZWX#\x1f #\x1f LIJ}{|\x99\x97\x97\x84\x81\x82#\x1f #\x1f 1-.rpp\x99\x97\x97\x91\x8f\x8f#\x1f #\x1f #\x1f #\x1f 1-.\x83\x81\x81\xf1\xf1\xf1\xc8\xc7\xc7{yy\xf1\xf1\xf1\xc8\xc7\xc7LIJ#\x1f #\x1f ZWXZWX\x00\x00\x00\x00\x00\x00\x9e\x9d\x9d\x83\x81\x81ZWX#\x1f #\x1f #\x1f \xac\xab\xab\x95\x93\x94gee1-.#\x1f #\x1f \x84\x81\x82qno\xac\xab\xab\xba\xb9\xb9#\x1f #\x1f #\x1f \xc8\xc7\xc7_\]#\x1f #\x1f #\x1f \xac\xab\xab\xa6\xa5\xa5dbb#\x1f #\x1f #\x1f \x91\x8f\x8f\x91\x8f\x8f\x00\x00\x00\x00\x00\x00ZWXZWX#\x1f \xc8\xc7\xc7\x91\x8f\x8fZWX#\x1f \x84\x81\x82\x8d\x8b\x8c\xf1\xf1\xf1\xe3\xe3\xe3SPP#\x1f #\x1f \xa3\xa1\xa2\xe3\xe3\xe3vst?;<#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f ZWXZWX#\x1f #\x1f ZWXURS\x8c\x8a\x8a\x91\x8f\x8f#\x1f #\x1f ZWXLIJ\x91\x8f\x8f\x91\x8f\x8f#\x1f #\x1f #\x1f #\x1f \xac\xab\xab\xa2\xa0\xa0\xc8\xc7\xc7hef1-.#\x1f #\x1f #\x1f #\x1f #\x1f ZWXZWX\x00\x00\x00\xd6\xd5\xd5\x8c\x8a\x8a\x9e\x9d\x9d#\x1f #\x1f #\x1f hef\x8a\x88\x88\xac\xab\xab'#$#\x1f #\x1f #\x1f \x91\x8f\x8f\x8c\x8a\x8a\xc3\xc2\xc2\xc8\xc7\xc7#\x1f #\x1f #\x1f \xac\xab\xabgee#\x1f #\x1f #\x1f \xc8\xc7\xc7\xbe\xbd\xbd#\x1f #\x1f #\x1f #\x1f \x91\x8f\x8f\x91\x8f\x8f\x00\x00\x00\x00\x00\x00ZWXZWX#\x1f \xc8\xc7\xc7\x91\x8f\x8fZWX#\x1f \x91\x8f\x8f\x9a\x98\x98\x00\x00\x00\x00\x00\x00#\x1f #\x1f #\x1f \xd6\xd5\xd51-.#\x1f #\x1f #\x1f ?;<?;<#\x1f #\x1f #\x1f #\x1f ZWXZWX#\x1f #\x1f ZWXZWX\x91\x8f\x8f\x91\x8f\x8f#\x1f #\x1f ZWXZWX\x91\x8f\x8f\x91\x8f\x8f#\x1f #\x1f #\x1f VST\x9a\x98\x98\xac\xab\xab#\x1f #\x1f #\x1f #\x1f LIJ1-.#\x1f #\x1f ZWXZWX\x00\x00\x00\x91\x8f\x8f\xd6\xd5\xd51-.#\x1f #\x1f 1-.\xf1\xf1\xf1\xac\xab\xab\x00\x00\x00#\x1f #\x1f #\x1f #\x1f \x91\x8f\x8f\x91\x8f\x8f\xc8\xc7\xc7\xc8\xc7\xc7#\x1f #\x1f #\x1f \x91\x8f\x8f^^#\x1f #\x1f #\x1f \xc8\xc7\xc7\xc8\xc7\xc7#\x1f #\x1f #\x1f #\x1f \x91\x8f\x8f\x91\x8f\x8f\x00\x00\x00\x00\x00\x00ZWXZWX#\x1f \xc8\xc7\xc7\x91\x8f\x8fZWX#\x1f \xba\xb9\xb9\xb1\xaf\xaf\x00\x00\x00\x00\x00\x00#\x1f #\x1f #\x1f ZWX#\x1f #\x1f 1-.\xc8\xc7\xc7lij\x91\x8f\x8f#\x1f #\x1f #\x1f #\x1f ZWXZWX#\x1f #\x1f ZWXZWX\x91\x8f\x8f\x91\x8f\x8f#\x1f #\x1f ZWXZWX\x91\x8f\x8f\x91\x8f\x8f#\x1f #\x1f #\x1f mjk\xf1\xf1\xf11-.#\x1f #\x1f LIJ\xe3\xe3\xe3^[\\ZWX#\x1f #\x1f ZWXZWX\x91\x8f\x8fussLIJ#\x1f #\x1f #\x1f \xc8\xc7\xc7\xb1\xaf\xaf\xde\xde\xde\xf1\xf1\xf1'#$#\x1f #\x1f #\x1f \x91\x8f\x8f\x88\x85\x86\xc3\xc2\xc2\xc8\xc7\xc7#\x1f #\x1f #\x1f \x9e\x9d\x9debc#\x1f #\x1f #\x1f \xc8\xc7\xc7\xc8\xc7\xc7#\x1f #\x1f #\x1f #\x1f \x91\x8f\x8f\x91\x8f\x8f\x00\x00\x00\x00\x00\x00ZWXZWX#\x1f \xc8\xc7\xc7\x91\x8f\x8fZWX#\x1f \xc8\xc7\xc7\xc3\xc2\xc2\x00\x00\x00\x00\x00\x00#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f \x91\x8f\x8f\x99\x97\x97\x9e\x9d\x9d\x91\x8f\x8f#\x1f #\x1f #\x1f LIIussZWX#\x1f #\x1f ZWXZWX\x91\x8f\x8f\x91\x8f\x8f#\x1f #\x1f ZWXZWX\x91\x8f\x8f\x91\x8f\x8f#\x1f #\x1f #\x1f wuu\xc8\xc7\xc7#\x1f #\x1f #\x1f \xc8\xc7\xc7\xb4\xb3\xb3\x83\x81\x81ZWX#\x1f #\x1f ZWX\x8e\x8c\x8c\xa5\xa4\xa4\x91\x8f\x8f#\x1f #\x1f #\x1f ?;<\x91\x8f\x8f\xba\xb9\xb9\xf1\xf1\xf1\x83\x81\x81PLM1-.#\x1f #\x1f vst\x8a\x88\x88\xba\xb9\xb9\xba\xb9\xb9#\x1f #\x1f #\x1f \xc8\xc7\xc7\\YZ#\x1f #\x1f #\x1f \xc8\xc7\xc7\xc8\xc7\xc7#\x1f #\x1f #\x1f #\x1f \x91\x8f\x8f\x91\x8f\x8f\x00\x00\x00\x00\x00\x00ZWXZWX#\x1f \xc8\xc7\xc7\x91\x8f\x8fZWX#\x1f \xc8\xc7\xc7\xc8\xc7\xc7\x00\x00\x00\x00\x00\x00#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f \x84\x81\x82|zz\xf1\xf1\xf1?;<#\x1f #\x1f #\x1f \xc8\xc7\xc7rpqZWX#\x1f #\x1f ZWXZWX\x91\x8f\x8f\x91\x8f\x8f#\x1f #\x1f ZWXZWX\x91\x8f\x8f\x91\x8f\x8f#\x1f #\x1f #\x1f pnn\xac\xab\xab#\x1f #\x1f #\x1f \xba\xb9\xb9\x8a\x88\x88\xd6\xd5\xd5#\x1f #\x1f #\x1f 1-.\xf1\xf1\xf1\xf1\xf1\xf1#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f vstheevst#\x1f #\x1f 1-.\xf1\xf1\xf1\x81~\x7fvst#\x1f #\x1f 1-.khiLII#\x1f #\x1f #\x1f \xc8\xc7\xc7\xc8\xc7\xc7#\x1f #\x1f #\x1f #\x1f \x91\x8f\x8f\x97\x96\x96\xba\xb9\xb9\xba\xb9\xb9ussZWX#\x1f \xc8\xc7\xc7\x91\x8f\x8fZWX#\x1f \xc8\xc7\xc7\xc8\xc7\xc7\x00\x00\x00\x00\x00\x00#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f \x84\x81\x82?;<#\x1f #\x1f #\x1f #\x1f hefussZWX#\x1f #\x1f ZWXZWX\x91\x8f\x8f\x91\x8f\x8f#\x1f #\x1f ZWXZWX\x91\x8f\x8f\x91\x8f\x8f#\x1f #\x1f #\x1f _\\]\xc8\xc7\xc7#\x1f #\x1f #\x1f 1-.\x84\x81\x821-.#\x1f #\x1f #\x1f #\x1f \x9e\x9d\x9d\xc8\xc7\xc7#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f #\x1f ebc\xc8\xc7\xc7#\x1f #\x1f #\x1f LIJvst#\x1f #\x1f #\x1f \x91\x8f\x8fa^^#\x1f #\x1f #\x1f #\x1f \xc8\xc7\xc7\xc8\xc7\xc7#\x1f #\x1f #\x1f #\x1f \x91\x8f\x8f\x87\x85\x85\xac\xab\xab\xc8\xc7\xc7ebcZWX#\x1f \xc8\xc7\xc7\x91\x8f\x8fZWX#\x1f \xc8\xc7\xc7\xc8\xc7\xc7\x00\x00\x00\x00\x00\x00#\x1f #\x1f #\x1f \x84\x81\x82#\x1f #\x1f #\x1f #\x1f #\x1f 1-.?;<#\x1f #\x1f \x84\x81\x82pmnZWX#\x1f #\x1f ZWXlij\x9e\x9d\x9d\x91\x8f\x8f#\x1f #\x1f ZWXlij\x9e\x9d\x9d\x91\x8f\x8f#\x1f #\x1f #\x1f ]Z[\x86\x84\x85LIJ#\x1f #\x1f #\x1f #\x1f #\x1f LIJ#\x1f #\x1f #\x1f \xba\xb9\xb9\xc8\xc7\xc7#\x1f #\x1f LIJ\x84\x81\x82\x91\x8f\x8fvstLIJ#\x1f #\x1f geezwx\x84\x81\x82#\x1f #\x1f #\x1f #\x1f #\x1f #\x1f LIJURS\x91\x8f\x8f512#\x1f #\x1f #\x1f \xc8\xc7\xc7\xd1\xd0\xd0:67#\x1f #\x1f #\x1f \x91\x8f\x8f\xac\xab\xab#\x1f #\x1f jghZWX#\x1f \xc8\xc7\xc7\x9c\x9a\x9bZWX#\x1f \xc8\xc7\xc7\xcc\xcb\xcb\x00\x00\x00\x00\x00\x00:67#\x1f #\x1f \xf1\xf1\xf1\x84\x81\x821-.#\x1f 1-.vst\xe3\xe3\xe3\xd6\xd5\xd5ZWX\x9e\x9d\x9dlijzwx\x91\x8f\x8fZWXZWX\x91\x8f\x8fuss\xa5\xa4\xa4\xba\xb9\xb9ZWXZWX\x91\x8f\x8fuss\xa5\xa4\xa4\xba\xb9\xb9ZWXZWXhefEBC\x97\x96\x96\xe3\xe3\xe3hef#\x1f #\x1f ?;<\x91\x8f\x8f\xf1\xf1\xf1\xac\xab\xabZWX\xc8\xc7\xc7\xac\xab\xab\xf1\xf1\xf1\x9e\x9d\x9d\xe3\xe3\xe3\xae\x93s\xb7\x8f]\xbe\x94\xb5\x8bY\xac\x95y\xe3\xe3\xe3\x91\x8f\x8fZWW\x84\x81\x82qno\xac\xab\xab?;<#\x1f #\x1f 1-.\x91\x8f\x8fURSLIJ\x00\x00\x00>;<ZWXZWXZWX\xe3\xe3\xe3\xd5\xd5\xd5EBChefZWXZWX\xba\xb9\xb9\xe3\xe3\xe31-.LIJVST\x91\x8f\x8fZWX\xd6\xd5\xd5\xa2\xa0\xa0\x91\x8f\x8fZWX\xd6\xd5\xd5\xcf\xce\xce\x00\x00\x00\x00\x00\x00EBChefZWX\xba\xb9\xb9\x8c\x8a\x8bHDE,()C?@\x83\x81\x81\xba\xb9\xb9\xb1\xaf\xb0\x9a\x98\x98\xa6\x8es\xdb\xadr\xe0\xb7\x83\xb8\x9f\x80\x90\x88\x81lijuss\x91\x8f\x8f\xba\xb9\xb9\x8a\x88\x88zwxlijuss\x91\x8f\x8f\xba\xb9\xb9\x8a\x88\x88zwx^[\a^hef\xe3\xe3\xe3\xa5\xa4\xa4zwx:67,()QMN\x95\x93\x94\xba\xb9\xb9\xa7\xa6\xa6\x9a\x98\x98\x91\x8f\x8f\xe7\xe3\xde\xe7\xd1\xb5\xff\xf9\xf1\xfc\xd2\x9c\xfa\xb8d\xfa\xb2V\xf8\x98\x1d\xf9\xabH\xfa\xb8d\xfe\xf2\xe3\xdb\xd2\xc6\x91\x8f\x8f\x00\x00\x00\xac\xab\xabussZWW,()'#$LIIa^^\x91\x8f\x8f\x00\x00\x00\x00\x00\x00ZWXZWXZWX\x87\x85\x86\x9e\x9d\x9d\xe3\xe3\xe3hefa^^[\zwx\xa7\xa6\xa6\x9a\x98\x98uss>;<nlluss\x95\x93\x94\x98\x96\x96\xb3\xb2\xb2uss\x95\x93\x94\x98\x96\x96\xd6\xd5\xd5\x00\x00\x00\x00\x00\x00hefa^a^\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xd8\xaa\xfa\xb8d\xfa\xb2V\xfd\xe5\xc6\xfb\xc5\x7f\xfb\xcb\x8e\xfd\xe5\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xf2\xe3\xfe\xf2\xe3\xf8\x9e+\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xfd\xe5\xc6\xfd\xe9\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xd8\xaa\xff\xf9\xf1\xfa\xb2V\xf8\x98\x1d\xfa\xb2V\xfd\xe5\xc6\xfa\xbdn\xfb\xcd\x92\xfd\xe2\xbf\xfe\xf2\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xf2\xe3\xfc\xd8\xaa\xfb\xca\x8b\xfa\xb5\\xf8\xa49\xf8\x9b%\xf8\x9f-\xf9\xabH\xf8\x98\x1d\xfd\xe5\xc6\xfd\xeb\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xf9\xf1\xfc\xd5\xa3\xfb\xc3|\xfb\xcb\x8e\xf8\x98\x1d\xf8\x98\x1d\xf9\xa59\xfc\xd2\x9c\xfe\xf2\xe3\xfa\xc1y\xfb\xcd\x92\xfd\xdf\xb8\xfe\xec\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xec\xd4\xfd\xdf\xb8\xfc\xd2\x9c\xfb\xc6\x83\xff\xf9\xf1\xfc\xd2\x9c\xf9\xa59\xf8\x9e+\xfa\xb9f\xf9\xabH\xf8\x98\x1d\xff\xf9\xf1\xfe\xef\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xcb\x8e\xfa\xc2{\xfd\xe5\xc6\xf9\xa59\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf9\xabH\xfc\xd2\x9c\xfe\xec\xd4\xfa\xb5\\xf9\xb3Z\xfb\xc7\x84\xfc\xd8\xaa\xfd\xe5\xc6\xfd\xeb\xd4\xfe\xf2\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xf9\xf1\xfe\xef\xdb\xfd\xe9\xcf\xfc\xda\xae\xfb\xcb\x8e\xf9\xb5_\xfa\xb6`\xfe\xec\xd4\xfc\xd2\x9c\xfa\xb8d\xf8\x98\x1d\xf8\x98\x1d\xf8\x9e+\xfc\xd8\xaa\xfe\xf2\xe3\xf8\x98\x1d\xfa\xb2V\xfb\xca\x8a\xff\xf9\xf1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xe5\xc6\xfb\xc5\x7f\xfa\xbbj\xfb\xcb\x8e\xf8\x9e+\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x9e+\xfa\xb2V\xfb\xcb\x8e\xfc\xd8\xaa\xfd\xe5\xc6\xfe\xf2\xe3\xf9\xaeN\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf9\xb0R\xff\xf9\xf1\xfd\xe5\xc6\xfd\xdf\xb8\xfb\xcb\x8e\xfa\xb8d\xf8\x9e+\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xfb\xbfr\xfe\xf2\xe3\xfb\xcd\x92\xfc\xd2\x9c\xf8\x98\x1d\xfd\xe5\xc6\xfb\xcb\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xcb\x8e\xfb\xcb\x8e\xff\xf9\xf1\xfb\xcb\x8e\xf8\x9e+\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xfb\xbfr\xfd\xe5\xc6\xfb\xcb\x8e\xfc\xd8\xaa\xfb\xce\x95\xf9\xa59\xfb\xbfr\xfa\xbeq\xfd\xe5\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xf9\xf1\xfd\xe2\xbf\xfb\xcb\x8e\xfa\xb8c\xfd\xdf\xb8\xfa\xb8d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf9\xabH\xfc\xd2\x9c\xfe\xf2\xe3\xfb\xcb\x8e\xfc\xd2\x9c\xfd\xe5\xc6\x00\x00\x00\xfa\xbbj\xfc\xd2\x9c\xfa\xbcm\xfb\xbfr\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xdf\xb8\xfb\xcb\x8e\xfa\xbah\xf9\xb3Y\xfd\xe5\xc6\xfb\xcb\x8e\xfa\xb8d\xf9\xabH\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf8\x98\x1d\xf9\xa59\xfa\xb2V\xfb\xcb\x8e\xfd\xdf\xb8\xff\xf9\xf1\xfb\xc3|\xfb\xcf\x97\xfd\xe2\xbf\xfe\xf2\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xd2\x9c\xfc\xd2\x9c\xfc\xd2\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

@averagesecurityguy
Copy link
Author

The script above simply unzips the data stored in the file. What you do with the data after that depends on what type of data it is. I have no idea what that data is so there is no way for me to help you.

@Mortadha92
Copy link

Mortadha92 commented Nov 2, 2020 via email

@Kungergely
Copy link

Kungergely commented Nov 2, 2020

@Mortadha92 Well then you can use your CMAP table to do character substitution I suppose. The values inside beginbfrange denote substitution ranges i.e. all the characters within that range are substituted for another (Unicode) character. E.g. the characters \x000f are substituted for \x002C "," (a comma), \x000c for \x0029 ")" (right parenthesis) and so on. You can read more about the workings of the whole thing e.g. here: https://blog.idrsolutions.com/2012/05/understanding-the-pdf-file-format-embedded-cmap-tables/

@mikodham
Copy link

mikodham commented Jul 30, 2021

My pdf has structure like this, it comes from ezpdf Korean Text

2 0 obj
<</N 357/Length 538/Filter/FlateDecode>>
stream
6q|ß”�­üD/�}y+wlØ—C-¥f}RþñöôÑä�á¨4I–µûóß ��&†lDíé� 57 ûsâ�)dÉêà�5nÀœåÈá.�™æ�#�¹aY5ÅyštþÖ ¨:)³5Ò¤u¼��¢„�¼"�,�F34i�¨húÊ�ˆ)¾��@��ÑŽ3�²ï �”Î�”w�v1|�ç²Ãµ‰†ÈeǾ/«YÖçú\êÝ{¡S¨nÌI?�üíu‡�´Ë�òìJnÔéÔ]õcÇ"�tø�î£�¯�Ÿ™x8´Î\{w‘2bp^(}±¡j�ÀÀîù ¤d#dªÈM&C1äO�"�ÃŒÕÃ;Ž•äf°¶àñ"l…â‡ÎÔãYõUÕ†s+˜xúC�_a��]»àÃÕ:&Âí�°Y1�Š„f’ÈlÚ�Ÿ›Ô��þ)Øß�±�üÍ¥�÷Š²<»ó_a–q\Ä 3+@²û²“Ù–Ÿ�HD�c&ÆP;�Ïvîßüè;À}�]h‹„Ÿø���¢ó&h�ÑgÞ�œn̨[gõ2áGö%�7›�_@À»‚iÉk”î
XûTíÐÉ›�0ÑFƒ–J}Û
ŠTÃ**EŠ/°ZMYõàÝ���äuN?±I˜%Bç—«bý™
x±ùß6¬hâ�Î[­CR�ûoo çâ)ævÎZ¦7'€DŠÓáýLŸ†$†o2�mø?+�êàï� �IVL �=��!Á´†…ëìÿ1Ã'lú�ªb�
endstream

endobj

When I tried using your code @averagesecurityguy , it leaves no text (the code doesn't print anything)
If I put "print(zlib.decompress(s))" before the try, the following error comes out.

line 11, in
print(zlib.decompress(s))
zlib.error: Error -3 while decompressing data: incorrect header check

Any solution/suggestion?

@averagesecurityguy
Copy link
Author

Unfortunately no.

@Kungergely
Copy link

@mikodham BTW pasting binary code in here like that is completely useless (the comment interface of GitHub is NOT binary safe!). It's impossible to reconstruct the original data stream that you had in your PDF file from what you've posted. This applies to @vipercommand as well BTW.

@LazyBoy95
Copy link

I tried to use it and print out as UTF-8 to txt.
Turns out couple of streams were empty/missing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment