#!/usr/bin/env python3

# compressor.py
from subprocess import Popen, PIPE

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

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

def decompress(value):
    """Decompresses a byte array 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

import os
import sys
from optparse import OptionParser
from sys import argv
import base64
import json
from io import BytesIO

from os.path import basename
from errno import EPIPE
import lzma

def load():
    ppds_compressed = base64.b64decode(ppds_compressed_b64)
    ppds_decompressed = decompress(ppds_compressed)
    ppds = json.loads(ppds_decompressed.decode(encoding='ASCII'))
    return ppds

def ls():
    binary_name = basename(argv[0])
    ppds = load()
    for key, value in ppds.items():
        if key == 'ARCHIVE': continue
        for ppd in value[2]:
            try:
                print(ppd.replace('"', '"' + binary_name + ':', 1))
            except IOError as e:
                # Errors like broken pipes (program which takes the standard
                # output terminates before this program terminates) should not
                # generate a traceback.
                if e.errno == EPIPE: exit(0)
                raise

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:]

    # Object for streaming decompression
    decompressor = lzma.LZMADecompressor()
    # size for one decompression i.e. ~20MB
    size = 20000000

    ppds = load()
    ppds['ARCHIVE'] = base64.b64decode(ppds['ARCHIVE'].encode('ASCII'))
    ppdtext=bytearray()

    if ppd in ppds:
        start = ppds[ppd][0]
        length = ppds[ppd][1]

        text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size))
        for i in range(int(start/size)):
            text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size))
        text.seek(start%size)

        if((size-(start%size)) < length):
            ppdtext.extend(text.read())
            length = length - (size-(start%size))
            text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size))
            while(size < length):
                ppdtext.extend(text.read())
                length = length - size
                text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size))
            ppdtext.extend(text.read(length))
        else:
            ppdtext.extend(text.read(length))
        
        return ppdtext

def main():
    usage = "usage: %prog list\n" \
            "       %prog cat URI"
    version = "%prog 1.1.0\n" \
              "Copyright (c) 2013 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])
        try:
            # avoid any assumption of encoding or system locale; just print the
            # bytes of the PPD as they are
            if sys.version_info.major < 3:
                sys.stdout.write(ppd)
            else:
                sys.stdout.buffer.write(ppd)
        except IOError as e:
            # Errors like broken pipes (program which takes the standard output
            # terminates before this program terminates) should not generate a
            # traceback.
            if e.errno == EPIPE: exit(0)
            raise
    else:
        parser.error("argument " + args[0] + " invalid")

# PPDs Archive
ppds_compressed_b64 = b"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                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       