#!/usr/bin/env python

# compressor.py
from subprocess import Popen, PIPE

def compress(value):
    """Compresses a string with the xz binary"""

    process = Popen(["xz", "--compress", "--force"], stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def decompress(value):
    """Decompresses a string with the xz binary"""

    process = Popen(["xz", "--decompress", "--stdout", "--force"],
                    stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def compress_file(path):
    """Compress the file at 'path' with the xz binary"""

    process = Popen(["xz", "--compress", "--force", "--stdout", path], stdout=PIPE)
    return process.communicate()[0]

# compressor.py

from optparse import OptionParser
from sys import argv
import base64
import cPickle
from cStringIO import StringIO
from os.path import basename

def load():
    ppds_compressed = base64.b64decode(ppds_compressed_b64)
    ppds_decompressed = decompress(ppds_compressed)
    ppds = cPickle.loads(ppds_decompressed)
    return ppds

def ls():
    binary_name = basename(argv[0])
    ppds = load()
    for key, value in ppds.iteritems():
        if key == 'ARCHIVE': continue
        for ppd in value[2]:
            print ppd.replace('"', '"' + binary_name + ':', 1)

def cat(ppd):
    # Ignore driver's name, take only PPD's
    ppd = ppd.split(":")[-1]
    # Remove also the index
    ppd = "0/" + ppd[ppd.find("/")+1:]

    ppds = load()
    ppds['ARCHIVE'] = StringIO(decompress(ppds['ARCHIVE']))

    if ppds.has_key(ppd):
        start = ppds[ppd][0]
        length = ppds[ppd][1]
        ppds['ARCHIVE'].seek(start)
        return ppds['ARCHIVE'].read(length)

def main():
    usage = "usage: %prog list\n" \
            "       %prog cat URI"
    version = "%prog 0.4.9\n" \
              "Copyright (c) 2010 Vitor Baptista.\n" \
              "This is free software; see the source for copying conditions.\n" \
              "There is NO warranty; not even for MERCHANTABILITY or\n" \
              "FITNESS FOR A PARTICULAR PURPOSE."
    parser = OptionParser(usage=usage,
                          version=version)
    (options, args) = parser.parse_args()

    if len(args) == 0 or len(args) > 2:
        parser.error("incorrect number of arguments")

    if args[0].lower() == 'list':
        ls()
    elif args[0].lower() == 'cat':
        if not len(args) == 2:
            parser.error("incorrect number of arguments")
        ppd = cat(args[1])
        if not ppd:
            parser.error("Printer '%s' does not have default driver!" % args[1])
        print ppd
    else:
        parser.error("argument " + args[0] + " invalid")

# PPDs Archive
ppds_compressed_b64 = "/Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4OjiSfVdABQZCgMPj8dYIupvbsARVbIKkdj2OzqRyIhNvFGNI9b/fhtWyQ/aeQLBKAueGsJuNSvxQ6/G7h+TjavuAVlqw0BGOhdynsQJPQbfOkxvRA7edVLF2y8ZkMOVJeWAml8QC/4yHL3fhSRXtybANIK1UpvL7EdA5L+s8uXr0ZuO1MjmpbGAOs6cc0wEuM0V+KfToSeoXzjdshLXde00ypFalIUNAUZJoFTQa7UXrrmWcSTFRxAV3XgxYrk4V2OWhuEC3Tkvzp5RhobcABhYOvi51FLNAxYiuWIvwZ4WaRWB2K9XWfrifE7r9Pye9vw6Qr6tV5Arj7NS+XvBikJurGdkWPagnpEKMXqD69bbRz7KXO6dLlPRKRTgNGVjbPNjZJET01Nrg0ZeCPDZNir2ViESC4SqRpASDCSwdofKXKmbBq7Olu+4AWRl23eZWgBqsNdBRpdtHsLdm2f9GCGB/cKTCrF1BMKIGfoVql01M8BsAezBPaYj4xn1rEeGq0kbb68qSoy0dKnyV88DSgeoySRrQGqSuJMM8yz76S63silrX2hujQnEsRMXqH+fem4Bmo8vECMTWJQGVbp98Ms4rDiz9EEmJf/bw1bLHWrWkgTa8Yd2xD1yCnQXA3eVit91w/cLS6h3H+PuIU7CPfKY4yBf0FvTytogk7tUEkOAwlYO5ehM6p3bYjIJJmAvCz4BicWArvRJSMgozKBoHduZHFYXwe3Rs5jwrkHBQW8cRx6N0mLmFI8LZwZ7QxQobobJfV0BxTjPVIA5HLXZQFIGLg64wAuva4Fy4IvZluf8z5EYTxx5hiAZQA6l4Zh64nseR0uAr+ubOtkmlJcvs0hGmeewJNa2jq4hoSipLu7by6gLpkV8VaAeYwLdq83k2FvtlKNa8W8yn6OIJxs4Bhddlx46BL0rAcvK7pYKbUwRQ3mni0k3WTf2k5jlXkiDgzh8BVnDxT3Vvm53auHOKVgpRkEqk5Y7Ui69Jq5XWNk/5m5u201r+iyGCzaCoNZRFZlc/eA4bRoSFeQXAC6XPpv5IpYdoekb/XEZb8q3AgJ3Soob14+oIs6G5Kai+U9UfpRrB/c9nVp9HGR83Y4nONupSKpSH4YnnSnNAF7iLlmhsZNglTHDWlj8gCbAE0BEbcHj466GLUxcj4l0VhSgCnTTualkk1Kr4eqstlRcmGNueKIntkrc89QInezFfIJwXnuM9OBoayQ4WCiBboo651yFeGfiYqeziSFj8vIk5EpDHWrXp58neCxUy2+72EEpEnYu47F8EwqBeF2R395LihIn4sEIyHjM/N3bu9AcdQfrJ+95jnJXejnEMJIVHxzLBftqbLF8CT5b/5gb4K3Kn2wsZN4lU2+CSeQZGXgEPLjbJEQesgPYhzM3ifAlyMJzbTBfqIG764lAql7T4ijEgJp3wa8V/rEWGVBOciIbJ4b79ipmfEF7Aq2J8CCPvMNTQ7nK7y3+uG9UEaaie0uqnz2dgo+hd6oJZDBkTVpGrekiiJ4/BXxKzwIfHrh4X/7z2nbL6dJMWnw+20Q2SZeDDw1p0K+PJ2stmE3rJJcY2KlW/HZCxpU1taHoijs6UQxkzuZfFjqDAB56y1YXO0xOMpRq6YLCiTj74hAbMwyTNg4OAb8kP0dy0wz+XTssN9ZrchD6fFSUHl9MFI8YBfTUn5jjnWt2RSiZnkwJj95m34J3goi2kOsIQZsBIcvBXq9me7XxU2OlzcRe2A67e1QircOnIB59Tn0uBqgDTtKC+Lzi6Lp3Bv6aivJppskqbqCbW5AspSjfWgKyvA4mRmbPTm1hmoK73hlIKDh65Kr58FesOriaESsTHbWWj4H/Du1KnI6b1HJHS4yT18a9bz6nX/oTMmI6fW4tq+wjlJvUlE7sDNmtg5U8JPAfd8u8G7vMM94zCbAFKnaGQcBq3NYOt765J9foI/NojqyRR0aYnorOuji8v9j+qsN3l24hgq/OZeUK63RUv/PZCKZc8xA4CFZyrQHqlNEP+FBu1bDZAFQN6QJKJF9PCC2fq6vWn/Ab3QLXKjnHhiDoVoneHGvZa/5MXysBDnqwaAUuLNZ2nr7hjpkeopiXCvunYbTYdKGjKKRwddW5h91+lk0wX6aiI2/V5n3QgYtAAmhc7tY3VuwvaCh16tkxnssaaZGVphYTDThdujyw67aMtczscxnejFLMN+i3za3N0S/OeYQ9l9AUY3+kuew6JZSAq8xX6/4ffWgL4CfO6kkpMvxd9x6XycpgKJF9W4vZg7l1KI1sBurkVIufj++N1n1QXMEdVvAI9a3LWvpx4mDPXMz5FB0ZxqmrVbrwv+WVrJieI+dx3saJbJmvd4zUrEzo9SrmFaFRy9ZY7JnWiSHlj0uMaOA1TBKu+PtRPGwImC/9y/tHbDpSAX0JdPuxuaW4xkQkcYDKDPMLNIcI4bQWXtGMhPAystTr4HLZqJS4NI4L5LoUO7iUgY8efcCp2+OjHR+k05NsQ4Ym22B0ZJKIWyqqx3oYRWKGstTlk7ZY6CSuvBIm7oRwq+iYy9wfbJzhbHij7YoJS/0B+yZBRGD4xAN4kP7nvt/njgyTYVgp6X8WrCQY8fu189WQMyU5jGKpmEht71mVc0gnGuzJNKZfhhlFvAVMdW/BbLG3Hc/WxCFz0g9hMWS803MLoXLHMQz+yzLf/YazfoHjYg9PD5+phBx/8Mk2wPjy3fSnN+ddK9BfU2dER5PgJu21c83bo1x9eYkiLfA2UmWFZYtW7cDiPMKB9NbLkh8u21FMywWI+BM186Tx1jiRtMjZWnTgxgGaDTTMgrq8E0PzsOb5c1QkRnkx5o3Y7V+PSJURDJvuDWgnjZu10qC1PU0mEeAXJRmmhfJ8YkDq1L4JW7+WFc6ajkZrW68AddZs5biaQwJUU9wO8QLiujr3AzYTteyHosWwXF7Rsw8PvbrAPq3KHzWMq0PJCvUxivX9aNlXYZp3oBbinW0biXYWBKCMOZIzIdqrvgJf+QEtLpBlrQhtEgVAmYyMbAXm7Y9+GxyWKyegqgb4d4F2EAIRj/4pGyMtBut+2pA3PymyIJlHPk47WPhpbFI/mmaTMlYJXEY68/d16fefute0D1RiCCvrIegiTcRwhbyDxLm7bwXw8rRSZ6Cicc9SESqNQfbfH3DcakvNhppTsEfFGUoz+VXibXYRK3S47oQXZFyVFxXmHOFXEiMsSk8tjn5qnlPb+Re+2J0CNXywsSvKYOqcxZgZOvrSoBxyetUdwUaex30kty6Bsrz6h7CoNWQIi6RgIjNAL/i9gqf4TIn/nqGMa6aNV5+x1oABQPIWmea8ZbDISjAYt+FxOch645kYCDDqXfr57IhGRGAmYlug6HPzgDBEG7y+2Tx/kyFJfASsKLywzdDMPw0MWDRAUpVZnBMgGaaVQzqCH+IWClew+fSb7dLYOtZB4vt8mEJrnBXt47D+JIERM3LjwRgpBNpf/UJF3twVcQvSVNLeY5iMXsK3ZnwNS8vHzsUpRVabM+JDDhodOQ73wL92EwiiiHFBANsFsCaNC6uCPpfrTaS8WVqAf4yx7i33F+DR0bESWphXip0UA/mC8iQTG7qdvWR0f/JtD/TVDTRxjctZdWLZGjbWiakVYrT5e4SYFHFIm5mBQQ73yILy5hrPl0/fH1+UPulMz3LfDDEWrdZmStaxYuF97Z6+Nbe5wVZhvlis8rp0l0qodOM3gn23dCHBeP6UIlA365+qHYhK2EiyD30M4iz141+VrpQKO9u/Q+83/FNBSlqh2i2IhgIC+vyXnE8uAOaLVz3O8gONEJW9XDEHI3w+//OG1wQWlD50P7JUdtU7hpIVKcTUale8wccz16VTmZsFMgXVMhiaKl7mcfoV5pqSQgZx6OuV6OEvuaI3Sq71Vz+P31QE/YjFvT4Xa1c4YZpEl2NQxIjhclP4h2BUx/aLpFqE6kXafGw4VdFnMXBn/zFJ9cflKYPauQmKI6Yq0BbMx3r0d8dOt1iuz3n29xvVESmjJWx+h7TdEPEwMy2VeBbR5O6D6rgGjMbuJsoo3mER8F28Nv9Zi2nbbmVWWJkz3/ue7C1tIyqE81HqIWPXgUvCfNXn0Bz3dOIjXsrZFxdSXolLiql9dfzmty11/BnyJRWVYdswIEgMGP3ezwbOHpRdVYOHHfr3Y4TVpDa4zGJfVBgN0ryOG9AVxs0X7WpmgYGxHbl8mB8CZ9HmYQti7DZ+RtMbIMaMY9D9rkQsCyBoXuoT86XcrVmuLWu6/tdnQ2d6uCfRVQp2nPBz1HpeknprQ9rs9TpFVtp9Qrtc4kf/Wr9HR1qX4LHlGyBwuRqUghDLj2cDv+l2GU3rmvB8wyeCtT4YLX/vyPELtRAKaX1ePZBGlh1fU/mLg15mrKq5TPbDrOeTvcRKT9YJyfq2htdrylE4SiTbi30EEuivFqaxy//is0mmYisuerWkVJ9EeOfex7cLJLc2qN4ugp2XX1gsDaEy+IeVLlIcl4KS3IafqktZq4fRA0mzGw9F6+1qU0OWBDTkN53MuN+mofd8SnHizlp4JHJF7ihwSNuaehSu9ee85AZsUwa+UKzsac0zj3eAGQuDlcXegLQMW9lb3BxbbTNlFveQZAtQjsGr7MepACT0+hGR3qFR2iJN+MM8mf0xXycUvFtJJiEd1gnmTnv45N98fq0JXj5baeY6WAFVhY2kjPQXxcDY0ccKC6L/CT3Jc1WoIP0CRpm92IGvRk+8XBUgqUupuyjevPfLAnM1Y1MZhHGfNpxfT2Z2SDCV73kbXjm5/qCSHpOjFmFooQEgFR34XljB4diKi8JHrpEA0iYMywceM0xi3FFV8wIkLuc0sYiMr6dBqNFSNGS8apoz+hTfvp8vMbc2TcdbZ/iOybQ96P1mcTL704cEGZuDAZ64uH9ju7lxgJnOGPda6HzuZXNR1zthVZudYmSmyej1mm1h2e03s0xFP2yrZyDRYLQwHWTPuCBi40ovN4ihjBUBUKLHCgMWpfEE9bgpyBXQtzgTC3bfa8dGEH7NL/lOAGeC3T9Tv6WHT9d/GQZmQ0ZrJtefnNV5BAviOoYMUyofZ7sF6o6UDolgB+uqa2dzUnwjjont+9uocHsPa8P7uRFWxNT7jfIF44+Sa5VmBZ74efsrzxJ/IpjAeN2m9WN345XCc3nCg4BNFuOGAZ5e1/sqsryZzqutohj4tfdsghuU033P+I1Hz+WicQvt507tECNPVSGNB3PI1//Pp9OeKq+eaO7IjPfYnjUee4OE+6tXbe63flXar04i1o4N1gaYF+uFPTQFgkjTk3oh01BNLhGXHpUQvfDfK7R7nliYrtYz7Q2weTom5Wjz0VCAUuYmwXNqaoNjomT83G0JEpwAEEo09XCJLXc4rsecnoUwAMX1bgPhDjxJ/CSKOfjc/UiyVC+b61YlPaH3VRssds9L3X0ap/dnbLWvDq+33pv8L1mdKBOETh7IROw1HSEMgPN2IEgjv4yKUG3++cugGTM8VBTlbc0qCCYU5lS+IGvIUhC3gXuxB7WPoslOHvugx7LYh2x2rr1KBBKuOXR5wEkYV10lWBn2NBtCNnSxCU+zD70dQ90Fz+Ygv6ZG7hMT1GozGDnt99EX6wIEkDqV6OPpAVN1FxoiAIBjc4sAZEsPFHmx6GUrjnniiiRFM4xV44q1EUhELVsgbcwPVbHaZEPgzSIwCkFTw5qS+5ALlo0ScWdhOBSk48tiMiVb6r1vIDTmFFYPh4Oyj1Xigw7lSm8zLH5xU6OtxbpIN7Ks9pVrzsEwKq+e6fnBtp+a9iymKs+9fPPKG73uz+e5Cc0qIPfDGddG39ZY99Q9brw+Z7JBFGsZll3j9ycz9FUA0sMAupBaQf1bY9V3ZFjq+gyhbU2ZzUUWQJBChnZTqOtcyBnlFXwBwlwYHSn/rteoD+/w0s44LbjJAeyk2vEXyUfRkHnAadlDoH+QwoJUapNtSWWfF5AutD+DVZPXrVohu/9yZKgGuHiops7AwLvbHZKDFXZRX0gnDN2E8znsNqttU2tIscDz1/iA6Vp4NdeZDr588FBcYo4dZkstO708SVpiZdEaPXux2YcOFN5idGFxV6zPFgjf3cxOIix2iwXp3WkdFCSqSIVrg1GJYNNzgqXL4VCV3EcYgTCKpMk1ZRUYoCqYFH2m0zkHAhG8jLNG1pVxLGhXUZ8XFU0mywYxlh+4tda5SnAit3J7c4rIfRMjzZgroSuA5haoa+ivKG4tKxy5gJepFNfIEqoRTVvGRHmsp2l47KYDmwQFWmAYDmVVZXYsRFjleeNtFJBXIfftrFFdw4IotStj81eShAgRr6fUSnm8IaF/N0oSjzzYWcnorNGqgmIPtvv0Jjo8Ii7Eku1qgChrA8rm/kLt5U2mZ7XTvFgdDZgez+1IOLJwTGm4dYV4LlfGEZpihnZrF158NeEvJ551/HJISyOQSE1xLn7xrgtX2tT9NF8BruIaTdbfdxg0hMbrcQhbEFZrlrq8BCR6KNbl2kmEtOuO5Ssz2nyY3xXyoGpL7n2VxBTnC1ZcFZVonyxk+oBddvJ9henovDasfMtAyZDIFWolFBicbSYXfUWfNOeJ3oKInNoZWGtIER7n6U5wbzx3xg+RdSuw/JbXJtMTw97ntI58974h54NFW7hrFO5urkPPqEoqwqHZ4fLSa465CAECiK0C+EbdQAyDFyPG+7uN9rDLaLGx+kWow81AlGaGs4IsCqSu9rmrAUSeecsFXV0Y/AXEVyP9mT6jZKSGKYSb8ETuGHqg4btFwUYi583VmDDarjhddWuf5whwNq4Ic0tgIH1jZ6gjYtrPGqvaZ5u1UO/3J0zznenAE7bOm/UJfv4ktjAp7OvOCZ342U1nkthOs5x6uqyo9I6MYQRC0wL9OlCRfl0MJo54ytBmzhir6NkuFkRWaXLf5fCAM9+YJ37NBSEkr2WT1ob0qIb48bQZHhbYNM5LyKTzAyBPEnhDOFOLeX6olCX0ePNozim5KRvg9ptDKt5qnuLbSOY3KUDS8iHHkvXGgMbYFKONN+SwnVpQA01iv8LijOcnmyD84li2U08d/4/E1CT59UDlCfs1ASaJi1FNyRtktnD3kxKrI0Dq9PrXIiUyxYXxfwoRkhVyxlThNcySMTrmYeBBF0Uvkgv2kGfNKWpBemQqS444496zq52eDQiASPthFvgsAGRTGEFS45huZnjO0fjDDIHqGlLboUsZbFlrrCWFqC0VCmAuJAhHqrxPvIv6WU0FskCl1nspOawliqMQj6+BGh/vhUBIeoba5M4DE11ygxYM7jSwdbv8E+SIbqNihbKosdXf5ACQS+scLHlE68yy1iQuEzNXZHUTGlOZC2u+xDmZLDJBzAbqdZ814J+x+f331nzMC6cz8r3UosQ1T8emQTM/YiiZvzQ5g12DJ7UT97Z3L/Sp6CZg08QRp8YTKuIYx0/bKy7j4NyWDSEG5TXrjAF0i0tmHlCsG9HZNadapIrV+iOZNZxSr21hVCceDI9BsvCl74NNqdHJ5WWaflvPv8+hNxsI3M8+gN5XVf50iysmzwRdFPCDKEsJXpaHr7PYNi86jeyEaocQjWR4BdqMwF4yY17RAvPYd6KYmfDhR2PkUXOceQyGWlsKFhSZPAFs5Z8A4n0U5app04NamWI9W8YxZO/R95jfEbP/vmsA2cavt5IVxnyrmOhBfoPm1MQVveVIkj1j6PsHJmls4CcOQHYdjLWcsDc/QbRL3ABDB6kfXeCjme5xPr5qE0G1t95ojYuGkiIXtoDA/ZE+n6L5MGV8jo5GDDXOO5/lKs+9mP8n9MfCoQDnFhXAAErpcOlHqt5Sh//0JQj9T836z1fG558pfBZoB2IEFqWAhOvHC6YLt2Tc8Gg02EuwWvysGy0BcllZE+nD4beeQAKbvKNpdar/DnVeaRbLVkJxbwuON963mh+xdGjiww4x5NWULzKWvNkk61JaaQwEQJ1P1w03KH+xBU3n3yKO0t9tbc3XFgvbWugkLjkh+Kax/3PXEl0EjkSNgE8bUZG6Ys8OXSAm4UXxLG+wxRG3Ks3R9WBMC8C6ZQYsKkfoBglsVnHVThThVYvXRZyItaG4Nz2klkyf4+BNVXl4X7SesA1MAsIHoMLvXIlgtykhzjWOVDtsWho/t8MkHdFzLdHzslTvqhCwjycl6cbzqZ6b2r0aTBjyBilHH40uFf2yW7JQBOfJeFDH3dnjSaic4eEe+2Ww0Z3eqXBQ1/PLTgwZVld480oiYnRRCBy0YG4YCVyyNM6iXCDLu6zXBlYWlQxUYZK2wMrMHq0kIW3QUuPv6ZwN0zz3PQKYig23fTzB7XiovqMQTn2F+erggtr75A4FkAv/+6y8aVrf+ONNd+fX9dbZA4DK6QBudLnkkoXuRvszk0WdLvvwksq2v66Sfbc9+981bsmRh2GxSi8vVI7jI4FEdJYDALjtB7MzV0+VH3CK0ao+gdwIn0E9BHT7VPhM6FFu/fOyiG2gYOMS/5c1eWWu1ykXwlQzpeYxvDoxJzDcwdAXAvXZdHXqkFrtfUgUvrk5Z45lN4plipQQPRi38gJRhTKgLUQntNJOS8sbiNZbHULTyjdaMzIGzwxTCX3FxSBFuqoTX/dmP29OVeew+edmdwXJk9sKOdVHin9pqpsM1e2vuWP0KQzNz+50gWFPeynMnbjNj4lBZ0Ti0wUW7RQlKrUYRHPbi1fa5bTLwZWhpyZ10YamrVA1XzwTVUEXuxF8czwczc1WiSir/o6M9RoKmjnVQ7yVWnIDyKK532sqlaj3RWQ0w92JBBJyLJQPape5DC5dX9VAK+ZIRvQOXvM6EfT3u2fRgvW2adshI0Mqym9cFAbjaW2rdg1JbMJ3jpmhH5VIOjUx/6zhu/whC2IxvxliPPedCTnwPeEYs94uiswh+tfdRZdttbu0REu8qdhFWImlMsgEe6B7JZEoh4r4/Cle7CNq0n9hh8sZy2alAmbQRoJy38V2JP9dX+3Ua3dJUh8b777ov7tK50FLu0NUa2800MK/TCG1P2jI3mMAOZVuDvF/mLwWeqY/rkBoVe0MESpjtu8dRslRnO0H+NOwkX/wS2CZ+ww5CmFWJb0FLfs+SOwQHTQNpS/yNG/gyjQWKhWN3dpda/dnwMATtFCGi/L3V2SH0+eS8Abx9W9+VbX2CVMtfntk51i2cLEHtwH3bVtveGWS32geMHbZw/OFfC0zUwGSD8r/5R2snEzffXNfmqfmeBqlBcjICZKyLDeuvGh4EieLOkIQWqqmA2JXiD1aY2EPhl/uoUgsPlwvVdoYR7jVhw4DH1EgvN/FqQjuGcZMIyBhq7bGIW3wfAgkhlN63JhphKOnvgmhnuyUMs1WPAZhljp0S3Zr35n+4NdLuwv+ToHi3nCJt1bBXB3OGWZcKMWvBPoD8fKe2qG8nYxIaBeXLANfBiVOtoSWUFDP4CikQPqR+e5QsMzqfbtV01CaCKb58cZKWm107nNozNQLe50gTNN6AEdZSTTGJvLVyltcRhMCYRMC72Tz6QdhDa/cIo7dGKtFORLOuf3xWBJFbMSrQVTDYe616e8QX5/Dmf2xTWoU4rTHUhsPMql6t+vNiVzidf5qbMu1KlgxAFK8d3aIiOAkrtQtyn3YFjek+U8Zo8eLllRmhME460i5K0Dg9I24WfESxLNHKVhGCAc4i/GFmMt1Hkb1DMH/FIcZMGsKk9n9I/bJLjJ/ObizUdiVATdmZKtgMmT7tq9skT3sRN/A8p6wmBwSufzKCToQEo4dmBIevHN78N0nSr3j3f8BufdbvHuu/LH30qwnWLYhDoJjY7n/27k1pUKQZcMf9jRHTEdVs263B9I/6RKd+F3tf1Cibi/ReE35gsnrtB/UcX+shIvlXbl2VAT6Rx8SXG1Wg8IZCBy3yeUAtyPkg1Rk/DXUruo6dUI7Di89sOdLkaFmMsy1xyLtF9NWL6J8a8pFSfwmCPrcjTAAGEXasMxwHcXOrK2tRCI37jL5RO5aEzvNeCq7O+vlXaUcL7JeT5HYb2NxyPyskoxeYRV3N/G4qWVuXGluQ+Llvqg7DS1CSmJtAILNGaHBhYXrLU83SOBiqLhjY626XQqyMQFuZP5k4cuwhqAgXpT2sgkl9fgt1KokOJI5+DZwHLw1Nv0Qute7Sh+fY2Nblu8V65TETDKV3MbO5iEJW8qOeb78D8jLuullYt8aw4e5kmBVVq8gAT81zjgotgvM8nl7xMWzQQsrw5pxbi2/PVAL2B6XpUdjLjA9XaNBOztbOuXdpqtw140thuS2bPN7tNl6Jdsjkev+NUiiVHPGAoDCELzDnOg3d3+PbWaCRdSYrLUY5OSo3lX4vvxN3yF2CzymrC+tBn9pPgw8YYQG1aYT0f09vd1+WzyR6hLR46emzmFGu8xTefbS+J6rJTgXOFyIYeHd9DA6UzSFVZ6xRELhyGSJPJ+D9TJbij3lAukC7u3bFl9rY9i2igaptm3YxZ5V++WKIMgnFZOguxGeG4uvzjMpVp0DPOu1BWwmeCkWzQ4j3w8pcXnhOI+H3Y2hBWEheJARXZjlARsR2FyE8MH5V3Bd0WYa++WfDbQo7cwwI21WJVyUjvj9dPjt4r4eZk0QnQFP6kv+/JWaPvVhZAWMLYGdmRdIDCktPwjPDQg2/a8nRWf1wP2+HkAX/9v2BIZ8iH7nU3SXEPwJKM3QSGxE43aUoIJEkuBMGY3WK+o4MfiMHWpIW7uk+oZQukoRr61e7LWMj6ZBeRT60VjU4NvudNdpTzHforXWrGDBbdJ3hWLUEbRsHYR2s2vBpM9zsBwe1AoLEcgAjlzZK3bQ17n6g7BTW58tseWBYqhjp5dcAt/ZXRzN7RMt7KMrtaLwJhwAMCRwUjA6HcKHYCY851hjpt6l3XSlVizC3+K9snCWt2LGgV+8h4aj0mgIK+CbqCsoJWUtc17ZPVsS23F2Arwaw2Q8VhFQn7HHtGX3ekBqgOl9EDSQqB0uiKSKG/szk2pUjjSXMlksHWXJtWZ3IR5EPcRnZtYxUwc8J74AovTQ+40LRaW8N9LW1jlv5Pyte84mIPlyz6YhzjeTFFUqEdvNxlEIled20OU5VHCxjwTdd/it4x4ZvZ6KJP2FaQbopLkEIgjg0dFoN6m8ao9L2L9QE7v+/lqLJCYkr+oNFMz11U5HVc80Fm29lxdNp4D2An7zOu/yJm4nQcEm0ZNHWPzldMhipliCRvGVMo120rwUG35UzetRrFCFvIydEfoys7d2CKRsoCItdiC+3/fy4a5S2O4Q7EJhWc8IZVYGOFa2xb2X5yT1UbsH3ku8nGF7spJvGDoMjHZNHqairvWH6mvlPpODK2G0KV+6lCs/SiTKZ2FguQrMQgGWAMfFUgZKCHbM1uxWNw581JS2BSrD+QYE4Y9pugTBNWc7k3jj1ew4AgcUZa9WpxlubRJPbOkF4d0mu4asAvXL3Tlqf328UhGkyp5ocDJkRaHWn1M3zxbE9kVQivKW1vY7SzCf2j2dmwY1Hu3fmlEeisApjNFeAzduBrPfeC155qcSZfaXUZFQlc5a0jA7Gs8Oz/WBi2YTl/buq/BWar+o7fvmUnfcvDymE8OqN7WDdRd/PWa36ZyJVE5p5HezR4oRFXw622t6zmFBd2dLTMywIs0yv/1fxBWp4HKjQ3bUBLug7izUO1ENpx+njkZUfvHF8zESAQIvv+BdtMOtj8sPq1O1HxVbdiiECFM9QhHJEcN6/mBPR7ihP3J/r33U27RlaHhjSg4J2Du0MgTiRyK+GrmmO42C4LL8MCjwRffAEp8EptVI6o6/HqwONQIUVxpEGe1fKA8Ym4viiHMp3UfX4sp8A5AkC5CAWFED4iqs1mOLdGL7drq3MZQQfhxJ3YX1skZlGP/lewqUVUnOcwjREc0bNrLWRGl44BVINkTEf6BhjgYoCRsO6KJqbAAS7UzRBklwsppl/yVu3zeYD25CIF6kh1DEP3BxawNZwjJ1MisZghNmMRVrWM27McSyOIVCPZ7LftS0P4UtAGt1rH3016TM4SvWjfqDW+66/H3ZSiJRMEwC+zEggl0ow6iLc+r6ZiY7uP/p5Wsf9BdsBvvHgk/uGI5tAax8WgTcm6/7NPZucjS+WE4200P9S84lgNgF61/fKu11EJgAPgUf7s6NCkbN+j9b3TnhqV/6XrCLty1xz59tE898eTy3tf3u8cQiWCCRP3uknbBh1Ji6BalMgsqwLfJLlgEFP/oeNBcRIr8PsCiTHsKuYs5I5Z96flsugAYhmwPT/Zq4EKlw0yo4ZPJ3aVWMgDNs9WH5xXWI3R/KmWx6eIpBPb/PBzAtiJVEbu40xBgTGiVTOC8BpMpD4vZb9K6FCTjZIz4Hptg/uu7vLYxFp6Qz2o3tAKX7OZGUta7S1vyiV74Cyn7KWwjO7F/tfMqW3qRrWZJb4W1yzSCfq+W2c4QvmqxIxsVMZYB9M+RNjxIiVGpbWKfd6z1Qk9KKqoQXm9gz3NIDmgSZpNYdNGY/ah89mTy1tNiseKE/f+UDtl5Nw7paqMOzQWPJswmh+oJa9GnviMkz5ZCl3+VZTDKw9c4sbQIgdyMjsfCmRjWBY7I/gWlUWPLHW20sXpF9M5tHB6yxflxSFJjEE/2BZgAg6i2AHmcsvK6lLhMiaTwsy2kAIHGzeV9BIVsWkoLEb/RAB0X9WwyoklgXx5IsivCY1WtAiVtP59gEikStyGht+75XBQsZhOo5dISmIDEzY0mQTsR5oyaAeGsJLDFNNE1A/X2qiIvKDLwe3mTux8rEWzmXqIFfh346ROPYGMQgFTIgVg/lp6wAwhjr22fcCMp92qzlEzzBS5OxgvhvtH8bS9H7dv5zHlUL1Njx/H/Kk9czrHaAG4imgrvRTsr4Fjyy4uOizYLm4mzPa19u8e2WM0E9+eB0cc3SO8mPCWQX3uLnFpAlj6G0/chTbYllYfo8SBnJw8OozaJrsG/F+gtJzUFpmE8uaAnFjzTPDF33lsPloxF95/64epoeIkUAyRoyznpG/Ei8IfOnk5Ug3AevdiG36U+NHhFpHYKHixRf+YP9BJ9BeLrlTws930J7rCWA+Szlb1TY2qFcfGlxhiimRfwpcQs/nr9TGUqOEtw6GpRS7aMuYk3kwZrZapa19FwA8loLYw4Ar5elxS9pidZX8vTimsRuGm+H4sXtyZpBhsbWWGmXWJHuUdnnVP5p6wz3S1Ibp/XXhCiu42otdX8dbAy26SdRckLe5vpK8yBKEoRTOuEo+SFCCZdoiG4D+ZFIbGpXXWe9T4hNJqcxyKiEVFEyuEE/kGbuRdV6edvPpwLOX9ll2Z6hgXmTjAo48BkGP7a7PPaWgET2h7mMAyATkLv9ISDl3PGBCGRlRYgMg4hzYycpOOmLfGhnMA49ATtgAgM47Di+N5q5I3kQ/9RiCk5TeVFslQ7/UqIAPcEF5o3mL6RXBGFieADR/UO0yxt75UfP5xyaIIQUb5vQl1NTRz2vjo/vbN73ru+iYsReFLVX7BrRgTOJI0K+XMrs2+njSFRzoEGl6sbfnc0RB4Bl8k2ATZlJicQN53CQCa8RU3DQSNdtkBZWD8HR8tVw6jiG/lhQDlEmwmOAVNXMdkTFMdGgDhlWxcFQ9/NMKruvThP38fk8I+7Rx6SHp65HS2Qz9EdR7grVT2y0jcpYX4d99gkSru/qG7va83clYDv0zWxVYZL8c4wwSDR9WhGA4mSC14WHjCXb5+5R1hIsQH/OAo7NL39gvZSpL40/dmy2a+NDW0OurWIWEnOluzgE0L1BSDQj7xIgmPb5gK4hTHUySn1JC/k577xcqjLU18fZ2/ZwVes/ZiwRQGlJrasi7UAbYbgxmTRYcON9cjbeeMpxevTBe4VDt8pB5vJCbD9Gt65wzAAaTyeKnmR7MeMwGZJuFtsIHKIewAr2SgmqsugY6NEOFpS5wpVUCB6WjzhZSoEYZmK+wDBGUdeWT4j0u/bZUD68hsBE6bReP6bbdwDxadAqLW3iGT8NL//rBCXy4C4eBKPJOVEnkL9OMrl9BBH3l5jo0uRjahOSRWt6hBiKkGNLVnYgjpZ2UNdjMH6brZ2V4SkN7lt0+HxBEpuPNGB7gRkJReasofojye/H/V/BV936eTqTuboRnBiwx51aJSRlzYw6k8xl2kO/8YeKu5IxjOUMDQMC34vKqKcAECeu6q3/vR1viCfO2LzIO3i12VZwozsmjgt0vtmJbcRmprGIEhbxv9HXsxJVflxcpfY5QoB2aetkbUhCezOVwDg5tg8wQOEFTSDQgADyChxqlkIgZ4aIgM3Ex2DMpD1wEInN0+srbUDdUAhUAUW5zvgckbUBdXI34zgeqHm8zPYWDIouWft+gPgnP5gFEaqhF6q6pdrH2bVtvSYPdbQqtB1J6teeSfb4u4LVzPkbbbzvCCP/vZ6omVv+Q1MtOqlZYqYfDM9pSFQSmCnFMK2yLf1ZHDng/oP78LGb4nI7c8x4AI13zCAd6xcnUZ2H52ILTnEcRMVip6Vs2ZNsEj9I9GLwH2ncYX38PVHr27XVxs8BiwaCbCJszkpOUphyJH+l0VnaAJiYC/qltkL6gS8/TglDPsccoiydMVP3TeAdQSCaM/QRUOtl1J+rXtsu100b0pwLmQ2tGDqJvCVPFEcH2b42WWI5mqEzG6EZv/SkRi6L696n/EsyIIcrTdzHhqBSMCuUxCoONJNUTD46Jy7TjSoSkki6uLYkzySkWXJ/Zyn5IRdTB/aHKOM6vTZc3nu55CfiHbYEiyVj0RiFUf1BMKkHMe9fJ39vtjWVHrRmXXL7W3WUWEIVUmEYa1iRBIz7YWwwbijEDzkt6ji+l84Agw8AtTpOVFtPBVSIox6glynw1VATRbO3Ylj6fK9/zIUI1rNcMWTPvsbmmL6+YZlMOOrlPyoxScsJTp39S8YOf++59vt8XuIajm/MrfoRx+TlBHsPLN4iGAzJgiCsdO3LLy2VjGRyRsHJAqblKDhqO4TG081l+JnsbhWj7eKm9bQUdbbyK9efygDSX8Ge0C/mG1TMqekJJaCsbnlVhijvvYbDpYSTIhU3plTph/KeVeaS1luXfZGLfsdYShPH/Gekx1QmSnb6x6pLh9yob2nVVx6cWrkfLOor4W2gxFKj9IW96jBlyt6Nq995cWmF4IusNvoTU6asRL5hrAkZxGFGHgnuBy1Jwxzdb4pl7RwtCJura4e+Gp5ss3hXkFxkL4YQ3x0ayNkeR6iBtepdJJZBLkx+HoATETm4rLSHoGa3jIHXCynIlxDHXZuk/0jFr2nG7zN5+inpcULQaB7eUFi3uPnj4V6Mb7c5CbhoCJj6rtv/CZNilExeDmcE1YW1MSG8qBaQ/RuEKctrOcnJegw2+WL6/xqef+vHxhXAMiaU8H7/LgI4X9+6znPXYxcXBN1jmavReIwOwtNanihbP1tlTZHbUTpL0Hgsy0TJaIwcDjPKVc3/1iR0sHGeUH7gxBU3OZfffLBEFwdosxS+IuJBhzdXnGK00SkgLRuFrn70zFXA+yW3/aaTJmF3NX7psnPV0wYSyXoYd5mR9l+GGgSsm8rpUHLYQIx1c7NO0mVnENRT45t2GKNdAryP1tFalT3NeTpNOTUwBGxhPqzR3/DMDklYoYNVRMNmrjFzamL5xpcG9/Dpo7izKbAvl3lNbr2GiyTJYK/yYLJslZNs5UsG8D8BSHzjSLBtAsTYYdYr27PpjetGOmMzXphlkYH0ux9fDs+96SMbIy7fmMqs5u+C0TSYyAlUvr9em/NMjEIgmI3dA/ZkyZshz+zSHcUbCnpWrZRPGSW/rdf/2y3EQRyEhXPgK3Yu8XXlBJb/4v0n8Ov2kt+GbvCpgjnjFljSAYVm81tZvNj5yoXBxgYFUo7aqW78kbB04Nw8+i23hz3pfcpLq1s64cuCYIpsYax0zGB3P1O9X4vaIrl4qgfv92OFTJBboOY6notuB4NLaQlM2qQNkCrI6xpiGyAfPclhQYvX+DvxskLar27QJetkmcNA1WRha9io/mKzjb3LvAdBm5wHdIGy+8H5ajBWhM5Dew8xhzOX/HnUiAt7ipki1CVdk5upl1pVKaNqOMoTPAbL1Q/W0TMgFvrCb+S7cWYlHJrEBbV0ITb4oI2EoALGb+cpqTdiw4mGGSJNFWE79FEFMndvtn3TEARcyr4gr6rS2hVe9rqWKWdsqRL6NTzvWHm3PP6Xz1VaypdK+P9/K/8x1sRr/OwMlCdrzIhxaimvPIEjBNwM2FXu4ncUQOQyCMAGuD5fmsCM8jDYh2A4Dvnifp/kbm3HmNVZsdlNiFAf7viWZubhiVNF5C5czfhdN5oYVg/dIyH5KJ7+Xj/MScgakvzG93GWaLYtTx9H7BidjSI9M05B0x4TyLik/G5q+Php7EnJbdtEbNSJrh3F6Wv5ayVcP7+jbPpm6FA+L7oU3cW3+JkHN5We74pDRHg1Mqh8vwdfTDldaSniAarFvLsg1EDlSwDQZ+mQ5Uwn5l2WOmsT6r5UO2Ma2ENrtZhG9+wPaD8mZ/wR0ZZvRy3ALxmAQreOUqJGM9Ms8HpuSd495gXMzBzs2bCBhf3l9QdnOsNIWQUbjC/vXjOlR4S3vfF9FT6F4pQirVZFA6XGl5DO4HpeC7HsCVse6lguvPluEMJ+LCKLyaLdKV6dus6OxVfYe6/DSijgd44Qgou4VmDm3WKq88nGZL5C5z4JHv0UxXjzfbrUhnCsjS73iuwzQMrSYLMexbST9EKWRClCOndTO7EZNlQTiwxuMTKxGjcB7DzmKVAJSY8wCKZ5v7PiOCLr1Y1grSd6f5wdtCwEDLRfrq8G7ksJgHzq9RFUy7E7ERzV78uwjeF2jTyetUu8wA4YBq3QvbR+59H4J/r5R5XLGN96mAgVh/rJJfgdyPU71gZzogldpbJkZVvbalKNJCD2INzoSkKzRenIa89W3+fCl31+DfShxv/a6ezfC5cvb5f9P0IPIDE9ZAT3uM4Gxj9F+oF2k4Q0A/RqW5KgLhTRH4xVr3RHsTZIjIGOBOpGS5+76SPKO1nbnsOIoOldYW8RngZVKXBlU90Vnp/AGk3oYCRemdu+kjy6VCo6uX4Ri6tAq3L/SJ4jnT12KYqaJM3V21m1pF9WyYP6t8LmU+ZwgbmNqH3w049Sw53LHOuO/S6maXUaU4s5OHn/oh75DEz++UI2vGlRWahexHyJ0vP0b8zv6QIH9QFXi3u1F6ZHLfWBgkeRX74gB7FHSP/SlVNZkgIraxFRiNWvANsWT569zmyJ+DEdcEmpQXvRWs+khbJyEKw2mqgQW+OHT5DyvWK35sjYugGaitMxXYVkXBTbsbhnWwlMrF7FweeruhMPDEmjpPoK6m4qbw7Bt1Z/9xWo+KSs+t4rx+xGoSiVUGm2TPtEg81aaPNX43YPf0XtBUyikj889KLVK32i0Dm1SImMojHEXXghT1EDE8lCZfh5SQ/GGIN7DH2Sd9z9xsjDZsTgGG/kcevvrINT3OuxPjG69vu6xBwDqIuRmjzCRxfp+hzfFjrcKelghww7rua/o5AY7pmYo52sIvYhREsYSAHDQYkWgO2c8WcGAINuUYZ7SC5sM7i7vv0fwbqsplqwvXxUP0yp17N3Fb7nRnmGV32DTeyziKanbPmv34Q0m+atwboz5B6eAfaeSaEME8yGftZBhjq+g4+gnTr8sdV/VVnv2Y6V8Wd0l1xwrztjKOoEmqsNdPg/2gATYBt+xwkDRxutoV7KvdpN52NFX9pFTG+fSWZn0CKy4zPIXq7eZdVSMhf07iNTcQ6PDOkC5500Z9BuG7YQV6Oj8OdgTEiXo8yKumvu19rqeRmrwprR5U6BjuKCDHJO3Get6sQGbIEsSdvV3Wt0yPnt+W2lU/+K3KMgS7aEVzPVgrkyEMQsyF5y3EuPWZPdOFEpGkudZRLRCMO8iOcfKfvjQqJrHmDrs5PGUkig9lzaq+wkOXP58in57SBu4iIsPf5VL61l0pzoLNjybA6vctwNDOirNzMzLdQGIbUGbnqY0WRtCKcigOg8hLFKX0c0veux0R4w+KkV3xQnpiV0DVhfdaMphlsNjMDiupDK/EasU5f8XXj3TV/M0jSLbvdsMcAYXezZdoO0/6THiZxf04mlNXFGUy2ZPBpvf9XguxrMDOa3MjX/dBZ5S9vSJ4Gj75d2YmDN6yveylhlX/bbzRR302wbMSmGv9wJLamrL+b/z8NqqA/Wkp6hevMpzgxeVX8DF3vswnZP8+aqmcW8fv1ZGU+uOSClrZgai5ZLkdNQadOQemnixWvxwtjsHSHCxkRmRCGXdOyf5iOqaMdaEtqc4Gb1uJCD+mRLI+YGnalWoaYZGR3ATlaL6FkwMQXXsqDE/NlB2A4aTXYwqvk6y17XkHamQiYmVNzjXwQvbyhk4WmUXwL4xwKZqs6jZTNptP2ggdc5vcsue6FBDJdLApGixaQZ5sP1zlOWlz6RrhSqimp8Z1WngpPXtt8qangWhB8U75rVabqWPRGHVLHPUmFuSVPyyVg93cDeCny3VNuo84ko9OV2M9qE36JhFrBKmgbvYc+zFAjxAgd58XxUTczoC6AlSJzlqH8kbVV/xdj4e6BItmThGBZawDAVjKTb1saBI0fNkrK6/bmpHAV9jt2aBIemHcoQITB72hFqDaGk7/npKzZdUnlQpsiFMHugIsn6c4i/HZGM/uTIYevkdrTMUKO3vTU7eioExB29j4Mu0h9MkLse85fAUVoJlnD8/baa9cTtiyeR7waUxFOZeNtx2/fx9jGDnMQZp1IlMotk5XYzG7aG37T1ofa9vlDsoG6qwryrtDM0dQ+ArK7OCbGoedCQ+hTXv183VB7wTwYoUzlgrn4EH7LKXubU77BLe9r7vBoEuyI1H4BRW6XOQM2YrUEgyW5gbKvm952Ijnr37M94GrOOCA0OoTCiEFiKGldQtI52MeQ+2xHwyVQSpDd8sNneqPBAgnwxVveDcnYuE9Le7OWIG68miLG3NKJORi9EWdi2AaA9trSI4xG09e8HPnppTFeqnEapIlj4xZPKCldg7GIFwBFDkcs6tyXMXHG8xRQLJwSCvGw+MUfV/6g3z5tjwHFGph9zgjuOMYwZQdFKs8TnZ8b92pnkiU2HGxdsfY05mEELbU2VvCwo8peXvArO/kXbrtYXKQTRNEyEUi514tpEHYWougy0LmX2xJFTtSWhLBcayQ7VndB5XalWgh1gX8zATolVidziHsNYb4ItUoGl5u0IH0jUyeVimmTF4p1KUuOIzhsrJpvswnjWFZG7uleWZ5/f9Nu+fFg5sIZKDPni5M4IJEpf6IHlgL0i5hhgG4QV94szz9YoxVMLuPK9BCHuZXdI+GO6D1dLBOEYnookido3y6CQV/ioTYPPvNJDqH/tysUXjwBnJq6ZS8ZF+wGJHSKIpknAqBsK6SfKsa5rHIfj6bUsqhGEwVWHoOQRdQGWeBWGacOkt7zTQ5bRupESuGviSsqoaAWlvl24HTeV05PROBEWD9A9IselYq61Ot6KQfWJ1I4h470bNIii69lFiBJb0U8zE8rNXchLECv3/LZDcrCjZFLXPmsxePuS5GtAYROhgFTNZlplG6kzfZPka5dVlMREMW61Gxgk7ieTEqVx1tJMwulogjvt+y1doxZmILApB1NxbrGlsrjPNkfveMYot9vBSRyHLwFRugcZ2Uyl0c+oqQMaZksMxNmLB3Mdx0kZ/EzbDtxkBxNjzr+D5KmZN9ewVEzN4hX3J3N4RVo4XRKpUbAf/NBCKNXv2zze0LCLER8Kzvm3DB9WKlhckmO8UPscP1sHD0NGFw2qJ5UKxR38inQAg3Wl3c+QRtFUIvJ99tlXuKjctZgUmAa3NVOpNoAbAeANEEgSic5D/pnttkLuVPSf4eqvYWe4fjOsz2HLWfnqkIYxltwSaIH1vY1w97jyfkhgILMo/0clNL7x/8j2OMxymtf9PxUYY8cvhYGrwHRyYo8SWuXOkEIuoZj3yjSujqfKHoq0sMm0HTr/dCWPHveB/a5Vzj2z/A3FiX0IhfT4KRNdMYapi/dPpPSSKyn4AUlDt9bUxnNJ5zBOyIlYM/ZnZ3I2kvit6Z0hJ1PgClxJhlYlqmJBbHH5b8P2WUdjKKbsFxgSQTcdc+CWwCgwhdWHE3xzmQeVlu3BrYuz8GPtMDEGI58rjzIOL2GWwROc7sqCDZt+eYKj3MPLmrCbwWZQlqY1EXAOtqUmwRfOxOMdWutND3Y5ZYqf5NyONuNLi/A2j+s3jz9q7EIEt9ZMc9TkKrEb1l9FGI28qD8UyaXDOHicNpkKSr0tAv1+WdxvsbgUEQ+ZeTRe1YDhHvowdilzyw+aN9UH3AOWCf81NblubRGdRwMR1UwO0MiFeGjnF2id2VcSYuENjE9iP+0bIGwlAav8kPX/6M9broNE/mq3L46yQh7L3hQWsjoDK7ZGLpCfzgFsVhOYAnYQiDltNWbjFNyzs+zc9O3hQO3zIC9QsTQTw8CcMfU2QwkcHYsCe6K6gA1miBSP3p91CnmFHdpaZhfT2ppeNS3gmuFnc3w9sF5keLg6iUzf05K15OlxUHyS07SvDYddTFHPTxnbsQCr3TT7mUcdZrwRzhINPq0sQy5x50+DdoL2h6EmjqhdkFra0TF+z0ogbwK2Wb5jv4fX3ysRfWJ2qHeGS2st5XhXCpHGBtSN7Bkb+gaZyKj1ldR5aozbNb45qYANY0TnoDzKT/iMXdQ0PyC0G+tjqn2e3XQb4s0deldod+4TMO+t3wKAWbvHDY8gFAsGVaGhQJuFOn/b2UGyJ7KQkGGWGL5TqjEzTBDvKIgs21sNAgDW5Toq/ckPptpL/+euhS5IJDBInVHSZlFg1hKApsqHx5bUxkNbJIJkPVWjvYefXCCLKyG09Ejxa0KmZh5jc0xSRQ0YX0ccjpeDoWQ4PbsAug+cKcn4DgZDpKc5BXJ66ilhx0zmy21ryoM6m34ueppIbUH8w6duuNwjvw9lIHUhOdH9CWUxmrienvyIrHkn7K5+oG61sLquAlcKBDqmQ3rs1FpQCFDCrjVOqzeNp3dwqUBe/D9AW5fQUgIWvCIY1fwuJBkZTiPyQfUmupCPGELoLzFsDsWATpvoloGQDvJdPDaca91k1fdd9xHAd2Vko/5e6+SyXETWdDHOQaIS52I4b8x/ig0897KpyRJNe9oVGpswfu0DVTcLjRBzV4ReaGpS+DmU/d0hNH3jdic2XFdCaEVGzab1woU9kU7rhdqF6SMBGpMt5xkbK71B6VQ7kD4n+LoTUq+xVmB1NxjU+05I29bfYBykSRs52OveKreUzZkuaRdsmbSoviG4PlCLpegHBCjwlCGUtdklmwuby14gmH4O8qIb9aQzvzA4pzcc3UGmy3jaGClbR6LZnIV9whVhNfNWP9tlcBHAZAjwLbogw5UWGLDspj1LUFokd4JhaNe/HMQXO8rhPwJSlQKgiWDrDW5u02T8f+9sU/NdzslYnq0Hlo3t7lGCHHi7B2Z3erFZlmZaq8ef+paLbbiPKghRrFJXkaOh5WbG51rDaabhg7+lch3pwcbnrbut0CuCAuItPdPgAPdcJN5zDu/3rzBWARm3dyDILWYA4cYD2N1+uI0KdfU1K/1CvMpqSILd30it4yj6Mxnk6YxBG1I4xwfIAV868vWLkiHebm5MVEz8QMMbM8ADVcDB+xT4yuSp2RSqVdYTn45WYwFys0dLieshOMQcK+y6PWvs24q7qGymVRthY9HlBe228pAcNHnQDRM3IsJDbbykXPIPDZYnvfjTaqHb+NXbfIWm0OTA1stfAeYwN0SQHuJq+3ZmpwycCyIY/YXBUd9TxRA7+Uf00lcCSWmiknyew1cDenPmLwjqDcnH13q1bWzG3tpOkUDoV7Qapt0tFrSmQVFYbFxZkFVea82xo/HEM2qTEQtLkO2fnr3Ty/GGS3UDFAmc/gMTUGcnhcKf/WsqasCIXOXhW7u/fBaAZSRtMe7h0GRuQnzQGmKp7BjXmV/nEnLg58v+VyNOFSZk7zI5QFLqT/hzaZZlH8fbBNoW2d7wa3s4MAIgt4oTF3ufU/gBEA7i0TNYPuH2vRycawsiUXQMqDgem26814PGyd7atztOm4qWqr8804hq4iAgOwpgepzON89ebsboruODBWBGJbbxejYs6YelN46oVxhCVLHQMI1Gx4rFnO65umTNWZezFVhmvpM1otLhya9UiZXS9sX7z1kXW3WYahoKkwk//aJbSlTcr9VraIwWEtd+6XIK37VJyUdz0y02a6lnQ8NG5CbNq/MSaRVfGdsLe4TE9fJridvhk/mToGr1KMlwVISE37Frx4NLtEREOXIvluSajOfObb/Xa3xxovJFt5uR/HM+ydFnl4RXJpdz2DRErTngxd0DSty1DoDQHjWXgEutbf5Ta9Zp+9UD7mWot+y3ZjmpmQgr7ZVOwE3i++1Rr7uLgALsub3Eut8xvLScYg1pfDsU0Cgyf5dsh8vbE09l7/aZPiehZ5OKlclfuMHbOHo5D7jl/S7bpjWlywvJrS2K/wFi/MGVx2qYJHFiy07omCEobMKcgP8TY5LDEZATQwjrVYMUGvIOZ67pXjF5u5h4EVkTaMi2PcPj/8Vj9N9XBC/bVtfX7qi9dbqj0jvM1+2T5h7Ol9lCCHzYpKd62j5SOaEslPE9V1TuedMyviohhvCVBuKm44OH6ZglFYk4pdDBW1ehHNJW1f9CC1aMKkrsueYEEGtpGCEUZzPO/HjQobhA4kVrrTdHrUNJzDGmtvj4IS5cYJd343fx5wLSagOgJOatmNmzb9j1n2f3hBWnRHWymMvjmjYhWGFBjHtOGxwSWl1iPoiGyOg+1gml8qliu7PEs+NWHOexN//wXzoJRyTmEnFuBj8ZZH8WrMTRJlYQTsA580r3WkDuoVFScpfJpu7R4GbdluDSjA7xICIPvOH+SDLnKpnbKmPUFjG/a1q4w+kBBGEVSKfzmSJosnY5sosov8ZSHwH+Kol3VnXUOfIyGHAlZGgi8t+D3987GzvOH7k8HSSlATpe4ezFqIRdC2EEic7S8xi576T63jiIyObjI2EK1ln8kBxEKbdqSFIWnhjRqPxAcrDW2AVTbCp/ZclWj8j1/TvYcM4idnsXtZb21r2yj0XCGgdViIKyv0peLmCXYl6Hk+gO7bcJ87D/8GgEJVZ+sLgH8vTx+hHxbb4zdbJ8oRgI2bKDa78dpZDV/6jbxVlvmWhgxaPK5vErHBfXOhxObNWQ9H6JVoi9pIE/j3ZOK4HbEBt3rTFot+mQN5YN/1r0DoJhayTLiYSQDmfOKMO7fpKMMsxX7WurqJRYzrLtM0dS+kX7yGyoyOZ8SmCgZiQ4WkZ3/vx1OmREMgE07mI06YuZLNGUTwfPGqVTese6SXc/AkOv7JrCnEo5SP8v1XlwbyvBOmR0kZo0HuAMcuRUbdLxiHDnvoL6tj6xwDPnV1ZVoWTeDKUPFWN/OSFExLbH5s2F5vuqxtNPNGplUAgzlGHu00jexzuD2sE8LO5GhOzRqNDwN28l4abY3IApL4rDOISAygDjh0q4iA2TtrS8O9Oka5X6Ceoqu+FPBIt43kvtnrfzlDXElw1P03FKncl4vQDta7PCueF8W6i4iVMM6j0U46PnVW3N9oCk5HprXV2nlP/OnNKCrY10ax1w+7qWzvLjMrOM4oOeiloetLe9okbqe4oULrGEOZxUPCUNegUqwRI77a4NYwvI7WUdEy2QZXcu836rL26B1ULPxNtaHI4yP2snhffePcaJCmF1M/jqt4yhfxJ7LezcamETCeJmNR7NbUQmjRTxqRxY3QuJau0viXn3a3IShYGsDqQWFSA1ZOJQ+aNuSc5SKYs3noooRgy/zFwQieiQ+CIFtaqR92NW3/uXAfMEd+kQZBkpr/CA1Bedlpuu5/XWlruzxSgrq8Bw4JNVpJrXmb4EYlbaIemDCl7Q7mSvrpb2c6t68cG7oWLd2c7lrIVc9jpFQoZUYMnHlC0EGG0bEh5TMkHEzDgPUPVPTuTgN8Oi8plWxHZ53MUjThL8FHWxWxAu5+is/e9XzReT9IEGfP/cGVzSbCXdG0s81b/2D3kZh0XOFcMUaq2Bppy9TdXPqVyZjcY4GUu1elbxiJUtY0YwDV7DyN/sdX9x/TAxHh6BhQgvG3GG/BPkp3p1afe5Qyt5+ebJU0hNyzv54xaRnP07cQZNuQlE+e7cD0lxBk8NSJ1fGeJknhQQ3o1J2RDFYnjTNGBCCtKxNRqrHRdNSs4P7lmXoYcr5OlokrsUfOJ+5FoVX3qDYglC3BJQtXRRYIA5NrpNWcf4p8lcIMiNNhfc/yV0xQ0W8m4gTxUaf63pngvPlXibWZfiV6JZwxEHBMzJoH6L+SiC3IEYib0eJWKBd1k0EezrmKC6xaTfqMPJVeYZGKQrFOWru4mjRTrWUNWhy5ms6rnvzNVtnPzHV/dPDOyFWX6ujwvgGypd4sJTaWWPxbIBEjaauQvO5lUVqSxZ1jDUfLUmOKPNiNWE8MBEPyqFPJ/EYc1H83cxfkf+uvnG8AdMODhyBBoqJoWQAy5VZ0j6MZ7Jcs97+aL1TDPYpFfh2EsmGliiHJ2Lrg31sbG59+dJyVZROnI4T3ypdNfTI7i+Af7pCssdJUVZ36rMyKISOTbg5rNRtoKVlgVax268b0ozrR36tLV/tn07lHhUXJhz5uweqh/zDpK+DiSlVW2Gpf32tv+eFdHqxyWqXTA1Wajc/EDLKHYXvkt0eGueF8CZC7gsAPn0hwKBmmDBh/sdvTPmFALXMAJ+6BrLKftkYSlmTAV8QG4fHbwe7ngMICld4/AXnoXRw5Hh+JziMHpQLfeYuCJgwG7KyWn+ts2+kFB4ZQn2MGUHVBgdwjQHYX1dstg96YivrKMyWMILmU1oD7PfIhRVafgvhEfu9TqzJZR3NAxtWQHheluhLb34JV++gg89Rb62rK1H2QducIl4yMj+oQCW+TcrIhEdSnK2TX34HDidpQCm//Q1vqo0Gh42E1eP1AB6Dmt8wke7t7JzHJ1m0+eXX8XtNwNDUpHL9LNogV0Wzt3mIazl0DRu/38AMGSNwXtYSktazbQhYLOEXyZXPNi9RNl05k789XR65zkaDAZLwq3k3ZEBEFb7jF9N/UIrfLv/mLSwJP5YOLbf2CfrlZpCUevHdnOXn9P0H4axuqcxzYN9RUrvYPodMx42qdW4bEXBhJJUVXAqcQAAAACBCAwMzbvakwABkZQB49EDkzzbI7HEZ/sCAAAAAARZWg=="

if __name__ == "__main__":
    try:
        main()
    except (IOError, KeyboardInterrupt):
        # We don't want neither IOError nor KeyboardInterrupt throwing a
        # traceback into stdout.
        pass
